蔣永康,吳 越,鄒福泰
(上海交通大學 網(wǎng)絡空間安全學院,上海 200240)
如今,隨著多態(tài)、變異和反分析技術的發(fā)展,惡意軟件在數(shù)量和質量上都呈現(xiàn)爆發(fā)性增長。文獻[1]提到,海量數(shù)據(jù)的惡意性檢測任務正逐漸成為當下反病毒引擎的主要挑戰(zhàn)之一。文獻[2]表明,盡管攻擊者開發(fā)移動平臺惡意軟件的興趣與日俱增,但windows依然是被攻擊的主要平臺。2017年第一季度檢測到的4.8千萬個惡意樣本中,來自windows平臺的占到77.2%。這表明傳統(tǒng)的基于特征匹配和行為分析的惡意代碼分析技術已經很難滿足海量樣本的惡意檢測任務。如何實現(xiàn)大規(guī)模數(shù)據(jù)的高效分析,已經成為惡意代碼研究的主要課題之一。
因此,本文主要研究基于圖像矢量的惡意代碼分類模型在大規(guī)模PE(Portable Executable)格式惡意代碼分類任務中的應用和效果。第1章介紹惡意代碼的矢量化技術;第2章介紹構建的深度學習模型;第3章給出模型在微軟數(shù)據(jù)集上的實驗結果;第4章分析模型的意義,給出進一步的研究方向。
惡意代碼矢量化是一種將惡意代碼樣本映射為圖像矢量的編碼技術。惡意代碼矢量化的最終目標是用一張全局唯一的圖像矢量來表征惡意代碼,從而將惡意代碼的檢測問題轉化為圖像的分類問題。惡意代碼矢量化的核心在于編碼源、編碼長度和編碼量的選擇。
2011年,Nataraj[3]提出了基于二進制文件的惡意代碼矢量化方法。Nataraj矢量化選擇惡意代碼二進制文件作為編碼源,將8-bit二進制映射為8-bit整型數(shù)值。通常來說,編碼量為整個PE文件或者PE文件中包含可執(zhí)行代碼的.text節(jié)。圖1為Nataraj矢量化的具體步驟。
圖1 Nataraj矢量化編碼方法
Nataraj矢量化是惡意代碼分析技術的一種新思路,打開了基于圖像矢量的惡意代碼分析的大門。文獻[4-6]中構建的惡意代碼分析模型都將Nataraj矢量化作為重要的輸入特征。然而,加殼和混淆技術能使惡意代碼的二進制文件發(fā)生顯著變化,直接導致輸出的圖像矢量產生巨大差異,使得Nataraj矢量化面對加殼和混淆技術時魯棒性很差。同時,文獻[4]也表明,在Nataraj矢量化下,不同惡意代碼家族的圖像矢量也有可能十分相似。因此,Nataraj矢量化對于攻擊者來說十分脆弱。
2015年的黑帽大會上,Andrew[7]提出了另一種基于反匯編文件的惡意代碼矢量化思路。Andrew矢量化選取反匯編十六進制機器碼作為編碼源,將4-bit的十六進制機器碼映射成4×8-bit的整數(shù)值,再進行填充。如圖2所示,Andrew矢量化具有很好的視覺可解釋性,圖像矢量的每一行對應一條機器碼。
圖2 Andrew矢量化編碼方法
Andrew矢量化不僅編碼了惡意代碼的機器碼信息,還通過填充保留了匯編指令的空間信息。因此,Andrew矢量化對于加殼和混淆技術具有較好的魯棒性。遺憾的是,Andrew并沒有給出詳細的分析和具體的深度學習模型。因此,本文將詳細闡述Andrew矢量化中編碼長度、編碼量選擇問題,并給出具體的深度學習模型。
Andrew矢量化中的一個關鍵問題在于,為什么選擇64-bit矢量填充。
一方面,如圖3所示的Intel 64和IA-32架構指令編碼格式[8]規(guī)定指令的最大長度為15 Bytes。更一般地,指令長度不會超過11 Bytes。
圖3 Intel 64和IA-32架構指令格式
另一方面,通過對微軟惡意代碼數(shù)據(jù)集(BIG2015)[9]的研究發(fā)現(xiàn),99%的惡意樣本的指令長度都不超過64 bit,結果如圖4所示。
圖4 BIG2015指令長度累積概率分布
因此,Andrew矢量化選擇64-bit矢量填充,以最大程度地保留惡意代碼的指令信息。
為了加速矢量化過程和深度學習網(wǎng)絡的訓練時間,需要在保證模型準確率的前提下,選擇一個合適的、較小的編碼量。
研究BIG2015時發(fā)現(xiàn),不同惡意代碼反匯編文件包含的指令數(shù)量差異很大,如圖5所示,51%的樣本包含的指令少于3 200條。結合深度學習中圖片大小的選擇經驗,3 200是一個合理的編碼指令數(shù)量。
圖5 BIG2015指令數(shù)量累積概率分布
2014年,Kim[10]提出了一個適用于語句分類的單層卷積神經網(wǎng)絡(CNN)架構模型。受Kim研究的啟發(fā),本文提出了如圖6所示的基于圖像矢量的惡意代碼分類模型架構。
圖6 基于圖像矢量的惡意代碼分類模型架構
模型輸入矢量化的惡意代碼圖像,大小為(m,64),其中m代表編碼的指令數(shù)量。通道變換模塊輸出大小為的圖像矢量,其中k代表通道數(shù),是待確定的超參數(shù)。下面將以k=1為例,給出模型的詳細描述。
首先,記Sj∈R64為64維圖像矢量,對應m中的第j條指令,則惡意樣本Xi可以表示為:
記每個卷積層的過濾器為fr∈Rhq,其中h、q表示過濾器的尺寸,每次卷積窗口移動都將h條指令的q/64矢量映射成新的特征矢量。例如,記ci,t表示由指令Xi:i+h-1(t:t+q-1)經過濾器移動到位置t得到的新特征矢量,則:
其中b∈R為偏置項參數(shù)。
因此,當一個行卷積操作完成時,一個新的特征矢量便產生了:
當一層卷積的所有操作完成時,便得到了一個新的圖像特征矢量:
對c進行批量歸一化(Batch Normalization)。批量歸一化允許深度學習模型使用較大的學習率進行訓練,能一定程度上抗過擬合,對于加速模型的訓練具有顯著的意義[11]。mini-batch上的批量歸一化算法的詳細過程如下:
輸入:每個mini-batch上的c值φ={c1…n}
1:需要學習的參數(shù)γ,β
輸出:ei=BNβ,γ(ci)
5:縮放與位移ei←β ≡ BNβ,γ(ci)
批量歸一化后,對得到的矢量進行激活和最大值采樣,得到新的特征矢量:
其中f為非線性函數(shù)。
至此,已經描述了模型中單個CNN模塊的特征提取過程。模型堆疊四個CNN模塊進行抽象特征提取,因此全局最大采樣(Global Max Pooling)層的輸入為:
其中g由具體的CNN模塊參數(shù)決定。為了進一步降低模型輸出的特征向量維度,并同時保留重要特征,對整個CNN模塊輸出進行全局最大采樣,輸出惡意代碼的抽象特征矢量=max{e}。
其中yi表示惡意樣本屬于家族i的概率,n表示惡意樣本的家族數(shù)量。
基于圖像矢量的惡意代碼分類模型利用上述方法對惡意代碼的指令矢量進行層層變換,提取出高緯度抽象特征,從而實現(xiàn)惡意代碼的分類。
BIG2015數(shù)據(jù)集包含9個惡意家族的21 741個樣本,其中10 868個樣本為帶標簽的訓練集,其他為不帶標簽的測試集。訓練集中,每一個樣本包含一個20字符的哈希ID和一個整數(shù)值得家族標簽,分別為 Ramnit(F1)、Lollipop(F2)、Kelihos ver3(F3)、Vundo(F4)、Simda(F5)、Tracur(F6)、Kelihos、ver1(F7)、Obfuscator.ACY(F8)和 Gatak(F9)。每個惡意樣本包含兩個文件,分別為十六進制表示的、去除PE頭的二進制文件和反匯編工具IDA生成的包含惡意樣本機器碼、匯編指令等的元數(shù)據(jù)文件。
因為BIG2015中只有訓練集帶有標簽,所以選取訓練集中的惡意樣本作為模型驗證的基準,其分布如圖7所示。
圖7 BIG2015訓練集樣本家族信息分布
實驗使用的平臺信息如表1所示,具體的模型參數(shù)見表2。
表1 實驗平臺信息
表2 基于圖像矢量的惡意代碼分類模型參數(shù)
模型使用交叉熵損失函數(shù),定義如下:
其中M表示mini-batch的樣本數(shù)量,N表示惡意家族的數(shù)量。Y為樣本標簽值,如果樣本i在家族j中,則Yij=1;反之,Yij=0。y為模型的預測輸出,yij代表樣本i在家族j中的概率。
同時,模型使用準確率(accuracy)、精確率(precision)、召回率(recall)和f1_socre來進行模型性能的評估,其定義如下。
記S為數(shù)據(jù)集中的樣本數(shù)量,i表示S中的第i個樣本,y表示預測值,Y表示真是值,l(x)為指示函數(shù),則:
其次,定義:
記η為S的子集,則:
綜上,accuracy反映模型分類正確的樣本占總樣本的比例;precision體現(xiàn)的是模型不將一個負樣本標記為正原本的能力,recall反映的是模型找到所有正樣本的能力,f1_score是兩者的加權體現(xiàn)。
實驗中,使用10-fold交叉驗證方法對模型進行評估,結果如表3所示。結果表明,基于Andrew圖像矢量的惡意代碼分類模型在BIG2015訓練集上,能實現(xiàn)97.87%的準確率和0.094的損失,其他詳細性能評價指標詳見表3。平均來看,模型的訓練時間為1.7 h,訓練好的模型檢測1 024個樣本的時間為5.11 s。
表3 BIG2015 10-fold交叉驗證結果(k=1,m=3 200)
與相關研究對比來看,如表4所示(預測時間為1 024個樣本的檢測時間),本文提出的基于圖像矢量的惡意代碼分類模型的準確率只比文獻[12]和文獻[4]中模型的能達到的準確率略低,主要原因在于后兩者都是基于復雜、耗時的特征提取和融合技術。因此,本文提出模型的預處理時間、訓練時間和預測時間相較于文獻[12]和文獻[4]都是成倍減少的。同時,相較于文獻[13-14]的方法,本文的模型在準確率上也有明顯優(yōu)勢。
表4 相關研究工作比較
本文主要研究了基于圖像矢量的惡意代碼分類模型在大規(guī)模PE(Portable Executable)格式惡意代碼分類任務中的應用和效果,詳細闡述了Andrew矢量化技術的相關細節(jié),設計和訓練了基于Andrew矢量化的惡意代碼分類的深度學習模型。模型在BIG2015數(shù)據(jù)集上的交叉驗證結果表明,雖然模型的準確率比冠軍模型(基于復雜特征提取和融合技術)的準確率略低,但是實現(xiàn)了顯著的性能提升。同時,實驗結果也表明,與其他相關研究相比,本文的模型在準確率上優(yōu)勢明顯。
綜上,基于圖像矢量的惡意代碼分類模型成功將惡意代碼的分類問題轉化為圖片的分類問題,且模型具有較好的理論魯棒性,對于大規(guī)模惡意代碼的分類任務具有實際意義。然而,Andrew矢量化使用了大量的無效填充,使得圖片矢量的編碼效率很低。因此,如何提高惡意代碼圖片矢量化的編碼效率是今后進一步的研究方向。