论文部分内容阅读
确保信息系统的安全已经被提升到国家战略高度,而恶意代码是当前信息系统安全的主要威胁之一。一方面由于经济利益驱使,恶意代码的数量以惊人的速度增长,使得安全人员疲于应付;另一方面恶意代码编写者不断提出新的策略来对抗传统的软件分析方法,混淆、变形等程序变换技术广泛应用于恶意代码编写过程中,这也使得对恶意代码进行分析与判定更加困难。因此,对恶意代码及其变体进行有效的分析与检测,将有助于提高信息系统的安全性,减少由恶意代码带来的损失。对二进制文件进行反编译,从而提取程序中具有的特征与行为,是一种检测恶意代码、分析程序恶意性的有效方法。本文从模型建立、程序逆向分析以及判定算法设计等方面,对程序恶意行为识别及其恶意性判定进行了研究。论文的主要工作及创新点包括:1、建立了一种基于证据推理的程序恶意性判定模型。现有的程序恶意性判定模型通常是将识别的行为与定义的恶意模板进行单一比较,因此容易导致误报情况的出现。针对该问题,本文将证据理论引入程序恶意性判定问题中,建立了一种基于证据推理的程序恶意性判定模型,并将程序恶意性判定问题抽象为对多个证据的合成问题。该模型以程序具有的多种特征行为的识别程度作为输入,从一定程度上解决了单一行为特征作为判定标准的问题,并且提高了程序恶意性判定的正确率,也增加了程序恶意性判定问题实现的灵活性。2、提出并实现了一种通过神经网络获得概率分配函数的方法。在应用证据理论时,将训练集中程序的行为特征转换为可以进行推理的概率分配函数,是应用证据理论进行程序恶意性判定的前提条件。目前确定概率分配函数方法大都是人工设定,该方法存在计算复杂、自适应差、主观性强等缺点。针对该问题,结合神经网络具有较强的泛化能力,在知识学习中具有归纳全部数据的自学习能力的特点,本文提出了使用神经网络进行训练得到程序行为概率分配函数的方法,利用神经网络对大量样本进行学习,能起到领域专家的作用,解决了概率分配函数赋值难以获取的问题。3、提出并实现了一种基于“支持度”的证据合成算法。在利用证据理论的合成规则进行证据推理时,由于证据理论本身的局限性,会出现合成规则不能使用或者得出的结论与人类推理习惯相悖的问题。在程序恶意性判定的推理算法的研究过程中,发现悖论问题直接影响到证据推理结果的正确性与可靠性。针对该问题,本文提出了“支持度”的概念,通过计算证据间的距离来确定证据之间的冲突,进一步确定每一个证据得到其它证据的支持程度,并将该支持度作为合成时的可信程度,从而提高了程序恶意性判定结果的准确性。4、提出并实现了一种针对恶意代码的反汇编策略及相关算法。恶意代码编写者经常使用一些代码混淆技术来干扰反汇编器获得正确的指令,从而逃避检测。在归纳了常用的三类抗分析混淆手段的基础上,提出了一种数据流与控制流协同的反汇编策略。该方法能够对抗垃圾数据插入、子程序异常返回和直接跳转间接化等常用的混淆方法。实验结果证明,采用该方法能够提取二进制程序中有效指令,显著提高反汇编的正确率,为程序恶意性判定提供保证。5、提出并实现了一种基于模型检测的程序行为识别方法。程序的行为是一组相互协作的、能够观察的作用在计算系统上的操作。在对二进制程序的安全性进行判定时,程序行为是最为有力的依据,能够从根本上反映程序的性质。但程序中的行为并不是独立的,而是可以组合进而形成新的行为。但这种相关性非常复杂,很难用具体的数学模型来描述。针对该问题,本文分析了恶意代码在指令序列、函数调用图以及函数参数上的表现,提出了基于模型检测的程序行为识别方法。该方法利用模型检测器识别程序中具有定义的恶意行为,并在程序的控制流图上对检测到的恶意行为进行标注。本文提出的模型及其相关算法已在课题组研制的Nombril系统中得到了实现和应用,实验数据验证了模型和算法的合理性、正确性和有效性。