Chapter 9 恶意软件防护技术
9.1 检测对象与策略
何为恶意软件/代码检测?
- 将检测对象与恶意代码特征进行对比分析,定位病毒程序或代码,或检测其恶意行为。
检测对象:
- 引导扇区(引导区病毒、MBR木马等)
- 文件系统中可能带毒的文件(主要检测对象,几乎所有形式的文件都有可能带毒)
- 内存空间(有的恶意代码只存在于内存或只在内存中被还原)
- 主板BIOS(早期的病毒如CIH会破坏BIOS)
- 网络流量、系统行为等(通过行为间接检测可能的恶意代码)
检测策略:
- 专用检测技术:针对特定的已知的恶意代码。必须实时更新病毒库版本(如文件特征值检测技术)
- 通用检测技术:针对已知和未知的恶意代码,以广义行为特征或一般的行为特征作为判定依据(如启发式扫描技术、主动防御技术等)
9.2 特征值检测技术
病毒特征值:鉴别特定计算机病毒的一种标志,通常为一段或多段二进制串或字符串。
检测思路:获取样本 --> 提取样本特征 --> 更新病毒库 --> 查杀病毒
特征值提取选择:
- 特定子串:具有特殊意义的字符串等。
- 感染标记:用于防止恶意代码重复感染的标记,虽然广泛存在但各不相同。
- 从病毒代码的特定地方开始取出的连续的、不大于64且不 含空格(ASCII值为32)的字节串。
提取方法:
- 人工提取
- 自动提取(容易造成误杀)
优点:
检测速度快,误报率低,技术成熟
缺点:
只能检测已知恶意代码且容易被绕过
恶意软件对抗技术
- 手工修改自身特征,利用反病毒软件检测的结果进行针对性修改
- 自动修改自身特征,如加密、多态、变形等
9.3 校验和检测技术
校验和:文件校验,与密码学中的Hash函数相关。常见的有CRC校验、MD5校验、SHA1校验等。
检测思路:在文件使用/系统启动过程中,检查检测对象的实际校验和与预期是否一致,因而可以发现文件/引导区是否感染。
预期:正常文件内容和正常引导扇区数据
检测方式:
- 系统自动检测:校验和检查程序常驻内存,每次运行应用程序都进行检查,需要预先保存校验和。
- 专用检测工具:计算正常状态文件的校验和,将校验和值写入文件或检测工具后比较。
- 自检:带有校验和检测功能的程序,将正常状态校验和写入自身,应用程序启动时比较现行校验和与原校验和值完成自检。
检测内容:
- 文件头部:在文件很大的情况下为节省时间只对头部进行校验
- 文件属性:检查文件长度、创建时间、读写属性、首簇号等
- 文件内容:检查整个文件
- 系统数据:检查引导扇区、中断向量表、驱动程序处理例程等
优点:
方法简单,能够发现未知病毒,能够发现文件的微小变化
缺点:
必须先保存正确的校验码,容易误报,效率低,不能识别病毒类别
9.4 启发式扫描技术
恶意代码检测经验和知识的软件实现。
检测可疑的程序代码指令序列:
- 格式化磁盘类操作(破坏)
- 搜索和定位各种可执行程序的操作(可能要感染)
- 实现驻留内存的操作(隐藏)
- 发现非常用的或未公开的系统功能调用的操作、子程序调用中只执行入栈操作(正常的函数不会这样)、远距离跳转指令(超过文件长度的三分之二) 等
- 敏感系统行为
- 敏感API函数(序列)调用功能
关键API函数:
- GetModuleHandleA:返回可执行文件句柄
- LoadLibraryA:加载动态库
- GetProcAddress:获取API函数内存地址
- ExitProcess:退出进程
- VirtualAlloc:分配堆内存空间
- VirtualFree:释放堆内存空间
启发式扫描步骤:
- 定义通用可疑特征(指令序列或行为)
- 对上述功能操作将被按照安全和可疑的等级进行排序,授以不同的权值。
- 鉴别特征,如果程序的权值总和超过一个事先定义的阈值,则认为“发现病毒”
- (可见启发式扫描与机器学习有一定的关联)
优点:
能够发现未知病毒
缺点:
误报率高
通常使用传统扫描+启发式扫描方式检测病毒,可降低误报率
恶意软件对抗技术
- 直接关闭防病毒软件
- 关闭启发式机制
9.5 虚拟机检测技术
随着加密、加壳、病毒变形的出现,需要通过虚拟机技术进行检测。
虚拟机检测技术:在反病毒系统中设置的一种程序机制,它能在内存中模拟一个小的封闭程序执行环境(类似于沙箱机制),所有待查文件都以解释方式在其中被虚拟执行。(一般只需要虚拟执行一小部分代码)
优点:能够有效处理加密类病毒,与传统检测方式结合能够有效准确率,与启发式扫描方式结合能够有效检测未知病毒。
9.6 主动防御技术
动态监视所运行程序调用各种API的动作,自动分析程序动作之间的逻辑关系,自动判定程序行为的合法性。(即无论是否有恶意代码存在,都主动监控系统)
优点:可发现未知恶意软件、可准确地发现未知恶意软件的恶意行为。
缺点:可能误报警、不能识别恶意软件名称,以及在实现时有一定难度
练习题:
1. 蜜罐技术是近年来较为热门的一种安全技术。安全运营商为了获取最新的恶意代码,会向外开放一个有某些特定漏洞的网络端口以供连接。这些网络端口不提供任何服务,因此正常的访问者不会进入此端口,而某些恶意代码会将其误认为是脆弱的可攻击对象而进入攻击。此时安全运营者就能够获取到该恶意代码的一些具体信息,如监控其攻击方式与流程、获取关键文件等,以此来扩充自己的病毒库并研究防御措施。据此回答下列问题:
(1) 获取病毒样本后,研究人员发现这个病毒采用了某种加壳方式。那么最好应该使用__________方式进行恶意代码的检测,不使用特征值检测的原因是__________________________。
(2) 一天,研究员在几个“蜜罐”中都发现了一种恶意代码。分析发现,代码中对字符串的一些字节进行了替换,但替换位置不同。这种恶意代码能否使用特征值检测方式进行检测?_______ (能或不能),原因是_________________________。