葉 彪,李 琳,丁 應(yīng),宋荊漢,萬振華
(1.武漢科技大學(xué) 計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院,湖北 武漢 430065;2.智能信息處理與實(shí)時(shí)工業(yè)系統(tǒng)湖北省重點(diǎn)實(shí)驗(yàn)室,湖北 武漢 430065;3.上海航天精密機(jī)械研究所,上海 201600;4.深圳開源互聯(lián)網(wǎng)安全技術(shù)有限公司,廣東 深圳 518000)
由于惡意軟件帶來的經(jīng)濟(jì)損失逐年上升,例如震網(wǎng)病毒Stuxnet[1]、勒索病毒W(wǎng)annaCry[2]。惡意軟件檢測(cè)和分類變得愈發(fā)重要。惡意軟件分類大體的框架可以分為三個(gè)部分:數(shù)據(jù)處理、特征提取和分類器設(shè)計(jì),其中特征處理和分類器設(shè)計(jì)是惡意軟件分類的重要技術(shù)手段,數(shù)據(jù)處理是貫徹始終的方法。在特征提取的階段,要盡可能篩選信息增益大的特征。特征提取的好壞直接影響分類的結(jié)果。近幾年惡意代碼靜態(tài)特征提取主要基于字節(jié)序列、可閱讀字符串、文件頭部信息、熵、動(dòng)態(tài)鏈接庫等特征,然后使用機(jī)器學(xué)習(xí)或者深度學(xué)習(xí)對(duì)特征進(jìn)行訓(xùn)練和分類。
特征提取方法用于深度學(xué)習(xí)中,Schultz等人[3]首次將N-gram提取方法引入惡意軟件的特征提取工作。他們首先將惡意文件的字節(jié)轉(zhuǎn)化為16進(jìn)制,然后將其劃分為多組字節(jié)序列,再利用N-gram進(jìn)行提取,將結(jié)果放入多種分類器中進(jìn)行訓(xùn)練,證明了這種方法比單純的基于簽名的方法更好。Zhang Hanqi等人[4]提出了一種靜態(tài)提取方法,將操作碼轉(zhuǎn)化為N-gram序列,針對(duì)勒索病毒取得了不錯(cuò)效果。Nataraj等人[5]提出將惡意軟件轉(zhuǎn)化為灰度圖像的方法,驗(yàn)證了圖像作為中間表示的可行性。徐玄驥等人[6]以及楊春雨等人[7]使用多個(gè)特征進(jìn)行融合的方法來檢測(cè)惡意軟件,該方法比單純使用一種特征的效果要好。蔣永康等人[8]將惡意代碼的匯編指令轉(zhuǎn)化為圖像矢量,該模型在微軟big2015數(shù)據(jù)集上的交叉驗(yàn)證準(zhǔn)確率達(dá)到了97.87%。傳統(tǒng)的特征提取方法沒有考慮特征權(quán)重的思想,每個(gè)樣本的特征向量都非常大,運(yùn)行十分緩慢,因此需要引入特征權(quán)重對(duì)特征進(jìn)行篩選。
在特征權(quán)重算法中,最經(jīng)典的就是由Salton等人[9]提出的TFIDF算法,該算法由詞頻(TF)和逆文檔頻率(IDF)組成。它的主要思想是特征在文檔中出現(xiàn)的頻率越高,出現(xiàn)該特征的文檔數(shù)越少,則特征對(duì)分類的區(qū)分度越大。該算法和1-gram提取進(jìn)行結(jié)合可以有效降低特征維度、提高信息增益并減少計(jì)算時(shí)間?;谠撍惴ǖ南嚓P(guān)研究取得了豐富的成果,例如吳思慧等人[10]提出將TFIDF自注意層和長(zhǎng)短期記憶網(wǎng)絡(luò)結(jié)合使用,在垃圾短信識(shí)別上準(zhǔn)確率更高,速度更快。但是在惡意軟件檢測(cè)與分類領(lǐng)域,相關(guān)文獻(xiàn)十分稀少。并且該算法本身有一個(gè)缺陷,沒有利用標(biāo)簽信息,是一種無監(jiān)督的特征權(quán)重算法。
鑒于上述情況,該文提出了一種改進(jìn)的特征權(quán)重方法,利用標(biāo)簽信息,提升了惡意軟件分類的效率。貢獻(xiàn)如下:改進(jìn)了特征權(quán)重方法并將其引入惡意軟件分類;從理論上解釋了特征權(quán)重對(duì)特征提取的重要性;實(shí)驗(yàn)對(duì)比了不同模型的分類準(zhǔn)確率和時(shí)間開銷。
N-gram是NLP(Natural Language Processing,NLP)中大詞匯連續(xù)語音識(shí)別常用的一種語言模型[11],它的基本思想是統(tǒng)計(jì)一個(gè)特定長(zhǎng)度(N)單詞的頻度,每1個(gè)單詞塊為1gram。通過該方法可以提取特征,從而區(qū)分不同類別的語義信息,在惡意軟件的特征提取階段同樣可以用到N-gram的方法。
常用的是二元的Bi-gram和三元的Tri-gram。當(dāng)對(duì)一個(gè)由256個(gè)字組成的樣本進(jìn)行Bi-gram提取時(shí),最多將產(chǎn)生65 536個(gè)詞語,進(jìn)行Tri-gram提取時(shí)將產(chǎn)生16 777 216個(gè)詞語,特征提取的時(shí)間占所有時(shí)間的90%以上。由于惡意樣本通常是海量的,因此時(shí)間成本很重要。該文使用的1-gram是N-gram的一種特殊情況,此時(shí)滑動(dòng)窗口N為1,可以直接理解為統(tǒng)計(jì)單個(gè)詞語的個(gè)數(shù)或者頻度。該方法為先利用訓(xùn)練集產(chǎn)生一定量的特征詞,然后根據(jù)特征詞庫對(duì)每個(gè)樣本進(jìn)行特征詞個(gè)數(shù)統(tǒng)計(jì),可以節(jié)約大量的計(jì)算時(shí)間。
1.2.1 TFIDF算法
傳統(tǒng)的特征權(quán)重算法是詞頻-逆向文件頻率算法TFIDF(Term Frequency-Inverse Document Frequency),它是一種用于信息檢索與數(shù)據(jù)挖掘的常用加權(quán)技術(shù),源于NLP領(lǐng)域常用于挖掘文章中的關(guān)鍵詞。TFIDF有兩層意思,一層是詞頻(TF),形容一個(gè)詞語在文章中的出現(xiàn)次數(shù)。另一層是逆文檔頻率(IDF),與此相關(guān)的是包含一個(gè)詞條的文檔數(shù),則一個(gè)單詞的TFIDF值就是二者的乘積。
TFIDF=TF×IDF
(1)
逆文檔頻率思想認(rèn)為出現(xiàn)特征的文檔數(shù)越大,則該特征對(duì)分類的區(qū)分度越小,此方法可以突出重要詞,抑制次要詞[12]。但是此方法并不完善,沒有利用到標(biāo)簽的信息,因此只需要將逆文檔頻率這個(gè)概念引入標(biāo)簽信息,便可以得到有監(jiān)督的特征提取算法。
1.2.2 改進(jìn)的特征權(quán)重算法
首先在訓(xùn)練集上統(tǒng)計(jì)一定量每個(gè)類別中1-gram候選詞。針對(duì)一個(gè)候選詞a進(jìn)行分析,計(jì)算該詞在數(shù)據(jù)集中出現(xiàn)的概率:
(2)
其中,PA為a在數(shù)據(jù)集中出現(xiàn)的概率,Na為a在數(shù)據(jù)集中出現(xiàn)的次數(shù),ND為數(shù)據(jù)集的樣本數(shù)量。
計(jì)算候選詞a在一個(gè)類別C中出現(xiàn)的概率:
(3)
其中,Ca為a在C中出現(xiàn)的次數(shù),NC為C的樣本數(shù)。
計(jì)算候選詞a的特征權(quán)重:
(4)
通過上式計(jì)算出的Weight(a)即為候選詞a的特征權(quán)重。信息熵(Entropy)是度量樣本集合純度最常用的一種指標(biāo),在決策樹算法中廣泛使用。假定樣本集合D中第C類樣本所占的比例是Ck(k=1,2,…,|y|),則D的信息熵定義為:
(5)
Entropy(D)的值越小,則D的純度越高。一般而言,特征詞a的特征權(quán)重越大,那么使用a對(duì)數(shù)據(jù)集進(jìn)行劃分得到的純度提升就越大,也就是說特征詞a對(duì)分類起到的作用越大。計(jì)算每個(gè)類別中所有候選詞的特征權(quán)重,然后將所有類別的特征權(quán)重進(jìn)行合并去重,降序排序后取前面的候選詞作為特征詞庫,通過這個(gè)特征詞庫對(duì)數(shù)據(jù)集進(jìn)行特征提取。
卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Network,CNN)是基于前饋神經(jīng)網(wǎng)絡(luò)的一種深度學(xué)習(xí)模型,提供了一種端到端的學(xué)習(xí)模型,模型中的參數(shù)可以通過傳統(tǒng)的梯度下降方法進(jìn)行訓(xùn)練,經(jīng)過訓(xùn)練的CNN能夠?qū)W習(xí)到圖像中的特征,并且完成對(duì)圖像特征的提取和分類工作[13]。CNN通過卷積和池化操作進(jìn)行深度學(xué)習(xí)和參數(shù)約簡(jiǎn),第一層為輸入層,中間有若干隱藏層,最后一層為全連接層,輸出分類結(jié)果。
同一個(gè)家族的惡意軟件存在較大的相似性,因此將同一家族的ASM文件提取特征后轉(zhuǎn)化為灰度圖同樣具有相似性,加上CNN對(duì)圖片識(shí)別的出色效果,以及CNN的運(yùn)算速度較快,因此選用CNN作為分類器。該文采用了4層CNN的結(jié)構(gòu),使用3*3的卷積核和2*2的池化,使得分類更為快速準(zhǔn)確;并在每一層中引入了Relu,而不是整個(gè)網(wǎng)絡(luò)只使用一層Relu。
如圖1所示,該方法的流程為:首先將數(shù)據(jù)分成訓(xùn)練集和測(cè)試集,在訓(xùn)練集中對(duì)所有樣本執(zhí)行特征權(quán)重算法,找出一定量的特征詞,然后根據(jù)該特征詞庫對(duì)訓(xùn)練集和測(cè)試集進(jìn)行特征提取,生成所有樣本的特征圖,將特征圖傳入CNN模型進(jìn)行訓(xùn)練和分類,最后得出模型的分類結(jié)果。
由于該文研究惡意軟件的靜態(tài)檢測(cè),因此選用的數(shù)據(jù)集為微軟于2015年在kaggle平臺(tái)發(fā)布的big2015數(shù)據(jù)集,該數(shù)據(jù)集已經(jīng)成為惡意軟件研究人員的基準(zhǔn)數(shù)據(jù)集,并被大量引用[14]。該文使用的惡意軟件表現(xiàn)形式是ASM文件,該文件是通過IDA工具反匯編生成的。big2015中共有21 741個(gè)樣本,但是只有10 868是有標(biāo)簽的樣本,該數(shù)據(jù)集有9個(gè)惡意軟件類別,每個(gè)類別的名稱、數(shù)目和標(biāo)簽如表1所示。將10 868個(gè)有標(biāo)簽的數(shù)據(jù)按類別隨機(jī)劃分為訓(xùn)練集(80%)和測(cè)試集(20%)。
2.2.1 ASM文件的特征提取
ASM文件內(nèi)有push、mov、cmp等操作碼,還有各種其他英文字段,由于ASM文件中還有一些16進(jìn)制字段,比如BD、E3等會(huì)被誤判為英文單詞,所以通過正則式方法只提取長(zhǎng)度大于等于3的單詞。
表1 big2015數(shù)據(jù)集中的樣本類別及數(shù)目
通過python代碼提取的操作碼按照頻率從高到底排列,比如dword、byte、segment等。
在訓(xùn)練集上對(duì)每個(gè)類別分別提取300個(gè)頻率高的候選詞,然后對(duì)每個(gè)類別所有候選詞進(jìn)行第一節(jié)中的特征權(quán)重計(jì)算,合并去重,然后進(jìn)行降序排列,取前256個(gè)候選詞作為特征詞庫。表2顯示了權(quán)重靠前的幾個(gè)特征詞的權(quán)重,雖然dword這個(gè)特征詞出現(xiàn)頻率非常高,但是它在所有類別里出現(xiàn)得很平均,因此特征權(quán)重的值反而很小。endp這個(gè)詞的出現(xiàn)頻率很低,但是它在各個(gè)類別中的分布不均勻,因此特征權(quán)重很高。
表2 權(quán)重靠前的幾個(gè)特征詞的權(quán)重
通過該特征詞庫對(duì)所有ASM文件進(jìn)行特征提取,統(tǒng)計(jì)該特征中單詞的出現(xiàn)次數(shù),然后將數(shù)據(jù)進(jìn)行取整并標(biāo)準(zhǔn)化。例如特征詞庫第一個(gè)詞是endp,第二個(gè)詞是xchg等等,然后對(duì)于一個(gè)樣本,經(jīng)過統(tǒng)計(jì),endp出現(xiàn)了100次,xchg出現(xiàn)了150次,則即可得到該樣本的特征向量:
(100,150,…)
(6)
為了消除同一個(gè)特征向量中不同特征間量綱的影響,提高數(shù)據(jù)之間的可比性,將數(shù)據(jù)統(tǒng)一到同一個(gè)量綱下。該文選用(max,min)標(biāo)準(zhǔn)化方法,先得到一個(gè)特征向量中的最大值xmax和最小值xmin,標(biāo)準(zhǔn)化的公式如下:
(7)
將數(shù)據(jù)轉(zhuǎn)化到0~255的區(qū)間,之所以選用這個(gè)區(qū)間,是因?yàn)樵搮^(qū)間兼顧了機(jī)器學(xué)習(xí)的輸入要求(數(shù)字過大會(huì)導(dǎo)致運(yùn)算過于緩慢)、CNN的輸入要求、圖像可視化要求(0~255對(duì)應(yīng)灰度像素的范圍)。
最后將長(zhǎng)度為256的特征向量轉(zhuǎn)化為16*16的灰度圖,作為單個(gè)文件的特征圖,傳入CNN進(jìn)行訓(xùn)練。
如圖2所示,每種類別的樣本各選取一個(gè)產(chǎn)生一張灰度圖,每張圖就代表一個(gè)樣本的最終特征圖。觀察這九張圖,例如對(duì)比第一個(gè)像素,標(biāo)簽為6的樣本明顯比其他的要亮;對(duì)比第二個(gè)像素,標(biāo)簽3和5的樣本明顯比其他的要亮等等。特征提取的目的就是在有限的特征向量上盡可能提高不同類別的區(qū)分度,因此圖2可以直觀地體現(xiàn)出改進(jìn)的特征權(quán)重算法的作用。
2.2.2 CNN網(wǎng)絡(luò)設(shè)計(jì)
通過對(duì)多種優(yōu)化器進(jìn)行實(shí)驗(yàn)對(duì)比,選用收斂速度和準(zhǔn)確率較好的Adam優(yōu)化器。訓(xùn)練批次為128,訓(xùn)練輪次為100,并使用變化學(xué)習(xí)率,設(shè)置初始學(xué)習(xí)率為0.005,每經(jīng)過5輪迭代,將學(xué)習(xí)率變?yōu)樵?.9倍,以達(dá)到逐漸逼近最優(yōu)值的目的。CNN的架構(gòu)參數(shù)如表3所示,采用的CNN總體上分為四層,輸入為16*16的灰度圖,其中前三層為卷積-激活-池化的組合重復(fù)三次,最后一層為全連接層,輸出為9個(gè)類別。
表3 CNN架構(gòu)參數(shù)
2.2.3 實(shí)驗(yàn)環(huán)境
(1)處理器:Intel(R) Core(TM) i7-6700 CPU;
(2)內(nèi)存:8 GB;
(3)硬盤:120 GB SSD+1TB HDD;
(4)集成開發(fā)環(huán)境:PyCharm Community Edition 2020.3 x64;
(5)Python版本:3.8;
(6)深度學(xué)習(xí)框架:Torch 1.7.1。
使用accuracy(準(zhǔn)確率)、precision(精準(zhǔn)率)、recall(召回率)和f1進(jìn)行模型性能的評(píng)估,其定義如下[8]:
記S為數(shù)據(jù)集中的樣本數(shù)量,i表示S中的第i個(gè)樣本,y表示預(yù)測(cè)值,Y表示真實(shí)值,l(x)為指示函數(shù),則:
(8)
其次,定義:
(9)
(10)
令s為S的子集,則:
(11)
(12)
(13)
其中,accuracy為模型預(yù)測(cè)正確占總量比例; precision為預(yù)測(cè)正確中真正確的比例;recall所有真正確中被正確預(yù)測(cè)的比例;f1是precision和recall二者的加權(quán)數(shù)值。
實(shí)驗(yàn)結(jié)果如表4所示,可見四個(gè)指標(biāo)均在99%以上。
表4 實(shí)驗(yàn)結(jié)果
分類器分類效果的混淆矩陣如圖3所示,圖中豎向0到8表示樣本的真實(shí)標(biāo)簽(可以參考表1),橫向0到8表示該分類器的分類結(jié)果,圖中任一點(diǎn)表示某一類測(cè)試數(shù)據(jù)的真實(shí)標(biāo)簽和測(cè)試標(biāo)簽相等的頻率。該圖像的數(shù)據(jù)已經(jīng)進(jìn)行了歸一化,每一行的數(shù)據(jù)加起來是1,代表該真實(shí)標(biāo)簽的數(shù)據(jù)總量為1(由于只取兩位有效數(shù)字,因此存在0.01的誤差),右邊的對(duì)比指示條代表正確率大小,顏色越深則越接近1,顏色越淺則越接近0。用混淆矩陣來評(píng)判分類器的表現(xiàn),如果數(shù)據(jù)更加集中在對(duì)角線上,則代表分類器的效果越好,數(shù)據(jù)越分散則分類器效果越差。真實(shí)標(biāo)簽為1、2、3、4、6、8時(shí),預(yù)測(cè)標(biāo)簽也分別是1、2、3、4、6、8的頻率為1,代表幾乎所有標(biāo)簽為1、2、3、4、6、8的數(shù)據(jù)都被分類正確了。真實(shí)標(biāo)簽為7時(shí),有97%的數(shù)據(jù)被分類器正確分類了,還有3%的數(shù)據(jù)被錯(cuò)誤分類為0、3類。
如圖4所示,使用基于頻率特征提取的方法進(jìn)行分類,該方法先統(tǒng)計(jì)各個(gè)特征詞的頻率,并簡(jiǎn)單選取在全部樣本中出現(xiàn)頻率高的特征詞,然后進(jìn)行特征提取。對(duì)比圖3(文中方法)可以發(fā)現(xiàn),該方法總體上效果還不錯(cuò),但第四類的查全率比較低,只有80%的樣本被正確分為第四類,而文中方法在第四類的查全率是100%。簡(jiǎn)單的基于特征頻率的特征提取方法只是關(guān)心所有樣本的特征頻率,只是取所有樣本特征中頻率靠前的特征,有些頻率不高但是信息增益很大的特征容易被忽視。
文中方法不再簡(jiǎn)單地關(guān)注特征詞在所有樣本中出現(xiàn)的概率,而是考慮信息增益的思想,只關(guān)注對(duì)分類有幫助的特征,因此明顯優(yōu)于基于頻率特征提取的方法。
big2015數(shù)據(jù)集上的分類效果對(duì)比如表5所示。
表5 big2015數(shù)據(jù)集上的橫向?qū)Ρ?/p>
通過實(shí)驗(yàn)結(jié)果與其他參考文獻(xiàn)實(shí)驗(yàn)結(jié)果的對(duì)比,第一行為冠軍方法,第六行為使用TFIDF方法做的對(duì)比實(shí)驗(yàn),最后一行為該文采用的方法。可以清晰地看到,文中方法在準(zhǔn)確率上優(yōu)于操作碼頻率提取方法、kNN、圖像矢量這些自動(dòng)提取方法,逼近該數(shù)據(jù)集上的冠軍方法(準(zhǔn)確率99.83%),而且在特征的預(yù)處理、訓(xùn)練時(shí)間和預(yù)測(cè)時(shí)間上要明顯優(yōu)于冠軍方法。該文的特征選擇方法準(zhǔn)確率比TFIDF方法略高,體現(xiàn)了文中方法對(duì)TFIDF提取方法的優(yōu)越性,在預(yù)處理時(shí)間上,兩者不分上下,因?yàn)槎叨家?jīng)過特征提取和CNN學(xué)習(xí)的過程,只是權(quán)重策略算法不同而已。除此之外,還可以發(fā)現(xiàn)手動(dòng)提取特征比自動(dòng)提取特征的效果要好,預(yù)處理的時(shí)間要更短一些;諸如在特征提取階段直接使用CNN進(jìn)行自動(dòng)提取的方法可以減少人工干預(yù),因而容錯(cuò)率更高,但效果和處理時(shí)間上沒有手動(dòng)提取的好。
在人們的工作生活和計(jì)算機(jī)產(chǎn)品的聯(lián)系日益緊密的今天,惡意軟件的識(shí)別和分類工作是人們能享受到信息時(shí)代便利和數(shù)據(jù)安全的保障。在應(yīng)對(duì)諸如零日漏洞等問題上,惡意軟件分類效率是至關(guān)重要的,準(zhǔn)確率和檢測(cè)時(shí)間就是效率的體現(xiàn)。所提方案優(yōu)化了傳統(tǒng)特征權(quán)重算法,選出了信息增益高的特征詞,因而增加了分類的效率;通過結(jié)合CNN網(wǎng)絡(luò)模型,完成了惡意軟件的高效分類工作。但一些模型參數(shù)尚有調(diào)整優(yōu)化空間,例如特征權(quán)重公式和CNN框架均未達(dá)到最優(yōu),且未利用字節(jié)碼數(shù)據(jù)集,這些問題都是以后的優(yōu)化方向。