凌 祎,周安民,賈 鵬
(四川大學(xué)網(wǎng)絡(luò)空間安全學(xué)院,成都 610065)
惡意軟件的規(guī)模和造成的經(jīng)濟(jì)損失逐年上漲,并且惡意軟件的產(chǎn)業(yè)化現(xiàn)象明顯,攻擊方法變化多樣,攻擊的目的性越來越明顯。近年來,惡意軟件檢測主要使用傳統(tǒng)動(dòng)靜態(tài)檢測方法提取惡意軟件特征,包括利用控制流圖及字節(jié)流等信息。隨著深度學(xué)習(xí)的發(fā)展以及在惡意軟件檢測上的應(yīng)用,研究者能夠?qū)⒏嗑S度的信息嵌入到代碼的特征向量中,能夠有效避免統(tǒng)計(jì)特征的局限性。受到近些年來自然語言處理發(fā)展的啟發(fā),在處理匯編語言時(shí)可以將匯編文本看作自然文本來進(jìn)行特征提取,而隨著經(jīng)典的word2vec逐步向BERT等基于大量文本的預(yù)訓(xùn)練模型發(fā)展,基于匯編語言的惡意軟件檢測方法也可以采用類似的方法。雖然匯編語言可以看作自然語言來處理,但是其語法結(jié)構(gòu)和含義與實(shí)際的自然語言還是存在一定的區(qū)別,因此在預(yù)訓(xùn)練部分需要自行進(jìn)行訓(xùn)練并重新定義新的語法結(jié)構(gòu)。
常見的基于深度學(xué)習(xí)的惡意軟件檢測方法,大多利用了統(tǒng)計(jì)特征,近幾年逐步也有利用自然語言處理的特征提取方法出現(xiàn),依據(jù)自身的上下文及語義信息來生成特征向量。針對傳統(tǒng)自然語言處理和匯編語言的差別,本文提出了一種新的檢測方法,該方法利用自建數(shù)據(jù)集WUFCG 對基礎(chǔ)BERT 模型進(jìn)行預(yù)訓(xùn)練,一定程度上彌補(bǔ)了自然語言和匯編語言在嵌入過程中的差別;針對程序運(yùn)行的特點(diǎn),不再僅僅把程序基本塊相連而是在基本塊的基礎(chǔ)上再以函數(shù)作為圖節(jié)點(diǎn)進(jìn)行嵌入。
本章節(jié)將介紹檢測模型的整體概況和關(guān)鍵技術(shù)細(xì)節(jié)。
基本塊是程序運(yùn)行的基本單元,由基本塊構(gòu)成的程序控制流圖能夠很準(zhǔn)確地反映程序的特征,并且控制流圖天然形成圖結(jié)構(gòu)=(,),基本塊本身作為圖頂點(diǎn)(),控制流關(guān)系形成邊()。但在程序?qū)嶋H運(yùn)行時(shí),由基本塊構(gòu)成的函數(shù)結(jié)構(gòu)也是客觀存在的,僅僅只考慮基本塊構(gòu)成的圖結(jié)構(gòu)會(huì)存在信息損失,本文在控制流圖(CFG)的基礎(chǔ)上引入了函數(shù)調(diào)用圖(FCG)結(jié)構(gòu),使得分類效果更加精確。
傳統(tǒng)的基于深度學(xué)習(xí)的惡意軟件檢測特征提取大多基于指令數(shù)量的統(tǒng)計(jì)特征,例如統(tǒng)計(jì)常量代碼、比較指令、調(diào)用指令、算數(shù)指令、MOV 指令等,近期也有一些基于經(jīng)典自然語言處理的特征提取方法取得了相較于統(tǒng)計(jì)特征更好的效果。該方法采用BERT對匯編文本進(jìn)行特征提取,相較于經(jīng)典自然語言處理方法,針對惡意軟件環(huán)境利用惡意軟件數(shù)據(jù)集WUFCG 對BERT 進(jìn)行預(yù)訓(xùn)練,并對BIG2015 數(shù)據(jù)集進(jìn)行文本嵌入,如圖1所示。
圖1 函數(shù)的嵌入框架
1.2.1 數(shù)據(jù)預(yù)處理
第一部分為預(yù)訓(xùn)練階段的數(shù)據(jù)預(yù)處理,利用WUFCG 中的惡意樣本,首先將二進(jìn)制文件進(jìn)行逆向并對匯編文本預(yù)處理,在一個(gè)單獨(dú)的基本塊中,把基本塊中冗余信息剔除,每一行代碼內(nèi)部使用短橫線連接,每行代碼之間使用空格隔開,每一行代碼看作一個(gè)單詞,一個(gè)基本塊看作一個(gè)句子,在單個(gè)函數(shù)中,相連的基本塊另起一行,函數(shù)與函數(shù)之間以空行間隔,這樣單個(gè)函數(shù)則可以看作一段,如圖2所示。
圖2 文本預(yù)處理示意圖
第二部分BIG2015 數(shù)據(jù)集的預(yù)處理,利用數(shù)據(jù)集中已逆向完成的匯編文本(.asm文件)。
1.2.2 預(yù)訓(xùn)練
匯編文本處理以后,再利用BERT預(yù)訓(xùn)練模型訓(xùn)練參數(shù),在預(yù)訓(xùn)練環(huán)節(jié)中,使用WUFCG 來訓(xùn)練BERT。在后續(xù)的訓(xùn)練中,主要利用BERT的向量模式對BIG2015 數(shù)據(jù)集中的匯編文本進(jìn)行嵌入,即將基本塊匯編文本(單句)嵌入。BERT 模型本身不含任何參數(shù)信息,GOOGLE 團(tuán)隊(duì)在完成BERT算法后利用自身計(jì)算資源使用大量自然語言文本來預(yù)訓(xùn)練,而匯編語言的單詞遠(yuǎn)沒有自然語言豐富,直接利用官方參數(shù)不夠精確。BERT 的預(yù)訓(xùn)練部分核心為兩個(gè)任務(wù),第一個(gè)任務(wù)為Masked Language Model,第二個(gè)任務(wù)為Next Sentence Prediction。Masked Language Model 旨在一個(gè)句子中隨機(jī)選中若干token 用于在預(yù)訓(xùn)練中對其進(jìn)行預(yù)測,被選中的詞語有80%的概率被替換為[MASK],10%的概率被替換為其他token,10%的概率不被替換;Next Sentence Prediction(NSP)旨在預(yù)測兩個(gè)句子(基本塊)是否會(huì)相連,在本文的環(huán)境中即預(yù)測兩個(gè)基本塊是否會(huì)相連,在函數(shù)內(nèi)部結(jié)構(gòu)層面進(jìn)行信息的提取,如圖3所示。
圖3 預(yù)訓(xùn)練框架
本節(jié)將介紹整體的惡意軟件分類模型。在上一節(jié)中獲得了基本塊的嵌入形式,為了利用FCG 進(jìn)行圖分類,還需要將整個(gè)函數(shù)中的基本塊圖池化,我們利用鄰接矩陣將函數(shù)內(nèi)部的信息進(jìn)行兩次傳播,再通過平均池化獲得函數(shù)的嵌入表達(dá)形式即帶屬性的FCG,公式(1)如下。
在圖神經(jīng)網(wǎng)絡(luò)訓(xùn)練階段,我們采用SAGPool來完成最終的圖分類。在圖神經(jīng)網(wǎng)絡(luò)中,圖的節(jié)點(diǎn)的特征信息和圖的結(jié)構(gòu)信息都會(huì)對最后的分類結(jié)果產(chǎn)生影響,僅僅只關(guān)注某一方面的信息是不準(zhǔn)確的,經(jīng)典圖的池化方法Set2Set、SortPool、DiffPool 均在考慮結(jié)構(gòu)與節(jié)點(diǎn)信息方面有所欠缺,因此本文選用綜合考慮了節(jié)點(diǎn)特征信息和圖拓?fù)浣Y(jié)構(gòu)信息的SAGPool 來對最終的FCG進(jìn)行池化分類。
SAGPool 采用了Self-Attention 機(jī)制,改寫了GCN 經(jīng)典結(jié)構(gòu),增加了自注意力參數(shù),獲得用于 池 化 的 自 注 意 力 得 分∈R,公 式(2)如下。
其中idx 為前「」 個(gè)節(jié)點(diǎn)索引,為特征注意力mask,更多細(xì)節(jié)請參考原文。
SAGPool有兩種經(jīng)典模型,全局池化結(jié)構(gòu)和分層池化結(jié)構(gòu),全局池化結(jié)構(gòu)相較于分層而言在小圖上表現(xiàn)更加優(yōu)異,而我們的樣本以小圖為主,因此選用全局池化結(jié)構(gòu),圖神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)如圖4 所示,左為全局池化,右為分層池化,圖中Graph Convolution層為標(biāo)準(zhǔn)的圖卷積層。
圖4 SAGPool池化框架
本節(jié)將評估我們的惡意軟件分類效果,實(shí)驗(yàn)所使用深度學(xué)習(xí)框架為pytorch,服務(wù)器操作系統(tǒng)為Ubuntu16.04,CPU 為Intel Core E5-2630 2.60 GHz,GPU為GTX 2080Ti,顯存48 G。
實(shí)驗(yàn)部分使用了兩個(gè)數(shù)據(jù)集,第一個(gè)數(shù)據(jù)集為自建數(shù)據(jù)集,是只含惡意樣本的WUFCG,共含惡意樣本33554 個(gè),均為x86/i386 結(jié)構(gòu),惡意樣本來自安全網(wǎng)站、安全廠商以及相關(guān)論壇,經(jīng)過預(yù)處理后形成了60G 訓(xùn)練文本;第二個(gè)數(shù)據(jù)集為2015 年Kaggle 主辦的微軟惡意軟件分類比賽中所使用的惡意軟件數(shù)據(jù)集BIG2015,共包含9 個(gè)惡意軟件家族,共10868 個(gè)樣本,包含十六進(jìn)制文件(不含PE 頭)和IDA PRO 生產(chǎn)的匯編文件,但匯編文件中包含一些無效的文件(因加殼導(dǎo)致.asm 文件為亂碼),數(shù)據(jù)集詳情如表1所示。
表1 BIG2015樣本
實(shí)驗(yàn)部分采用十折交叉驗(yàn)證,主要關(guān)注準(zhǔn)確率、精確率、召回率以及1 值,實(shí)驗(yàn)結(jié)果如表2所示。
表2 實(shí)驗(yàn)結(jié)果對比
由于設(shè)備原因,實(shí)驗(yàn)部分BERT采用的參數(shù)為最小模式BERT-TINY。實(shí)驗(yàn)結(jié)果表明,在參數(shù)量最小的BERT模式下,其分類結(jié)果已明顯優(yōu)于傳統(tǒng)方法。
該方法基于BERT 和SAGPool 實(shí)現(xiàn)了對惡意軟件家族分類,并取得了理想的效果。該方法不僅可以用在惡意軟件家族分類上,在惡意軟件檢測、漏洞檢測方面亦可有一定的拓展,具有實(shí)際意義,在后續(xù)的工作中可以考慮修改SAGPool 中的部分圖卷積細(xì)節(jié)、增加BERT 參數(shù)量來提高最終的效果。