程序安全
非恶意的程序漏洞
- 缓冲区溢出
- 危害:程序崩溃、执行恶意代码、提权等
![[images/Pasted image 20251204132810.png]]
- 不完全验证
- 检查时刻到使用时刻错误(TOCTTOU)
- 在检查某个状态(如文件权限)之后、实际使用之前,该状态被恶意修改。
- 解决:原子操作、减少检查与使用间隔、使用安全 API、以最小权限运行程序
- 未公开的访问点(后门)
- 整数溢出错误
- 未以空终止符结尾的字符串
- 参数长度、类型和数值错误
- 竞态条件
- 两个进程在相同时间间隔内进行竞争,并且此竞争会影响任务的完整性和正确性
- 资源竞争依赖于两个不同进程的执行顺序和时间,从而使得这些错误很难被发现和测试
计算机病毒
概述
- 计算机病毒是一些能够自我复制的代码段,它能附着在应用程序或系统的其他可执行部分。在宿主程序执行的某些阶段,它能够获得执行控制权。
- 广义上讲,计算机病毒可以指所有对系统有干扰或破坏作用的代码。
- 计算机病毒分类
- 按寄生的方式不同,可分为系统引导型病毒、文件型病毒和复合型病毒三种
- 按其破坏、危害程度可分为良性病毒和恶性病毒
- 按传染途径可分为驻留内存型病毒和非驻留型病毒
潜伏和激活
大多数病毒在感染后不留下它们存在的外部特征,被感染的程序保持原功能不变,有时可以没有任何感染特征地运行数月,甚至数年,在此期间病毒只是静静地进行自身复制,处于潜伏状态;病毒内部有基于某种算法的激活条件,当满足这一条件时,病毒激活(发作),这时将引起各种明显的系统混乱或破坏。
传播
- 被动传播
- 通过计算机存储介质、通信网络传播
- 主动传播
- 完全替换宿主
- 附着于宿主
- 外部附着
- 内部插入
运行机制
通常,病毒在刚开始进入计算机的过程中,要进行自身定位、置某些标志的初值等一系列动作。
以后,它还要经常判断其传染或表现的条件是否成熟,从而相应地进行传染及表现活动,因此病毒代码可以分成初始化、控制、传染及表现四个部分。
特点
- 修改载体程序
- 驻留内存
- 修改中断
传统计算机病毒惯用特性
- 攻击对象趋于混合型,对可执行丈件和系统引导区同时感染;在病毒源码的编程、反跟踪调试、程序加密(加壳)、隐秘性、攻击能力等方面的设计都呈现了许多不同一般的变新
- 釆用反动态跟踪技术:为了反动态跟踪,病毒程序中可能会嵌入一些破坏单步中断 intIh 和中断点设置中断 int3h 的中断向量的代码,从而使动态跟踪难以完成。
- 降低代码可阅读性
- 改写返回地址
- 修改程序从中截断执行
- 利用
call代替jump
- 增强感染的隐秘性
- 避开修改中断向量
- 维持宿主程序外部特征
- 不改变显示的文件长度和修改日期
- 系统引导型病毒对引导区进行伪装
- 不使用明显的感染标志
- 病毒不再简单地根据某个标志判断病毒本身是否已经存在,而是经过一系列相关运算来判断某个丈件是否感染
恶意代码
经典计算机病毒
Yankee Doodle 病毒
- 类型:良性病毒(Benign Virus)
- 平台:DOS 系统(IBM PC 兼容机)
- 行为特点:不破坏数据,仅具干扰性或娱乐性
- 感染可执行文件(如
.COM文件) - 每次运行被感染程序时,会在后台播放美国民歌《Yankee Doodle》的简单旋律
- 不删除文件、不格式化硬盘,仅占用少量系统资源
Brain 病毒
- 平台:MS-DOS(通过软盘传播)
- 类型:引导扇区病毒(Boot Sector Virus)
- 感染机制:
- 当用户从被感染的软盘启动计算机时,病毒加载到内存
- 病毒将原主引导记录(MBR)移到磁盘另一位置,并用自己的代码占据 MBR
- 驻留内存:
- 病毒常驻内存,监控磁盘读写操作
- 当插入干净软盘并访问时,病毒自动复制到新软盘的引导扇区
- 隐藏自身:
- 使用“stealth”技术:当程序读取原始 MBR 时,病毒返回备份的原始内容,掩盖感染事实
计算机蠕虫
- 自包含:是一个完整的可执行程序,不需感染其他文件。
- 自传播:能主动扫描网络、利用漏洞或社会工程实现自动扩散。
- 网络驱动:传播依赖网络协议(如 TCP/IP、SMB、HTTP、邮件等)。
| 特性 | 病毒(Virus) | 蠕虫(Worm) |
|---|---|---|
| 是否需要宿主 | 是(感染文件或引导区) | 否(独立程序) |
| 传播方式 | 用户运行被感染程序 | 利用系统漏洞自动传播 |
| 主要目标 | 感染本地文件 | 快速扩散至网络中其他主机 |
| 典型影响 | 破坏文件、显示信息 | 消耗带宽、导致 DoS |
运行机制
初始感染(Infection)
- 入口方式:
- 利用未打补丁的远程代码执行漏洞(如 EternalBlue)
- 通过钓鱼邮件(含恶意链接/脚本)
- 暴力破解 SSH/RDP/数据库弱口令
- 利用共享文件夹(如 Windows SMB)
驻留与隐藏(Persistence & Stealth)
- 写入启动项(
HKLM\...\Run) - 注册为系统服务
- 使用 rootkit 隐藏进程/文件/网络连接
- 关闭安全软件(如杀毒软件、防火墙)
扫描与传播(Propagation)
- 扫描策略:
| 类型 | 描述 | 示例 |
|---|---|---|
| 随机扫描 | 随机生成 IP 地址尝试 | Code Red |
| 本地优先扫描 | 优先扫描同网段(更快、更隐蔽) | Conficker |
| 命中列表(Hitlist) | 预置高价值目标 IP 列表 | Slammer |
| 拓扑扫描 | 从被感染主机获取联系人(如邮件地址簿) | ILOVEYOU |
- 传播协议:
- SMB(Windows 文件共享)
- RDP/SSH(远程登录)
- HTTP/HTTPS(Web 漏洞)
- SMTP(邮件自动发送)
执行载荷(Payload Delivery)
- 破坏性载荷:格式化硬盘、删除文件
- 经济性载荷:窃取银行卡、挖矿程序
- 控制性载荷:连接 C&C 服务器,成为僵尸节点
- 跳板载荷:作为内网渗透的跳板(横向移动)
更新与进化(Advanced Worms)
- 从 C&C 下载新模块
- 动态更换 C&C 地址(域名生成算法 DGA)
- 根据环境调整行为(沙箱检测规避)
宏病毒
宏病毒(Macro Virus) 是一类利用应用程序(尤其是 Microsoft Office)中的宏(Macro)功能进行传播和执行恶意代码的病毒。它在 1990 年代中期至 2000 年代初曾大规模爆发,是首个广泛流行的跨平台(Windows/Mac)恶意软件类型之一。
宏
- 宏是一系列自动化命令或脚本,用于简化重复性任务。
- 在 Microsoft Office(Word、Excel 等)中,宏使用 VBA(Visual Basic for Applications) 编写。
- 默认情况下,宏可访问文件系统、网络、注册表等系统资源 → 具备强大但危险的能力。
工作原理
感染载体
- 主要隐藏在 Office 文档中:
- Word:
.doc、.dot(模板) - Excel:
.xls、.xlt - 后来也出现在 PowerPoint、Access 中
- Word:
- 用户打开文档时,若启用宏,病毒即被激活。
自复制机制
宏病毒通常包含以下核心逻辑:
Sub AutoOpen() ' Word 文档打开时自动执行
InfectDocuments ' 感染其他文档
Payload ' 执行恶意载荷
End Sub
Sub InfectDocuments()
' 将自身代码复制到 Normal.dot(全局模板)
' 或复制到当前目录下其他 .doc 文件
End Sub
- 关键技巧:感染 Normal.dot(Word 全局模板)
→ 此后所有新建/打开的文档都会携带病毒
传播方式
- 本地传播:感染同一计算机上的其他 Office 文档
- 网络传播:
- 通过电子邮件附件发送带毒文档
- 共享网络驱动器中的文档被感染
- U 盘自动复制(结合 Autorun.inf)
间谍程序
间谍程序(Spyware) 是一类秘密安装在用户设备上、未经同意收集敏感信息并回传给攻击者的恶意软件。其核心目标是监视、窃取和滥用用户隐私数据,常用于身份盗窃、金融欺诈、商业间谍或广告牟利。
| 特征 | 说明 |
|---|---|
| 隐蔽性 | 静默安装、隐藏进程、伪装成合法程序 |
| 持久性 | 开机自启、抵抗卸载、自我修复 |
| 数据窃取 | 监控键盘、截屏、窃取文件、记录浏览行为 |
| 远程控制 | 可接收指令更新行为或下载新模块 |
| 未经同意 | 用户不知情或被欺骗安装 |
木马程序
木马程序(Trojan Horse,简称 Trojan) 是一类伪装成合法软件或文件,诱骗用户主动执行,从而在系统中秘密部署恶意功能的恶意软件。其名称源自古希腊“特洛伊木马”——外表无害,内藏杀机。
与病毒、蠕虫不同,木马不具备自我复制能力,完全依赖社会工程学(Social Engineering) 诱导用户安装。
| 特征 | 说明 |
|---|---|
| 伪装性 | 打包成游戏、破解工具、发票、简历、视频等看似无害的文件 |
| 非自传播 | 不主动感染其他文件或网络主机(需用户“自愿”运行) |
| 后门功能 | 主要目的是为攻击者提供远程控制、数据窃取或持久驻留 |
| 隐蔽运行 | 启动后隐藏窗口、伪装进程名、禁用安全软件 |
运行机制
投递(Delivery)
- 用户被诱骗运行
.exe、.scr、.js、.msi或 Office 宏
规避检测(Evasion)
- 加壳/混淆:使用 UPX、VMProtect 等工具加密代码
- 无文件技术:仅在内存运行(如 PowerShell + .NET 反射加载)
- 延迟启动:等待用户关闭杀毒软件后再激活
持久化(Persistence)
- 写入注册表启动项:
HKCU\Software\Microsoft\Windows\CurrentVersion\Run - 创建计划任务
- 替换系统 DLL(DLL 劫持)
- 注册为 Windows 服务
连接 C&C(Command and Control)
- 通过 HTTP、HTTPS、DNS、Telegram 等协议回连攻击者服务器
- 使用域名生成算法(DGA)或硬编码 IP 避免封禁
执行恶意功能
- 根据 C&C 指令:
- 窃取数据
- 下载新模块
- 发起攻击
- 自我销毁(防取证)
蠕虫、病毒、木马
| 特性 | 蠕虫(Worm) | 病毒(Virus) | 木马(Trojan) |
|---|---|---|---|
| 是否需要宿主 | 否(独立程序) | 是(依附文件/引导区) | 通常伪装成合法软件 |
| 是否自动传播 | 是(主动扫描+利用漏洞) | 否(需用户运行) | 否(依赖诱骗) |
| 主要目标 | 快速扩散、建立僵尸网络 | 感染本地系统 | 窃取信息、远程控制 |
| 典型载体 | 网络漏洞、邮件、共享文件夹 | 可执行文件、文档宏 | 游戏外挂、破解工具 |
具备功能
- Windows 资源浏览
- 远程屏幕显示以及键盘、鼠标控制
- Email 发送功能
入侵方式
- 间接入侵
- 伪装(软件绑定)
- Email 法
- 网页绑定
- 直接入侵
DDoS
分布式拒绝服务攻击
攻击过程
- 构建僵尸网络
- 探测扫描大量主机以寻找入侵主机目标。
- 入侵有安全漏洞的主机并获得控制权。
- 在每台入侵主机中安装攻击程序。
- 利用已入侵主机继续进行扫描和入侵。
- 攻击者向代理端发出攻击指令,成千上万的代理机就会同时向目标发起攻击。
- 被攻击的主机由于有太多的请求要处理,因而使用户正常的请求得不到及时处理。
电子邮件炸弹
电子邮件炸弹是最古老的匿名攻击之一,通过一个僵尸网络中的代理机(攻击程序)不断地、大量地向同一地址发送电子邮件,攻击者能够耗尽接受者网络的宽带。
这种攻击手段不仅会干扰用户的电子邮件系统的正常使用,它还能影响到邮件系统所在的服务器系统的安全,甚至造成整个网络系统全部瘫痪,所以邮件炸弹具有很大危害。
陷门(Trapdoor)
陷门通常是指进入程序(系统)的秘密入口,它使得知道陷门的人可以不经过通常的安全检查过程而获得访问。程序员为了进行调试和测试程序,往往会设置这样的陷门,当陷门被无所顾忌的程序员用来获得非授权访问时,陷门就变成了威胁。
对陷门进行操作系统的控制是困难的,最好在程序开发过程中进行控制。
陷门存在的几种情形:
- 开发者在程序完成后忘记去掉陷门
- 出于测试或维护的目的刻意保留
- 作为隐蔽的访问方式刻意保留
腊肠攻击(Salami 攻击)
在信息安全领域,Salami 攻击也称为腊肠攻击,是一种积少成多的攻击。
如:银行计算利息
黑客可以改动计算精度,将利率的小数点靠后面的几位抹掉,将零碎的利息转到自己的账户上,每次扣掉的金额很小,一般很难被发现,有较好的隐蔽性。但客户众多,日积月累往往可以达到可观的数目
隐蔽通道
- 信息隐藏利用数字媒体本身的数据冗余性以及人类感知能力的局限性,借助密码学、混沌理论、编码压缩技术等对信息本身及隐藏位置进行保密。
- 使秘密信息嵌入到公开载体中却不为人知,从而以“存在级”的安全级别去完成信息的安全输出,对信息起到有效的保护。
- 通常以数字图像、数字视频、数字音频、三维模型作为信息隐藏载体。
实现方式
两类实现方法:
- 存储型隐蔽通道:通过修改存储资源状态传递信息。
- 文件时间戳(修改为奇/偶表示 0/1);
- 磁盘空间分配(有/无空闲块表示比特)。
- 时间型隐蔽通道:通过事件发生的时间间隔编码信息。
- 网络包发送间隔(短=0,长=1);
- CPU 占用率波动传递信号。
信息隐藏技术
- 加密技术是实现隐秘通信的重要手段之一,通过对明文(秘密信息)进行加密处理行成密文,把原始信息转换成不可读形式,从而实现秘密通信。
- 但“此地无银三百两”的做法也是最容易引起攻击者的注意,吸引攻击者采取多种手段对信息进行破译、篡改和破坏,暴露信息发出或接收的“潜伏者”,造成通信的失败和人员与财产的损失。
- 而信息隐藏技术的优势在于,不仅可以应用公用信道,而且可以将明文隐藏到普通的媒体中,使得攻击者难以发现秘密信息的存在。
- 使秘密信息“冠冕堂皇”的从攻击者的监视下溜走,从而到真正达隐秘通信的目的。