论文部分内容阅读
为了躲避检测,恶意程序使用加密/加壳、多态、变形等代码混淆技术。变形技术通过改变程序的代码分布来混淆程序分析,增加了静态分析恶意程序的难度。同时,变形引擎等自动化混淆工具的出现降低变形恶意程序生成门槛,使得已知恶意程序以变形变种的新形式大量出现。因此,识别已知恶意程序的变形变种成为亟待解决的问题。识别变形恶意程序的关键是寻找对变形技术稳定的程序特征。函数调用图不易被变形技术改变且能反映程序的功能语义,常被用作语义模板来检测变形恶意程序。但该类方法不能应对无用函数插入、间接调用以及针对call指令的指令混淆。同时,该类方法使用指令序列来描述局部函数,易受指令重排、等价指令替换及垃圾指令插入等变形技术混淆。本文针对基于函数调用图的方法中存在的问题进行研究和改进:(1)研究了恶意程序分析方法,比较静态分析和动态分析的优劣并总结现存的静态分析方法。同时,研究了恶意程序反分析技术,着重分析代码混淆技术,尤其是变形技术。基于此,得出获得对变形技术稳定的程序特征是静态检测变形恶意程序的难点。(2)研究了现存的变形恶意程序静态检测方法,分析其工作原理、相关工作及优缺点。分析基于函数调用图的方法中无法构建完整且准确的函数调用图的问题。(3)提出了基于程序结构特征的变形恶意程序静态检测方法。相对于指令序列,程序结构不易被变形技术改变且更能表现程序特征。该方法以程序结构符号描述的函数特征来作为程序特征,能够应对绝大多数变形技术的混淆,从而提高变形技术混淆恶意程序静态检测的门槛。(4)基于以上方法,设计和实现了变形恶意程序静态检测原型。该检测原型结合控制流分析、代码规范化处理以及间接调用处理来获得程序特征,通过为已知恶意程序的程序特征建立特征数据库来识别变形恶意程序。实验中,针对程序特征的变形技术应对能力、区分不同恶意程序族的能力以及恶意程序检测能力进行测试。实验结果表明,我们提取的程序特征具有较好的稳定性和区分性,能够应对变形技术的混淆,实现对变形恶意程序的检测。