首页> 中国专利> 基于软件控制流特征的计算机恶意软件检测新方法

基于软件控制流特征的计算机恶意软件检测新方法

摘要

一种基于软件控制流特征的计算机恶意软件检测新方法,通过静态分析:二进制文件的控制流结构,自动提取操作码序列,并利用空间向量模型将序列转为结构化信息,这些信息经过筛选后作为文件的特征集,再使用数据挖掘的方法从大量特征集中发现软件分类的规则,并将其用于恶意软件的检测。本发明不但能够有效的检测出普通zero-day恶意软件,而且对于采用模糊和多态技术的恶意软件同样有较好的检测结果,对于蓄意攻击也保持良好的稳定性。

著录项

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2016-01-20

    授权

    授权

  • 2013-11-13

    实质审查的生效 IPC(主分类):G06F21/56 申请日:20130305

    实质审查的生效

  • 2013-06-26

    公开

    公开

说明书

技术领域

本发明涉及计算机信息安全中的恶意软件的检测方法,特别是对于恶意软件 设计者采用模糊和多态技术来隐藏代码外部信息和局部特征时,其检测结果具有 良好的稳定性的恶意软件检测方法。

背景技术

随着计算机科学在社会各个领域的广泛应用,计算机软件的安全问题受到人 们越来越多的关注。建立可信的软件系统成为维护计算机信息安全的一种有效手 段,对于恶意软件的检测成为软件可信性分析的核心研究方向。

传统的基于特征码的检测方式需要通过专用数据库来更新和维护事先提取 相关特征码,通过扫描引擎查找软件的局部信息,并使用字符串匹配方法来对比 这些信息和特征码的相似度,根据对比结果来得出检测结论。这种检测方法被广 泛应用于现有的杀毒软件和系统防护软件中,属于比较成熟的技术,现在开发重 点主要集中在提高代码的扫描速度和特征码提取的准确度。

近年来提出的非特征码恶意软件检测方法中,有些是采用启发式分析或是基 于软件行为来判断正常软件和恶意软件,这些方法在没有软件先验信息的情况 下,对zero-day恶意软件有一定的检测效果。还有一些研究是通过在软件特殊 结构属性信息来分类软件,比如通过提取PE文件的头部信息进行对比分类,在 正常运行环境也取得了不错的检测结果。这些方法都是通过对软件的局部信息挖 掘,期望得到能够将软件正确分类的指标集,然后用指标集检测软件。

上述的恶意软件检测方法分别存在以下问题:

第一,基于特征码的检测方法需要获得恶意软件的特征码,并将不断增加的 特征码到用户端的数据库,对日益庞大的数据库维护成为使用者付出的代价。该 检测方法最大的缺点是难以检测未知的恶意软件,用户不能够及时处理新的安全 威胁。

第二,采用启发式分析或是基于软件行为检测方法是通过获得代码的特殊局 部信息对软件进行分类,但是对于使用模糊和多态的恶意软件,这种局部特征往 往不固定,因此该检测方法在判断这些恶意软件时准确率不够。

第三,使用标准格式信息来区分软件的检测方法,利用的是软件的外部描述 信息,这些信息大多不直接涉及软件的行为,对于熟悉该方法的恶意软件设计者, 能够通过对格式信息的特殊处理来大幅度降低该方法的检测效果。

发明内容

本发明的目的是提供一种识别准确率高、检测结果稳定性好的基于软件控制 流特征的恶意软件检测方法。

本发明的目的是这样实现的:一种基于软件控制流特征的恶意软件检测方 法,包含4个主要步骤:

1)对PE格式文件即Portable Executables格式文件进行反汇编:

采用递归下降算法来处理文件,以有效区分指令和数据,并采用基于x86汇 编指令集创建指令序列;

2)根据控制流选择代码的基本块

软件控制流是指反汇编代码中的基本块所形成的控制流结构;基本块是 由若干虚拟地址连续的指令组成,它的特点是只有一个入口地址和一个出口地 址,即这些指令执行时要么都不执行,要么按地址依次全部执行;基本块的构成 采用断点判别法来实现,即首先确定整个软件代码序列中的断点地址,在相邻断 点地址之间的指令序列则形成一个基本块;

3)软件特征表示和筛选

将软件代码序列中的基本块作为代表软件的特征类型,采用布尔型向量来表 达软件特征:统计软件样本中出现的所有n个基本块并编号分别为 (0,1,2,…,n-1),所有软件使用一个n维的布尔向量来表示,当软件包含编号 为i的基本块时,向量的第i+1表示为1,否则表示为0;并通过软件特征在文 件中出现的频率来筛选特征,最优先的选择区间为[0.2×m,0.6×m],其中m是 所有样本中不同特征的数量;

4)通过数据挖掘算法判断恶意软件和正常软件:

4.1)通过数据挖掘算法产生训练集结果:

该过程是生成训练集结果和判断规则的过程;首先对大量的正常软件和恶意 代码样本进行处理,样本文件按前面的特征表示与筛选生成的数据集作为输入, 通过机器学习过程,在以下选用的数据挖掘算法中得到训练集结果;数据挖掘算 法采用基于决策树的C4.5算法,基于Random Forest的分类算法和贝叶斯分类 算法中的基于Bagging算法之一种;并按m fold交叉验证产生分类规则;训练 集结果产生的这些分类规则作为之后检测PE文件的依据;

m fold交叉验证:在对文件进行分类时,将所有文件按随机方式平均分为 m份,将其中m-1份作为机器学习的材料,而另外1份作为测试目标,这样进行 m次,使每一份都能得到测试;

4.2)产生测试结果:

对于被测试的PE文件,经过提取与前面过程中相同的控制流特征后,将这 些特征使用布尔型向量表示并使用arff记录文件存储这些数据;这些记录文件 作为输入,利用上述训练集结果就得到测试结果。

所述断点地址的判断原则是出现跳转指令,或者,该地址为跳转指令的目标 地址或调用指令的目标地址。

本发明针对传统恶意软件检测方法中偏重于软件的局部或外部特征,对使用 模糊和多态技术恶意软件检测效率不稳定的缺点,提出利用软件控制流反映出的 语法结构和语义信息来发掘软件的行为特征,并使用向量空间模型描述这些信 息,通过指标分析和数据挖掘来实现恶意软件检测。

本发明的有益效果是:

1、本发明解决的关键问题在于:创新性的利用软件控制流结构中的指令序 列来判断软件行为,通过序列频率区域选取部分信息作为软件特征,然后利用数 据挖掘的分类算法对样本处理得到软件分类的判断规则,从而进行恶意软件检 测。

2、现有通过人工分析提取软件特征码的方法,在效率和对未知病毒的检测 性能方面都存在不足。本发明提出能够静态分析二进制文件的控制流结构,自动 提取操作码序列,并利用空间向量模型将序列转为结构化信息,这些信息经过筛 选后作为文件的特征集。使用数据挖掘的方法从大量特征集中发现软件分类的规 则,并将其用于恶意软件的检测。本发明对于Portable Executables(PE)文件 中反汇编代码中的控制流,通过提取指令序列信息来检测恶意软件。该方法主要 过程分三步:①通过反汇编代码中的基本块获得软件指令序列,②将软件指令序 列信息转换成软件特征指标,③通过有效的数据挖掘算法分类恶意软件和正常软 件。基于软件控制流的恶意软件检测方法,不但能够有效的检测出普通zero-day 恶意软件,而且对于采用模糊和多态技术的恶意软件同样有较好的检测结果,对 于蓄意攻击也保持良好的稳定性。

附图说明

图1是基于软件控制流特征的恶意软件检测方法的模型框图。

具体实施方式

参见图1,本发明包含以下4个步骤:1、对PE格式文件进行反汇编;2、 根据控制流选择代码基本块;3、软件特征表示与筛选;4、通过分类算法判断恶 意软件和正常软件;具体步骤如下:

1)对PE格式文件进行反汇编:

我们处理的对象是PE格式的文件,主要数据是这些文件反汇编后得到的代 码,因此反汇编的质量关系到数据的准确性,在本模型中采用递归下降算法来处 理文件,这种算法的好处是能够有效的区分指令和数据,提高可信赖的结果。由 于不同编译器生成的函数调用指令存在差异,我们采用基于x86汇编指令集创建 指令序列。

2)选择代码的基本块

软件控制流在不同层次上的表现也各不相同,本方法使用的控制流是指反汇 编代码中的基本块所形成的控制流结构。基本块是由若干虚拟地址连续的指令组 成,它的特点是只有一个入口地址和一个出口地址,即这些指令执行时要么都不 执行,要么按地址依次全部执行。基本块的构成采用断点判别法来实现,即首先 确定整个软件代码序列中的断点指令地址,在相邻断点之间的指令序列则形成一 个基本块。断点地址由两种情况,一种是出现跳转指令,如jmp,ja,jae,jb, jbe,jc,jcxz,jecxz,je,jg,jge,jl,jle,jna,jnae,jnb,jnbe,jnc, jne,jng,jnge,jnl,jnle,jno,jnp,jnp,jns,jnz,jo,p,jpe,jpo, js,jz,retn等,另一种情况该地址被其它指令调用,即前面所述跳转指令的 目标地址,也包括call调用的目标地址。

3)软件特征表示和筛选

代码中的基本块作为代表软件的特征类型,本方法采用布尔型数值来表达软 件特征。具体方法是统计软件样本中出现的所有n个基本块并编号分别为 (0,1,2,…,n-1),所有软件使用一个n维的布尔向量来表示,当软件包含编号 为i的基本块时,向量的第i+1表示为1,否则表示为0。

通过特征在文件中出现的频率来筛选特征。阈值设置要综合考虑特征的区分 度以及有效性,如果设置过大,表示在绝大多数程序中都出现过,就不能很好的 区分程序;如果设置过小,表示只会出现在极少程序中,很难在其它程序找到这 些序列,把它们作为特征时对于其它程序的检测很可能没有用处。本方法保留Xi在区间[0.2×m,0.6×m]的软件特征,其中,Xi代表包含第i个序列文件数量, m是所有样本文件中不同特征的数量。

4)通过数据挖掘算法判断恶意软件和正常软件:

4.1)通过分类算法产生训练集结果:

该过程是生成训练集结果和判断规则的过程;首先对大量的正常软件和恶意 代码样本进行处理,样本文件按前面的特征表示与筛选生成的数据集作为输入, 通过机器学习过程,在选用的数据挖掘算法中得到训练集结果;上述数据挖掘算 法采用基于决策树的C4.5算法,基于Random Forest的分类算法和贝叶斯分类 算法中的基于Bagging算法之一种;并按m fold交叉验证产生分类规则;训练 集结果产生的这些分类规则作为之后检测PE文件的依据;

m fold交叉验证:在对文件进行分类时,将所有文件按随机方式平均分为 m份,将其中m-1份作为机器学习的材料,而另外1份作为测试目标,这样进行 m次,使每一份都能得到测试;

4.2)产生测试结果:

对于被测试的PE文件,经过提取与前面过程中相同的控制流特征后,将这 些特征使用布尔型向量表示并使用arff记录文件存储这些数据;这些记录文件 作为输入,利用上述训练集结果就得到测试结果。

本发明的具体描述如下:

(1)检测模型及基本思想

基于软件控制流特征的恶意软件检测方法处理的对象主要是PE格式的正常 软件和恶意软件。该方法是一种静态的分析方法,无需真正运行被检测的软件, 只是将其进行反汇编处理,得到软件的反汇编指令序列,然后将这些序列处理后 作为软件特征,进而识别恶意软件。

新检测方法使用的模型如图1所示,该模型分为2个阶段,第一个阶段数据 训练阶段,包括反汇编、序列选择、特征筛选和机器学习4个步骤;第二个阶段 软件检测阶段,包括反汇编,序列选择和恶意软件检测3个步骤。

我们处理的对象是PE格式的文件,主要数据是这些文件反汇编后得到的代 码,因此反汇编的质量关系到数据的准确性,在本模型中采用递归下降算法来处 理文件,这种算法的好处是能够有效的区分指令和数据,提高可信赖的结果。由 于不同编译器生成的函数调用指令存在差异,我们采用基于x86汇编指令集创建 指令序列。

软件控制流在不同层次上的表现也各不相同,本方法使用的控制流是指 反汇编代码中的基本块所形成的控制流结构。基本块是由若干虚拟地址连续的指 令组成,它的特点是只有一个入口地址和一个出口地址,即这些指令执行时要么 都不执行,要么按地址依次全部执行。基本块的构成采用断点判别法来实现,即 首先确定整个软件代码序列中的断点指令地址,在相邻断点之间的指令序列则形 成一个基本块。断点地址由两种情况,一种是出现跳转指令,如jmp,ja,jae, jb,jbe,jc,jcxz,jecxz,je,jg,jge,jl,jle,jna,jnae,jnb,jnbe, jnc,jne,jng,jnge,jnl,jnle,jno,jnp,jnp,jns,jnz,jo,p,jpe, jpo,js,jz,retn等,另一种情况该地址被其它指令调用,即前面所述跳转指 令的目标地址,也包括call调用的目标地址。软件基本块的形成算法如下所示:

方法:软件基本块的形成方法。

输入:

■反汇编后的代码序列F

输出:

■基本块集合BlockList

方法:

首先定义断点地址,通过对遍历输入的代码序列,标注出序列之间的断点地 址,然后相邻断点地址之间的指令序列形成一个基本块;

调用CreateBlocks(File asmFile);

procedure PatternsMining(inputFile);

(1)BlockList←//BlockList为特征集合

(2)repeat

(3)if该地址中操作符是跳转指令:

a)标记该地址为断点

b)标记跳转的目标地址为断点

(4)if该地址是函数调用的入口地址

a)标记该地址为断点

(5)if该地址是断点地址:

a)将该地址和上一个断点地址之间的操作码作为基本块并加入BlockList (包含该地址但不包括上个断点地址中的操作码)

(6)until遍历反汇编操作码

(7)return BlockList;

软件基本块作为代表软件的特征类型,本方法采用布尔型数值来表达软件特 征。具体方法是统计软件样本中出现的所有n个基本块并编号分别为 (0,1,2,…,n-1),所有软件使用一个n维的布尔向量来表示,当软件包含编号 为i的基本块时,向量的第i+1为表示为1,否则表示为0。

随着软件数量的增加,代码中基本块的数量也急剧增多,以及由此表现的软 件特征数量也相应增加,因此需要对特征进行筛选,挑选出少量有效的软件特征。 在我们的特征筛选方法中,通过特征在文件中出现的频率来筛选特征。阈值设置 要综合考虑特征的区分度以及有效性,如果设置过大,表示在绝大多数程序中都 出现过,就不能很好的区分程序;如果设置过小,表示只会出现在极少程序中, 很难在其它程序找到这些序列,把它们作为特征时对于其它程序的检测很可能没 有用处。本方法保留Xi在区间[0.2×m,0.6×m]的软件特征,其中,Xi代表包 含第i个序列文件数量,m是所有样本文件中不同特征的数量。

机器学习过程中,我们使用了3种分类算法,分别是判定树算法C4.5、 Bagging和Random Forest算法。C4.5使用信息增益比率选择最优属性来划分数 据集,直到满足一定的条件。Bagging算法是用来提高分类器稳定性和精度的一 种元分类算法,它产生多个分类器并使用多数投票的方式决定最终的分类结果。 Random Forest通过引导过程建立多个分类器,每个分类器的学习样本是随机产 生的,Random Forest还将随机性加入到每棵树的生成过程之中。设样本共有Q 个属性,事先给定q<Q(q通常取Q的平方根),在选择每个结点的分裂属性 时,从全体特征中随机选择q个进行比较,选择其中分类结果较好的属性进行分 裂。

恶意软件的检测结果是和分类器的性能密切相关的,如果采用适当的分类器 评估方法,就可以使得分类器性能与未知病毒检测能力两者达到一致。我们将分 类器的true positive rate表示为病毒识别率,false positive rate表示为 虚警率,而overall accuracy表示为总体识别率。

恶意软件检测阶段则是根据特征筛选的结果提取性质未知软件的相应基本 块作为软件特征,利用建立好的分类器对其进行分类,分类结果即为检测结果。

最后,由表1给出本发明方法与传统的基于特征码模式、最新的局部信息挖 掘模式方法之间的简要对比与总结。

表1本发明方法与传统方法间的对比总结

下面对本发明的实施方式作进一步说明:

在表2中描述了本发明方法中采用的实验数据集的简要信息。该实验数据集 正常文件是实验室中收集的Windows XP sp3中的系统文件和应用程序;恶意软 件是从VXheaven网站下载的部分恶意软件。样本文件处理的过程包括反汇编, 特征提取,特征筛选,软件特征的数据使用arff类型文件保存。在本发明方法 验证过程采用10fold交叉验证,在测试过程中使用了不同的分类算法。

实验:

●具体操作:分别3种分类算法C4.5算法、RandomForest算法和Bagging 算法对数据进行10fold交叉测试,测试结果如表3所示。

表2实验数据描述

●结果分析:在所有的分类算法中,Random Forest算法得到的结果最好, 因此在检测恶意软件时推荐使用该算法。

表3实验结果描述

注:Detection Rate指恶意软件被正确识别的准确率;False Alarm Rate指 正常文件被当做恶意软件的误判率;Overall Accuracy指样本比例加权后的平 均值。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号