一种基于变长指令序列与粗糙集属性约简的恶意代码检测技术
2013-08-22冯本慧
冯本慧
(湖南工学院,湖南 衡阳 421002)
0 引言
随着计算机的普及和Internet的发展,各种类型的恶意代码,如木马、蠕虫、病毒、僵尸程序等出现和传播的速度与周期也越来越快,根据国家互联网应急中心的7月底安全周报显示[1],国内感染恶意代码的主机数量达到了64.9万,被篡改的网站达到了5875,恶意代码的防范形式非常的严峻。
传统的恶意代码检测技术主要有基于特征码的检测方法与启发式的检测方法,基于特征码的检测方法过于依赖特征库,无法检测出未知恶意代码;启发的检测方法又过于依赖专家的经验,检测效率低且容易误报,因此亟需一种新的恶意代码检测技术,解决传统检测技术的缺陷,基于数据挖掘的检测技术属于其中之一,该技术相对传统的检测技术而言,具有快速、智能化的特点,无须依赖专家经验并且对未知恶意代码具有很好的检测能力。本文在研究当前基于数据挖掘的恶意代码检测技术基础之上,提出了一种基于变长指令序列与粗糙集属性约简的恶意代码检测技术。
1 相关工作
首次将数据挖掘技术应用到恶意代码检测中的学者当属Schultz[2],他利用从PE文件中获得的字符串序列、字节序列、导入表中API调用函数作为特征,利用PIPPER、朴素贝叶斯、多重朴素贝叶斯算法进行分类学习,在实验数据集上取得了很高的检测精度,远高于当时的商业防病毒软件。沿着Schultz的开拓性工作,基于数据挖掘的恶意代码检测技术成为恶意代码检测领域研究的热点,研究的重点主要集中在两个方面:(1)特征的表示与选择;(2)分类算法的选择。其中常用的恶意代码特征包括:文件结构特征、字节特征、指令特征等,分类算法主要采用贝叶斯、决策树、支持向量机等算法。本文主要关注于恶意代码的指令特征,由于恶意代码与正常文件其行为模式的不同,则其汇编指令也会存在区别,Bilar[3]通过研究证实了这一点,他发现恶意代码与正常文件之间的某些指令的统计特征存在很大的区别,因此指令特征可以作为区分恶意代码与正常文件的特征之一。基于此思想,国外的Santos[4]利用指令序列作为特征进行检测,由于采用了n-gram滑动窗口技术,最终获得的特征维数非常高,于是他利用互信息进行降维,最后利用K邻近、决策树、支持向量机算法进行分类检测,实验取得的很高的检测精度。国内的张健飞[5]等也是利用指令特征进行检测,与Santos不同的是,他采用的是变长的指令序列作为特征,并且采用了一种分家族的逐层精华的特征选择方法,他最后通过实验指出,该方法具有很好的检测迷惑代码的能力。
2 检测技术的创新点与具体步骤
通过以上的研究,本文发现,Santos的检测方式,由于获取的是所有指令所构成的指令序列,因此特征的规模非常大,不便于后续的学习,同时采用了定长的方式,又可能出现分割特征的问题,而张健飞的检测方式,虽然考虑到了指令特征的规模与特征分割的问题,采用了变长指令序列并使用层次化的特征选择方式,但其特征选择方式过于复杂,因此本文提出了一种基于变长指令序列与粗糙集属性约简的恶意代码检测技术,其主要的创新点如下:
(1)采用变长的常用指令序列作为特征。变长的方式可以避免分割特征的问题,同时只考虑常用的汇编指令即所构成的指令序列,可以有效的降低最终获得的特征规模。
(2)采用粗糙集理论进行特征约简。由于粗糙集理论具有在不改变分类能力的前提下有效删除冗余特征的优势,因此将获得特征再利用粗糙集理论进行特征约简,排除冗余特征的干扰,从而大大加快后续学习算法的分类时间。
本文提出的检测技术的步骤主要分为两个阶段。第一个阶段:训练阶段;第二个阶段,检测阶段。训练阶段主要完成特征的获取与约简并且完成分类器的训练。检测阶段,主要利用已获得的分类器对测试样本进行分类并评估最终的分类结果。
3 实验设置及结果分析
3.1 实验设置
本文的正常文件从干净的XP系统的系统目录获得,共计308个样本,恶意代码文件来自网络收集的86个PE型的恶意代码,然后将获得的样本分为2等份,一份做训练集,一份做测试集。实验平台为一台安装XP系统的机器,CPU为AMD Athlon 64 X2,内存为3G。实验工具包括反汇编工具IDA Pro,数据挖掘平台Weka。指令序列主要关注常用的 13 个指令即 mov、push、call、pop、cmp、jz、lea、test、jmp、add、jnz、retn、xor所构成的序列,其长度基于 Moskovitch[6]的研究本文限定为2~3,粗糙集属性约简算法采用启发式的约简算法,具体算法可参考文献[7],由于本文获得样本规模不大,分类算法采用在小样本上表现很好的支持向量机算法。
3.2 结果分析
基于本文的特征提取与处理方法,在训练集上获得的初始特征维数只有1150维,约简后的特征维数仅8维,其原因在于,由于只考虑了常用的指令所构成的指令序列,而忽略了其它的指令,降低了特征的规模,因此获得的初始特征维数并不是很高,然后再次利用粗糙集理论进行特征约简后,删除了其中大量的冗余特征,特征降维幅度非常明显,仅仅剩余8维,维数非常低,这样会大大降低后续学习算法的分类时间。
所有的训练集的样本经过特征处理之后,然后利用支持向量机算法训练分类器,最后在测试集上进行分类测试,其分类精度与漏报率如表1所示,
表1 不同指令序列的检测精度与漏报率
从表1可以看出,本文采用的变长指令序列的方式相对定长的方式而言其分类精度更高而且漏报率更低,因此在实际应用中更具有应用价值。
4 结论
本文在研究现有的基于数据挖掘的恶意代码检测技术基础之上,提出了一种基于变长指令序列与粗糙集属性约简的恶意代码检测技术,该技术只考虑常用的指令特征构成的序列并利用粗糙集理论进行属性约简,因此最终获得的序列特征的规模维数非常低,仅仅只有8维,同时本文采用了变长的指令序列模式,降低了分割特征的风险,相对定长的指令序列特征而言,其分类精度更高,漏报率也相对更低。
[1]国家互联网应急响应中心.国家互联网应急中心的7月底安全周报[EB/OL].[2012-7-22].http://www.cert.org.cn/publish/main/upload/File/20130731CNCERT30.pdf.
[2]Schultz M G,Eskin E,Zadoc E.Data Mining Methods for Detection of New Malicious Executables[C]//Proceedings of the IEEE Symposium On Security And Privacy.Oakland:IEEE,2001,38-49.
[3]Bilar D.Opcodes as predictor for malware[J].International Journal of Electronic Security and Digital Forensics,2007,1(2):156-168.
[4]Santos I,Brezo F,Nieves J,et al.Idea:Opcode-sequence-based malware detection[M]//Engineering Secure Software and Systems.Springer Berlin Heidelberg,2010:35-43.
[5]张健飞,陈黎飞,郭躬德.检测迷惑恶意代码的层次化特征选择方法[J].计算机应用,2012,32(10):2761-2767.
[6]Moskovitch R,Feher C,Tzachar N,et al.Unknown Malcode Detection Using Opcode Representation[M].Intelligence and Security Informatics.Springer Berlin Heidelberg,2008:204-215.
[7]葛浩,李龙澍,杨传健.改进的快速属性约简算法[J].小型微型计算机系统,2009,30(2):308-312.