李志周 白金榮



摘要:由于傳統的檢測方法必須獲得惡意軟件的簽名之后才能對這類惡意軟件進行檢測,不能檢測新型的惡意軟件。本文用軟件逆向分析技術反匯編軟件樣本,使用N-Gram算法提取操作碼特征,再用信息增益算法選取操作碼特征,最后利用數據挖掘和機器學習技術建立檢測模型。根據建立的檢測模型可以對未知的軟件進行檢測,避免了傳統檢測方法的弊端。
關鍵詞:N-Gram ?操作碼 ?惡意軟件 ?機器學習 ?數據挖掘
1 研究背景
隨著社會的發展,計算機的普及率不斷增加。由于Window操作系統使用簡單、方便、用戶體驗良好,Windows操作系統成為最受歡迎的PC操作系統。眾多的用戶數量也讓Windows操作系統成為了黑客最愛攻擊的對象。惡意軟件是對病毒、特洛伊木馬和蠕蟲等的總稱,惡意軟件具有強制安裝、難以卸載、惡意捆綁等特征。隨著互聯網的發展和技術的不斷更新換代,惡意軟件的攻擊手段和種類越來越豐富。當前的惡意軟件相比傳統的惡意軟件有了很多的變種,更加難以檢測。全球每年因為惡意軟件入侵給個人用戶和企業帶來了大量的經濟損失,而且這種損失每年都在增長。
惡意軟件的檢測已經成為當前熱門的領域之一。文獻[1]研究基于N-Gram 系統調用序列的惡意代碼靜態檢測,通過N-Gram算法提取API函數序列作為特征建立檢測模型來檢測惡意軟件;文獻[2]是基于數據挖掘和機器學習的惡意代碼檢測技術研究,利用N-Gram算法選取代碼字節序列作為特征,使用數據挖掘和機器學習技術訓練分類器檢測惡意軟件;文獻[3]研究惡意軟件檢測中的特征選擇問題,介紹了惡意軟件檢測領域選擇特征的原則和方法;文獻[4]研究惡意軟件鑒別技術及其應用,提出了鑒別惡意軟件的幾種方法;文獻[5]基于權限的樸素貝葉斯Android惡意軟件檢測研究,分析惡意軟件特有的權限作為檢測的依據;文獻[6]研究一種惡意軟件行為分析系統的設計與實現,對惡意軟件的行為進行分析,建立檢測系統實現對惡意軟件的檢測。文獻[7]研究基于PE靜態結構特征的惡意軟件檢測方法;文獻[8]介紹了軟件逆向工程的內容。
傳統的惡意軟件檢測方法必須獲得該惡意軟件的簽名之后才能對惡意軟件進行檢測,這個缺點使得計算機感染新型惡意軟件的概率增加并且檢測到惡意軟件很困難。本文在當前研究的基礎上,對Windows操作系統上的PE文件(PE(Portable Executable)文件是運行在Windows操作系統上的可執行文件)進行反匯編,利用N-Gram算法提取操作碼特征,使用信息增益算法選取操作碼特征,用數據挖掘和機器學習技術建立用于檢測惡意軟件的模型。
2 實驗過程
2.1 概述
圖1是基于N-Gram操作碼惡意軟件的檢測流程圖。該流程圖主要分為兩個部分:第一部分,通過對PE文件進行分析訓練分類器;第二部分,利用測試集來測試分類器檢測惡意軟件的結果。
從圖1可以看出實驗過程主要包含以下內容:①通過對良性PE文件和惡意PE文件反匯編得到匯編文件,用N-Gram算法提取匯編文件中的操作碼特征;②選取特征利用數據挖掘和機器學習技術對建立分類模型,訓練分類器;③利用測試集對訓練好的分類器進行檢測,區分出惡意軟件和良性軟件。下文將依次對每個步驟進行詳細的介紹。
2.2 反匯編PE文件
本文采用了交互式反匯編器專業版(Interactive Disassembler Professional)即IDA Pro以下簡稱IDA。使用IDA反匯編PE文件得到很多信息如流程圖、函數調用圖、依賴圖等。我們可以根據這些信息,分析軟件的功能、執行過程、內部結構等。本文利用IDC腳本,從反匯編的許多信息中把匯編代碼提取出來(IDC腳本主要用于動態調試IDA,獲取IDA運行過程中的各種信息的代碼)。
2.3 N-Gram提取操作碼特征
N-Gram算法經常用于惡意軟件檢測,自然語言處理等領域。N-Gram算法假設第m個詞的出現只與前面的m-1個詞相關。假設操作碼序列為ABCDEFGH,2-gram提取的操作碼特征[{AB},{BC},{CD},{DE},{EF},{FG},{GH}];3-gram提取的操作碼特征[{ABC},{BCD},{CDE},{DEF},{EFG},{FGH}];4-gram提取的操作碼特征[{ABCD},{BCDE},{CDEF},{DEFG},{EFGH}];5-gram提取的操作碼特征[{ABCDE},{BCDEF},{CDEFG},{DEFGH}]。
2.4 選取特征
從上文可以看出使用N-Gram算法提取操作碼特征雖然不會遺漏某個特征但是有個明顯的缺點,即如果操作碼個數太多,所提取的操作碼特征序列冗余多而且數據量大。例如有m個操作碼,根據N-Gram提取的操作碼特征為C■■。使用N-Gram提取的操作碼特征,不僅數量太太,而且有好多特征冗余,增加了我們尋找區分惡意軟件和正常軟件操作碼特征的難度。因此本文利用信息增益算法選擇特征。
信息增益算法選擇特征:
信息增益算法計算某個特征在文本中的權重時,考慮特征存在或不存在對文本分類信息表示量的影響。信息增益算法選擇特征時,最重要的標準是判斷該特征能傳輸多少信息給分類系統,信息量的多少和特征的重要程度成正比。因此本文把信息增益值大的特征組合成分類特征的子集。一個特征的信息量是系統有該特征和沒有該特征前后之間信息量的差值。本文根據特征的信息增益值,通過降序排序,生成數據字典。
數據字典是一張參照表,根據數據字典我們得知哪些特征作為判斷標準最合適。我們首先根據N-Gram算法提取樣本文件中的所有操作碼特征,再根據數據字典篩選操作碼特征。如果數據字典中的特征存在于樣本文件中,根據該特征在樣本文件中出現的次數給該特征賦予一個權值,若樣本文件中沒有該特征,則該特征的權值為0。使用特征選擇算法選取特征后,根據不同的數據字典,每個樣本文件中的操作碼特征都用數據字典中的特征來表示,這樣所有樣本文件中的操作碼特征都相同,不同的是操作碼特征的權值。每一個樣本文件都用操作碼特征來表示,生成一條記錄。把所有表示樣本文件中的記錄存放到指定的文件中,使用算法轉換成特定的文件格式用于數據挖掘。
3 實驗結果分析
本文根據數據挖掘工具Weka對實驗得到的操作碼特征用機器學習算法技術訓練分類器。Weka(Waikato Environment for Knowledge Analysis)是一個基于java的開放的數據挖掘工具,集成了大量的機器學習算法。由于Weka具有高效準確的特點,所以本文使用它作為數據挖掘的工具。
本文用4820個良性軟件和3465個惡意軟件作為樣本集。首先,用2-gram、3-gram、4-gram、5-gram提取操作碼特征;其次,用信息增益算法選取特征;最后,用J48、Random Forest、Bagging、AdaBoostM1四種分類算法進行分類學習。本文用檢測率、誤報率、準確率和AUC作為檢測標準,其中AUC是最重要的標準。下文將依次分析不同長度的操作碼特征、不同大小特征集、不同算法對惡意軟件檢測的準確率。
3.1 不同長度的操作碼特征比較分析
本文根據2-gram、3-gram、4-gram、5-gram分別提取了不同長度的操作碼特征,根據信息增益值選取前5000個特征。檢測結果如表1所示:
表1 ?不同長度的操作碼特征檢測結果
■
從表1中可以看出,2-gramAUC值最低為0.996,
3-gram是0.997,4-gram和5-gram相同,4-gram誤報率低于5-gram而且4-gram的準確率和檢測率都高于5-gram。綜合比較,使用4-gram提取的操作碼特征的效果比其余三個略好。從表中可知,不同長度的操作碼特征的檢測結果相差很小。表明N-Gram操作碼特征用于檢測惡意軟件有很高的檢測率。
3.2 不同的特征個數比較分析
通過上文可知,使用4-gram算法提取操作碼特征的效果最好,所以本文用信息增益算法選取50個、100個、200個、300個特征集進行數據挖掘和分析,比較出多少數量的特征集效率最高。基于信息增益算法提取的不同個數的操作碼特征的檢測結果如表2所示:
表2 ?不同的操作碼特征個數檢測結果
■
從表2中我們可以看出,特征數為300個時AUC值最高為0.996,100個特征數最低為0.984,50個特征數時為0.986,200個特征數時為0.995。特征個數多的檢測結果的準確率相對高于特征數少的。不同特征個數之間的結果相差不大,表明使用信息增益算法選擇操作碼特征檢測惡意軟件的結果比較準確。
3.3 不同算法的效率比較分析
不同的算法在效率和準確率方面不同。本文利用4-gram算法提取操作碼特征,使用信息增益算法選取300個特征,用J48、Random Forest、Bagging、AdaBoostM1四種常用的分類算法進行分析和比較,從而尋找出效率和準確率最高的算法。
圖2是4種分類算法的ROC圖:
■
圖2 ?4種分類算法的ROC圖
從圖2中我們可以看到,AUC值最高的是ADABOOSTM1算法,準確率達到1.000,最低的是J48算法達到0.996,Random Forests算法和Bagging算法一樣都是0.999。通過實驗J48算法的效率相對較低,其次是Random Forests算法、再次是ADABOOSTM1算法,Bagging算法效率最高。不同算法判斷的結果相差不大。不管采用以上四種中的任意一種算法對惡意軟件檢測,得到的結果都很準確。
綜上所述,使用4-gram算法提取操作碼特征檢測效果最好,根據特征在文檔中出現次數選取特征的檢測結果略低于使用信息增益算法選取特征的檢測結果,不同算法檢測的結果雖然相差不大,但是在效率上還是有明顯的差別,特別是數據量大時,選取算法顯得尤為重要。通過上文的實驗分析,本文首先用N-Gram算法提取操作碼特征,再用數據挖掘工具對提取的操作碼特征訓練分類器,最后用測試集進行測試,AUC值達到98%以上,表明使用該方法檢測惡意軟件效果比較理想。
4 結束語
本文用N-Gram算法提取操作碼特征建立惡意軟件檢測模型,與其它方法相比較其優點有:
①與傳統檢測方法相比,該方法能對未知的新型的惡意軟件進行檢測,降低新型惡意軟件帶來的危害;②由于操作碼用來指導CPU執行操作,所以通過操作碼分析程序的行為比傳統的方法更準確;③使用N-Gram算法提取特征,可以提取到一些隱藏著的使用其它算法很難提取到的特征。
本文也有以下缺點:①由于靜態分析本身存在固有的局限性,通過逆向分析得到的匯編代碼的質量受限于反匯編的質量以及軟件本身的設計技巧;②使用N-Gram算法提取操作碼特征的特征集太大,影響后期的數據挖掘和機器學習的效率;③本文使用的單一抽象層次的特征,融合多個抽象層次的特征可能提高檢測的準確率。
綜上所述,下一步將提高反匯編的質量,改進N-Gram算法提取特征的特征集太大的問題,多使用幾種方法選取提取特征,分析出最合適的方法。
參考文獻:
[1]黃全偉.基于N-Gram系統調用序列的惡意代碼靜態檢測[D].哈爾濱:哈爾濱工業大學,2009.
[2]張小康.基于數據挖掘和機器學習的惡意代碼檢測技術研究[D].合肥:中國科學技術大學,2009.
[3]陳洪泉.惡意軟件檢測中的特征選擇問題[J].電子科技大學學報,2009,38:53.
[4]莊蔚蔚,姜青山.惡意軟件鑒別技術及其應用[J].集成技術,2012,1:55.
[5]蔡澤廷,姜梅.基于權限的樸素貝葉斯Android惡意軟件檢測研究[J].電腦知識與技術,2013,14.
[6]楊科,凌沖,朱陳成.研究一種惡意軟件行為分析系統的設計與實現[J].計算機安全.
[7]白金榮,王俊峰,趙宗渠.基于PE靜態結構特征的惡意軟件檢測方法[J].計算機科學,2013(01).
[8]趙榮彩,龐建民,張靖博.反編譯技術與軟件逆向分析[M].第一版.北京:國防工業出版社,2009.