唐永旺 劉 欣
1(中國(guó)人民解放軍戰(zhàn)略支援部隊(duì)信息工程大學(xué)信息系統(tǒng)工程學(xué)院 河南 鄭州 450002)
2(32088部隊(duì) 北京 100000)
惡意代碼是指故意編制或設(shè)置的、對(duì)網(wǎng)絡(luò)或系統(tǒng)會(huì)產(chǎn)生威脅或潛在威脅的計(jì)算機(jī)代碼。最常見(jiàn)的惡意代碼有計(jì)算機(jī)病毒、特洛伊木馬、計(jì)算機(jī)蠕蟲(chóng)、后門(mén)、邏輯炸彈等。惡意代碼隨著互聯(lián)網(wǎng)的蓬勃發(fā)展而不斷發(fā)展,現(xiàn)在呈現(xiàn)出變種數(shù)量多、傳播速度快、影響范圍廣的特點(diǎn)。根據(jù)Symantec公司的報(bào)告,每天有將近百萬(wàn)的變種病毒在互聯(lián)網(wǎng)中橫行,已經(jīng)成為威脅互聯(lián)網(wǎng)安全的關(guān)鍵因素之一[1-2]。傳統(tǒng)的主流惡意代碼檢測(cè)技術(shù)可分為兩類:基于簽名特征碼和基于啟發(fā)式規(guī)則的檢測(cè)方法[3]。基于啟發(fā)式規(guī)則的檢測(cè)方法通過(guò)專業(yè)的研究人員分析惡意代碼進(jìn)行規(guī)則制定,并依照制定的規(guī)則對(duì)代碼樣本進(jìn)行檢測(cè),但該方法的規(guī)則嚴(yán)重依賴人工選取,容易引起高誤報(bào)率。另外,面對(duì)日益龐大的惡意代碼數(shù)量,僅依賴人工進(jìn)行惡意代碼分析變得愈發(fā)困難。基于簽名特征碼的檢測(cè)方法根據(jù)惡意代碼二進(jìn)制文件的特征碼,在惡意代碼庫(kù)中通過(guò)模式匹配的方式檢測(cè)惡意代碼,該方法具有速度快、效率高、誤報(bào)率低等優(yōu)點(diǎn),是當(dāng)前網(wǎng)絡(luò)安全公司廣泛采用的方法。然而,該方法沒(méi)有利用惡意代碼樣本的深層特征進(jìn)行分類,惡意代碼經(jīng)過(guò)簡(jiǎn)單變形或者混淆即可躲避該方法的檢測(cè)。
惡意代碼檢測(cè)的本質(zhì)是一個(gè)分類問(wèn)題[4],即把待檢測(cè)樣本區(qū)分成惡意或合法的程序。從早期的機(jī)器學(xué)習(xí)算法如K近鄰算法(K-Nearest Neighbors,K-NN)、決策樹(shù)(Decision Tree,DT)、支持向量機(jī)(Support Vector Machines,SVM)、隨機(jī)森林(Random Forest,RF)等,到深度學(xué)習(xí)模型如卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Networks,CNN)、循環(huán)神經(jīng)網(wǎng)絡(luò)(Recurrent Neural Network,RNN)、生成式對(duì)抗神經(jīng)網(wǎng)絡(luò)(Generative Adversarial Nets,GANs)等多數(shù)應(yīng)用于分類問(wèn)題。例如Vyas等[5]抽取惡意代碼的元數(shù)據(jù)特征、編譯的特征、DLL特征和引入函數(shù)特征,生成28維的特征向量,利用K近鄰、決策樹(shù)、支持向量機(jī)、隨機(jī)森林等實(shí)現(xiàn)惡意代碼分類。CNN多被應(yīng)用于計(jì)算機(jī)視覺(jué)領(lǐng)域,對(duì)圖像、視頻等數(shù)據(jù)進(jìn)行識(shí)別分類[6-8];RNN多被應(yīng)用于自然語(yǔ)言處理領(lǐng)域,擅長(zhǎng)處理序列數(shù)據(jù)分類問(wèn)題[9-11]。
鑒于深度學(xué)習(xí)自動(dòng)提取數(shù)據(jù)深層特征的優(yōu)點(diǎn),深度學(xué)習(xí)算法下的惡意代碼檢測(cè)思想被提出,目前是業(yè)內(nèi)研究的熱點(diǎn)。Yuan等[12]將Android App所需權(quán)限,敏感API和某些動(dòng)態(tài)行為相結(jié)合提取200維的特征向量,通過(guò)深度置信網(wǎng)絡(luò)訓(xùn)練Android惡意App的分類器。Lindorfer等[13]結(jié)合Android App的動(dòng)態(tài)特征(文件操作、網(wǎng)絡(luò)行為等)和靜態(tài)特征(App名字,App結(jié)構(gòu),權(quán)限需求等),提取特征向量后訓(xùn)練Android App分類器。Saxe等[14]從惡意代碼上下文比特、PE端口號(hào)和PE元數(shù)據(jù)中提取1 024維特征向量,利用3層的神經(jīng)網(wǎng)絡(luò)模型和分?jǐn)?shù)校準(zhǔn)模型訓(xùn)練惡意代碼分類器。
在實(shí)際環(huán)境中,一些惡意代碼具有很強(qiáng)的反沙箱技術(shù),一旦惡意代碼發(fā)現(xiàn)自身正在被分析,就會(huì)切換運(yùn)行流程,避免被查殺,動(dòng)態(tài)特征難以提取。另外,這些方法在提取特征時(shí)還是建立在人工分析、制定規(guī)則的前提下,并沒(méi)有實(shí)現(xiàn)真正的智能化。而且人工分析時(shí)并沒(méi)有通過(guò)分析整個(gè)惡意代碼獲取惡意代碼的深層特征,這樣會(huì)丟失一些存在于代碼本身的邏輯關(guān)聯(lián)特征,如果惡意代碼改變格式約定,隱藏惡意代碼片段的區(qū)域,以上方法就無(wú)法正確區(qū)分惡意代碼。
RNN可以挖掘惡意代碼字節(jié)序列數(shù)據(jù)中的邏輯關(guān)系特征,以RNN最后一個(gè)時(shí)刻的隱狀態(tài)或者各時(shí)刻隱狀態(tài)的拼接作為提取的關(guān)聯(lián)特征。但是,該特征無(wú)法突出表現(xiàn)惡意行為的端口、函數(shù)等之間的調(diào)用關(guān)系特征。自注意力機(jī)制[15]廣泛應(yīng)用在自然語(yǔ)言處理領(lǐng)域,用于挖掘與當(dāng)前預(yù)測(cè)詞關(guān)系緊密的上下文詞語(yǔ)。由此推斷可以通過(guò)自注意力機(jī)制關(guān)注字節(jié)序列中表現(xiàn)惡意行為的元素,從而在提取惡意代碼字節(jié)序列特征時(shí)對(duì)這些位置的隱狀態(tài)給予更高的權(quán)重。
綜上所述,本文提出一種基于Bi-LSTM和自注意力機(jī)制的惡意代碼檢測(cè)方法。首先,將惡意代碼文件轉(zhuǎn)換為長(zhǎng)度統(tǒng)一的字節(jié)流序列,每個(gè)字節(jié)元素(范圍為[0x00,0xff])用256維的獨(dú)熱(One-hot)編碼表示。采用Bi-LSTM根據(jù)字節(jié)序列的上下文隱狀態(tài)充分學(xué)習(xí)序列的特征,輸出各時(shí)間步的隱狀態(tài)。然后,利用自注意力機(jī)制為表現(xiàn)惡意的時(shí)間步隱狀態(tài)分配更高的權(quán)重,將各隱狀態(tài)的線性加權(quán)和作為樣本序列的深層特征表示。最后,將該特征表示輸入到全連接神經(jīng)網(wǎng)絡(luò)層和Softmax層,輸出樣本的預(yù)測(cè)概率,完成惡意代碼檢測(cè)。
RNN模型[16]通過(guò)隱含層的不斷循環(huán),可以對(duì)惡意代碼字節(jié)序列數(shù)據(jù)進(jìn)行學(xué)習(xí),實(shí)現(xiàn)惡意代碼樣本的分類。RNN的模型結(jié)構(gòu)如圖1所示。
圖1 RNN模型結(jié)構(gòu)圖
圖中的模型由輸入層、隱藏層、輸出層及相應(yīng)的權(quán)重組成。惡意代碼序列中每個(gè)字節(jié)元素采用One-hot編碼方式表示,作為輸入向量w(t),維數(shù)為256。輸出向量y(t)代表在給定當(dāng)前整型數(shù)據(jù)向量w(t)和上下文整型數(shù)據(jù)向量h(t-1)的情況下,整個(gè)惡意代碼序列的概率分布。輸入層、隱藏層和輸出層的計(jì)算公式如下:
x(t)=w(t)+h(t-1)
(1)
(2)
(3)
h(t)=f(Uw(t)+Wh(t-1))
(4)
y(t)=g(Vh(t))
(5)
式中:U為輸入層和隱含層之間的權(quán)值矩陣;W為隱含層的自連接權(quán)值矩陣;V為隱含層與輸出層之間的權(quán)值矩陣。神經(jīng)元之間的影響程度取決于連接權(quán)重,且權(quán)重在網(wǎng)絡(luò)神經(jīng)元中共享。網(wǎng)絡(luò)采用通過(guò)時(shí)間的反向傳播算法訓(xùn)練參數(shù),會(huì)造成梯度消失問(wèn)題[17],限制了網(wǎng)絡(luò)對(duì)無(wú)限長(zhǎng)距離歷史信息的學(xué)習(xí)能力。
本文采用LSTM[18]單元替代RNN的隱含層單元,避免RNN訓(xùn)練時(shí)出現(xiàn)梯度消失的情況。LSTM的單元結(jié)構(gòu)如圖2所示。
圖2 LSTM單元結(jié)構(gòu)
輸入門(mén):
(6)
經(jīng)過(guò)激活函數(shù)后,輸出為:
(7)
忘記門(mén):
(8)
經(jīng)過(guò)激活函數(shù)后,輸出為:
(9)
輸出門(mén):
(10)
輸出門(mén)確定要輸出的信息,并由細(xì)胞狀態(tài)決定。經(jīng)過(guò)激活函數(shù)后,輸出為:
(11)
細(xì)胞輸出:
(12)
式中:h(·)為tanh激活函數(shù)。LSTM的這種門(mén)控機(jī)制是一種讓信息選擇性通過(guò)的方法,使中心節(jié)點(diǎn)能夠保存長(zhǎng)期依賴信息,并且在訓(xùn)練時(shí)保持內(nèi)部梯度不受外界干擾。每個(gè)中心節(jié)點(diǎn)有一個(gè)自循環(huán)連接線性單元,稱為恒定誤差傳送帶(Constant Error Carousel,CEC)。誤差以恒定的值在內(nèi)部進(jìn)行傳播,從而避免了梯度消失問(wèn)題。
由于雙向LSTM可以同時(shí)利用當(dāng)前位置的上下文信息進(jìn)行訓(xùn)練,較單向LSTM提取特征能力更強(qiáng),本文采用雙向LSTM網(wǎng)絡(luò)結(jié)合自注意力機(jī)制提取惡意代碼的特征,構(gòu)建的惡意代碼檢測(cè)模型如圖3所示。該模型主要分為Bi-LSTM層、自注意力層、全連接和Softmax層三大部分。
圖3 基于Bi-LSTM和自注意力的惡意代碼檢測(cè)模型
(13)
(14)
自注意力層的作用就是在H上施加注意力,具體過(guò)程如圖4所示。
圖4 自注意力機(jī)制計(jì)算示意圖
自注意力層將Bi-LSTM的隱狀態(tài)集合H作為輸入,輸出注意力向量a:
a=softmax(ws2tanh(Ws1HT))
(15)
式中:Ws1是維數(shù)為da×2u的權(quán)重矩陣;ws2是維數(shù)為da的參數(shù)向量,da為一個(gè)超參數(shù);a的維數(shù)是n;Softmax函數(shù)保證輸出的注意力向量的每個(gè)元素代表一個(gè)概率,且所有元素和為1。按照注意力權(quán)重分配向量a將H線性加權(quán)求和即可得到狀態(tài)測(cè)量序列的嵌入表示m。
然而,一個(gè)m通常只關(guān)注了序列S某些維度的特征,惡意代碼字節(jié)序列特征組合較多,因此一個(gè)m并不能代表序列S的所有特征,因此需要增強(qiáng)注意力,計(jì)算多個(gè)代表不同維度特征的m作為序列S的嵌入表示。假設(shè)需要計(jì)算序列r個(gè)方面的特征,則ws2的維度擴(kuò)展為r×da并記作Ws2,向量a擴(kuò)展為注意力權(quán)重分配矩陣A:
A=softmax(Ws2tanh(Ws1HT))
(16)
序列S的特征表示由m向量擴(kuò)展為維數(shù)是r×2u的M矩陣:
M=AH
(17)
隨后將M輸入全連接層和Softmax層,輸出識(shí)別概率:
Y=Softmax(WfM+b)
(18)
式中:Wf是全連接層的權(quán)重矩陣;b為偏置;Y是Softmax層計(jì)算的概率結(jié)果。
本文實(shí)驗(yàn)所用數(shù)據(jù)均來(lái)自于VXHeaven,該數(shù)據(jù)集包括27萬(wàn)個(gè)惡意代碼樣本,按卡巴斯基命名規(guī)則命名。本文抽取worm、backdoor、virus和trojan這4個(gè)種類,共10 400個(gè)惡意代碼樣本。同時(shí)從Windows 7系統(tǒng)、Ninite.com和各種應(yīng)用中選取1 100個(gè)正常文件,如表1所示。
表1 實(shí)驗(yàn)樣本介紹
為了充分評(píng)估本文方法,按照不同的方法構(gòu)造兩種不同的訓(xùn)練數(shù)據(jù)集和測(cè)試集。第一種方法將各族惡意代碼的名稱(Virus,Backdoor,Worm和Trojan)分別作為各自的標(biāo)簽,正常樣本標(biāo)簽為正常,該數(shù)據(jù)集記為5-class-data。第二種方法將惡意代碼樣本的標(biāo)簽統(tǒng)一標(biāo)為惡意代碼,正常樣本標(biāo)簽為正常,該數(shù)據(jù)集記為2-class-data。采用10層的交叉檢驗(yàn)方法,所有實(shí)驗(yàn)數(shù)據(jù)隨機(jī)分為10個(gè)部分,依次選擇1個(gè)部分作為測(cè)試集,剩余的9個(gè)部分作為訓(xùn)練集,重復(fù)做10次實(shí)驗(yàn),將實(shí)驗(yàn)結(jié)果取平均值。
本文選用惡意代碼檢測(cè)領(lǐng)域的通用評(píng)測(cè)標(biāo)準(zhǔn)誤報(bào)率(False Positive Rate,FPR)和準(zhǔn)確率(Accuracy Rate,AR)評(píng)測(cè)本文方法效果。
(19)
(20)
本文選取文獻(xiàn)[6]中四種基于機(jī)器學(xué)習(xí)的惡意代碼檢測(cè)方法作為對(duì)比方法,這些方法均從惡意代碼樣本的部分代碼中提取28維特征作為機(jī)器學(xué)習(xí)的輸入。四種機(jī)器學(xué)習(xí)算法分別為K近鄰算法、決策樹(shù)、支持向量機(jī)、隨機(jī)森林,在測(cè)試集上的評(píng)測(cè)結(jié)果分別用K-NN、DT、SVM、RF表示。
本文將惡意代碼文件轉(zhuǎn)換為長(zhǎng)度統(tǒng)一的字節(jié)流序列,每個(gè)字節(jié)元素(范圍為[0x00,0xff])用256維的One-hot編碼表示,使用TensorFlow深度學(xué)習(xí)框架編寫(xiě)基于Bi-LSTM和自注意力的惡意代碼檢測(cè)模型。根據(jù)訓(xùn)練模型的經(jīng)驗(yàn),本文采用一個(gè)輸入層,3個(gè)Bi-LSTM和自注意力機(jī)制組合層,一個(gè)全連接層和一個(gè)Softmax層的結(jié)構(gòu),每個(gè)單向LSTM層有1 024個(gè)LSTM單元,LSTM單元的隱藏節(jié)點(diǎn)數(shù)為300,各單元之間共享訓(xùn)練參數(shù),訓(xùn)練時(shí)間步長(zhǎng)為1 024,優(yōu)化算法選取Adam[19],epochs設(shè)置為100,每批數(shù)據(jù)batch_size大小為256,學(xué)習(xí)速率為0.01,全連接層的隱藏節(jié)點(diǎn)為3 000,使用dropout技術(shù),避免過(guò)擬合問(wèn)題,dropout設(shè)置為0.7[20],在測(cè)試集的評(píng)測(cè)結(jié)果記為Bi-LSTM-SA。
實(shí)驗(yàn)硬件配置為Intel Xeon E5-2650,128 GB內(nèi)存的服務(wù)器,配備12 GB的雙GTX 1080Ti獨(dú)立顯卡進(jìn)行加速訓(xùn)練。
(1) 5-class-data數(shù)據(jù)集下的對(duì)比實(shí)驗(yàn)。上述五種方法在5-class-data數(shù)據(jù)集下,經(jīng)過(guò)10次交叉實(shí)驗(yàn),F(xiàn)PR和AR評(píng)測(cè)結(jié)果如表2和表3所示。
表2 AR評(píng)測(cè)結(jié)果
表3 FPR評(píng)測(cè)結(jié)果
以上兩組實(shí)驗(yàn)結(jié)果表明,本文提出的方法切實(shí)可行,而且準(zhǔn)確率高,誤報(bào)率低,均取得了最優(yōu)結(jié)果。在對(duì)比方法中,支持向量機(jī)在28維的訓(xùn)練數(shù)據(jù)中得到的超平面分類效果最差。隨機(jī)森林是一個(gè)用隨機(jī)方式建立,包含多個(gè)決策樹(shù)的分類器,輸出類別由各樹(shù)輸出類別的眾數(shù)而定。樹(shù)上的每個(gè)節(jié)點(diǎn)隨機(jī)選取所有特征的一個(gè)子集計(jì)算最佳分割方式,該特點(diǎn)使得隨機(jī)森林擅長(zhǎng)處理高維度特征,因此其評(píng)測(cè)效果相比于K近鄰和單決策樹(shù)方法的評(píng)測(cè)效果較好。
本文方法的評(píng)測(cè)結(jié)果同時(shí)實(shí)現(xiàn)了較高的準(zhǔn)確率和較低的誤報(bào)率,相較于RF的檢測(cè)方法,AR值提高了12.32%,F(xiàn)PR值降低了66.42%。另外,通過(guò)分析Bi-LSTM-SA檢測(cè)到而RF沒(méi)有檢測(cè)到的惡意代碼樣本發(fā)現(xiàn),這些樣本中關(guān)鍵函數(shù)和輸入端口等特征有簡(jiǎn)單變形或者混淆的現(xiàn)象,這說(shuō)明本文模型可以重點(diǎn)關(guān)注表現(xiàn)惡意行為的字節(jié)元素,獲取更能代表惡意代碼序列的深層特征表示。
(2) 2-class-data數(shù)據(jù)集下的對(duì)比實(shí)驗(yàn)。上述五種方法在2-class-data數(shù)據(jù)集下的評(píng)測(cè)結(jié)果如表4所示。
表4 2-class-data數(shù)據(jù)集下AR和FPR值
可以看出,本文方法在訓(xùn)練數(shù)據(jù)噪聲比較大的情況下準(zhǔn)確率依然最高,誤報(bào)率最低。五種方法在2-class-data下的AR值相較于在5-class-data下AR的值分別降低了17.87%、16.79%、5.91%、12.44%、3.24%。FPR值依次分別增加了117.69%、140.80%、54.34%、83.21%、32.61%。四種對(duì)比方法的AR和FPR變化率明顯大于本文方法的變化率,這是因?yàn)橥瑯拥臄?shù)據(jù)集,2-class-data比5-class-data的類別少,特征相對(duì)變多,使得對(duì)比方法無(wú)法準(zhǔn)確地提取惡意代碼的特征,本文方法可以準(zhǔn)確關(guān)注惡意特征位置,全面提取惡意代碼的特征表示。
本文提出一種基于Bi-LSTM和自注意力機(jī)制的惡意代碼檢測(cè)方法。該方法自動(dòng)重點(diǎn)關(guān)注惡意代碼中表現(xiàn)惡意行為的字節(jié),以這些字節(jié)隱狀態(tài)的注意力加權(quán)和作為樣本的特征表示,通過(guò)注意力提升準(zhǔn)確地計(jì)算出樣本的深層特征表示。實(shí)驗(yàn)結(jié)果表明本文方法切實(shí)可行,可以顯著提高惡意代碼檢測(cè)效果。本文實(shí)驗(yàn)數(shù)據(jù)的類別和數(shù)量都有限,理論上訓(xùn)練數(shù)據(jù)規(guī)模越大,訓(xùn)練出的分類器性能越強(qiáng),因此下一步準(zhǔn)備從開(kāi)源惡意代碼分享網(wǎng)站搜集更大規(guī)模的數(shù)據(jù),進(jìn)一步測(cè)試和提升本文方法的分類性能。另外,LSTM的結(jié)構(gòu)特性決定其只能順序訓(xùn)練序列的元素,在大規(guī)模數(shù)據(jù)量下訓(xùn)練模型和利用模型檢測(cè)均需要消耗大量的時(shí)間,如何構(gòu)造一種可以并行訓(xùn)練序列元素的網(wǎng)絡(luò)結(jié)構(gòu)是下一步研究的另一重點(diǎn)。