強(qiáng) 晗,郭亞蘭,田禮明
(江南計(jì)算技術(shù)研究所,江蘇 無錫 214000)
隨著信息化的迅猛發(fā)展,互聯(lián)網(wǎng)與計(jì)算機(jī)得到廣泛普及和應(yīng)用,給人類的生活帶來巨大便利,社會(huì)工作效率得到顯著提高。但與此同時(shí),信息安全問題也日益嚴(yán)峻,不僅威脅到個(gè)人隱私和利益,企業(yè)信息安全甚至國家信息安全都面臨著嚴(yán)峻挑戰(zhàn)。由于惡意代碼的傳播和擴(kuò)散而引起的案件數(shù)量正與日俱增,每年增幅達(dá)到50%以上[1]。爆炸性增長的海量惡意代碼不僅對社會(huì)與個(gè)人造成巨大損失,也對惡意代碼檢測技術(shù)提出了更高的要求。
經(jīng)典的惡意代碼檢測方法如基于特征庫、基于逆向工程反匯編和基于啟發(fā)式掃描的檢測技術(shù)在性能和效率上已無法應(yīng)對當(dāng)前惡意代碼的巨大挑戰(zhàn)。
近年來,隨著人工智能與機(jī)器學(xué)習(xí)技術(shù)的發(fā)展,有學(xué)者將這些技術(shù)應(yīng)用到惡意代碼的檢測中,并且取得了不錯(cuò)的效果。Masud M[2]以字節(jié)n-gram序列、指令序列、系統(tǒng)調(diào)用函數(shù)組成多維特征,結(jié)合支持向量機(jī)算法,在檢測準(zhǔn)確率、錯(cuò)判率和漏報(bào)率上均有不錯(cuò)的表現(xiàn)。Igor Santos[3]以操作碼出現(xiàn)的頻率和選擇執(zhí)行文件的蹤跡作為特征,利用KNN[4]、決策樹[5]、SVM[6]、貝葉斯算法[7]訓(xùn)練分類器,也取得了很好的檢測效果。
深度學(xué)習(xí)是近年來被廣泛應(yīng)用的一種機(jī)器學(xué)習(xí)技術(shù)。深度學(xué)習(xí)可以對多層深度結(jié)構(gòu)實(shí)現(xiàn)非線性映射,將復(fù)雜函數(shù)用較少的參數(shù)來表示,具有從樣本中學(xué)習(xí)到本質(zhì)特征的強(qiáng)大能力,在圖像識(shí)別、機(jī)器翻譯等領(lǐng)域具有廣泛的應(yīng)用。文中基于惡意代碼反匯編后指令序列的特征,利用深度置信網(wǎng)絡(luò)實(shí)現(xiàn)惡意代碼的檢測。它的優(yōu)點(diǎn)有兩方面:其一,使用深度網(wǎng)絡(luò)結(jié)構(gòu)進(jìn)行分類的結(jié)果比較準(zhǔn)確;其二,深度置信網(wǎng)絡(luò)是無監(jiān)督學(xué)習(xí),省去了大量對樣本進(jìn)行標(biāo)注的時(shí)間,提高了效率。
大部分惡意代碼為了提高隱蔽性以躲避殺毒軟件的查殺以及壓縮體積來便于廣泛傳播,都會(huì)采取加殼處理。常用的加殼工具如ASPACK、PECOMPACT等。
為了避免殼對惡意代碼檢測的干擾,需要先進(jìn)行查殼與脫殼。在查殼的技術(shù)思路上,主要有兩個(gè)方向,一是根據(jù)殼的特征碼,二是計(jì)算信息熵。常用的查殼工具有PEID、FILESCANNER。
脫殼是加殼的逆過程。為了使對惡意代碼的分析不受干擾,首先要脫去保護(hù)殼,找到原程序的真正入口點(diǎn)。脫殼主要有單步跟蹤法、ESP定律法、兩次內(nèi)存鏡像法、直達(dá)OEP法和模擬跟蹤法。目前常用的脫殼軟件有VMUNPACKER、WASPACK、UNDBPE、UNFSG、EUNPACJER等。
通常,獲取惡意代碼源碼是很困難的,多數(shù)情況下,分析者只能得到其PE文件。對于PE文件,無法對其直接進(jìn)行分析,因此需要反匯編,通過分析惡意程序的匯編代碼來理解惡意程序的原理和真實(shí)目的。
目前,主流的反匯編工具有IDA Pro、W32Dasm、C32Asm等。圖1為一個(gè)樣本經(jīng)過IDA pro反匯編后的效果圖。
n-gram技術(shù)最早應(yīng)用在語音和模式識(shí)別中,后來在文本分類中也有應(yīng)用,并且取得了很好的效果。文中方案采取n-gram[8]方法提取樣本的操作碼序列,其中滑動(dòng)窗口的長度n的選擇尤為重要,n取值過小則無法提取出較長、較復(fù)雜的匯編指令碼序列的特征,n取值過大則會(huì)受到冗余代碼的干擾和影響。Moskovitch[9]的實(shí)驗(yàn)結(jié)果表明,使用n>4的滑動(dòng)窗口構(gòu)造特征序列時(shí),模型的分類準(zhǔn)確率并沒有明顯提升,n值取3或4時(shí)模型分類效果最佳。
圖1 IDA Pro反匯編效果
2.2.1 信息增益
信息增益(information gain,IG)為信息熵的差。信息熵[10]的概念由香農(nóng)于1948年提出,借助了熱力學(xué)的“熵”一詞,是用來衡量信息量大小的物理量。其物理含義可以這樣理解:如果小概率的事件發(fā)生了,則產(chǎn)生的信息量大;如果大概率的事件發(fā)生了,則產(chǎn)生的信息量小。
熵的計(jì)算公式如下:
(1)
在隨機(jī)變量Y發(fā)生的情況下,X的信息熵如下:
(2)
信息增益為兩者之差:
IG(X,Y)=H(X)-H(X|Y)
(3)
信息增益值越大的特征,對應(yīng)的分類能力越強(qiáng),越應(yīng)該保留,而信息增益值小的特征,分類能力弱,可能會(huì)降低分類的效果。
2.2.2 文檔頻率
文檔頻率(TF-IDF)是文本挖掘中常見的特征選擇方法。它的基本思想是如果某一特征在某一類中出現(xiàn)頻率很高且在其他類中出現(xiàn)頻率很低,則該特征的分類能力強(qiáng),應(yīng)當(dāng)保留。具體的計(jì)算公式為:
(4)
它將某個(gè)特征在一個(gè)樣本中出現(xiàn)的頻率與這個(gè)特征在其他樣本中出現(xiàn)頻率的倒數(shù)相乘,乘積越大,則說明這個(gè)特征更能代表某一類樣本。
文中使用的分類算法是基于深度置信網(wǎng)絡(luò)(deep belief network,DBN)實(shí)現(xiàn)的。它是由若干層由下往上的受限玻爾茲曼機(jī)(RBM)和一層逆向傳播(back propagation,BP)神經(jīng)網(wǎng)絡(luò)構(gòu)成的[11-13]。每層RBM的訓(xùn)練是非監(jiān)督的,文中使用最上層RBM的輸出向量作為BP神經(jīng)網(wǎng)絡(luò)的輸入向量,隨后對BP神經(jīng)網(wǎng)絡(luò)進(jìn)行有監(jiān)督的訓(xùn)練。
DBN網(wǎng)絡(luò)的每一層的單元從之前一層的隱藏層單元獲得高相關(guān)性隱式關(guān)聯(lián)。DBN網(wǎng)絡(luò)中相鄰的層可以被分解為一個(gè)單獨(dú)的受限RBM。每個(gè)低層的RBM作為輸入數(shù)據(jù)作為訓(xùn)練下一個(gè)RBM的輸入數(shù)據(jù)來使用,通過貪婪學(xué)習(xí)算法得到一組RBM。
深度置信網(wǎng)絡(luò)的訓(xùn)練有以下三個(gè)步驟。第一步,用非監(jiān)督的方法分別訓(xùn)練每層的受限玻爾茲曼機(jī);第二步,對DBN網(wǎng)絡(luò)進(jìn)行無監(jiān)督反饋調(diào)節(jié),使整個(gè)網(wǎng)絡(luò)的權(quán)值得到優(yōu)化;第三步,對在深度置信網(wǎng)絡(luò)最后一層的BP神經(jīng)網(wǎng)絡(luò),使用最后一個(gè)RBM的輸出向量作為BP神經(jīng)網(wǎng)絡(luò)的輸入向量,然后使用監(jiān)督學(xué)習(xí)的方法,訓(xùn)練實(shí)體關(guān)系分類器。DBN模型網(wǎng)絡(luò)結(jié)構(gòu)示意如圖2所示。
圖2 DBN模型網(wǎng)絡(luò)結(jié)構(gòu)示意
受限玻爾茲曼機(jī)(RBM)由Hinton等提出,是深度置信網(wǎng)絡(luò)的主要組成部分。一個(gè)受限玻爾茲曼機(jī)由兩層神經(jīng)網(wǎng)絡(luò)組成,可見層(對應(yīng)可見變量,即數(shù)據(jù)樣本)和隱藏層(對應(yīng)隱藏變量)??梢妼雍碗[藏層內(nèi)部節(jié)點(diǎn)之間均不相連[14-15]。每層間的連接矩陣和偏差通過非監(jiān)督的貪婪算法得出。具體到訓(xùn)練過程中來說,第一步,將可視層單元映射到隱藏層單元;第二步,反過來用隱藏層單元重構(gòu)出可視層單元;第三步,重復(fù)前兩步,并更新連接矩陣和偏差的值,計(jì)算重構(gòu)數(shù)據(jù)與原始數(shù)據(jù)的誤差值,對誤差值設(shè)定一個(gè)閾值,若誤差值大于閾值,則還要繼續(xù)做前兩步的工作,若誤差值在閾值內(nèi),則訓(xùn)練完成。隱含層單元和可視層單元間的相關(guān)差別是形成每次權(quán)重更新的基礎(chǔ)。RBM結(jié)構(gòu)如圖3所示。
簡言之,訓(xùn)練RBM的過程其實(shí)就是求一個(gè)最能產(chǎn)生輸入數(shù)據(jù)的分布。通過不斷計(jì)算重構(gòu)數(shù)據(jù)與輸入數(shù)據(jù)的誤差,對權(quán)重和偏量進(jìn)行調(diào)整,使誤差降低到閾值之內(nèi)。在誤差的量化計(jì)算上,Hinton提出了對比散度(contrastive divergence,CD)的學(xué)習(xí)算法,基于KL(Kullback-Leibler)距離衡量兩個(gè)概率分布之間的誤差。KL距離是用來衡量兩個(gè)概率分布差異的一種方法。KL距離的具體物理含義是:用P(x)表示某個(gè)事件的概率分布,當(dāng)用概率分布Q(x)來編碼時(shí),計(jì)算平均編碼長度改變了多少比特。這時(shí)的KL距離表示為D(P‖Q)?;贙L距離可以得出對比散度CD的計(jì)算公式:
CDn=KL(p0‖p∞)-KL(pn‖p∞)
(5)
圖3 RBM結(jié)構(gòu)
通過將已經(jīng)進(jìn)行過逐層大量學(xué)習(xí)的多個(gè)RBM按自底向上的方法連接起來,這樣構(gòu)造得到了一個(gè)初始DBN。這時(shí),每個(gè)RBM都實(shí)現(xiàn)了局部最優(yōu),但是對于整個(gè)DBN網(wǎng)絡(luò),并不是最優(yōu)。為了進(jìn)一步提高模型精度,對于初始的DBN,再通過無監(jiān)督反饋微調(diào),使用最頂層RBM的輸出特征向量重構(gòu)出原始輸入特征向量,通過不斷降低重構(gòu)出的特征向量與原始輸入特征向量之間的誤差,調(diào)整RBM的連接權(quán)重。其中,誤差的量化計(jì)算通過KL距離實(shí)現(xiàn)。這樣迭代多次后,當(dāng)模型能夠重構(gòu)出與原始輸入特征向量誤差很低的特征向量時(shí),說明模型的輸出特征向量更能反映樣本的本質(zhì)特征,有助于提高檢測精度。具體過程如下:首先輸入n-gram指令序列特征向量v;設(shè)置反饋調(diào)節(jié)參數(shù),迭代次數(shù)為iteration;獲取RBM預(yù)訓(xùn)練后的各權(quán)值W1W2…WNWN-1…W2N;計(jì)算最頂層RBM的輸出hk;有最頂層輸出重構(gòu)輸入特征向量v;計(jì)算誤差:Error=KL(v‖v');根據(jù)誤差Error采用共軛梯度算法調(diào)整權(quán)值W1~W2N。這樣迭代iteration次后,DBN無監(jiān)督反饋調(diào)節(jié)完成。
在深度置信網(wǎng)絡(luò)模塊的最后,通過類似經(jīng)典BP神經(jīng)網(wǎng)絡(luò)的方法從后往前微調(diào)整個(gè)深度置信網(wǎng)絡(luò),最終可以建立訓(xùn)練好的DBN模型。BP神經(jīng)網(wǎng)絡(luò)是有監(jiān)督的學(xué)習(xí),它使用的是標(biāo)注好的訓(xùn)練集。對于輸入數(shù)據(jù)x,設(shè)它的原始類標(biāo)為y,令它的特征向量V0經(jīng)過深度置信網(wǎng)絡(luò)得到頂層輸出向量hN,最后計(jì)算出輸出類標(biāo)y'。用KL距離計(jì)算y和y'的誤差,將誤差反向傳播,以此來調(diào)整各層的權(quán)重WN…W2W1。
惡意代碼的檢測在本質(zhì)上屬于一個(gè)二分類問題,因此,文中使用了一般分類算法的評價(jià)標(biāo)準(zhǔn),主要有準(zhǔn)確率、錯(cuò)判率FPR和漏報(bào)率FNR這三個(gè)量化指標(biāo)。在一個(gè)二分類問題中,分類算法會(huì)將樣本分為相應(yīng)意義的正類和負(fù)類,這樣便會(huì)產(chǎn)生四種情況:樣本是正類并且被分類為正類;樣本是正類但是被分類為負(fù)類;樣本是負(fù)類但是被分類為正類;樣本是負(fù)類并且被分類為負(fù)類。準(zhǔn)確率、錯(cuò)判率及漏報(bào)率的計(jì)算公式如下:
(6)
(7)
(8)
評價(jià)一個(gè)惡意代碼檢測算法性能的好壞總的來說就是看其是否具有很高的檢測精度與相對低的誤報(bào)率與漏報(bào)率。
為了驗(yàn)證文中方法的性能,在Windows7 64位平臺(tái)下,基于Visual Studio 2010和Matlab 7.0使用C++語言和Matlab腳本實(shí)現(xiàn)了惡意代碼檢測模型系統(tǒng)。系統(tǒng)由三個(gè)模塊組成,分別為樣本預(yù)處理模塊、特征構(gòu)造與約簡模塊、深度置信網(wǎng)絡(luò)分類模塊。樣本預(yù)處理模塊在win平臺(tái)進(jìn)行,使用PEID、VMUNPACKER對樣本進(jìn)行查殼、脫殼處理。特征提取模塊首先利用IDA Pro 6.1反匯編生成后綴為.asm的文件,然后構(gòu)造指令的n-gram序列,再使用信息增益提取特征。深度置信網(wǎng)絡(luò)分類模塊在win平臺(tái)上使用Matlab實(shí)現(xiàn),它由若干層RBM逐層堆疊再加上頂層的有監(jiān)督的BP神經(jīng)網(wǎng)絡(luò)組成。整個(gè)惡意代碼檢測模型如圖4所示。
圖4 惡意代碼檢測模型
文中的實(shí)驗(yàn)樣本數(shù)據(jù)集包括3 000個(gè)正常代碼和3 000個(gè)惡意代碼。惡意樣本來源于相關(guān)安全論壇以及惡意代碼研究網(wǎng)站,如vx netlux、vx heavens、VirusTotal等,包括木馬、病毒、蠕蟲、后門等。正常樣本來源于Windows的系統(tǒng)文件和其他一些正常文件。所有樣本均為PE格式文件。樣本集的劃分采用3重交叉驗(yàn)證的方式。按照這種樣本劃分方式,文中實(shí)驗(yàn)的訓(xùn)練集由2 000正常樣本和2 000惡意樣本組成,測試集由1 000正常樣本和1 000惡意樣本組成。
文中設(shè)計(jì)了兩組實(shí)驗(yàn),第一組實(shí)驗(yàn)控制其他變量統(tǒng)一,采用不同的隱藏層數(shù)和隱藏層節(jié)點(diǎn)數(shù),從而得出最優(yōu)的深度模型結(jié)構(gòu)。第二組實(shí)驗(yàn)將文中方法與其他機(jī)器學(xué)習(xí)算法(支持向量機(jī)、K近鄰、樸素貝葉斯)進(jìn)行對比,驗(yàn)證文中方法相較于傳統(tǒng)的機(jī)器學(xué)習(xí)方法具有更好的檢測性能。
第一組實(shí)驗(yàn)中,通過設(shè)計(jì)幾組對比實(shí)驗(yàn)找出最優(yōu)的深度模型結(jié)構(gòu),即最優(yōu)的隱藏層數(shù)和隱藏層節(jié)點(diǎn)數(shù)。層數(shù)和節(jié)點(diǎn)數(shù)過少會(huì)導(dǎo)致學(xué)習(xí)能力不足造成欠擬合的情況,而層數(shù)和節(jié)點(diǎn)數(shù)過多則會(huì)導(dǎo)致學(xué)習(xí)到冗余特征,造成過擬合。實(shí)驗(yàn)使用4-gram算法構(gòu)造指令序列特征并用信息增益法選擇IG值前120個(gè)的特征。實(shí)驗(yàn)的DBN網(wǎng)絡(luò)分別采用單隱藏層、雙隱藏層、三隱藏層,隱藏層節(jié)點(diǎn)數(shù)分別為140,160,180。輸入層節(jié)點(diǎn)數(shù)為120,輸出層為2個(gè)節(jié)點(diǎn),學(xué)習(xí)速率設(shè)置為0.05。實(shí)驗(yàn)的結(jié)果如表1所示。
表1 不同DBN網(wǎng)絡(luò)結(jié)構(gòu)的檢測結(jié)果
可以得出實(shí)驗(yàn)結(jié)論:當(dāng)DBN網(wǎng)絡(luò)采用雙隱藏層,隱藏層節(jié)點(diǎn)數(shù)為160時(shí),整個(gè)模型系統(tǒng)的分類準(zhǔn)確率最高,達(dá)到96.11%,同時(shí)誤判率與漏報(bào)率也較低,分別為4.27%、3.77%。
第二組實(shí)驗(yàn)中,將文中方法與四種傳統(tǒng)的機(jī)器學(xué)習(xí)模型進(jìn)行了比較,包括K近鄰、樸素貝葉斯算法、支持向量機(jī)、決策樹算法。對于這四種學(xué)習(xí)算法,使用相同的測試集、相同的特征提取方法進(jìn)行實(shí)驗(yàn),檢測結(jié)果如表2所示。
表2 不同機(jī)器學(xué)習(xí)算法的檢測結(jié)果
從表2可以看出,在測試條件相同的情況下,DBN算法的準(zhǔn)確率比K近鄰算法高出2.33%,比樸素貝葉斯算法高出5.75%,比支持向量機(jī)算法高出9.89%,比決策樹算法高出4.23%??梢缘贸鼋Y(jié)論,采用DBN算法的模型的檢測性能優(yōu)于傳統(tǒng)的機(jī)器學(xué)習(xí)模型的檢測性能。
通過提取惡意代碼反匯編后得到的操作碼序列特征,使用信息增益(IG)選擇特征,再使用深度置信網(wǎng)絡(luò)(DBN)對提取的特征進(jìn)行分析識(shí)別,提出了基于深度學(xué)習(xí)算法的惡意代碼檢測方法。深度學(xué)習(xí)是目前機(jī)器學(xué)習(xí)領(lǐng)域研究的重點(diǎn),相比于傳統(tǒng)機(jī)器學(xué)習(xí)算法,深度學(xué)習(xí)通過神經(jīng)網(wǎng)絡(luò)可以學(xué)得輸入數(shù)據(jù)更本質(zhì)的特征,因此提高了分類性能。文中詳細(xì)論述了深度置信網(wǎng)絡(luò)算法的理論基礎(chǔ),并將算法應(yīng)用到惡意代碼檢測中。實(shí)驗(yàn)結(jié)果表明,相較于傳統(tǒng)的惡意代碼檢測方法,提出的惡意代碼檢測方法在檢測精度和效率上有明顯改進(jìn)和提高。
該方案也存在一些不足和需要改進(jìn)的地方。比如可以從更多的角度提取惡意代碼特征,對于一些加密與壓縮的惡意代碼,需要在運(yùn)行時(shí)才能獲得其特征,所以對動(dòng)靜態(tài)特征融合做進(jìn)一步研究也是有意義的。此外,文中只是將待檢樣本分類為惡意和正常兩類,下一步可以考慮對樣本進(jìn)行更加細(xì)致的分類,通過檢測能夠知道惡意代碼的具體種類,這樣對惡意代碼檢測也是有積極意義的。