基于机器学习的恶意软件分类识别研究
2018-03-11张雨薇黄迎春
张雨薇 黄迎春
摘 要:恶意软件的日益增长是对网络世界最大的威胁,基于签名的检测对于恶意软件检测率较低,局限性大,因此提出基于机器学习的恶意软件检测技术来代替传统的签名检测。根据沙箱中提取软件的特征类型包括注册表和API函数调用,并量化数据,使用机器学习的模型对此数据进行分类识别,并取得了较好的分类效果。
关键词:恶意软件 检测技术 机器学习 特征类型
中图分类号:G64 文献标识码:A 文章编号:1672-3791(2018)10(c)-000-03
恶意软件对网络世界的威胁不断增长。根据Mcafee实验室的一份报告,Mcafee实验室引入了4000万新的恶意软件样本。2015年第一季度恶意软件库,带来了总数高达4亿的恶意软件[1]。基于签名检测技术的恶意软件检测依赖于在样本中发现的存储在数据库中的签名。然而,提取这些样本的劳动量很大,基于签名扫描技术正在努力跟上我们今天看到的恶意软件的快速增长。如果签名库更新的不及时,就不能够及时地检测恶意软件。因此研究采用机器学习模式的方法,通过对恶意软件的特征类型进行训练,学习恶意软件的特性,以增强对于恶意软件检测的精度和速度。
1 恶意软件检测方法描述
目前,对于恶意软件检测方面的研究主要有两种类型的恶意软件检测方法,即静态特性检测和动态特性测。静态特性检测是指在不运行程序的前提下,对恶意软件的执行文件的PE头文件或者特定字符串进行检测,如二进制n-gram和opcode序列;李阳对于PE文件的组织结构进行分析,来对木马病毒进行识别[2];陈勤等人对PE头文件进行分析,检测软件是否加壳[3];樊震等人通过分析PE文件结构中的异常值,运用朴素贝叶斯支持向量机等算法对进行病毒检测[4];相对于动态特性检测是指在运行程序的情况下,针对运行后产生的行为特征如DNS请求、访问文件和修改注册表,调用API函数等行为。屈亚鑫对于现有的程序行为捕获技术进行了研究,运用机器学习的分类算法对木马程序进行识别[5]。
苏璞睿提出一种基于进程行为的异常检测模型,来判断进程的行为是否异常[6];尽管静态特性检测恶意软件有它的优势,但仍然容易受到包装和加密的样本攻击。将机器学习模型应用于恶意软件的行为特性检测中,就不那么容易受到包装和加密的影响。
2 恶意软件分类识别
2.1 特征提取
对于恶意软件的特征主要选择了注册表,动态链接库,API函数调用特征,来对恶意软件进行识别。
2.1.1 注册表
大多数恶意软件都会在特定位置增加、修改特定的键值与更改文件的关联程序等方法在固定的位置来修改注冊表或通过注册为定时任务、利用注册表键值来实现自动运行,还有一些恶意程序会通过修改注册表键值,并造成任务管理器无法启动。
2.1.2 API函数调用
API是操作系统为应用程序提供的服务性接口,应用程序在完成文件读写、网络访问以及其他重要资源的访问时都会调用API。恶意程序在实现某个特征功能时同样会调用功能相似的API函数,因此通过提取API函数调用序列特征来识别恶意程序行为是一种有效的方法。
本文对注册表项和API函数这两类恶意软件特征分别来对恶意软件进行识别。所有这些数据都以文本的形式存在,在模型训练之前,首先将文本数据进行量化。
选择术语频率(TF)方法,它为每个术语分配唯一的ID,并计算每个文档中术语的出现。每个单项的发生频率被认为是一个特征。通过为每个文档创建一个特征向量,不在文档中的术语由0表示,并将所有的向量组合成一个矩阵,得到一个表示数据集中所有特征的矩阵。在数据集上应用术语频率方法,获得了19532个注册表特性和38096个API函数调用特性。
2.2 特征选择
在产生训练模型之前,必须减少特征提取阶段产生的特征数量,以避免过度拟合。为此,本文采用词频-逆文档频率算法 (TF-IDF)。TF-IDF重新权衡特征集,为所有文档中出现频率较低的词条赋予更高的权重。在大多数文档中出现的特性提供了较少的样本信息,因此从数据集中删除的安全性更高。IDF的计算结果如下:
(1)
其中是包含t的样本个数,N是样本的总数。在计算了一个词条的IDF分数之后,通过将词条频率乘以IDF分数,将权重赋给这个词条。通过为语料库中的每个词条分配一个权重,来创建模型分类的数据集。在训练的每个机器学习模型中测试不同数量的特征,从而找到训练特定模型时要选择的最优特征数。
2.3 模型训练
本文采用Scikit-learn中的机器学习方法进行特征选择和模型训练。
我们采用以下方法进行模型的分类训练。
(1)支持向量机。
(2)随机梯度下降。
(3)决策树。
(4)K近邻。
(5)伯努利朴素贝叶斯。
(6)多项式朴素贝叶斯。
以下是每个模型的简要描述。
(1)支持向量机:支持向量机(SVM)是有监督的机器学习模型,该模型是对空间中表示数据点的特征向量的训练。它用一个尽可能宽的超平面将数据点从不同的类中分离出来。新的数据点根据它们所属的超平面的侧面进行分类。在训练SVM时,我们需要确定的第一个参数是核类型,它以线性函数、多项式函数、径向基函数或sigmoid函数的形式出现。在多项式核的情况下,也测试了不同程度的多项式。最后,为了确定最佳的惩罚值,需要确定惩罚项的几个参数值。
(2)随机梯度下降:随机梯度下降(SGD)是一种用于最小化目标损失函数的优化方法。SGD的工作原理是通过模型参数调整最小化底层分类器的误差来工作。在Scikit学习中,SGD可以用来优化生成线性SVM的损失函数,用于逻辑回归的对数损失函数。
(3)决策树:决策树的分类器将特征映射到类标签,其中树的内部节点代表特征,树叶代表类标签。通过递归将特征集分割成更小的子集来学习树,直到每个子集代表一个类标签为止。当一个新的数据点被分类时,它从根节点开始,根据哪个特征最能代表数据点,沿着一条路径到其中一个叶子。
(4)k近邻:最简单的机器学习模型之一,k近邻(KNN)根据距离数据点最近的k个邻居的大多数类对新的数据点进行分类。k的值被用作KNN的输入,可以修改以产生更精确的分类器。此外,权重可以分配给邻居,因为相邻的邻居有较高的权重。
(5)伯努利朴素贝叶斯和多项式朴素贝叶斯:伯努利朴素贝叶斯(BernoulliNB)和多项式朴素贝叶斯(多项式)是两个相似的分类器,但是有着细微的差别。伯努利(BernoulliNB)用于描述伯努利分布之后的数据。贝叶斯定理应用于以出现频率为特征的多项式分布数据。BernoulliNB和多项式都应用贝叶斯定理,假设其特征是独立的。
3 分析与结果
本文通过VirusShare[7]和XHeaven[8]网站上采集的恶意软件样本,其中包括500个恶意样本和200个良性样本,并将样本感染主机,采用cuckoo[9]沙箱自动对样本进行分析。Cuckoo沙箱用VirusTotal[10]扫描每个样本,并将结果保存在报告中。通过恶意软件样本和良性软件的报告,我们采用不同的机器学习模型方法对其进行分类识别。其模型的分类识别的精确度如下所示:
(2)
如果TP是真正的阳性,TN是真实的否定,FP是假阳性,而FN是假阴性。此外,AUROC的计算方法是,首先绘制出所有正负片的真值,然后再计算出所产生的曲线下的面积。表1和表2分别总结了所有模型在准确性和AUROC评分的结果。
4 结语
恶意软件对于当前世界存在巨大的威胁,每年会产生大概4000万个恶意软件,基于签名的静态检测技术已经不能适应时代的步伐,本文采用内存中的恶意软件的动态行为特征,采用机器学习的模型对数据进行训练,识别,并取得了较好的实验结果。
参考文献
[1] McAfee Labs,“Threat report,”[EB/OL].Available:http://www.mcafee.com/us/resources/reports/rp-quarterly-threat-q1-2015.pdf.
[2] 李阳.基于PE文件的加壳检测与木马识别技术[D].广西大学,2014.
[3] 屈亚鑫.反木马系统中程序行为分析关键技术研究与实现[D].北京邮电大学,2014.
[4] 陈勤,黄剑军,褚一平,等.基于带权欧拉距离的PE文件壳检测技术[J].计算机工程与科学,2010,32(7):1-3,7.
[5] 樊震,杨秋翔.基于PE文件结构异常的未知病毒检测[J].计算机技术与发展,2009,19(10):160-163.
[6] 蘇璞睿,冯登国.基于进程行为的异常检测模型[J].电子学报,2006(10):1809-1811.
[7] Virus Share[EB/OL].http://www.virusshare.com.
[8] XHeaven[EB/OL].http://www.XHeavean.com.
[9] Cuckoo[EB/OL].http://www.cuckoo.com.
[10] virustotal在线沙箱[EB/OL].http://www.virustotal.com.