廖國輝劉嘉勇
(四川大學(xué)電子信息學(xué)院 成都 610065)(sculiaoguohui@yeah.net)
?
基于數(shù)據(jù)挖掘和機器學(xué)習(xí)的惡意代碼檢測方法
廖國輝劉嘉勇
(四川大學(xué)電子信息學(xué)院 成都 610065)(sculiaoguohui@yeah.net)
近年來,惡意代碼采用花指令以及加殼等方法來繞過殺毒軟件的檢測,而現(xiàn)有的方法對于變種惡意代碼無法準確的識別.鑒于惡意代碼對計算機安全性的威脅以及惡意代碼傳播速度快、種類繁多的特點,采用數(shù)據(jù)挖掘和機器學(xué)習(xí)的方法對惡意代碼進行識別與檢測.首先,提出了一種基于數(shù)據(jù)挖掘和機器學(xué)習(xí)的惡意代碼檢測框架,并分別從文本結(jié)構(gòu)層、字節(jié)層、代碼層3個角度提取了代碼特征;然后采用主成分分析的方法對3種層次的組合特征進行特征降維;最后采用不同的分類方法對惡意代碼進行識別與分類.分類結(jié)果表明:基于組合特征的不同分類方法對惡意代碼的識別準確率都在90%以上,能夠?qū)崿F(xiàn)對變種惡意代碼的有效檢測,為惡意代碼查殺提供了一種十分有效的方法,其中決策樹分類方法的識別準確率最優(yōu).
惡意代碼;多維特征;數(shù)據(jù)挖掘;機器學(xué)習(xí);代碼檢測
惡意代碼是一種引起計算機故障、信息外泄、破壞計算機數(shù)據(jù)、影響計算機系統(tǒng)正常使用的程序代碼,是威脅計算機安全的重要形式之一,具有非授權(quán)性和破壞性2種特征形式[1-2].近年來,由于惡意代碼在網(wǎng)絡(luò)上的廣泛傳播而引起的網(wǎng)絡(luò)安全事件數(shù)量正在逐年增加,據(jù)相關(guān)統(tǒng)計資料顯示,從20世紀90年代至今,由惡意代碼造成的網(wǎng)絡(luò)安全事件數(shù)量每年增幅達50%以上[3-4].這些網(wǎng)絡(luò)安全事件的產(chǎn)生不僅反映了系統(tǒng)和網(wǎng)絡(luò)安全的脆弱性,而且給目前以因特網(wǎng)為基礎(chǔ)設(shè)施的經(jīng)濟發(fā)展造成巨大損失[5].
由于當(dāng)前惡意代碼的數(shù)量非常巨大,新的惡意代碼出現(xiàn)的速度也越來越快[6-7],傳統(tǒng)的檢測技術(shù)由于其檢測速度、效率等問題已經(jīng)無法應(yīng)對當(dāng)前惡意代碼檢測的需求,鑒于上述問題,本文采用數(shù)據(jù)挖掘和機器學(xué)習(xí)的方法,從惡意代碼提取的各個特征出發(fā),自動學(xué)習(xí)隱含在惡意代碼中穩(wěn)定的模式與規(guī)律,并利用該模式與規(guī)律進行檢測,相對傳統(tǒng)檢測方法而言,分析速度更快,檢測效率更高并具有很好的對未知惡意代碼的檢測能力[8-9].
1.1 惡意程序
目前惡意程序分為6類[10]:病毒、蠕蟲、木馬、僵尸程序、間諜程序和流氓軟件.這6類惡意程序都會給用戶帶來巨大的損失.而且,為了對抗反病毒程序,這些惡意程序具有反調(diào)試技術(shù)、反虛擬機技術(shù)、加殼技術(shù)、對抗安全軟件的技術(shù).但是,總體來說,采用惡意程序的動態(tài)特征和靜態(tài)特征就能反映惡意程序在計算機中的活動變化.其中,動態(tài)特征包括惡意代碼動態(tài)調(diào)用序列及其調(diào)用參數(shù)特征、系統(tǒng)調(diào)用關(guān)系圖、控制依賴關(guān)系圖、數(shù)據(jù)依賴關(guān)系圖、惡意代碼對系統(tǒng)資源(文件、注冊表、進程、網(wǎng)絡(luò))的操作情況等.靜態(tài)特征包括惡意代碼文件結(jié)構(gòu)特征、字節(jié)序列特征、指令序列特征、函數(shù)調(diào)用關(guān)系圖、系統(tǒng)調(diào)用關(guān)系圖、控制流圖、數(shù)據(jù)流圖等.
為了綜合考慮效率與成本的開銷,本文在特征提取時只采用靜態(tài)特征提取方案,同時為了更加全面地描述惡意代碼,充分發(fā)揮靜態(tài)特征的優(yōu)勢,本文從惡意代碼的多個靜態(tài)層次上提取所需的多維特征,包括文件結(jié)構(gòu)層的結(jié)構(gòu)特征、字節(jié)層的字節(jié)序列特征、指令層指令序列特征.
1.2 基于數(shù)據(jù)挖掘和機器學(xué)習(xí)的惡意代碼檢測架構(gòu)
依據(jù)上述思想,本文提出的檢測算法的基本框架如圖1所示,從圖1可以看出,檢測過程主要分為2個階段:訓(xùn)練階段與測試階段.訓(xùn)練階段主要完成樣本的訓(xùn)練,包括樣本靜態(tài)反匯編、特征提取與選擇、集成分類器的構(gòu)建過程,其中靜態(tài)反匯編主要完成判斷惡意代碼是否加殼并依據(jù)殼的類型選擇相應(yīng)的脫殼程序進行正確脫殼的過程.特征提取主要完成實驗樣本的結(jié)構(gòu)特征、字節(jié)序列、指令序列、基于語義的靜態(tài)調(diào)用序列特征的特征提取過程,為了便于后續(xù)分類算法的學(xué)習(xí),對于維度很高的特征必須進行特征降維與冗余特征約簡處理.集成分類器的構(gòu)建主要完成多分類器的訓(xùn)練、選擇和集成過程.測試階段主要完成樣本的測試.
圖1 惡意代碼檢測架構(gòu)
2.1 實驗樣本獲取
本文所研究的源數(shù)據(jù)采用VX Heavens中的樣本數(shù)據(jù),從該網(wǎng)站下載PE格式的惡意程序樣本25 585個,其中正常程序數(shù)量為4 730個,每個PE格式的惡意程序樣本都由DOS文件頭、DOS塊、PE文件頭、節(jié)表、代碼、數(shù)據(jù)和資源節(jié)等幾部分組成.
2.2 實驗樣本劃分
獲取的實驗樣本中包含木馬、病毒、蠕蟲、Rootkit、下載者、正常6類惡意代碼.在實驗樣本中各種類別的惡意代碼如表1所示.由表1可知,下載的數(shù)據(jù)集中每種類別的代碼數(shù)量并不均衡,容易在后續(xù)的惡意代碼分類與識別過程中出現(xiàn)因類別樣本不均衡而導(dǎo)致分類率下降的情況.鑒于此,本文以Rootkit的數(shù)量為基準,在其他類別的代碼中隨機選取2 768個代碼樣本,采用交叉驗證的方法,對惡意代碼進行分類與識別.
表1 實驗樣本類別及其數(shù)量
3.1 文本結(jié)構(gòu)層特征
代碼文件結(jié)構(gòu)層特征指的是代碼PE文件的靜態(tài)結(jié)構(gòu)信息,包括入口點是否正常、PE頭部的字節(jié)熵、標準節(jié)數(shù)目、非標準節(jié)的數(shù)目、節(jié)名是否異常和可執(zhí)行節(jié)的數(shù)目等.本文通過對惡意代碼的PE文件結(jié)構(gòu)進行分析,得到一個19維的代碼特征向量,每維特征的值域采用數(shù)值或布爾值表示.由于篇幅所限,本文只給出部分代碼的特征含義與值域的對應(yīng)關(guān)系,關(guān)系如表2所示:
表2 部分代碼特征及值域含義
3.2 字節(jié)層特征
惡意代碼字節(jié)層特征表示代碼在計算機中的二進制存儲序列中出現(xiàn)的規(guī)律特征,在一定程度上表示惡意代碼的指紋信息.本文首先采用Hexview工具將每個代碼樣本轉(zhuǎn)化為16進制的字節(jié)序列,然后采用n-gram滑動窗口的方法獲取代碼字節(jié)序列的字節(jié)特征.以2作為n-gram窗口的滑動長度,為了避免抽取的字節(jié)層特征維數(shù)過多而造成系統(tǒng)內(nèi)容溢出的問題,本文將字節(jié)層的特征維數(shù)上限設(shè)置為10萬,即當(dāng)算法在代碼樣本中識別出100 000 B序列組合特征后,算法便不再搜索其他新的字節(jié)序列,按照已有的字節(jié)序列進行特征統(tǒng)計.
3.3 指令層特征
代碼指令層特征系指代碼在計算機中執(zhí)行機器指令過程中操作碼和操作數(shù)的序列特征.為了形象反映出代碼、操作碼和操作數(shù)之間的關(guān)系,本文對代碼程序和操作碼序列定義如下:
定義1. 程序.令代碼程序P是一個指令序列的集合,P={I1,I2,…,Ii,…,In},其中Ii表示機器指令,由操作碼和操作數(shù)組成,n表示程序中包含的機器指令的個數(shù).
定義2. 操作碼序列.令操作碼序列O={o1,o2,…,oi,…om},其中oi表示一個操作碼,m為操作碼個數(shù).操作碼序列O可以被認為是代碼程序P的一個子集,由P中包含的操作碼組成.
本文通過反匯編工具IDA Pro6.1對每個代碼樣本進行反向編譯,采用n-gram算法對編譯結(jié)果進行操作,獲得編譯結(jié)果中包含的MOV,PUSH,SUB,CMP等13個常用指令的序列特征.本文以2作為n-gram窗口的滑動長度,從代碼樣本中抽取出5 112維特征,并得到了不同特征在樣本指令中出現(xiàn)順序的頻次.
由上文可知,本文分別從文本結(jié)構(gòu)層、字節(jié)層和代碼層抽取了19維、10萬維和5 112維代碼特征.由此可知,除了文本結(jié)構(gòu)層代碼特征較少之外,由字節(jié)層和代碼層組成的代碼特征矩陣或者由單一代碼特征組成的特征矩陣都是一個高維并且稀疏的特征空間,并且特征與特征之間會由于相互關(guān)聯(lián)而導(dǎo)致多重共線性問題.鑒于此,為了提高分類效率,找到最有效表征惡意代碼特點的數(shù)據(jù)特征,本文采用主成分分析方法分別對文本結(jié)構(gòu)層、字節(jié)層以及代碼層3種層次組合而成的特征矩陣進行降維,將降維后得到的特征矩陣作為分類器的輸入,進而評價特征組合對惡意代碼的分類與識別結(jié)果.
(1)
(2)
式(3)中的λ表示協(xié)方差矩陣的特征值向量,式(4)中的ui表示根據(jù)特征值的大小選取的協(xié)方差矩陣的不同維向量,U表示投影矩陣.式(5)中的Y表示高維矩陣X經(jīng)過投影矩陣轉(zhuǎn)換而得的降維矩陣.
(3)
(4)
(5)
由上所知,基于主成分分析方法計算由文本結(jié)構(gòu)層、字節(jié)層以及代碼層3種層次組合而成的特征矩陣的協(xié)方差矩陣,根據(jù)協(xié)方差矩陣的特征值和不同特征值所累加的貢獻率,從協(xié)方差矩陣中選取不同的特征維組成投影矩陣,協(xié)方差特征值、貢獻率及由不同特征值貢獻率所累加的累計貢獻率如表3所示.由于篇幅所限,本文不列出所有特征值.
5.1 惡意代碼分類性能指標
基于主成分分析而得到的降維矩陣,本節(jié)采用多種分類器試圖找出最有效的惡意代碼分類方法.為了衡量不同分類方法的性能,本文采用準確度、靈敏度和特異度3種評價指標評價分類器對惡意代碼的分類與識別效果.
準確率反映的是分類器對整個樣本集的判定能力,即將是惡意代碼的測試樣本判斷為惡意代碼,將不是惡意代碼的測試樣本判斷為非惡意代碼.準確率計算公式如式(6)所示:
Accurcay=(TP+TN)
(TP+FN+FP+TN),
(6)
其中TP,FP,FN,TN分別表示被分類器識別為正的正樣本、被分類器識別為正的負樣本、被分類器識別為負的正樣本、被分類器識別為負的負樣本.
靈敏度反映的是分類器將正樣本預(yù)測為正樣本的能力.即分類器將正常代碼識別為正常代碼的能力.靈敏度計算公式如式(7)所示:
Sensitivity=TP(TP+FN).
(7)
特異度反映的是分類器將負樣本預(yù)測為負樣本的能力.即分類器將惡意代碼識別為惡意代碼的能力.特異度計算公式如式(8)所示:
Specificity=TN(TN+FP).
(8)
5.2 惡意代碼分類與識別結(jié)果
為了對不同分類方法進行評價并找出最優(yōu)的分類方法,本文基于WEKA數(shù)據(jù)挖掘平臺,采用NavieBayes,J48(decision trees),JRip(rule learners),SVM(support vector machine),KNN(k-nearest neighbor)5種分類方法對惡意代碼進行識別與分類.此外,本文還分別從文本結(jié)構(gòu)層、字節(jié)層、代碼層以及3種代碼特征組合4個角度,評價基于不同代碼特征的分類器分類效果.由2.2節(jié)可知,本文共采用16 608個代碼樣本作為分類器的實驗樣本,其中每類代碼的樣本個數(shù)為2 768,采用10折交叉驗證方法計算3種分類器評價指標平均值并作為最終的分類器效果的評價依據(jù).基于不同特征的不同分類器的分類結(jié)果如表4所示:
表4 不同特征的不同分類器的分類結(jié)果
根據(jù)表4不同特征的不同分類器的分類結(jié)果可知,在基于單一代碼特征的分類實驗中,基于結(jié)構(gòu)特征的惡意代碼識別準確率最低,而基于指令特征的惡意代碼識別準確率最高,說明與其他代碼特征相比,代碼的指令特征更能表達惡意代碼與正常代碼之間的差異.在基于多種特征的分類實驗中,基于組合特征的惡意代碼識別獲得了最優(yōu)的分類結(jié)果,說明3種特征都分別從不同方面反映出惡意代碼與正常代碼之間的差異,基于多種特征的惡意代碼識別方法相對可靠.
本文基于網(wǎng)上下載的代碼實驗樣本,采用數(shù)據(jù)挖掘和機器學(xué)習(xí)的方法,從文本結(jié)構(gòu)層、字節(jié)層、代碼層3個角度提取了實驗樣本特征,通過主成分分析的方法對3種特征組合進行降維,基于得到的降維矩陣,采用貝葉斯、決策樹、規(guī)則學(xué)習(xí)、支持向量機和最鄰近算法5種分類方法對惡意代碼進行分類,并分別與基于不同代碼層次特征的分類結(jié)果進行比較.實驗結(jié)果表明,基于數(shù)據(jù)挖掘和機器學(xué)習(xí)的惡意代碼識別與分類方法在代碼字節(jié)層和組合特征層都具有較好的準確度、靈敏度和特異度,其中又以基于組合特征的分類結(jié)果最優(yōu).
[1]Wang Z, Nascimento M, MacGregor M H. A multidisciplinary approach for online detection of X86 malicious executables[C] //Proc of Communication Networks and Services Research Conf (CNSR). Piscataway, NJ: IEEE, 2010: 160-167
[2]Patel S, Patel V, Jinwala D. Privacy preserving distributed k-means clustering in malicious model using zero knowledge proof[M] //Distributed Computing and Internet Technology. Berlin: Springer, 2013: 420-431[3]Fu L, Zhang T, Zhang H, et al. A fuzzy classification method based on feature selection algorithm in malicious script code detection[C] //Proc of 2011 IEEE Int Conf on System Science, Engineering Design and Manufacturing Informatization (ICSEM). Piscataway, NJ: IEEE, 2011: 218-221
[4]Hsiao H W, Chen D N, Wu T J. Detecting hiding malicious website using network traffic mining approach[C] //Proc of the 2nd Int Conf on Education Technology and Computer (ICETC). Piscataway, NJ: IEEE, 2010: V5-276-V5-280
[5]Thuraisingham B M. Data mining for security applications[M] //Intelligence and Security Informatics. Berlin: Springer, 2006: 1-3
[6]黃聰會, 陳靖, 龔水清, 等. 一種基于危險理論的惡意代碼檢測方法[J]. 中南大學(xué)學(xué)報: 自然科學(xué)版, 2014, 45(9): 3055-3060
[7]Lee T, Kim D, Jeong H, et al. Risk prediction of malicious code-infected websites by mining vulnerability features[J]. International Journal of Security and Its Applications, 2014, 8(1): 291-294
[8]Ramani R G, Kumar S S, Jacob S G. Rootkit (malicious code) prediction through data mining methods and techniques[C] //Proc of 2013 IEEE Int Conf on Computational Intelligence and Computing Research (ICCIC). Piscataway, NJ: IEEE, 2013: 1-5
[9]Li X, Dong X, Wang Y. Malicious code forensics based on data mining[C] //Proc of the 10th Int Conf on Fuzzy Systems and Knowledge Discovery (FSKD). Piscataway, NJ: IEEE, 2013: 978-983
[10]Li Y, Ma R, Jiao R. A hybrid malicious code detection method based on deep learning[J]. Methods, 2015, 9(5): 205-216
廖國輝
碩士研究生,主要研究方向為惡意代碼檢測、網(wǎng)絡(luò)信息處理與信息安全.
sculiaoguohui@yeah.net
劉嘉勇
教授,博士生導(dǎo)師,主要研究方向為信息安全理論與應(yīng)用、網(wǎng)絡(luò)信息處理與信息安全.
ljy@scu.edu.cn
A Malicious Code Detection Method Based on Data Mining and Machine Learning
Liao Guohui and Liu Jiayong
(CollegeofElectronicsandInformationEngineering,SichuanUniversity,Chengdu610065)
In recent years, malicious code uses flower instructions and packers and other methods to bypass the detection of antivirus software, while the identification of existing methods for variants of malicious code can not be accurate.In the view of threat of malicious code on computer security and features of fast spread and wide variety, this paper uses the data mining and machine learning method to recognize and detect malicious code. Firstly, it proposes a malicious code detection framework based on data mining and machine learning, and extracts the code features from text structure layer, byte layer and code layer respectively. Secondly, it adapts the principal component analysis to reduce the dimension of combined feature matrix. Finally, it recognizes and classifies the malicious code using various classification methods. The result shows that the accuracy rate of every classification method based on combined feature matrix is higher than 90%, and among them, the method of decision tree gets the best .It is able to achieve effective detection of variants of malicious code, and provide a very effective method for malware killing to detect the variants of malicious code.
malicious code; multidimensional feature; data mining; machine learning; code detection
2015-12-25
TP309