彭偉
(安徽工貿(mào)職業(yè)技術(shù)學(xué)院 計(jì)算機(jī)信息工程系,安徽 淮南 232007)
由于惡意軟件的攻擊導(dǎo)致的安全漏洞繼續(xù)升級(jí),構(gòu)成了這個(gè)數(shù)字時(shí)代的一個(gè)主要安全問(wèn)題。惡意軟件攻擊呈指數(shù)增長(zhǎng),許多計(jì)算機(jī)用戶、企業(yè)和政府受到影響,因此惡意軟件檢測(cè)是一個(gè)熱門的研究課題。當(dāng)前,基于惡意軟件簽名和行為模式的靜態(tài)、動(dòng)態(tài)分析的惡意軟件檢測(cè)解決方案非常耗時(shí),并且無(wú)法實(shí)時(shí)識(shí)別未知惡意軟件。而且惡意軟件會(huì)使用變形等規(guī)避技術(shù)來(lái)快速更改惡意軟件行為并生成大量新惡意軟件。為了實(shí)現(xiàn)高效、全自動(dòng)的惡意軟件識(shí)別系統(tǒng),研究者們開(kāi)始采用數(shù)據(jù)挖掘和機(jī)器學(xué)習(xí)技術(shù)。深度學(xué)習(xí)算法具有強(qiáng)大的學(xué)習(xí)能力,本文基于堆疊自編碼器,提出了一種高魯棒性惡意軟件識(shí)別算法。自編碼器是一種無(wú)監(jiān)督的學(xué)習(xí)方法,與圖神經(jīng)網(wǎng)絡(luò)等半監(jiān)督學(xué)習(xí)算法相比,自編碼器有著更低的訓(xùn)練成本,且能夠?qū)W習(xí)并識(shí)別未知的惡意軟件,具有更好的魯棒性。
所提識(shí)別算法的流程如圖1所示,由三個(gè)階段組成,即特征選擇階段、圖生成階段和深度學(xué)習(xí)階段。
創(chuàng)建了一個(gè)包含1078個(gè)正常軟件和128個(gè)惡意軟件樣本的數(shù)據(jù)集。所有惡意軟件樣本均來(lái)自威脅情報(bào)平臺(tái),所有正常軟件來(lái)自各種官方App商店。
圖1識(shí)別算法流程
應(yīng)用程序包含一系列的操作碼,這些操作碼是在設(shè)備處理單元上執(zhí)行的指令。利用Objdump作為反匯編程序來(lái)提取操作碼s。創(chuàng)建n元模型操作碼序列是基于反匯編代碼對(duì)惡意軟件進(jìn)行分類的常用方法[1]。長(zhǎng)度為n的基本特征的數(shù)量是Cn,其中C是指令集的大小。因此,n的增加將導(dǎo)致特征數(shù)量劇增,減小特征的大小能增加了檢測(cè)的魯棒性和有效性。
因此,需要先應(yīng)用特征選擇算法找到最佳特征,以減少特征集。信息增益(IG)是一種信息理論方法,通過(guò)根據(jù)分類問(wèn)題中可用的信息內(nèi)容量對(duì)它們進(jìn)行排序來(lái)選擇全局特征。IG使用統(tǒng)計(jì)工具來(lái)選擇全局特征,而不考慮類別信息。但在數(shù)據(jù)集不平衡的情況下,全局特征選擇方法忽略了類別特征,這可能會(huì)使系統(tǒng)效率降低。
因此,為了兼顧類別信息,采用類信息增益(CIG)[2]來(lái)克服全局特征選擇不完善問(wèn)題,其計(jì)算方式如公式(1)所示。
(1)
提取了操作碼序列的1元模型和 2元模型,其數(shù)量分別為4543個(gè)和610109個(gè)。與此同時(shí),還分別計(jì)算了信息增益CIG(f,ci)和CIG(f,c1-i)。由于第80個(gè)特征和第81個(gè)特征的信息增益的差別較大,因此選擇了前80個(gè)特征。
控制流圖(CFG)是一種數(shù)據(jù)結(jié)構(gòu),表示可執(zhí)行文件中操作碼的順序。圖G=(V,E)由節(jié)點(diǎn)集合V和邊集合E組成?,F(xiàn)有研究表明,圖的表示方式在惡意軟件檢測(cè)中是很有用的[3]。Vi∈{fj|j=1,2,…,80}是頂點(diǎn),而邊Eij的值表示頂點(diǎn)(特征)Vi和Vj之間的關(guān)系。
為了構(gòu)造操作碼s圖,首先需要計(jì)算邊的值。通常,當(dāng)樣本操作碼序列中的Vi出現(xiàn)在Vj之后時(shí),Eij的值會(huì)增加1。這樣一來(lái),將能為數(shù)據(jù)集中的每個(gè)樣本應(yīng)用程序生成鄰接矩陣。在對(duì)矩陣的行進(jìn)行歸一化后,Eij的值將變成了Vi出現(xiàn)的概率。
這種做法雖然簡(jiǎn)單,卻有比較明顯的缺點(diǎn)。對(duì)于某些軟件的操作碼來(lái)說(shuō),在特征選擇后簡(jiǎn)單地將Eij值遞增1會(huì)產(chǎn)生一個(gè)稀疏的鄰接矩陣,這種稀疏的表示方式并不適合分類任務(wù)。此外,惡意軟件開(kāi)發(fā)人員可能會(huì)注入無(wú)用的垃圾操作碼,致使算法產(chǎn)生錯(cuò)誤的圖。
因此,提出了一個(gè)啟發(fā)式規(guī)則來(lái)計(jì)算邊的值,如式(2)所示。該啟發(fā)式規(guī)則的基本要素是操作碼s之間的距離:較長(zhǎng)的距離會(huì)產(chǎn)生較小的Eij。α是調(diào)整操作碼距離影響的權(quán)重參數(shù)。此外,α可以控制操作碼s距離對(duì)檢測(cè)率的影響。式(2)將為每個(gè)給定的惡意軟件和良性樣本生成82個(gè)頂點(diǎn)的圖形,作為該方法的深度學(xué)習(xí)階段的輸入。算法1描述了每個(gè)樣本的圖生成過(guò)程。
(2)
算法1輸入:樣本sample, 特征feature輸出:圖G1:k =|feature|;2:G =?3:for i in k do4: Vi=Fi5: for j in k do6: Vi=Fi7: CalEdgeValue(); //利用公式(2)計(jì)算邊的值8: end for9:end for10:Normalize(G); //歸一化11:return G;
1.3.1 矢量化 作為用于表示頂點(diǎn)之間關(guān)系的復(fù)雜數(shù)據(jù)結(jié)構(gòu),圖是機(jī)器學(xué)習(xí)中的普遍數(shù)據(jù)類型,不過(guò)很少有數(shù)據(jù)挖掘和深度學(xué)習(xí)算法接受圖作為輸入[4]。因此,一種可能的替代方案是將圖形嵌入向量空間。
2017年6月,在湖南通道縣木腳青錢柳生產(chǎn)合作社基地采集7年生青錢柳老葉(枝條頂端倒數(shù)的第6~8片綠葉)與嫩葉(新冒芽的兩葉一心),每個(gè)樣品來(lái)自3個(gè)不同的單株.收集到的樣本立即在液態(tài)氮冷凍、儲(chǔ)存在-80℃.使用mirVana 試劑盒 (Ambion公司)提取總RNA.使用Agilent 2100生物分析儀(Agilent Technologies,Santa Clara,CA,USA)評(píng)估RNA完整性,RNA 完整性較好的樣品 (RIN≥7)用于進(jìn)行后續(xù)分析.
特征向量和特征值是圖譜中的兩個(gè)特征元素,它們可以將圖的鄰接矩陣線性轉(zhuǎn)換為向量空間,如式(3)所示。
Av=λv
(3)
其中,v、λ和A分別表示特征向量、特征值和圖的鄰接。為了獲得生成的CGF結(jié)構(gòu)的信息,創(chuàng)建了一個(gè)圖以闡述數(shù)據(jù)集中所有樣本的累積。該圖由兩個(gè)主要的對(duì)角構(gòu)建塊(用紅色邊框標(biāo)記)組成,表明給定的樣本中存在兩個(gè)主要數(shù)據(jù)分布。基于圖的譜理論,在這種情況之下,矩陣的特征值之間存在一個(gè)明確的特征值差。
因此,與其他剩余的特征向量相比,具有較大特征值差的兩個(gè)特征向量包含了更多鄰接矩陣的信息,可以用來(lái)表示整個(gè)矩陣。此外,在學(xué)習(xí)階段,由于惡意軟件和正常軟件特征值的數(shù)據(jù)分布不同,將使用特征值提高識(shí)別算法的性能。
1.3.2 深度學(xué)習(xí)算法 深度學(xué)習(xí)(DL)是神經(jīng)網(wǎng)絡(luò)(NN)的進(jìn)化版本。標(biāo)準(zhǔn)NN包括幾個(gè)或多個(gè)簡(jiǎn)單的、相互連接的神經(jīng)元節(jié)點(diǎn)。DL專注于隱藏層的能力和功能,專注于更深入的數(shù)據(jù)結(jié)構(gòu)學(xué)習(xí)。深度學(xué)習(xí)最近已被用于各種應(yīng)用,例如語(yǔ)音識(shí)別和機(jī)器視覺(jué)。雖然基于淺層學(xué)習(xí)架構(gòu)的分類方法(如支持向量機(jī)、貝葉斯分類器、決策樹(shù)和人工神經(jīng)網(wǎng)絡(luò))可以用于惡意軟件的識(shí)別,但是深度學(xué)習(xí)由于其強(qiáng)大的學(xué)習(xí)能力,可以實(shí)現(xiàn)更好的性能。典型的深度學(xué)習(xí)模型包括堆疊自編碼器、深度信念網(wǎng)絡(luò)、卷積神經(jīng)網(wǎng)絡(luò)等。探討了一種采用堆疊自編碼器的深度學(xué)習(xí)架構(gòu),該架構(gòu)是由一組自編碼器組成。
自編碼器是一種用于學(xué)習(xí)有效編碼的人工神經(jīng)網(wǎng)絡(luò),由輸入層、輸出層和一個(gè)或多個(gè)隱藏層組成。自編碼器的目標(biāo)是將輸入層的表示編碼到隱藏層中,然后將其解碼到輸出層。隱藏層可以充當(dāng)特征空間的另一種表示,并且由于隱藏層比輸入層具有更少節(jié)點(diǎn),輸入的數(shù)據(jù)會(huì)被隱藏層壓縮。圖2示出了具有一個(gè)輸入層、一個(gè)隱藏層和一個(gè)輸出層的單層自編碼器模型。
(4)
編碼器fθ將輸入xi變換為隱藏表示向量yi,具有以下的形式:
yi=fθ(xi)=s(Wxi+b)
(5)
其中,W是一個(gè)d0×d1的權(quán)重矩陣,d1是隱藏層的神經(jīng)元數(shù)量,b是偏移向量。接下來(lái),解碼器將隱藏層的輸出yi作為輸入,解碼器具有以下的形式:
zi=gθ'(xi)=s(W'yi+b')
(6)
其中,W'是一個(gè)d1×d0的權(quán)重矩陣,b'是偏移向量。一般來(lái)說(shuō),隱藏層的神經(jīng)元數(shù)量遠(yuǎn)小于輸入和輸出層的神經(jīng)元數(shù)量。當(dāng)數(shù)據(jù)經(jīng)過(guò)堆疊自編碼器網(wǎng)絡(luò)時(shí),會(huì)被隱藏層壓縮,然后會(huì)被重構(gòu)。目標(biāo)是盡量減少重構(gòu)的誤差,誤差具有以下形式:
(7)
算法2展示了自編碼器的訓(xùn)練過(guò)程。
算法2輸入:訓(xùn)練數(shù)據(jù)集X輸出:參數(shù){W,b}1:iter = 0;2:while iter >= max_iter or E <= threshold do3: for i in X do4: CalHiddenlayer(); //使用公式(5)計(jì)算yi5: CalOutLayer(); //使用公式(6)計(jì)算zi6: end for7: CalError(); //使用公式(7)計(jì)算誤差E8: UpdateParameter();9:end while
為了形成一個(gè)深層網(wǎng)絡(luò),通過(guò)菊花鏈將自編碼器連接在一起創(chuàng)建一個(gè)堆疊自編碼器模型:前一層自編碼器的輸出作為下一層自編碼器的輸入。為了使用堆疊自編碼器進(jìn)行惡意軟件檢測(cè),需要在頂層添加一個(gè)分類器。堆疊自編碼器和分類器組成了用于惡意軟件檢測(cè)的結(jié)構(gòu)模型,如圖2所示。
圖2 惡意軟件檢測(cè)的結(jié)構(gòu)模型
采用基于梯度下降的反向傳播來(lái)訓(xùn)練深度網(wǎng)絡(luò)是很簡(jiǎn)單的,然而以這種方式訓(xùn)練的深度網(wǎng)絡(luò)具有較差的性能。因此采用貪婪分層無(wú)監(jiān)督學(xué)習(xí)算法,以自下而上的方式逐層對(duì)深層網(wǎng)絡(luò)進(jìn)行預(yù)訓(xùn)練,然后以自上而下的方式應(yīng)用BP來(lái)微調(diào)參數(shù),從而獲得更好的結(jié)果。算法3中描述了使用堆疊自編碼器深度學(xué)習(xí)架構(gòu)進(jìn)行惡意軟件檢測(cè)的訓(xùn)練算法。
算法3輸入:訓(xùn)練數(shù)據(jù)集X,隱藏層數(shù)量h,每一層的神經(jīng)元數(shù)量kj輸出:所有參數(shù){W,b}1:for l in 堆疊自編碼器 do2: TrainEachLayer(l); //采用算法2訓(xùn)練每一層神經(jīng)網(wǎng)絡(luò)3:end for4:Initialze(h+1); //初始化第 層網(wǎng)絡(luò)的參數(shù)5:CalClass(X); //對(duì)樣本進(jìn)行分類6:BackPropagation(); //進(jìn)行反向傳播
在本節(jié)中,評(píng)估了提出的方法的準(zhǔn)確性、精度、召回率和F度量,以驗(yàn)證其在檢測(cè)惡意軟件方面的魯棒性。為了驗(yàn)證提出算法的魯棒性,將其與兩個(gè)現(xiàn)有的算法進(jìn)行比較,分別是DMBD[5]和GUMD[6]。采用MATLAB作為實(shí)驗(yàn)評(píng)估平臺(tái)。在驗(yàn)證中使用了10-fold交叉驗(yàn)證,表1展示了算法對(duì)比的結(jié)果。顯然,提出的方法優(yōu)于其他兩種算法。
準(zhǔn)確率是評(píng)估惡意和正常軟件識(shí)別算法性能的一般標(biāo)準(zhǔn)。所提出的方法達(dá)到了99.5%的準(zhǔn)確率。召回率也是一個(gè)重要標(biāo)準(zhǔn),本文算法具有高達(dá)98.8%的召回率。與此同時(shí),提出的方法在精度和F度量方面也優(yōu)于其他算法。
圖3是對(duì)本文算法進(jìn)行魯棒性評(píng)估的實(shí)驗(yàn)結(jié)果。代碼注入技術(shù)對(duì)惡意軟件進(jìn)行隨機(jī)代碼注入,以達(dá)到混淆惡意軟件的操作碼、降低惡意操作碼的比例,最終令識(shí)別算法失效的目的。由實(shí)驗(yàn)結(jié)果可知,隨著注入代碼的比例增加,算法的各項(xiàng)度量指標(biāo)均有下降。但是下降的幅度并不明顯,這說(shuō)明了本文算法具有一定的魯棒性。
圖3 算法魯棒性評(píng)估結(jié)果
提出的惡意軟件識(shí)別算法使用軟件操作碼作為特征,并為每個(gè)樣本創(chuàng)建了特征的圖表示。然后使用基于堆疊自編碼器的深度學(xué)習(xí)框架進(jìn)行惡意軟件識(shí)別。實(shí)驗(yàn)評(píng)估的結(jié)果表明了本文的算法具有較高的魯棒性。未來(lái)的工作在于采用更大規(guī)模和更具多樣性的數(shù)據(jù)集,在實(shí)際的應(yīng)用環(huán)境中驗(yàn)證算法的性能。
信陽(yáng)農(nóng)林學(xué)院學(xué)報(bào)2020年1期