李瑩珠
(北京郵電大學(xué)網(wǎng)絡(luò)空間安全學(xué)院 北京 100876)
基于集成學(xué)習(xí)的惡意代碼檢測(cè)方法研究
李瑩珠
(北京郵電大學(xué)網(wǎng)絡(luò)空間安全學(xué)院 北京 100876)
網(wǎng)絡(luò)時(shí)代帶來(lái)了生活上的種種便利,也帶來(lái)了惡意代碼的爆發(fā)式增長(zhǎng)。報(bào)告指出,惡意代碼的數(shù)量和種類都在快速增長(zhǎng),其中,惡意代碼種類的增長(zhǎng)對(duì)惡意代碼檢測(cè)的影響影響尤為突出。使用分類算法進(jìn)行惡意代碼檢測(cè)是現(xiàn)在的一個(gè)熱門(mén)研究方向,而繁多的惡意代碼種類會(huì)極大地削弱分類效果。鑒于這種情況,本文提出了一種基于集成學(xué)習(xí)的惡意代碼檢測(cè)方法,該方法首先用DBScan算法對(duì)訓(xùn)練樣本進(jìn)行聚類,再用聚類得到的各個(gè)簇訓(xùn)練SVM分類器,對(duì)未知樣本進(jìn)行檢測(cè)時(shí),首先將待檢測(cè)樣本分類到訓(xùn)練得到的各個(gè)簇中,然后輸入對(duì)應(yīng)的SVM分類器進(jìn)行分類,判斷是否為惡意代碼。實(shí)驗(yàn)結(jié)果表明,這種方法的準(zhǔn)確率相對(duì)于直接使用SVM分類有明顯提高,達(dá)到了較好的檢測(cè)效果。
惡意代碼檢測(cè);集成學(xué)習(xí);DBScan聚類;支持向量機(jī)
本文著錄格式:李瑩珠. 基于集成學(xué)習(xí)的惡意代碼檢測(cè)方法研究[J]. 軟件,2016,37(12):202-205
在電子計(jì)算機(jī)技術(shù)快速發(fā)展的現(xiàn)在,惡意代碼的威脅性也在日益增加。惡意代碼數(shù)量的增長(zhǎng)呈現(xiàn)出爆發(fā)態(tài)勢(shì),從賽門(mén)鐵克公司的安全威脅報(bào)告中可以看出,每年的惡意代碼增量都是前一年的十倍以上。而惡意代碼的海量變種與繁多的種類也進(jìn)一步加大了檢測(cè)的難度。與此同時(shí),機(jī)器學(xué)習(xí)的發(fā)展極大地帶動(dòng)了惡意代碼檢測(cè)方法的研究。其中,集成學(xué)習(xí)是機(jī)器學(xué)習(xí)領(lǐng)域中的一個(gè)熱門(mén)方向。集成學(xué)習(xí)就是通過(guò)特定的學(xué)習(xí)方法得到若干個(gè)基分類器,然后對(duì)各個(gè)基分類器的結(jié)果按照某種繼承策略決定最終的分類結(jié)果,可獲得較單個(gè)分類器更好的分類結(jié)果。應(yīng)用于惡意代碼檢測(cè)研究時(shí),集成學(xué)習(xí)比起單一分類器可以更好地應(yīng)對(duì)惡意代碼數(shù)量和種類上的增長(zhǎng),同時(shí)也更易于結(jié)合云計(jì)算獲得更高的計(jì)算速度。
本文提出了一種基于DBScan聚類算法和SVM分類算法的集成學(xué)習(xí)算法。該算法首先按行為對(duì)樣本進(jìn)行DBScan聚類,再以是否為惡意代碼為標(biāo)簽,用各聚類數(shù)據(jù)分別進(jìn)行SVM分類訓(xùn)練,得到訓(xùn)練模型,然后將測(cè)試數(shù)據(jù)分到最接近的聚類類別中,再輸入對(duì)應(yīng)的SVM分類器中進(jìn)行分類,判定是否為惡意代碼。
1.1 DBScan聚類算法
DBScan[1]是一種基于密度的聚類算法,這種算法將密度足夠高的區(qū)域劃分為簇,具有不限定待發(fā)現(xiàn)的簇的形狀的優(yōu)勢(shì),并且不需限定劃分類別的數(shù)目,適用于行為未知的數(shù)據(jù)集的分類。DBScan算法首先要搜索數(shù)據(jù)集,根據(jù)設(shè)定的半徑eps和最小對(duì)象數(shù)minPts找出核心對(duì)象,即半徑eps的鄰域內(nèi)有minPts個(gè)點(diǎn)的對(duì)象,再根據(jù)找到的核心點(diǎn)進(jìn)行擴(kuò)散,將核心對(duì)象的eps鄰域內(nèi)的點(diǎn)加入到核心點(diǎn)所在的簇當(dāng)中。核心對(duì)象鄰域內(nèi)的點(diǎn)稱為邊緣對(duì)象,不屬于任何簇的點(diǎn)稱為噪聲。這個(gè)過(guò)程中,時(shí)間復(fù)雜度主要來(lái)自于鄰域的計(jì)算,所以在實(shí)際應(yīng)用當(dāng)中,為了降低運(yùn)算復(fù)雜度,一般都會(huì)建立索引。如果不存在索引,鄰域計(jì)算需要遍歷所有點(diǎn),最壞情況下時(shí)間復(fù)雜度為樣本數(shù)的平方。
鄰域半徑可選擇余弦距離、歐氏距離、Jaccard相似度等相似度度量方法[2]。歐氏距離體現(xiàn)的是個(gè)體數(shù)值的絕對(duì)差異,余弦距離則更多得從方向上進(jìn)行區(qū)分,Jaccard相似度比較得則是兩個(gè)集合中相同對(duì)象的相對(duì)數(shù)量,計(jì)算效率更高。鑒于惡意代碼樣本是維數(shù)不等的高維向量,采用Jaccard相似度計(jì)算eps更為合適。
1.2 Jaccard相似度
Jaccard相似度是兩個(gè)集合之間相似性和分散性的度量方法,又稱Jaccard系數(shù),主要用于過(guò)濾相似度高的文檔等場(chǎng)景。Jaccard相似度是兩個(gè)集合的交集與并集的比值,公式如下:

1.3 SVM分類算法
SVM是一種基于VC維理論和結(jié)構(gòu)風(fēng)險(xiǎn)最小原則建立的有監(jiān)督分類算法[3],核心思想有兩點(diǎn),即針對(duì)線性可分情況進(jìn)行分析和將低維線性不可分的樣本通過(guò)非線性映射算法投入到高維空間中去,使其線性可分。一般的升維都會(huì)帶來(lái)維度災(zāi)難,極大地提升運(yùn)算量,SVM算法則通過(guò)核函數(shù)這一關(guān)鍵設(shè)計(jì)解決了這個(gè)問(wèn)題。核函數(shù)地作用是接受低維空間中的向量,計(jì)算出其映射在高維空間中的值,而不需要找到具體的映射關(guān)系。滿足Mercer條件的函數(shù)都可作為核函數(shù)[4]。使用核函數(shù)之后,將低維向量映射到高維空間幾乎沒(méi)有增加運(yùn)算成本,使SVM的升維分類方法的實(shí)現(xiàn)成為可能。常用的核函數(shù)有多項(xiàng)式核函數(shù)、高斯核函數(shù)、S形核函數(shù)等,形式如下:
多項(xiàng)式核函數(shù):

高斯核函數(shù):

S形核函數(shù):

基于SVM算法的可解決高維問(wèn)題、理論基礎(chǔ)完善、在樣本量較小時(shí)就可以得到較好的分類效果等優(yōu)點(diǎn),本文選擇這種算法進(jìn)行惡意代碼樣本的分類。
實(shí)際應(yīng)用中,臺(tái)灣大學(xué)的林智仁教授開(kāi)發(fā)了一款簡(jiǎn)單易用的軟件包libsvm,本文也采用了這一軟件包進(jìn)行SVM算法的實(shí)現(xiàn)。
1.4 DBScan-SVM集成學(xué)習(xí)
集成學(xué)習(xí)是機(jī)器學(xué)習(xí)領(lǐng)域的一個(gè)重要研究方向,其基本理念是通過(guò)多個(gè)子學(xué)習(xí)器共同解決同一問(wèn)題[5],可以明顯提高泛化能力。集成學(xué)習(xí)有廣義和狹義兩種定義,狹義的集成學(xué)習(xí)是使用多個(gè)同質(zhì)的學(xué)習(xí)器來(lái)解決同一問(wèn)題,而廣義的定義則是將使用多個(gè)不同的學(xué)習(xí)器也歸為此類。廣義的集成學(xué)習(xí)可以將名稱不同但實(shí)際屬于同一類的學(xué)習(xí)器歸屬到集成學(xué)習(xí)框架之下,因此比狹義的集成學(xué)習(xí)更具優(yōu)勢(shì)[6],集成學(xué)習(xí)所涵蓋的范圍也越來(lái)越廣。
集成學(xué)習(xí)的關(guān)鍵點(diǎn)是在給定訓(xùn)練樣本的情況下構(gòu)造出相對(duì)獨(dú)立的、運(yùn)算效果較好的多個(gè)子分類器[7],常用的子分類器構(gòu)造方法有Bagging、Boosting等。
Bagging是由Breiman提出的一種方法,該方法采用可重復(fù)取樣技術(shù)Bootstrap對(duì)訓(xùn)練集進(jìn)行采樣獲得子集,在這種方法中,子學(xué)習(xí)器的差異性是由Bootstrap重復(fù)帶來(lái)的,主要用于不穩(wěn)定的機(jī)器學(xué)習(xí)算法。
Boosting是一種把多個(gè)分類器整合為一個(gè)的方法,可以提高弱分類算法的準(zhǔn)確度。其核心思想是通過(guò)學(xué)習(xí)誤差來(lái)改變子訓(xùn)練集在訓(xùn)練集上的分布,重點(diǎn)學(xué)習(xí)其中誤差較大的部分,即對(duì)誤差較大的部分進(jìn)行重采樣以增大其權(quán)重。這類算法中最受關(guān)注的是AdaBoost算法。
針對(duì)惡意代碼樣本往往由多個(gè)種類混雜構(gòu)成的特點(diǎn),本文采取了DBScan聚類算法對(duì)樣本進(jìn)行聚類,得到按代碼行為分類的多個(gè)子樣本。根據(jù)行為判斷樣本是否為惡意代碼時(shí),主要依賴樣本的注冊(cè)表行為、文件操作、網(wǎng)絡(luò)行為等進(jìn)行判別,所以本文提取了惡意代碼調(diào)用的與這些行為相關(guān)的api函數(shù)形成特征樣本集,再對(duì)樣本集進(jìn)行聚類。
聚類之后,將樣本按類別分別輸入SVM學(xué)習(xí)器進(jìn)行訓(xùn)練,學(xué)習(xí)得到檢測(cè)惡意代碼的模型。
在用待分類樣本進(jìn)行測(cè)試時(shí),首先讀取訓(xùn)練過(guò)程中的聚類結(jié)果,將樣本分到最接近的類別中,然后用對(duì)應(yīng)的訓(xùn)練完的SVM分類器進(jìn)行分類,判斷是否為惡意代碼。
2.1 樣本數(shù)據(jù)獲取與預(yù)處理
本文的訓(xùn)練樣本采用CSDMC2010 API sequence corpus,這個(gè)數(shù)據(jù)集用api monitor捕獲了程序運(yùn)行時(shí)調(diào)用的Windows api,選取了與惡意代碼行為密切相關(guān)的Windows api作為樣本特征,如獲取輸入函數(shù)時(shí)需要調(diào)用的LoadLibrary、查詢注冊(cè)表時(shí)調(diào)用的RegQueryValue、創(chuàng)建文件時(shí)調(diào)用的CreateFile、進(jìn)行網(wǎng)絡(luò)通信時(shí)調(diào)用的socket等。這個(gè)數(shù)據(jù)集將惡意代碼標(biāo)記為1,非惡意代碼標(biāo)記為0。如:
(1,LoadLibraryW,HeapAlloc,HeapAlloc,HeapFre e……)
進(jìn)行訓(xùn)練之前,要用int字符替換掉api字符串。測(cè)試集是SoftSnoop捕捉的Windows api調(diào)用特征集,和樣本集用同樣的方式處理。步驟如下:
步驟1:讀取樣本
步驟2:用int類型替換api字符串
步驟3:去除重復(fù)api
處理后的樣本格式如下:(1,7,19,21,66,29,2……)
2.2 檢測(cè)流程
步驟1:讀取訓(xùn)練樣本中的一條數(shù)據(jù)并計(jì)算Jaccard相似度,計(jì)算eps鄰域內(nèi)的點(diǎn)數(shù),若大于minPts則標(biāo)記為核心點(diǎn),否則標(biāo)記為噪聲,建立索引。
步驟2:循環(huán)步驟1至全部樣本都已建立索引
步驟3:新建一個(gè)簇,從索引中讀取一個(gè)未讀核心點(diǎn)加入這個(gè)簇
步驟4:讀取核心點(diǎn)鄰域內(nèi)的點(diǎn)并將其加入核心點(diǎn)所在的簇
步驟5:循環(huán)步驟4至鄰域中沒(méi)有核心點(diǎn)存在
步驟6:循環(huán)步驟3至步驟5,至樣本中所有點(diǎn)都已讀取。
以上為DBScan聚類過(guò)程,輸出按行為聚類的結(jié)果。之后針對(duì)是否為惡意代碼進(jìn)行分類。
步驟7:讀取一類聚類結(jié)果,改寫(xiě)成libsvm要求的格式
步驟8輸入libsvm分類器進(jìn)行訓(xùn)練,得到訓(xùn)練模型。
步驟9:重復(fù)步驟8,至全部類別訓(xùn)練完畢。
2.3 檢測(cè)流程
步驟1:獲取DBScan的聚類結(jié)果
步驟2:讀取一條待檢測(cè)樣本數(shù)據(jù),計(jì)算該數(shù)據(jù)與步驟1中的聚類結(jié)果中的各個(gè)點(diǎn)的Jaccard形似度
步驟3:比較Jaccard相似度,將待檢測(cè)數(shù)據(jù)分到相似度最大的點(diǎn)所在的簇中
步驟4:重復(fù)步驟2至步驟3,直到所有待檢測(cè)數(shù)據(jù)都已分類
步驟5:將數(shù)據(jù)改寫(xiě)成libsvm要求的格式
步驟6:將已分好類的待檢測(cè)數(shù)據(jù)輸入到對(duì)應(yīng)的libsvm分類器中,得到分類結(jié)果
Libsvm所需的數(shù)據(jù)集格式如下:(1 1:7 2:19 3:21……)
本文采用CSDMC2010 API sequence corpus作為訓(xùn)練數(shù)據(jù)集,這是一個(gè)由一系列Windows api調(diào)用跟蹤文件構(gòu)成的數(shù)據(jù)集。這個(gè)數(shù)據(jù)集選取了一些與惡意代碼識(shí)別相關(guān)的api作為特征子集,只給出了調(diào)用的api的名字,忽略了參數(shù)等其他內(nèi)容,但保留了api的調(diào)用順序,并將惡意代碼標(biāo)記為1,非惡意代碼標(biāo)記為0。訓(xùn)練集中共有惡意代碼樣本320個(gè),非惡意代碼68個(gè)。
測(cè)試集是用SoftSnoop捕捉的Windows api調(diào)用序列選取了與訓(xùn)練集相同的特征,包含90個(gè)惡意代碼和71個(gè)非惡意代碼。
本文用SVM對(duì)樣本集的分類結(jié)果作為對(duì)照數(shù)據(jù),用DBScan-SVM集成學(xué)習(xí)分類結(jié)果作為實(shí)驗(yàn)數(shù)據(jù)。實(shí)驗(yàn)結(jié)果如下:
對(duì)訓(xùn)練集進(jìn)行聚類得到兩個(gè)簇,用這兩個(gè)簇的數(shù)據(jù)作為SVM的訓(xùn)練集;將測(cè)試樣本分到這兩個(gè)簇中,作為SVM的測(cè)試集,測(cè)試結(jié)果為:
簇1準(zhǔn)確率:70.0787%(89/127)
簇2準(zhǔn)確率:64.7059%(22/34)
合計(jì):68.9441%(111/161)
對(duì)照組準(zhǔn)確率:57.764%(93/161)
由實(shí)驗(yàn)結(jié)果可知,DBScan-SVM集成學(xué)習(xí)分類效果比SVM分類效果提高了十個(gè)百分點(diǎn)以上,達(dá)到了較好的惡意代碼檢出率。由于DBScan是基于密度的聚類算法,本文采用的樣本數(shù)量較小而包含的惡意代碼類型較多,樣本比較稀疏,所以在樣本數(shù)量加大的情況下,本文的算法有望取得更好的分類效果。
本文給出了一種基于集成學(xué)習(xí)的惡意代碼檢測(cè)算法,該算法首先使用DBScan聚類算法按行為將數(shù)據(jù)集分成多個(gè)簇,然后分別對(duì)每個(gè)簇進(jìn)行SVM分類,得到惡意代碼檢測(cè)結(jié)果。經(jīng)實(shí)驗(yàn),該算法獲得了較好的檢測(cè)結(jié)果。
[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] 林學(xué)民, 王煒. 集合和字符串的相似度查詢[J]. 計(jì)算機(jī)學(xué)報(bào), 2011, 34(10):1853-1862.
[3] 郭麗娜. 云計(jì)算環(huán)境下的并行SVM算法研究[D]. 南京師范大學(xué), 2014.
[4] 張小康. 基于數(shù)據(jù)挖掘和機(jī)器學(xué)習(xí)的惡意代碼檢測(cè)技術(shù)研究[D]. 中國(guó)科學(xué)技術(shù)大學(xué), 2009.
[5] 王敏. 基于集成學(xué)習(xí)的支持向量機(jī)學(xué)習(xí)方法研究[D]. 山西大學(xué), 2010.
[6] 馬冉冉. 集成學(xué)習(xí)算法研究[D]. 山東科技大學(xué), 2010.
[7] 拓守恒. 基于QPSO訓(xùn)練的SVM核函數(shù)集成學(xué)習(xí)研究[J].系統(tǒng)仿真技術(shù), 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-),性別,女,研究生,主要研究領(lǐng)域?yàn)檐浖踩?/p>