基于神經網絡的惡意軟件檢測分析
對于目前的所有行業來說,“如何有效地檢測惡意軟件”已經成為了大家共同的網絡安全問題。一次惡意軟件感染事件將有可能給我們帶來數百萬美金的經濟損失,而當前的反病毒產品以及惡意軟件檢測工具一般使用的是基于簽名的檢測技術,這種方法需要手動設置一系列規則來識別已知的不同類型的惡意軟件。但是相對來說,這種方法的針對性比較強,而且無法識別新型的惡意軟件。
這種方法的效率其實非常低,因為大多數環境所采用的代碼不一樣,而且每天都會出現數百萬種新型的惡意軟件。因此,我們急需一種能夠應用于當前快速改變的惡意軟件生態系統的檢測技術,而機器學習也許正是我們所需要的。
實際上,很多初創企業和網絡安全公司已經開始研發這種基于機器學習的安全檢測系統了。這些公司通常會在特征工程以及數據分析方面花費大量的人力和物力資源來開發高質量的系統,但實際上,我們可以在不涉及特征工程的情況下開發出一套能夠跨操作系統和硬件來檢測惡意軟件的技術,具體內容可以參考我們最新發布的研究報告。
報告中介紹了一種人工神經網絡,我們可以通過訓練這種神經網絡來檢測惡意的Windows可執行文件(只需要可執行文件的原始字節序列作為輸入),這種方法有下列幾個優點:
- 不需要手工編譯以及與編譯器相關的知識。這也就意味著,訓練出來的分析模型適用性很強,而且可以適應惡意軟件的自我進化。
- 計算復雜度與序列長度成線性關系,因此它適用于大文件。
- 可識別二進制代碼中的重要子區域以進行取證分析。
- 這種方法同樣適用于新的文件格式、編譯器和指令集結構,我們需要做的只是訓練數據和模型而已。
因此我們認為,使用機器學習來對惡意軟件的原始字節序列進行分析和識別并以此來進行惡意軟件監測,將會是機器學習社區中一個富有前景的研究領域。
將深度學習應用到惡意軟件檢測會遇到哪些困難?
近期,研究人員已經成功將神經網絡應用到了計算機視覺、語音識別和自然語言處理領域了,而成功的其中一個原因就是他們能夠從原始數據(例如像素或單個文本字符)中歸納學習出相應的特征。因此,在這些成功案例的啟發之下,我們也許能夠使用可執行文件的原始字符來對神經網絡進行訓練,并以此來判斷目標文件是否為惡意文件。如果我們能夠做到這一點,我們將能夠大大簡化惡意軟件檢測工具,我們不僅能夠提升檢測精確度,而且還能夠識別出一些惡意軟件非明顯但十分重要的特征。
但是,想要將深度學習應用到惡意軟件檢測領域中,我們還有很多問題需要解決。比如說,對于微軟的Windows PE惡意軟件,我們需要解決的問題如下:
- 將單個字符作為輸入序列中的一個單元來處理,意味著我們將按照二百萬個時間步長的順序處理一個序列分類問題。據我們所知,這遠遠超出了以往任何基于神經網絡的序列分類器的輸入長度。
- 惡意軟件中的字節數據可以包含多種形式的信息,其中包括人類可讀的文本、二進制代碼、或例如圖片之類的任意對象等等。除此之外,還包括一些經過加密的內容。
- 函數之間的調用命令和跳轉命令都是可以重新排列的,因此函數之間存在復雜的空間相關性。
解決方案
針對這些挑戰與難題,我們測試了大量不同的神經網絡結構,但上面所提到的這些挑戰促使我們不得不去嘗試一些不常見的神經網絡結構和參數。
在設計模型的時候,我們主要考慮了以下三種功能:
- 在計算和內存使用中有效擴展序列長度的能力;
- 在檢測整個文件時考慮本地環境和全局環境的能力;
- 幫助分析惡意軟件標記的能力;
最后,我們所能設計出的最合適的惡意軟件檢測網絡模型框圖如下圖所示:
數據與模型訓練
我們使用了兩套數據集來訓練并驗證這個網絡,我們從開源的數據中收集了第一套訓練集Group A。A組中包含了43967個惡意文件樣本以及21854個良性文件樣本。第二組Group B中的樣本由工業反病毒廠商提供,其中包含真實攻擊場景中的惡意文件以及良性文件樣本(總共40萬文件樣本,每種各占一半)。不過,在實驗的后期,我們還收到了更多的訓練語料(B組),新添加的語料中包含2011786個唯一的二進制文件樣本,其中有1011766個惡意文件樣本。為了及時得到神經網絡模型的收斂性,我們必須用大批量的數據集來訓練網絡。
訓練和分析的結果如下圖所示:
從結果中可以看到,我們的模型比較適用于A組的訓練數據集,其次是B組。但是,當我們繼續使用更大的語料庫(200萬份測試文件)來進行訓練時,我們發現我們的網絡模型還會不斷地完善。
總結
我們希望,這項研究可以鼓勵機器學習社區更加積極地去探索惡意軟件檢測領域,因為這確實是一個富有前景的研究領域。由于深度學習已經在圖像、信號和自然語言處理方面取得了令人矚目的成就和進步,因此我們也許可以將這些技術擴展到另一種完全不同的領域,比如說惡意軟件的檢測方面。