APP下载

基于分层语义认知的恶意代码检测方法研究

2012-08-10冯芳梅邵长庚

通信技术 2012年5期
关键词:调用贝叶斯分类器

冯芳梅,邵长庚,刘 丹

(电子科技大学 电子科学技术研究院,四川 成都 611731)

0 引言

近年来,计算机在人们生产、生活中扮演的角色也越来越关键,同时也容易遭受病毒、木马、恶意代码等多个方面的威胁[1],造成重大损失。利益趋向导致恶意代码在数量和种类上呈现出一种爆发性增长趋势,面对越来越多的恶意代码变种和新型恶意代码的出现,传统的恶意代码检测技术(特征码匹配等)已经显得力不从心,并且逐渐暴露出越来越多的问题。各个安全公司、研究机构在系统资源占用率与检测精准率权衡中不断改进检测方式,其它领域各种高级技术被应用到恶意代码检测技术中[2],并且呈现出日益白炽化趋势。基于语义方式的恶意代码检测技术属于其中一种,也在近年来得到不断改进,该方面相关技术研究近年来一度成为众多安全厂商和研究机构关注的热点。

本文首先对相关的最新技术进行了调研,在此基础上提出了一种基于分层语义认知的恶意代码智能检测方法,该方法采用了动态静态分析结合、分层语义归一化认知以及朴素贝叶斯分类器等技术进行检测,具有高检测率,低系统开销,抗混淆加密等特点。对于目前的绝大多数代码加壳、混淆方式有很强的抗干扰性,尤其对于常见的恶意代码检测绕过方式有非常强的针对性。在检测效率与精准率的权衡方面,结合了文件结构特征快速检测技术,有效降低了平均检测时间。

1 相关研究

Christodorescu M 提出了代码指令级的程序语义抽象方法[3],用于对抗代码混淆技术。Predaetal M在文献[4]中提出了形式化的语义框架用于恶意代码检测。北京大学的李佳静,梁知音等人在文献[5]中提出了一种基于语义的恶意行为分析方法,对基于函数调用的攻击进行完整刻画,支持流敏感、上下文敏感且路径敏感的函数间分析。由于相同语义函数调用具有多样性,以上方法的普适度不高。

Martignoni L在文献[6]提出了一种从系统调用的先后顺序着手,基于分层调用的检测框架,由于该方法采用特定的系统调用集合描述行为,因此会被采用多进程技术以及相同语义的系统调用所绕过。

黄茜等在文献[7]中提出一种层次化的恶意代码行为分析方法,首先根据程序运行时的系统调用序列获取行为信息,然后分析其行为意图并作危害性评估。以上方法的特征均过于粗糙,由于有价值的API序列往往只占API集合的很小一部分,API序列提取的结果只是一些简易的语法信息,因此可以通过构造相同语义不同顺序的API序列绕过检测。

陶芬等在文献[8]中提出一种静态建模、动态建模和混合建模结合的方式对软件行为进行建模,此种方式可以在一定程度上反映程序的行为特性,但是由于系统开销过高和实时性较差,无法直接应用于恶意代码检测相关技术。

综上所述,现有的恶意代码检测技术所采用的行为描述方法不能从根本上对恶意行为进行快速的抽象和准确的表述[9-10]。因此需要一种具有抽象理解能力,抗混淆能力强,系统开销尽量低的检测方式解决此问题,而本文提出的基于分层语认知的检测方法正满足了以上要求。

2 恶意代码检测框架

基于分层语义认知的恶意代码检测方法吸取了众多恶意代码检测技术的优点,通过虚拟化动态捕获环境来捕获行为数据,再对训练得出的语义认知数据逐层进行行为特征的元归一化,行为特征向量提取,最后使用朴素贝叶斯(NB,Naive Bayesian)分类器进行恶意代码的判定,此种方法能够有效地对抗恶意代码的混淆、变形技术,具有高检测率,低误报率的特点。

检测框架如图1所示,所有检测的原始数据来源于最底层的虚拟化动态捕获环境,经过归一化原始特征提取层、行为特征语法向量提取层、NB分类断言认知层的逐层抽象,最终对程序的恶意行为进行判定。检测流程主要分为语义行为库的构建和恶意代码检测两个阶段,前者是后者的先行步骤,两者依赖同样的检测框架与检测算法。语义行为库的构建阶段通过对现有已知的恶意代码进行特征提取、抽象及NB分类器训练,最终输出每种恶意行为的相关检测指标;恶意代码的检测阶段从同样的捕获环境获取认知数据,再通过逐层抽象、认知得到相关的认知向量,最后通过NB分类器所检测程序的恶意性进行判定。

图1 基于分层语义认知的恶意代码检测框架

2.1 虚拟化捕获环境框架

虚拟化捕获环境的总体结构可以用图 2来表示,该捕获环境通过用户态系统调用挂钩实现了用户态系统调用的捕获,通过内核态驱动实现了系统底层资源访问的捕获与重定向。

借助以上2种方法,我们建立了一个与主机真实环境隔离的捕获环境,该捕获环境为后期分析检测提供了丰富、可靠的数据来源。

图2 虚拟化捕获环境框架

2.2 归一化元特征提取

归一化元特征提取层作为捕获到数据的第一层,主要完成对原始数据的归一化分类操作,原始数据在本层经过的处理方式分为3种:对于系统API调用的归一化元特征提取、对于中断调用的归一化元特征提取以及对于文件结构异常的归一化元特征提取。

2.2.1 系统调用和中断的归一化

系统调用和中断调用的归一化是提取行为的关键,相同功能的系统调用和中断在此层被合并归一,以降低后期检测的复杂性以及向量维度。

针对同一种系统调用,操作系统通常会提供几组不同的调用方式,以便于用户使用。在基于行为语义的检测中,此类调用往往具有相同的含义,因此,将原始系统调用归一化,能有效降低后期检测运算的复杂度。如下面一组系统调用:若该组调用对系统资源造成的改变相同,该组系统调用可以归一化为:

2.2.2 文件结构异常的归一化

文件结构异常归一化的目的在于提高检测效率的同时降低系统开销,通过文件异常特征检查判断恶意性,尽量减少开销较大的行为分析。

正常情况下,各种编译器编译出的文件具有相同的特征,并且会严格遵守标准的文件结构规范,但是,一些恶意程序会通过修改文件结构来隐藏其恶意特征,如常见的通过修改PE文件导入表进行系统API调用的隐藏,以及向可执行文件末尾附加其它可执行文件进行文件的捆绑等。这些情况,实现效果相同,但是实现方式不同,所以要提取其行为特征,必然要进行归一化处理。特征使用以下形式定义:

捆绑型文件可以用归一化的方式抽象:

利用文件异常特征的归一化提取,能有效提高检测效率,对使用常见黑客工具所产生的变种,具有很高的识别率。

2.3 行为特征语法向量提取

行为特征向量语法特征提取层利用提取的归一化元特征,通过抽象与认知形成行为语法向量。抽象与认知过程包括两部分,元特征路径匹配与正负向量集差运算。

元特征路径匹配可以用图3表示。

元特征利用语义认知器,通过对照行为的匹配规则,对已经获取的元数据进行行为认知,通过类似于堆栈的结构暂存匹配信息,遇到与规则相符的归一化元特征则将其压入匹配堆栈,其余元特征则简单的跳过,经过行为认知器的匹配,将形成目标程序的N元行为特征向量Behavior[N],该行为向量除了包括所关心的行为特征元之外,还存有对应特征的频率统计信息。此时得到的行为特征向量无法区分一些与恶意行为类似的软件,若将恶意代码的特征向量定义为正向量(P set),将易混淆正常程序行为特征向量定义为负向量(N set),进行P-N 差集运算之后便可以得到低误报率的相对行为向量集(R set)。

图 3 元特征路径匹配示意

2.4 NB-分类器断言认知层

NB分类器属于贝叶斯分类器的一种,是一种简单有效的概率分类方法,在某些领域中表现优秀。贝叶斯分类器是提供推理的一种概率手段,它的基石是贝叶斯公式:

假设恶意样本按照家族分为C1,C2,…,Cn几类,n为分类总数,待测程序的某种可疑行为集合用向量 F表示F=(F1,F2,…,Fn),其中每个元素代表特征库中对应的特征在待测程序中是否存在(0不存在,1存在)。对给定样本特征集进行分类,即计算出 P(C/F)。按照贝叶斯分类方法,首先统计:

因为特征向量F中又包含有分量F1,F2,…, Fn,故上式可以写成:

最后根据P(C/F)的最大值来确定F最大可能的类。即待测样本S的类别CS为:

实际应用中断言认知层要判断多种可疑行为,因此使用了多个贝叶斯分类器,把样本的特征向量分成多个子集分别计算,然后用一个多重贝叶斯算法(MNB)对多个朴素贝叶斯分类器获得的结果进行综合求值,通过训练样本得出标准语义向量特征库,检测时再通过特征库对目标程序进行匹配,判定程序是否为恶意程序。其主要依据为以下公式:

其中 NBi是朴素贝叶斯分类器,|NB|是数目,MNB代表多重联合贝叶斯分类器。PNBi(V|F)和 PNBi(V)是给定分类的先验概率。

3 实验与分析

为检验上述理论的正确性与可行性,验证阶段进行了大量的实验与修正,实验所涉及的30 000个真实病毒样本绝大部分来自VX Heavens(http://vx.netlux.org/),剩余部分来自于实验室前期相关项目的实验样本积累。实验在30 000个样本中采用随机抽取样本集的方式进行交叉验证,然后使用训练结果对一个随机的样本集进行检测,该样本集包括了随机抽取的恶意程序和随机抽取的正常程序。

3.1 语义行为库的构建

行为库中各项行为标准的制定主要来源于实验室前期对于恶意代码检测的研究基础,以及互联网现有资源的利用,贝叶斯分类器中对于每种类型恶意代码检测参数,通过对每种类别选取 300到 500个典型恶意程序样本训练所得出。

3.2 方法验证与分析

实验采取对样本库随机抽样获取样本,分别进行了不同种类恶意样本检测实验、变种检测实验和正常程序检测实验3种实验。恶意样本检测实验直接从在恶意代码样本库中进行随机抽样,目的在于测试对恶意程序的检测能力;变种检测实验抽样范围限定在同一恶意程序家族中,目的在于测试对变种恶意程序的检测能力;最后的正常程序测试,采样限定在非恶意程序,目的在于测试此方案的误报率。抽样情况参见表1所示。

从检测结果对分层语义认知的恶意代码检测方法可以得出以下结论:①该方法对于恶意代码具有较高的检测正确率;②该方法对于变种恶意代码检测更为有效;③该方法对于正常程序还存在少量的错误检测。

表1 测试样本随机抽取结果

测试结果如图4所示,测试结果中对于随机抽取的2 000个恶意样本检测率为96.85%,对于变种样本的检测率为98.00%,对于1 000个正常程序的误报率为0.50%。

经过对样本监测出错原因的分析,得出了未检测到恶意程序是由于规则库的提取不全造成的,规则库有待于完善,另外虽然P-N差集运算大幅降低了正常程序的误报率,但是仍然对部分与恶意程序有相同行为的正常程序缺乏辨别能力。

图4 抽样测试结果

4 结语

本文提出了一种归一化的分层语义恶意代码检测方法,并通过实验证明了此种检测方式具有高检测率,低误报率,并且能够有效对抗恶意代码的混淆、加密技术,尤其对恶意代码变种具有很高的检测率。实验同时也暴露出本系统行为库规则的不全面性,在今后的研究中为了提高检测准确率需要对行为规则库进一步完善与维护。

[1] 陈颂,王光伟,刘欣宇,等.信息系统安全风险评估研究[J]. 通信技术,2012,45(01):128-130.

[2] 许学辉,吴静. 基于流的流媒体语义提取技术研究[J].通信技术,2010,43(12):140-143.

[3] MIHAI C, SOMESH J, SANJIT S.A Semantics-Aware Malware Detection[C].USA: Proceedings - IEEE Symposium on Security and Privacy, 2005: 32-46.

[4] DALLA P M, MIHAI CHRISTODORESCU, SAUMYA DEBRAY. A Semantics-Based Approach to Malware Detection[C].[s.l.]:POPL,2007:17-19.

[5] 李佳静,梁知音,韦韬,等. 一种基于语义的恶意行为分析方法[J]. 北京大学学报:自然科学版, 2008,44(04):537-542.

[6] MARTIGNONI, LORENZO. A Layered Architecture for Detecting Malicious Behaviors.USA Springer-varlay,2008: 78-97.

[7] 黄茜,武东英,孙晓妍. 一种层次化的恶意代码行为分析方法[J]. 计算机应用, 2010,(04):1048-1052.

[8] 陶芬,尹芷仪,傅建明. 基于系统调用的软件行为模型[J]. 计算机科学, 2010,(04):151-157.

[9] 陈志云,薛质. 基于 Win32 API调用监控的恶意代码检测技术研究[J]. 信息安全与通信保密, 2009,(07):73-75.

[10] 周瑞丽,潘剑锋,谭小彬,等. 应用专家系统开发Windows恶意代码检测系统的研究[J]. 信息安全与通信保密, 2009(09):77-79,82.

猜你喜欢

调用贝叶斯分类器
基于贝叶斯解释回应被告人讲述的故事
核电项目物项调用管理的应用研究
系统虚拟化环境下客户机系统调用信息捕获与分析①
基于差异性测度的遥感自适应分类器选择
基于实例的强分类器快速集成方法
基于贝叶斯估计的轨道占用识别方法
基于互信息的贝叶斯网络结构学习
基于层次化分类器的遥感图像飞机目标检测
一种基于置换的组合分类器剪枝方法
IIRCT下负二项分布参数多变点的贝叶斯估计