戴逸輝 殷旭東



摘 要:面對惡意代碼高速增長、變種繁多的現狀,使用了基于隨機森林的惡意代碼分類方法。通過將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近鄰分類算法>樸素貝葉斯算法??梢缘贸鼋Y論,在本文的數據規模和特征選擇上,隨機森林算法要優于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.