论文部分内容阅读
基于特征码的病毒检测方法在面对已知的恶意软件时拥有很高的检出率和极低的误报率,然而该方法只关注特定恶意软件的特定指令序列,却忽略了程序的功能特征,因此无法检测到未知的恶意软件变种。利用特征码的这个缺点,恶意软件作者采用代码混淆技术开发出能够逃脱反病毒检测的各种变形恶意软件。变形的恶意软件能够在每次传播的过程中自动改变自身代码,同时保持程序原来的功能不变,这使得程序自身不再包含固定不变的机器指令序列,所以变形的恶意软件不仅能够使基于特征码匹配的检测方法失效,而且它采用的反仿真、反调试技术也给基于动态分析的检测方法带来巨大挑战。因此,如何从变形的恶意软件中自动提取出不变的特征码是解决变形恶意软件检测问题的关键。
本文主要研究变形恶意软件检测中的关键技术。
首先,对变形的恶意软件建立特征模型。深入研究恶意软件变形技术以及变形引擎的具体实现,利用变形恶意软件只变换程序指令而保持原有功能的特点,提出把恶意软件的函数调用图作为程序的特征码。与传统的特征码相比,函数调用图在语义上代表了程序的功能和目标,函数调用图对恶意软件变形技术更有弹性,更能抵抗代码混淆的影响,因此函数调用图更适合于作为恶意软件的特征码。
其次,采用静态分析的方法提取变形恶意软件的函数调用图。首先反汇编恶意程序得到汇编码文件,然后利用一个先进先出的队列,采用广度优先遍历指令序列的方法来构造恶意软件的函数调用图,并将图存储在十字链表中。
然后,利用函数调用图来计算变形恶意软件之间的相似度。基于两个函数调用图的“最大共同顶点数”定义了一个计算有向图之间相似性的相似度量,把检测变形恶意软件的问题转化为比较程序的函数调用图的相似度这一数学问题。计算两个函数调用图的相似度的算法分为五个阶段,分别为原子函数匹配、基于已匹配的相同原子函数的顶点匹配、基于相同邻居顶点的顶点匹配、基于函数操作码序列的顶点匹配和基于最大共同顶点对的相似度计算。
最后,实现一个变形恶意软件相似度计算的原型系统并进行实验验证。基于上述算法本文实现了一个用来计算恶意软件变种之间相似度的原型系统,并利用一些变形的恶意软件和正常程序作为测试样本来验证系统的正确性和有效性。该原型系统经扩展后可用于恶意软件检测和分类。