標籤:

專家教你利用深度學習檢測惡意代碼

當前,惡意軟體的檢測已經成為全社會關注的網路安全焦點,因為許多時候,單個惡意軟體就足以導致數百萬美元的損失。目前的反病毒和惡意軟體檢測產品,一般採用的是基於特徵的方法,它們藉助人工設定的規則集來判斷某軟體是否屬於某種已知的惡意軟體類型集合。通常來說,這些規則是具有針對性的,即使新出現的惡意代碼使用了跟原來的惡意代碼相同的功能,檢測軟體通常也檢測不出來。

所以,這種方法是無法令人滿意的,因為大部分情況下二進位文件都是非常獨特的,或者說是以前從未見過的,並且,這個世界上每天都有數百萬個新的惡意軟體樣本被發現。所以,我們需要開發一種能夠適應日新月異的惡意軟體生態系統的檢測技術,而機器學習看起來非常有希望滿足我們這一需求。事實上,一些初創公司和老牌安全公司早就開始著手構建基於機器學習的防禦系統了。為了獲得高質量的防禦系統,這些公司通常都需要在特徵工程和分析方面花費大量財力和精力。然而,如果我們是否能夠在無需藉助特徵工程的情況下構建反病毒系統呢?果真如此的話,我們就能將同一系統部署到不同的操作系統和硬體上檢測惡意軟體。在我們最近發表的研究論文中,我們的研究成果向這個目標邁出了堅實的一步。

本文引入了一種人工神經網路,經過適當的訓練之後,只需要輸入Windows的可執行文件的原始位元組序列,它就能區分該文件是良性的,還是惡意的。這種方法的優點如下所示:

不需要手工構建特徵或編譯器方面的知識。這意味著訓練好的模型對於惡意軟體的變種具有普適性和魯棒性。n計算的複雜度與序列長度(二進位文件大小)呈線性關係,這意味著推斷是快速的,所以能夠用於大型的文件。n能夠從二進位文件中找出對於取證分析來說非常重要的代碼段。n這種方法也適用於新出現的文件格式、編譯器和指令集架構:只需提供相應的訓練數據即可。n

我們也希望通過本文向大型機器學習社區表明,從原始位元組序列中檢測惡意軟體不僅具有得天獨厚的優勢,同時也面臨許多前所未有的挑戰,所以,這是將是一片肥沃的研究領域。

深度學習在惡意軟體檢測中所面臨的挑戰

最近,神經網路在計算機視覺、語音識別和自然語言處理方面取得了一系列的成功,當然,成功的原因是多方面的,其中的一個因素就是神經網路具有從諸如像素或單個文本字元之類的原始數據中學習特徵的能力。受到這些成功的啟發後,我們開始利用可執行文件的原始位元組作為數據來神經網路訓練,看看它們能否正確判斷給定的文件是否為惡意軟體。如果這一方法可行的話,必將極大地簡化惡意軟體檢測工具,提高檢測的準確性,並能夠找出對於檢測惡意軟體卻非常重要卻不很顯眼的那些特徵。

然而,與其他任務相比,深度學習在惡意軟體識別領域還面臨著一些挑戰和不同之處。對於Microsoft Windows Portable Executable(PE)惡意軟體,這些挑戰包括:

將每個位元組作為輸入序列中的一個單元來處理的話,就意味著我們需要處理時間步長為200萬個左右的序列分類問題。據我們所知,這遠遠超過了之前所有基於神經網路的序列分類器的輸入的長度。n惡意軟體中的位元組包含的信息具有多態性。上下文中的任何特定位元組既可以表示為人類可讀的文本,也可以表示為二進位代碼或任意對象(如圖像等)。此外,其中的某些內容可能是經過加密處理的,這樣的話,它們對神經網路來說基本上就是隨機的。n在函數級別上面,二進位的內容可以任意重新排列,但由於函數調用和跳轉指令的存在,所以這些函數之間必定存在複雜的空間關係。n

在本文所探討的範圍內,我們對序列分類做出了一定的貢獻。音頻是與序列長度關係最為緊密的一個領域。諸如WaveNet之類的複雜神經網路,雖然它們使用音頻的原始位元組作為其輸入和目標輸出,但是,它的序列分析所面臨的時間步也只不過是數以萬計而已,與我們的惡意軟體檢測問題相比要小兩個數量級。

對於常用於自然語言處理和音頻處理領域的神經網路來說,當我們使用包含數百萬的時間步的序列數據作為訓練網路參數的輸入時,必將面臨重大的實際挑戰。其中的原因是,各網路層中的激活函數必將佔用大量的內存空間。例如,假設我們有一個步長為200萬的序列,如果該序列的原始位元組用32位浮點類型的300維可訓練嵌入層來表示的話,那麼僅僅輸入數據就需要大約2.4GB的內存。如果它被傳遞到具有濾波器大小為3和濾波器數量為128的保持長度不變的(length-preserving)一維卷積層的話,則單獨這一層的激活函數就又需要1GB的內存。請記住,這裡是將單個序列輸入到單層的情形,而通常情況下,神經網路訓練過程中每次輸入的是一個minibatch。

就我們的情形而言,將序列分解成單獨處理的子序列是沒有用的,因為惡意軟體的指標可能是稀疏的,並分布在整個文件中,所以,如果將訓練文件的全局標籤映射到子序列的話,必將會被由此引入的雜訊所淹沒。此外,由於訓練信號非常弱,所以為判別性特徵非常稀疏的輸入序列的所有兩百萬個時間步建立一個唯一的標籤就成為一個極具挑戰性的機器學習問題。

我們的解決方案

為了解決這個問題,我們嘗試了各種不同的神經網路體系結構。同時,為了迎接上面提到的挑戰,我們嘗試了一些不尋常的架構和參數選擇方法。在尋找性能更好的體系結構的時候,我們一方面要增加模型中訓練參數的數量,同時還要讓激活函數的內存佔用量盡量少,所以,這要求我們在兩者之間取得平衡,從而確定出合適的最小批量大小,以便不僅讓訓練時間滿足實際要求,同時,還能讓訓練過程收斂。

在設計網路模型時,我們要努力爭取:

計算量和內存用量能夠根據序列長度而高效地擴展n在檢查整個文件的時候能同時考慮到本地和全局上下文n在分析標記為惡意軟體的時候能夠提供更好的解釋能力n

圖1 惡意軟體檢測網路的體系結構

結果發現,表現最好的模型在體系結構方面,不但具有更少的訓練參數(134,632),同時還具有更少的網路層數,具體如圖1所示。

我們能夠通過使用門控卷積體系結構和可訓練的輸入位元組的嵌入向量表示來最大化網路的可訓練參數數量來實現了上面的第一個目標。在門控體系結構中,對於每個卷積層,都提供了一個使用sigmoid激活函數的副平行卷積層。然後,將這兩個平行層的輸出進行逐元素相乘,並將結果傳遞給非線性的reLU激活單元。這樣的話,sigmoid卷積層就會過濾掉reLU卷積層所允許的那些信息,使得該體系結構能夠以有效的方式為模型的特徵表示增加額外的容量。

我們通過使用更大的步幅和更大的卷積濾波器大小來控制卷積層激活單元所佔用的內存單元數量。從表面上看,這些選擇似乎會降低模型的準確性,然而我們在實驗中發現,更精細的卷積和更小的步幅並沒有帶來更好的性能。

我們在卷積層後面添加了全局最大池化層,從而實現了第二個目標。對於網路的這項功能,一種解釋方法是,門控卷積層能夠識別惡意軟體的本地指標,對全連接層最大池化處理後,使得系統能夠評估整個文件中這些指標的相對強度,從而找出重要的全局組合。

根據針對幾種架構的測試結果來看,它們都具有過度擬合的傾向。考慮到必須使用單一損失函數來學習大型輸入特徵空間的良性/惡意軟體分類,這種情形並不奇怪。我們發現懲罰全連接層的隱藏狀態激活函數之間的相關性,詳細介紹請參考 [Cogswell et al. 2016],是最有效的調整形式。更加有趣的是,我們發現,常用的批正則化操作(batch – normalization)實際上妨礙了模型的收斂和泛化。至於出現這種情況的具體原因,請參閱論文的第5.3節。

訓練數據和訓練方法

對於這個神經網路,我們採用了兩個數據集進行訓練和驗證。我們的第一組數據,即A組,可以從公開的網路上面下載。良性數據是從全新安裝的Microsoft Windows系統上面收集來的,其中包含一些常用應用程序;惡意軟體取自VirusShare樣本庫。其中,A組包含43,967個惡意文件和21,854個良性文件。第二組,也就是B組,是由行業防病毒合作夥伴提供的,這些文件都是從現實中的計算機上搜集到的,B組包含400,000個獨立的文件,其中良性和惡意文件各佔一半。同時,B組還包括一個由74,349個文件組成的測試集,其中4萬個文件是惡意的,其餘的文件都是良性的。

我們發現,在對A組進行訓練的過程中,會產生嚴重的過擬合現象,導致訓練好的模型的功能變成識別某個文件是否「來自微軟」,但是無法判斷某個文件是否是「良性的」。利用A組數據訓練的模型,無法推廣到B組數據。但是,我們發現,通過B組數據訓練的模型可以順利推廣到A組數據上面。因此,我們通過B組數據來訓練模型,然後利用A組和B組數據來測試模型。這樣做的好處是,我們的模型可以獲得更好的泛化能力,因為這些數據來自不同的源。我們對於模型在A組數據上面的測試性能更感興趣,畢竟模型是在B組數據上面進行的訓練,當然,我們希望模型在兩個測試集上具有相似的性能,這樣就能表明所學的特徵是非常有用的。

另外,在我們的實驗後期,我們收到了來自B組同源的更大的訓練數據集,其中包含2,011,786個獨立的二進位文件和1,011,766個惡意文件。

為了讓模型儘快收斂,可以在訓練網路的時候增加batch的大小,這個方法非常有效。由於網路激活函數需要佔用大量的內存,這就需要使用數據並行的模型訓練方式。在我們的試驗中,使用的是含有8個GPU的DGX-1系統,當利用含有400,000個樣本的B組訓練集以數據並行的方式訓練這個模型的時候,如果8個GPU上的計算單元和內存「火力全開」的話,完成一輪訓練需要大約16.75小時,訓練過程共計需要完成10輪。如果使用含有兩百萬個樣本的訓練集的話,使用同樣的系統,則需要花費一個月的時間。

實驗結果

在評估模型性能的時候,最關鍵的指標是AUC。這是因為對惡意軟體進行分類的時候,我們可以通過模型對二進位文件進行排隊,實現惡意文件和良性文件的隔離,同時還可以通過人工分析給出優先順序評分。較高的AUC分值(接近1)就意味著已經將大多數惡意軟體成功地排在了大多數良性文件的前面。所以,取得高分值的AUC是非常重要的,因為惡意軟體分析專家通過手工方式分析單個二進位文件所需時間可能會超過10個小時。AUC還有一個好處,就是可以對模型在兩個具有不同數量的良性和惡意樣本的測試數據集上的性能進行比較。

表1顯示了我們的模型與文獻中表現最好的模型之間的性能比較。第一個模型使用原始位元組n-gram作為邏輯回歸模型的輸入特徵[Raff et al. 2016]。第二個模型將一個淺層的全連接的神經網路用於從文件PE-Header中提取位元組n-gram[Raff et al. 2017]。在表1中,我們用粗體來顯示最佳結果。

表1:利用小樣本(400,000個樣本)和大樣本(200萬個樣本)的B組訓練集進行訓練後,我們的惡意軟體檢測模型在A組和B組測試集上面的性能表現。

通過上面的數據不難看出,我們的模型在A組上面的表現最佳,在B組上面的表現次之。但是,當使用多達200萬個文件的訓練集進行訓練時,我們發現,我們的模型的性能得到了進一步的提升,在兩個測試集上都表現出了最佳的性能,但是基於位元組n-gram的模型的性能反而出現了下降。這表明在位元組n-gram模型中存在脆弱性和過度擬合的傾向。

模型的實用性

在本文中,我們還提供了在實驗中關於模型的平衡測試準確性的報告,也就是說,它們能夠區分良性和惡意軟體文件,並給予每個文件同等的重要程度。雖然我們的模型在這個指標上面表現不錯,但它並不一定代表模型在現實世界中的性能。惡意軟體檢測系統具有各種不同的使用場景。對於大容量文件分類,吞吐量是最重要的,這意味著對誤報的容忍度可能會降低。在其他場景中,誤報可能是可以接受的,以獲得高靈敏度;換句話說,真正的惡意軟體很少被「放過」。

但不論是哪種情況,對於檢測的結果,都需要對潛在惡意軟體進行某種形式的深入分析,通常由惡意軟體分析專家來完成這項分析任務。所以,我們希望自己的神經網路對分類的結果具有一定的可解釋性,以節約分析師的精力和時間。本文的思想是受到[Zhou et al. 2016]論文中的類激活映射(CAM)技術的啟發而獲得靈感的。對於良性和惡意軟體中的每一個類別,我們都會為卷積層中最活躍的應用位置上每個過濾器的相對貢獻生成一個映射。您可以將其視為找出哪些區域對良性或惡意軟體分類貢獻最大。我們稱之為改進型稀疏-CAM,因為這裡使用全局最大池化而不是平均池化技術,所以自然會得到稀疏的激活函數映射。圖2為讀者詳細展示了稀疏-CAM的示意圖。

圖2 稀疏-CAM示意圖

通過閱讀已經發表的相關論文,我們發現,對於位元組n-gram模型來說,幾乎所有的判別性信息都是從可執行文件的頭部中取得的。這意味著位元組n-gram模型通常不使用文件的實際可執行代碼或數據段作為判別性特徵。表1中的結果表明,在我們的測試中,可以訪問整個可執行文件的模型比僅限於文件頭的模型具有更高的分類準確性。

我們的惡意軟體分析專家對224個隨機選取的二進位文件的稀疏CAM進行分析的結果顯示,在我們的模型獲取的最重要的特徵中,有39-42%的特徵位於文件頭之外。特別是,我們發現可執行代碼和數據中都含有判別性特徵。

表2:來自文件各部分的重要特徵,這些都是通過稀疏-CAM映射到PE文件輸出的非零區域確定出來的。

小結

本文表明,神經網路無需藉助昂貴和不可靠的特徵工程就能學會如何區分良性和惡意的Windows可執行文件。這樣一來,它不僅能夠在進行分類時取得較高的AUC得分,還能夠避免普通防病毒和惡意軟體檢測系統所面臨的諸多問題。

對程序的位元組級的理解,其應用範圍非常廣泛,而非僅限於惡意軟體的分類,其他應用領域還包括靜態性能預測和自動代碼生成等。但是,要想實現這一目標,需要批判性思考如何減少所需的內存量,以及哪些類型的神經網路架構能夠更好地捕捉以二進位形式表示的信息的各種模式。

我們希望這項工作能夠鼓勵更多的機器學習社區來關注惡意軟體檢測,因為這一領域面臨著許多獨特的挑戰,例如極長的序列和稀疏的訓練信號,所以,對於研究人員來說,這將是一片沃土。眾所周知,深度學習已經在圖像、信號和自然語言處理方面取得了一些驚人的成功和進步。如果將其擴展到諸如惡意軟體檢測這樣完全不同的領域,可以幫助我們從不同角度更好地理解了這些工具和學習方法,因為有些方法並不是在所有新的數據和問題領域都同樣適用,例如batch正則化。同時,這也能夠幫助我們進一步了解神經網路的普適性。

與本文相關的論文可以從Arxiv下載,同時還可以從這裡聆聽我們在AAAI 2018網路安全人工智慧研討會上針對這項工作所做的報告。

參考文獻

[Cogswell et al. 2016] Reducing Overfitting in Deep Networks by Decorrelating Representations, Cogswell, M.; Ahmed, F.; Girshick, R.; Zitnick, L.; and Batra, D. (ICLR 2016) arxiv.org/abs/1511.0606

[Zhou et al. 2016] Learning Deep Features for Discriminative Localization. Zhou, B.; Khosla, A.; Lapedriza, A.; Oliva, A.; and Torralba, A. (CVPR 2016) arxiv.org/abs/1512.0415

[Raff et al. 2016] An investigation of byte n-gram features for malware classification. Raff, E.; Zak, R.; Cox, R.; Sylvester, J.; Yacci, P.; Ward, R.; Tracy, A.; McLean, M.; and Nicholas, C. Journal of Computer Virology and Hacking Techniques. 2016

[Raff et al. 2017] Learning the PE Header, Malware Detection with Minimal Domain Knowledge, Raff, E.; Sylvester, J.; and Nicholas, C. arXiv:1709.01471, 2017

本文翻譯自: devblogs.nvidia.com/par ,如若轉載,請註明原文地址: 4hou.com/web/9136.html

推薦閱讀:

Tor的內鬥竟是因為他?
疑似俄羅斯APT黑客組織「蜻蜓」入侵美國電網
無 PowerShell.exe 執行 Empire 的幾種姿勢
「Trackmageddon」漏洞影響100+個GPS和定位跟蹤服務
不容小覷:過時的第三方庫對手機應用安全的影響

TAG:信息安全 |