论文部分内容阅读
恶意代码不再仅是用来炫耀技术而是成为不法分子牟取不正当利益的工具。基于特征匹配的方法忽略了程序行为导致特征没有泛化性,一个特征只能检测一种变种,而动态检测的死穴在于可观行为局限在一个有限的时间段或程序分支中,而将来的或其他分支的行为是不可预期的。因此上述方法在面对暴利刺激下层出不穷的恶意代码变种时显得力不从心。程序语义提供了程序行为的形式化模型,意味着从语义角度可以检查可疑代码所有的执行路径,并能展现在语法层次上被故意隐藏的不同变种间的相似性。但理论上静态分析程序完整语义是不可判定和不可计算的,本文通过系统函数调用观察程序行为,经过两次抽象在两个不同的近似语义层次上将模型检测恶意行为和基于面向目标的关联度(Objective-Oriented Association, OOA)挖掘恶意代码检测统一在程序语义这一共同框架之下。模型检测恶意行为实质是检测可疑程序所有可能的执行路径中是否存在一条实现特定恶意行为的路径(恶意行为模板)。参考方法由于没有引入数据流分析,使得恶意行为模板及其繁杂。本文首先反汇编可疑程序并引入控制流和数据流分析构造语义模型,同时恶意行为被统一抽象为有限状态机的形式,并最终转化成对应的计算树逻辑(Computation Tree Logic, CTL)公式,最后由标记算法完成验证工作。实验证明由于数据流分析的引入本文方法可极大地简化恶意行为的描述。基于OOA挖掘的方法检测可疑程序调用的API集合是否存在特定的子集(规则)。本文利用IDA Pro插件提取可执行文件所调用的API集合,采用快速的OOApriori算法挖掘满足特定目标的规则,并由此规则分类。通过改进规则挖掘策略、强化规则选择条件、引入多规则积累和多分类器仲裁机制等措施在显著减少原OOApriori挖掘时间的同时提高了所挖掘规则的质量而且有效解决了参考方法的样本敏感性问题。针对上述两种方法对于加壳和API隐藏技术的局限性,本文基于程序语义的静态恶意代码检测系统引入启发式检测作为有力补充,最终该系统能自动脱壳加壳恶意代码,在不需特征库的情况下就能检测未知恶意代码及其变种,并能在一定准确度上提供恶意代码所属子类别和拥有的恶意行为的信息。