论文部分内容阅读
身处网络时代,每个人的电脑都几乎受到过恶意代码的攻击,如病毒、蠕虫和木马等。人们通过杀毒软件来防御恶意代码,但每年有大量恶意代码通过产生变种的方式来逃避杀毒软件的查杀。许多研究者致力于通过静态分析的方法提取泛化能力好的特征,从而更有效地检测恶意代码。但静态方法易受加壳或混淆技术的影响,随着对抗升级,静态分析的难度越来越大。与之相比,动态方法则不受此影响,通过在受控环境中运行恶意代码可以捕获到许多关键信息,如系统调用。系统调用是应用程序用来与操作系统交互的接口,其执行通常会改变系统的状态,并且恶意代码的大多数敏感操作都要转入系统调用去执行,所以从系统调用层面可以获取程序运行的本质特征。在系统调用序列基础上,通过机器学习方法可以对大量恶意代码进行聚类或分类,但该方法并不能有效提取出某一恶意家族的本质行为特征。考虑到许多恶意操作需要通过一系列存在依赖关系的系统调用来实现,有研究者尝试用系统调用依赖图来刻画恶意行为,并基于依赖图对恶意代码进行有效地检测或分析。该方法的关键是依赖图的构造,并且从运行记录文件构造的原始依赖图包含许多噪声信息,不能直接用于恶意代码检测。为解决这两方面的问题,本文提出了一种新的基于依赖图的恶意代码检测方法。该方法采用动态污点分析技术对系统调用参数进行污点标记,进而根据这些标记构建依赖图。同时为了提取具有代表性的依赖图,该方法利用图聚类算法,将同一恶意家族多个样本剪枝后的依赖图聚集成一个加权最小公共超图,然后通过图匹配的方法进行恶意代码检测。实验表明,该方法具有较高的检测率和极低的误报率。由于依赖图的构建需要捕获运行程序所产生的系统调用及其参数的污点标记,本文基于开源二进制插装平台TEMU,实现了一个动态分析系统来达到该目的。实验表明,该系统具有较好的追踪效果和性能,可用于大量样本的自动化分析。此外,依赖图可以刻画恶意行为,本文通过关键字符串从原依赖图中抽取出相应的子图,分析了恶意代码的某些典型行为。