APP下载

基于随机森林的恶意代码检测

2018-06-29戴逸辉殷旭东

网络空间安全 2018年2期
关键词:随机森林机器学习

戴逸辉 殷旭东

摘 要:面对恶意代码高速增长、变种繁多的现状,使用了基于随机森林的恶意代码分类方法。通过将IDA反汇编工具生成的ASM文件,利用灰度共生矩阵提取ASM恶意代码灰度图的纹理特征,通过ASM 文件OpCode 序列的3-gram特征,再结合随机森林算法对特征进行分类。对9种恶意代码家族的样本进行实验认证,获得混淆矩阵,分析随机森林的分类效果,并与朴素贝叶斯算法和K近邻分类算法进行比较。实验结果表明:随机森林算法是一个优秀的用于恶意代码分类检测的算法,上述两类特征抽取的方法均能有效地进行恶意代码的检测工作,且将两种特征的随机森林结合时,其分类效果更佳。

关键词:随机森林;恶意代码检测;多种特征;机器学习

中图分类号:TP391 文献标识码:A

Malicious code detection based on random forest

Abstract: A method in the detection of malicious code based on random forest is used in this paper in the face of the rapid growth and variations of malicious code. The texture features of ASM code grayscale map through GLCM and 3-gram features through ASM OpCode list were obtained by using the ASM files generated by the IDA disassembler tool. Then using random forest algorithm and these features, malicious code can be classified. The samples of nine malicious code families were used for the experiment to get the confusion matrix, analyze the classification effect of random forest .The random forest is also compared with the Naive Bayes and the k-Nearest Neighbour in this experiment. The results show that the random forest algorithm is an excellent algorithm for classification detection of malicious code. Both of two feature extraction methods above can works effectively, and even works better when they are combined.

Key words: random forest; malicious code detection; a variety of features; machine learning

1 引言

随着技术的发展,恶意代码的种类、数量、规模在不断增加。据国家计算机网络应急技术处理协调中心的监测数据[1],2017年4月,境内感染网络病毒的终端数为近144万个,较上月增长12.7%;在捕获的新增网络病毒中,按名称统计新增10个;按恶意代码家族统计新增3个,较上月增长 50.0%;境内8978万余个用户感染移动互联网恶意程序,恶意程序累计传播次数75万余次。

虽然恶意代码的规模不断增大,但是大多数是在传播过程中为了逃过查杀或者是黑客通过关键模块重用、自動化工具等手段产生的变种[2],因此有很大的内连性和相似性。采用随机森林算法,能够克服数据规模大的障碍。此外,通过对庞大数据集的训练对恶意代码进行分类,能够判断某个恶意代码属于已知种类或是新种类,从而可采取相应的安全措施,是一种值得尝试的方法。

2 相关研究

目前,已经有很多的将机器学习用于恶意代码的研究,并且已由传统的PC平台,引申至Android平台的恶意代码的研究[3]。目前,机器学习算法例如随机森林算法、贝叶斯算法、神经网络算法、K近邻算法、SVM算法[4]等,已被大量应用于恶意代码的分类[5]。常见的特征工程为基于恶意代码图像的纹理特征,基于语义的如Ngram特征。

3 关键算法与技术

3.1决策树与随机森林

决策树是一种树形的结构,它的一个非叶子节点表示一次对于某个属性的判断,它所对应的的分支表示了一个判断的结果输出,叶节点表示了一个特定的类别。决策树是一个预测模型,它代表了特征与类别之间的映射关系。根据对分裂规则,建树,去枝的不同处理,决策树的实现算法有ID3、C4.5、CART等。

随机森林就是以随机的方式建立的一个包含了多棵决策树的分类器,当有一个输入时,多棵树分别对其进行判断,最后经过结合处理后得到最终的分类结果。随机森林对于很多种的资料,可以产生高准确度的分类器,减少泛化和误差,且学习过程是很快的[6]。随机森林结合了Breimans的“Bootstrap aggregating”想法和Ho的“Random Subspace Method”想法,随机性体现在样本的随机性与特征的随机性上。前者有利于保证每棵树的数据的侧重不一样,后者有利于样本的分裂的多样性。

3.2恶意代码图像

恶意代码图像的概念,最早是由Nataraj等[7] 人2011年提出的,将恶意代码的二进制文件转换成灰度图,再结合GIST特征来进行聚类。由于采用可视化的思维,此后不断有学者在此基础上进行研究,并且采用的原数据形式与图像形式各异。

3.3 OpCode N-gram

2008年,Moskovitch等[8]人提出用Opcode的形式来概括表达可执行文件。对恶意代码文件进行反汇编,就可以得到恶意代码的汇编代码,通常一条指令的第一部分就是Opcode,它简单地表明了一个基本操作。

N-gram是大词汇连续语音识别中常用的一种语言模型,该模型基于这样一种假设,第n个词的出现只与前面n-1个词相关,而与其它任何词都不相关。整句的概率就是各个词出现概率的乘积,这些概率可以通过直接从语料中统计n个词同时出现的次数得到。

4 实验过程

4.1检测模型

本系统力求在相对较少的数据规模(1800)下,能够得到恶意代码的ASM灰度图,并利用ASM文件的OpCode 3-gram特征和灰度图的纹理特征,结合随机森林算法进行分类,并对结果进行分析。本文使用的代码功能块,分析流程,重要算法如图1所示。

4.2实验数据

本文的数据来自Microsoft Malware Classification Challenge。恶意代码一共有九类,包括Ramnit、Lollipop、Kelihos_ver3、Vundo、Simda、Tracur、Kelihos_ver1、Obfuscator.ACY、Gatak。本文在所给的解压184G的测试数据中,抽取1800条数据用于进行实验,包括60%用于训练和40%用于测试。

4.3实验环境

本文的所有编码及代码运行均使用Python 2.7.6 版本完成,实验环境虚拟机OS为64位 ubuntu 3.13.0-24-generic,内存2G,处理器为Intel Core 4210H。本文的一些数据分析工作在OS为win7的PC机上完成。

4.4基于ASM恶意代码图像的特征提取

恶意代码图像需要多少的像素,是个值得深入研究和交叉验证的研究点,本文的侧重点不在此,为了兼顾图像的相对完整性和减少计算量,本文采取了10000个像素点。取ASM文件的前10000个字节,每个字节范围在00~FF之间,对应灰度图的0~255取值,先得到像素点的CSV格式文件。然后得到100×100的矩阵,最后将矩阵转化成灰度图。

对于纹理特征的提取,本文采用灰度共生矩阵。灰度共生矩阵是一种通过研究灰度的空间相关特性来描述纹理的常用方法[9]。最先由Haralick等人提出了用它来描述纹理特征。若是不对灰度图的级数做处理,则本文的100行100列的图像求一次的基本运算量为2562×100×100,为了加快运算速度,则将灰度级压缩为0~7 八级。

这样的话得到的灰度共生矩阵为8×8。本文计算时调用的是scikit-image库的greycomatrix()函數,其中distances参数设置为[1-3],angles设置为[0, np.pi/4, np.pi/2, 3×np.pi/4],则对于同一个灰度图,计算了不同偏移距离和角度的3×4共12个灰度共生矩阵。

之后对每个矩阵调用greycoprops()函数来计算对比度、相异性、同质性、能量、自相关的特征值写入CSV文件。至此,基于ASM恶意代码图像的特征提取完毕。

4.5 基于OpCode N-gram的特征提取

先将ASM通过正则表达式的提取,获取OpCode序列。再提取出现次数超过500的OpCode 3-gram特征,写入CSV文件。之所以采取3-gram,是因为高于四元的用的很少,训练它需要更庞大的语料,而且数据稀疏严重,时间复杂度高,精度却提高的不多。

4.6随机森林算法实现

本文的随机森林算法实现采用的是Python第三方库scikit-learn中的相关函数。随机森林算法几乎不需要输入的准备,它的实现方法的参数设置初始值也都是合理的。对于RandomForestClassifier()函数:n_jobs统一设置为-1,充分利用CPU性能,修改n_estimators的值来对决策树的棵树进行设置,其他均采用默认值。

本文将数据集的60 %用于训练,40%用于测试。用sklearn.metrics下的confusion_matrix()来获得混淆矩阵。用到的分类算法评价指标:准确率(Accuracy)、精确率(Precision)、召回率(Recall)、f1值(F1-score),四项指标的取值均为0~1。采用sklearn.metrics下的classification_report()函数获取评价指标数据。

5 实验结果与分析

5.1基于恶意代码图像的随机森林

根据本文对于参数设置,当n_estimators设置为500时,得到time=45,accuracy=0.96448,混淆矩阵和评价指标如图3所示。

由图3可知:一类实例共有104例,预测正确的有88例,错误预测成三类的有11例,错误预测成四、五、六类的各有3、1、1个;二类预测正确的有84例,无预测错误,以此类推。

上述表明利用随机森林算法和灰度共生矩阵获得的特征值,能有效地对恶意代码进行分类 。

此外,为了探寻决策树棵树变化时,准确率的一些变化,改变n_estimators的值。令n_estimators 分别取不同的值时得到的结果如表2所示。可以看出,当决策树棵树增加时,计算对应的时间增加。当决策树的棵树在较小值时,随着棵树的增加,准确度方面,准确度整体呈现上升趋势。当决策树棵树较高时,准确度不再继续增加而是稳定在0.97左右。从而可以提出结论:随机森林中决策树的增加,虽然可以提高结果的准确率,但当棵树超过临界值后,准确率稳定不再增加。

5.2 基于OpCode 3-gram的随机森林

同样,参照文中的参数设置方法,设置n_estimators为500,得到time=3,accuracy=0.93611,平均的精确率为0.95,召回率和f1值都为0.94。对比可以得出结论基于OpCode 3-gram的随机森林略差于基于恶意代码图像灰度共生矩阵的特征值的随机森林,但是其同样也能有效的对恶意代码进行分类 。

5.3使用两类特征的随机森林

将以上的两种特征抽取方法抽取的特征值结合使用,同样设置n_estimators为500。

如表3所示,每项数据分别为单独使用灰度共生矩阵的特征值、单独使用Opcode 3-gram特征、结合使用上述两类特征。

可以得出结论,结合两类特征值的随机森林在本文使用的各项指标上均优于使用单类的特征值的随机森林。

5.4 与朴素贝叶斯算法和K近邻分类算法的简单比较

本文,对于两种算法的分类器的实现同样采用python的scikit-learn包。分别采用 sklearn.naive_bayes. GaussianNB()和 sklearn.neighbors.KNeighborsClassifier()函数实现。参数均为默认。采用的特征为OpCode 3-gram。结果汇总成表4所示。

由表可知,在各项的评价指标上,均呈现出随机森林算法>K近邻分类算法>朴素贝叶斯算法。可以得出结论,在本文的数据规模和特征选择上,随机森林算法要优于K近邻分类算法和朴素贝叶斯算法。

6 结束语

本文通过将恶意代码的ASM文件转化成100×100的灰度图,利用灰度共生矩阵提取图像的纹理特征,通过在ASM文件中提取OpCode序列,提取3-gram特征,并结合随机森林算法对特征进行分类。对九类恶意代码样本进行实验验证。结果表明,上述的两类特征值抽取方法结合随机森林算法均可以有效的进行恶意代码的分类,在本文选取的准确率、精确率、召回率、f1值的评价指标上随机森林算法相优于其他分类K近邻和朴素贝叶斯。下一步工作,优化特征值抽取的方法,获取更大规模的数据集进行训练,通过调参优化分类的过程,取得效率和结果的平衡,并将其运用到现实的恶意代码的分类工作中。

基金项目:

2016年教育部产学合作协同育人项目(项目编号:201602024005)。

参考文献

[1] CNCERT互联网安全威胁报告(2017年04月)[EB/OL].http://www.cac.gov.cn/2017-06/23/c_1121197479.htm,2017-6-23/2018-3-12.

[2] 米兰·黑娜亚提,艾克帕尔·艾合买提,涂伟沪.基于信息安全的计算机主动防御反病毒技术研究[J]. 网络空间安全, 2016,7(07):40-42.

[3] 童振飞. Android恶意软件静态检测方案的研究[D].南京邮电大学, 2012.

[4] 苗发彪,王晴.基于支持向量机的Android恶意软件静态检测技术的研究[J].网络空间安全,2016,7(05):34-36.

[5] 张小康.基于数据挖掘和机器学习的恶意代码检测技术研究[D].中国科学技术大学, 2009.

[6] 李欣海.随机森林模型在分类与回归分析中的应用[J].应用昆虫学报, 2013, 50(4):1190-1197.

[7] Nataraj L, Karthikeyan S, Jacob G, et al. Malware images:visualization and automatic classification[C]// International Symposium on Visualization for Cyber Security. ACM, 2011:1-7.

[8] Moskovitch R, Feher C, Tzachar N, et al. Unknown Malcode Detection Using OPCODE Representation[C]// Intelligence and Security Informatics, First European Conference, EuroISI 2008, Esbjerg, Denmark, December 3-5, 2008. Proceedings. DBLP, 2008:204-215.

[9] 高程程,惠曉威.基于灰度共生矩阵的纹理特征提取[J].计算机系统应用, 2010, 19(6):195-198.

猜你喜欢

随机森林机器学习
随机森林在棉蚜虫害等级预测中的应用
基于二次随机森林的不平衡数据分类算法
拱坝变形监测预报的随机森林模型及应用
基于词典与机器学习的中文微博情感分析
基于网络搜索数据的平遥旅游客流量预测分析
前缀字母为特征在维吾尔语文本情感分类中的研究
基于随机森林算法的飞机发动机故障诊断方法的研究
基于支持向量机的金融数据分析研究
机器学习理论在高中自主学习中的应用
基于随机森林算法的B2B客户分级系统的设计