恶意代码的静态分析技术,在应对代码混淆或加壳等情形时,具有一定的局限性。为了保证代码评估的准确性,动态分析技术利用虚拟机或仿真器执行待测程序,监控并收集程序运行时显现的行为特征,并根据特征数据实现恶意代码的分类。
静态分析与动态分析区别:
调试逆向分为动态分析技术和静态分析技术。动态分析技术指的是使用调试工具加载程序并运行,随着程序运行,调试者可以随时中断目标的指令流程,以便观察相关计算的结果和当前的设备情况。静态分析技术是相对于动态分析而言的。由于在实际分析中,很多场合不方便运行目标(例如病毒程序,设备不兼容,软件的单独某一模块)。那么这个时候就需要应用静态分析技术。OD(OllyDbg)和IDA Pro这两款工具分别是调试逆向的倚天剑和屠龙刀。虽然两者都兼容动态和静态的调试方式,但就动态调试而言,OD更为灵活和强大,而静态调试工具的王者理所应当是功能极为强大的IDA Pro。
1.行为特征提取
沙箱技术是收集行为特征的重要技术途径,许多安全公司提供了 Web 版的沙箱接口,用以对上传的程序样本进行动态分析,生成行为分析报告。目前常见的沙箱工具有 Anubis、Joe Sandbox、Cuckoo Sandbox、CWSandbox 等。
动态分析的重点是对监控行为的类型进行合理选择。一般来讲,基于行为分析的方案主要考察程序运行过程中所涉及的以下方面:
系统文件的改变,如创建或修改文件;
注册表键值的操作行为;
动态链接库(DLL,dynamic link library)的加载情况;
进程访问的情况;
系统服务行为,如开启、创建或删除服务;
网络访问情况;
应用程序编程接口(API)的调用。
此外,一些解决方案还对程序调用函数的数据信息进行分析,这时污点标签设置方法常被结合使用。
文献[22,23]结合行为报告的分析结果,对恶意代码的行为特征进行识别,借助机器学习算法对可执行文件进行分类。杨轶等通过分析污点传播的过程,识别不同的恶意代码行为间控制指令和数据的依赖关系,从而比较恶意代码的相似性。Imran 等通过隐马尔可夫模型对待测样本的动态行为特征进行描述,并借助机器学习算法实现分类。Anderson 等则通过动态方式搜集程序指令序列,进而生成基于马尔可夫链的有向图。
2.行为特征选取
许多沙箱工具,如 Anubis 和 CWSandbox 的输出格式为文本或可扩展标记语言(XML,
extensible markup language),这两类格式更适用于小规模样本的人工分析。具体来说,文本格式报告对行为特征的刻画过于简单,粒度较粗,一些重要的行为不再可见;而 XML 格式下的分析报告表述又过于繁冗,不便于开展自动化分析。为了高效处理行为分析数据,Trinius 等提出基于恶意软件指令集(MIST,malware instruction set)的行为数据描述方法,常被用来对其他格式(如 XML 格式)的行为报告进行转换,从而达到在行为数据中选取主要特征的目的。MIST 将程序行为的监控结果描述为一系列指令,其中每个线程和进程的执行流被分组在一个连续的报告中。每条指令都对应监控到的一个系统调用(system call)及其调用到的参数(argument),指令以短数值的方式予以标识。此外,系统调用的具体参数被分隔在不同等级的块中,反映不同程度的行为粒度。
MIST 报告可以进一步通过向量空间模型(VSM,vector space model)进行向量化,生成可用于机器学习算法分类的数据。在特征项和特征项权重的计算上,可运用词袋模型(BOW,bag of words)。
词袋模型的示例如下,假设有下述 2 个文件。
Samuel detected a malware. I detected the malware too.
The malware was detected by us.
基于上述 2 个文件,可以构建一个词汇表。
词汇表={1.“Samuel”,2.“detected”,3.“a”, 4.“malware”,5.“I”,6.“the”,7.“too”,8.“was”, 9.“by”,10.“us”}。
这个词汇表一共包含 10个不同的单词,利用索引号,上面 2 个文件可分别用 10 维向量表示(向量中元素为词表单词在文件中出现的频率)。