基于集成学习的恶意代码检测方法研究
2016-02-13李莹珠
李莹珠
(北京邮电大学网络空间安全学院 北京 100876)
基于集成学习的恶意代码检测方法研究
李莹珠
(北京邮电大学网络空间安全学院 北京 100876)
网络时代带来了生活上的种种便利,也带来了恶意代码的爆发式增长。报告指出,恶意代码的数量和种类都在快速增长,其中,恶意代码种类的增长对恶意代码检测的影响影响尤为突出。使用分类算法进行恶意代码检测是现在的一个热门研究方向,而繁多的恶意代码种类会极大地削弱分类效果。鉴于这种情况,本文提出了一种基于集成学习的恶意代码检测方法,该方法首先用DBScan算法对训练样本进行聚类,再用聚类得到的各个簇训练SVM分类器,对未知样本进行检测时,首先将待检测样本分类到训练得到的各个簇中,然后输入对应的SVM分类器进行分类,判断是否为恶意代码。实验结果表明,这种方法的准确率相对于直接使用SVM分类有明显提高,达到了较好的检测效果。
恶意代码检测;集成学习;DBScan聚类;支持向量机
本文著录格式:李莹珠. 基于集成学习的恶意代码检测方法研究[J]. 软件,2016,37(12):202-205
0 引言
在电子计算机技术快速发展的现在,恶意代码的威胁性也在日益增加。恶意代码数量的增长呈现出爆发态势,从赛门铁克公司的安全威胁报告中可以看出,每年的恶意代码增量都是前一年的十倍以上。而恶意代码的海量变种与繁多的种类也进一步加大了检测的难度。与此同时,机器学习的发展极大地带动了恶意代码检测方法的研究。其中,集成学习是机器学习领域中的一个热门方向。集成学习就是通过特定的学习方法得到若干个基分类器,然后对各个基分类器的结果按照某种继承策略决定最终的分类结果,可获得较单个分类器更好的分类结果。应用于恶意代码检测研究时,集成学习比起单一分类器可以更好地应对恶意代码数量和种类上的增长,同时也更易于结合云计算获得更高的计算速度。
本文提出了一种基于DBScan聚类算法和SVM分类算法的集成学习算法。该算法首先按行为对样本进行DBScan聚类,再以是否为恶意代码为标签,用各聚类数据分别进行SVM分类训练,得到训练模型,然后将测试数据分到最接近的聚类类别中,再输入对应的SVM分类器中进行分类,判定是否为恶意代码。
1 DBScan-SVM集成学习算法
1.1 DBScan聚类算法
DBScan[1]是一种基于密度的聚类算法,这种算法将密度足够高的区域划分为簇,具有不限定待发现的簇的形状的优势,并且不需限定划分类别的数目,适用于行为未知的数据集的分类。DBScan算法首先要搜索数据集,根据设定的半径eps和最小对象数minPts找出核心对象,即半径eps的邻域内有minPts个点的对象,再根据找到的核心点进行扩散,将核心对象的eps邻域内的点加入到核心点所在的簇当中。核心对象邻域内的点称为边缘对象,不属于任何簇的点称为噪声。这个过程中,时间复杂度主要来自于邻域的计算,所以在实际应用当中,为了降低运算复杂度,一般都会建立索引。如果不存在索引,邻域计算需要遍历所有点,最坏情况下时间复杂度为样本数的平方。
邻域半径可选择余弦距离、欧氏距离、Jaccard相似度等相似度度量方法[2]。欧氏距离体现的是个体数值的绝对差异,余弦距离则更多得从方向上进行区分,Jaccard相似度比较得则是两个集合中相同对象的相对数量,计算效率更高。鉴于恶意代码样本是维数不等的高维向量,采用Jaccard相似度计算eps更为合适。
1.2 Jaccard相似度
Jaccard相似度是两个集合之间相似性和分散性的度量方法,又称Jaccard系数,主要用于过滤相似度高的文档等场景。Jaccard相似度是两个集合的交集与并集的比值,公式如下:
1.3 SVM分类算法
SVM是一种基于VC维理论和结构风险最小原则建立的有监督分类算法[3],核心思想有两点,即针对线性可分情况进行分析和将低维线性不可分的样本通过非线性映射算法投入到高维空间中去,使其线性可分。一般的升维都会带来维度灾难,极大地提升运算量,SVM算法则通过核函数这一关键设计解决了这个问题。核函数地作用是接受低维空间中的向量,计算出其映射在高维空间中的值,而不需要找到具体的映射关系。满足Mercer条件的函数都可作为核函数[4]。使用核函数之后,将低维向量映射到高维空间几乎没有增加运算成本,使SVM的升维分类方法的实现成为可能。常用的核函数有多项式核函数、高斯核函数、S形核函数等,形式如下:
多项式核函数:
高斯核函数:
S形核函数:
基于SVM算法的可解决高维问题、理论基础完善、在样本量较小时就可以得到较好的分类效果等优点,本文选择这种算法进行恶意代码样本的分类。
实际应用中,台湾大学的林智仁教授开发了一款简单易用的软件包libsvm,本文也采用了这一软件包进行SVM算法的实现。
1.4 DBScan-SVM集成学习
集成学习是机器学习领域的一个重要研究方向,其基本理念是通过多个子学习器共同解决同一问题[5],可以明显提高泛化能力。集成学习有广义和狭义两种定义,狭义的集成学习是使用多个同质的学习器来解决同一问题,而广义的定义则是将使用多个不同的学习器也归为此类。广义的集成学习可以将名称不同但实际属于同一类的学习器归属到集成学习框架之下,因此比狭义的集成学习更具优势[6],集成学习所涵盖的范围也越来越广。
集成学习的关键点是在给定训练样本的情况下构造出相对独立的、运算效果较好的多个子分类器[7],常用的子分类器构造方法有Bagging、Boosting等。
Bagging是由Breiman提出的一种方法,该方法采用可重复取样技术Bootstrap对训练集进行采样获得子集,在这种方法中,子学习器的差异性是由Bootstrap重复带来的,主要用于不稳定的机器学习算法。
Boosting是一种把多个分类器整合为一个的方法,可以提高弱分类算法的准确度。其核心思想是通过学习误差来改变子训练集在训练集上的分布,重点学习其中误差较大的部分,即对误差较大的部分进行重采样以增大其权重。这类算法中最受关注的是AdaBoost算法。
针对恶意代码样本往往由多个种类混杂构成的特点,本文采取了DBScan聚类算法对样本进行聚类,得到按代码行为分类的多个子样本。根据行为判断样本是否为恶意代码时,主要依赖样本的注册表行为、文件操作、网络行为等进行判别,所以本文提取了恶意代码调用的与这些行为相关的api函数形成特征样本集,再对样本集进行聚类。
聚类之后,将样本按类别分别输入SVM学习器进行训练,学习得到检测恶意代码的模型。
在用待分类样本进行测试时,首先读取训练过程中的聚类结果,将样本分到最接近的类别中,然后用对应的训练完的SVM分类器进行分类,判断是否为恶意代码。
2 算法实现
2.1 样本数据获取与预处理
本文的训练样本采用CSDMC2010 API sequence corpus,这个数据集用api monitor捕获了程序运行时调用的Windows api,选取了与恶意代码行为密切相关的Windows api作为样本特征,如获取输入函数时需要调用的LoadLibrary、查询注册表时调用的RegQueryValue、创建文件时调用的CreateFile、进行网络通信时调用的socket等。这个数据集将恶意代码标记为1,非恶意代码标记为0。如:
(1,LoadLibraryW,HeapAlloc,HeapAlloc,HeapFre e……)
进行训练之前,要用int字符替换掉api字符串。测试集是SoftSnoop捕捉的Windows api调用特征集,和样本集用同样的方式处理。步骤如下:
步骤1:读取样本
步骤2:用int类型替换api字符串
步骤3:去除重复api
处理后的样本格式如下:(1,7,19,21,66,29,2……)
2.2 检测流程
步骤1:读取训练样本中的一条数据并计算Jaccard相似度,计算eps邻域内的点数,若大于minPts则标记为核心点,否则标记为噪声,建立索引。
步骤2:循环步骤1至全部样本都已建立索引
步骤3:新建一个簇,从索引中读取一个未读核心点加入这个簇
步骤4:读取核心点邻域内的点并将其加入核心点所在的簇
步骤5:循环步骤4至邻域中没有核心点存在
步骤6:循环步骤3至步骤5,至样本中所有点都已读取。
以上为DBScan聚类过程,输出按行为聚类的结果。之后针对是否为恶意代码进行分类。
步骤7:读取一类聚类结果,改写成libsvm要求的格式
步骤8输入libsvm分类器进行训练,得到训练模型。
步骤9:重复步骤8,至全部类别训练完毕。
2.3 检测流程
步骤1:获取DBScan的聚类结果
步骤2:读取一条待检测样本数据,计算该数据与步骤1中的聚类结果中的各个点的Jaccard形似度
步骤3:比较Jaccard相似度,将待检测数据分到相似度最大的点所在的簇中
步骤4:重复步骤2至步骤3,直到所有待检测数据都已分类
步骤5:将数据改写成libsvm要求的格式
步骤6:将已分好类的待检测数据输入到对应的libsvm分类器中,得到分类结果
Libsvm所需的数据集格式如下:(1 1:7 2:19 3:21……)
3 实验结果
本文采用CSDMC2010 API sequence corpus作为训练数据集,这是一个由一系列Windows api调用跟踪文件构成的数据集。这个数据集选取了一些与恶意代码识别相关的api作为特征子集,只给出了调用的api的名字,忽略了参数等其他内容,但保留了api的调用顺序,并将恶意代码标记为1,非恶意代码标记为0。训练集中共有恶意代码样本320个,非恶意代码68个。
测试集是用SoftSnoop捕捉的Windows api调用序列选取了与训练集相同的特征,包含90个恶意代码和71个非恶意代码。
本文用SVM对样本集的分类结果作为对照数据,用DBScan-SVM集成学习分类结果作为实验数据。实验结果如下:
对训练集进行聚类得到两个簇,用这两个簇的数据作为SVM的训练集;将测试样本分到这两个簇中,作为SVM的测试集,测试结果为:
簇1准确率:70.0787%(89/127)
簇2准确率:64.7059%(22/34)
合计:68.9441%(111/161)
对照组准确率:57.764%(93/161)
由实验结果可知,DBScan-SVM集成学习分类效果比SVM分类效果提高了十个百分点以上,达到了较好的恶意代码检出率。由于DBScan是基于密度的聚类算法,本文采用的样本数量较小而包含的恶意代码类型较多,样本比较稀疏,所以在样本数量加大的情况下,本文的算法有望取得更好的分类效果。
4 结 论
本文给出了一种基于集成学习的恶意代码检测算法,该算法首先使用DBScan聚类算法按行为将数据集分成多个簇,然后分别对每个簇进行SVM分类,得到恶意代码检测结果。经实验,该算法获得了较好的检测结果。
[1] ESTER M, KRIEGEL M, PETER H, etal. A density-based algorithm for discovering clusters in large spatial databases with noise[J]. Proceedings of the Second International Conference on Knowledge Discovery and Data Mining. 1996.
[2] 林学民, 王炜. 集合和字符串的相似度查询[J]. 计算机学报, 2011, 34(10):1853-1862.
[3] 郭丽娜. 云计算环境下的并行SVM算法研究[D]. 南京师范大学, 2014.
[4] 张小康. 基于数据挖掘和机器学习的恶意代码检测技术研究[D]. 中国科学技术大学, 2009.
[5] 王敏. 基于集成学习的支持向量机学习方法研究[D]. 山西大学, 2010.
[6] 马冉冉. 集成学习算法研究[D]. 山东科技大学, 2010.
[7] 拓守恒. 基于QPSO训练的SVM核函数集成学习研究[J].系统仿真技术, 2010, 06(3): 202-208.
Malicious Code Detection Method Research Based on Ensemble Learning
LI Ying-zhu
(School of CyberSpace Security, Beijing University of Posts and Telecommunications, Beijing 100876, China)
Network times brings life's various walks, also brought explosive growth of malicious code.Report notes that in the fast-growing number and types of malicious code, malicious code type of growth on the effects of malicious code detection is especially important.Malicious code detection using the classification algorithm is now a popular research direction, and various types of malicious code can dramatically cut if the classification results. Given this situation, paper proposed has a based on integrated learning of malicious code detection method, the method first with DBScan algorithm on training sample for poly class, again with poly class get of all cluster training SVM classification device, on unknown sample for detection, first will stay detection sample classification to training get of all cluster, then entered corresponds to SVM classification device for classification, judge whether for malicious code.Experimental results show that the accuracy of this method compared to direct use of SVM classification have fignificantly improved and achieved good results.
Malware detection; Ensemble learning; DBScan; SVM
TP309.5
A
10.3969/j.issn.1003-6970.2016.12.043
李莹珠(1990-),性别,女,研究生,主要研究领域为软件安全。