陳小寒,魏書寧,2,覃正澤
1.湖南師范大學(xué) 信息科學(xué)與工程學(xué)院,長沙410006
2.國防科技大學(xué) 并行與分布處理國防科技重點(diǎn)實(shí)驗(yàn)室,長沙410006
惡意軟件指任何有損用戶利益的軟件,從最簡單的電腦蠕蟲和木馬程序,到最復(fù)雜的電腦病毒等都包括在內(nèi)。惡意軟件不僅會影響受感染的電腦或設(shè)備,還可能會影響與受感染設(shè)備通信的其他設(shè)備[1]。根據(jù)2020 年《國家互聯(lián)網(wǎng)應(yīng)急中心第16 期動態(tài)周報》報道,一周內(nèi)中國境內(nèi)感染網(wǎng)絡(luò)病毒的主機(jī)數(shù)量約為54.8萬臺[2]。由此可見,惡意軟件已經(jīng)嚴(yán)重威脅到了網(wǎng)絡(luò)安全,加強(qiáng)惡意軟件檢測技術(shù)刻不容緩。
目前,根據(jù)程序是否被執(zhí)行,惡意軟件檢測技術(shù)大致分成兩類:靜態(tài)惡意軟件分析和動態(tài)惡意軟件分析。靜態(tài)分析方法快速安全且功能強(qiáng)大,因?yàn)樗梢栽诓粓?zhí)行代碼的情況下進(jìn)行分析,但也很容易受到混淆技術(shù)的影響,當(dāng)惡意代碼使用壓縮或者加密的二進(jìn)制文件時,它便不能很好識別。使用動態(tài)分析[3-4]能更好地檢測未知的惡意軟件,但是存在一定的危險性。并且由于分析過程大多數(shù)在虛擬環(huán)境中進(jìn)行,會導(dǎo)致系統(tǒng)資源消耗過大。惡意軟件的分析和檢測一直是安全人員面臨的挑戰(zhàn)。
隨著機(jī)器學(xué)習(xí)算法的出現(xiàn),傳統(tǒng)的機(jī)器學(xué)習(xí)算法如支持向量機(jī)、決策樹、貝葉斯等都被用來作為惡意代碼檢測的模型[5-6]。同時,惡意代碼可視化思想的提出,也為研究員們提供了新的視角。Nataraj 等人提出了一種將惡意軟件二進(jìn)制文件可視化為灰度圖(提取Gist 特征)的惡意軟件分類方法[7]。實(shí)驗(yàn)結(jié)果表明,屬于同一家族的兩張圖像在紋理與布局上都非常相似。因此,在圖像處理領(lǐng)域有著優(yōu)勢的卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Network,CNN)得以引入。而近年來,遞歸神經(jīng)網(wǎng)絡(luò)(Recursive Neural Network,RNN)作為強(qiáng)大的神經(jīng)網(wǎng)絡(luò),研究員們也一直試圖將其應(yīng)用到惡意軟件檢測和分類中[8-10]。
本文提出了一種名為RSGC的靜態(tài)分析方法,該方法是RNN、SimHash、Greyscale 和CNN 這4 個詞的縮寫的組合。本文使用RSGC 分析匯編語言操作代碼并完成惡意代碼的分類。該方法優(yōu)點(diǎn)在于:(1)特征提取過程中引入RNN,生成預(yù)測操作碼。在分析惡意代碼時,將預(yù)測代碼與原始代碼相結(jié)合。(2)使用可視化技術(shù)將惡意軟件的非直觀信息轉(zhuǎn)化成為大小相同的灰度圖像,與原始的操作碼相比,SimHash可以生成相同維度的特征,并映射到相同尺寸的圖像中。(3)利用CNN 對灰度圖像進(jìn)行訓(xùn)練,取得了不錯的效果。
與本文相關(guān)的研究工作只要包括以下方面:惡意代碼可視化,CNN和RNN在惡意軟件檢測方面的使用,以及SimHash在代碼塊相似性判斷方面的應(yīng)用。
2011 年二進(jìn)制文本轉(zhuǎn)換為灰度圖像的思想首次被用于惡意代碼分類中。該方法將二進(jìn)制文件分成長度為8 位的子字符串,然后將其作為0 到255 范圍內(nèi)的無符號整數(shù),再將十進(jìn)制的一維向量轉(zhuǎn)換成指定寬度的二維矩陣,將其可視化為灰度圖像。這種方法直觀地展示了惡意軟件的特征,且觀察到,對于同一惡意軟件家族里的不同灰度圖像在布局和紋理上是很相似的。2015年文獻(xiàn)[11]提出一種基于紋理指紋的方法,從惡意軟件內(nèi)容中提取或檢測特征。將惡意代碼映射到未壓縮的灰度圖像,通過紋理分割將圖像分割成塊。采用灰度共生矩陣(Gray-Level Co-occurrence Matrix,GLCM)提取惡意代碼的塊特征和紋理指紋。2019 年文獻(xiàn)[12]提出一種信息密度增強(qiáng)的惡意代碼可視化自動分類方法。該方法將惡意代碼逆向分析與可視化相結(jié)合,通過提取可移植可執(zhí)行(Portable Executable,PE)文件的“.text”段函數(shù)塊的操作碼,提高可視化效率,進(jìn)而提高分類準(zhǔn)確度。
卷積神經(jīng)網(wǎng)絡(luò)(CNN)廣泛運(yùn)用于深度學(xué)習(xí)。由于局部感知野的存在,使得CNN 具有很好的判斷圖像相似性的潛力。因此,基于CNN 的惡意軟件分類方法也取得了不同的成果。2016 年文獻(xiàn)[13]使用具有卷積層和循環(huán)層的神經(jīng)網(wǎng)絡(luò),以系統(tǒng)調(diào)用序列為特征對惡意軟件進(jìn)行分類。為了解決子圖同構(gòu)問題的算法復(fù)雜度,2017 年文獻(xiàn)[14]提出了一種利用CNN 處理惡意代碼API調(diào)用圖的結(jié)構(gòu)。2019年文獻(xiàn)[15]提出了一種基于紋理可視化的深度學(xué)習(xí)惡意分類框架MalDeep;文獻(xiàn)[16]提出了基于紋理灰度圖的惡意軟件檢測方法。
遞歸神經(jīng)網(wǎng)絡(luò)(RNN)對處理時序數(shù)列很有優(yōu)勢,結(jié)構(gòu)如圖1(a)所示。RNN不僅將當(dāng)前隱藏層的輸出傳遞到下一層,還將該輸出作為下一時段當(dāng)前隱藏層的輸入。但是有的序列信息不僅僅依賴先前信息,而是依賴于未來甚至整體序列。因此,提出了能在特定的時間段內(nèi)使用先前輸入和未來信息進(jìn)行訓(xùn)練的雙向遞歸神經(jīng)網(wǎng)絡(luò)(Bidirectional RNN,BRNN)解決這一局限性,如圖1(b)所示。惡意代碼能生成時序數(shù)列,因此研究員們也開始嘗試將RNN運(yùn)用到惡意軟件分類中來。2015年文獻(xiàn)[17]首次使用遞歸神經(jīng)網(wǎng)絡(luò)分析惡意軟件。文獻(xiàn)[18]將RNN用于識別反匯編文件。他們以二進(jìn)制字節(jié)作為RNN 的輸入,并預(yù)測每個位置是否存在函數(shù)邊界。2016 年文獻(xiàn)[19]提出了基于過程行為的深度神經(jīng)網(wǎng)絡(luò)惡意軟件檢測。訓(xùn)練RNN 從隱藏層中提取特征,生成特征圖像,輸入CNN 進(jìn)行訓(xùn)練。但該方法的劣勢在于無法獲得同樣尺寸的圖像。
圖1 遞歸神經(jīng)網(wǎng)絡(luò)和雙向遞歸神經(jīng)網(wǎng)絡(luò)Fig.1 Recursive neural network and bidirectional recursive neural network
SimHash 是一種局部敏感Hash(Locality Sensitive Hashing,LSH)算法,主要用于快速估計(jì)兩個集合的相似性。該算法首次使用在相似網(wǎng)頁去重過程中,而后被引入到克隆代碼的檢測中[20],并在與倒排索引表相結(jié)合后,在惡意代碼復(fù)用性溯源問題中表現(xiàn)出了優(yōu)越性[21]。
以上基于可視化分析的惡意軟件分類方法中,惡意軟件紋理圖通過比較布局和紋理特征體現(xiàn)惡意軟件之間的相似性,但是軟件大小會影響到紋理圖的尺寸,導(dǎo)致生成圖像時效率較低,自動化程度不高;圖熵結(jié)合有利于處理大量非打包惡意二進(jìn)制樣本,但也明確指出使用熵圖進(jìn)行代碼混淆是一項(xiàng)非常困難的任務(wù);RNN 應(yīng)用于惡意軟件分類和識別能獲得很好的準(zhǔn)確性與識別速度,但考慮從過于抽象的隱藏層中提取信息,可解釋性不高。
針對以上問題,本文提出了基于深度學(xué)習(xí)可視化的惡意軟件分類方法。該方法使用RNN 生成預(yù)測代碼,沒有使用隱藏層中的信息,并提高了使用RNN 的可解釋性。其次,使用SimHash可視化方法將惡意軟件映射到尺寸相同的灰度圖像中,使得圖像不需要經(jīng)過尺度變化便能進(jìn)行分類。隨后,使用CNN作為分類器,提高自動化程度。
本文使用靜態(tài)分析的方法來分析惡意軟件。如圖2所示,RMVC 由三部分組成:數(shù)據(jù)預(yù)處理,樣本可視化,CNN 分類。數(shù)據(jù)預(yù)處理階段,對惡意軟件的反匯編文件進(jìn)行操作碼序列提取,并將提取到的操作碼送入RNN中獲取預(yù)測代碼。RNN模型在自然語言處理中展示出很好的優(yōu)勢,而代碼語言也是對上下文敏感的。惡意軟件反匯編的結(jié)果是代碼塊,每個代碼塊的內(nèi)部都通過時序特性進(jìn)行了序列化。使用RNN有助于提供更具代表性的時序序列。原始序列反映了惡意代碼的獨(dú)特特征,而預(yù)測序列則反映了惡意軟件家族中的共同特征。與單一特征信息相比,兩者信息融合產(chǎn)生更加準(zhǔn)確和全面的判斷。
圖2 基于深度學(xué)習(xí)可視化的分類方法流程圖Fig.2 Flow chart of classification method based on deep learning visualization
樣本可視化中,因?yàn)閻阂獯a長度不同,若直接生成特征圖像會導(dǎo)致尺寸大小不一,不能直接使用CNN進(jìn)行分類。同時,若使用統(tǒng)一尺寸也會出現(xiàn)因圖片過小丟失關(guān)鍵信息,或圖片過大CNN 訓(xùn)練時間長等問題。所以使用局部敏感哈希(SimHash)提取操作碼中對位置敏感的信息,使本地信息相同的部分在特征圖像中也一致,并且解決特征圖像大小不相同的問題。最后,將特征圖像發(fā)送到CNN中進(jìn)行訓(xùn)練和分類。
使用IDA Pro對惡意代碼進(jìn)行反匯編,得到匯編代碼。在匯編代碼中,“proc near”表示一段函數(shù)的開始,而“endp”表示該段函數(shù)的結(jié)束,依據(jù)這兩個標(biāo)記可以將匯編代碼拆分成多個函數(shù)塊。如圖3所示,為某一樣本“.text”段中函數(shù)名為“sub_40159C”的實(shí)例。經(jīng)過操作碼提取后得到的操作碼序列為:mov,push,push,call,push,push,push,call,pop,push,call,pop,retn。
圖3 操作碼提取Fig.3 Opcode extraction
本文實(shí)驗(yàn)數(shù)據(jù)來自2015年Kaggle微軟惡意軟件分類挑戰(zhàn),根據(jù)文件內(nèi)容和特征將惡意軟件分類為家族[21]。其中收集到846 種不同類型的操作碼,常用的255 個類型出現(xiàn)比例達(dá)到99.97%,余下的591 種類型僅占0.03%。因此考慮使用常用的255 種類型,并將其余的類型全部劃分到第256種類型中。
操作碼序列經(jīng)過處理后共有256種,而操作碼序列無法直接作為神經(jīng)網(wǎng)絡(luò)的輸入。因此,本文對操作碼進(jìn)行One-Hot編碼,編碼長度為256。One-Hot編碼又稱為一位有效編碼,主要使用N個編碼器對N個狀態(tài)來進(jìn)行編碼,相互獨(dú)立互不干擾,每一個One-Hot 編碼中僅包含一個1,向量中的其他位置全部為0,從而提高在BRNN中操作碼之間的差異性。操作碼的整數(shù)確定了1在One-Hot中的位置,示例如圖4。
圖4 “sub_40159C”操作碼的One-Hot編碼Fig.4 One-Hot encoding of“sub_40159C”opcode
考慮到傳統(tǒng)RNN訓(xùn)練中存在著梯度消失和爆炸的問題,本文選擇門控循環(huán)單元網(wǎng)絡(luò)(Gated Recurrent Unit,GRU),結(jié)構(gòu)如圖5所示,其中r和z是重置和更新門,h和h?是激活和候選激活。GUR 可以看成是長短時間記憶網(wǎng)絡(luò)(Long Short-Term Memory,LSTM)的一個變種,相比LSTM 包含著更少的訓(xùn)練參數(shù),每次迭代所需要的時間與空間資源也更少。本文構(gòu)造一個具有一個輸入層、兩個隱藏層(每個具有256 GRU)和一個softmax輸出層的雙向RNN。
圖5 GRU結(jié)構(gòu)圖Fig.5 GRU structure diagram
與傳統(tǒng)的RNN 不同,BRNN 不僅取決于先輸入的信息,還能在特定的時間段內(nèi)使用先前輸入和未來信息進(jìn)行訓(xùn)練。因此,在訓(xùn)練BRNN 時,設(shè)置一個滑動窗口N,如圖6所示。使用矩形窗中的操作碼來預(yù)測圓形中的操作碼。參數(shù)N決定著神經(jīng)網(wǎng)絡(luò)的學(xué)習(xí)效果和速率。如果N太小,網(wǎng)絡(luò)可能無法從現(xiàn)有的特征中做出正確的預(yù)測;但N太大,BRNN無法完美地處理具有長期依賴的信息,會使訓(xùn)練更加困難且降低準(zhǔn)確率。例如,預(yù)測滑動窗口中第M個操作碼時,要考慮前M-1個操作碼和后N-M個操作碼。處理好當(dāng)前滑動窗口后,下滑一個操作碼的距離,并繼續(xù)預(yù)測當(dāng)前窗口中的第M個操作碼。而參數(shù)M的選擇決定著前后操作代碼對當(dāng)前預(yù)測代碼的影響程度。如果預(yù)測信息依賴較少的先前信息,則可以設(shè)置較小的M值;相反,如果預(yù)測信息依賴較少的未來信息,則可以設(shè)置較大的M值。
圖6 帶滑動窗口的BRNN訓(xùn)練,并生成預(yù)測代碼Fig.6 BRNN training with sliding window and generating prediction code
每個惡意代碼家族中的惡意代碼都具有相似且在別的家族中找不到的特征,對惡意軟件反匯編后得到由函數(shù)塊組成的反匯編文件,而這些函數(shù)塊內(nèi)都進(jìn)行了時序特征序列化。RNN神經(jīng)網(wǎng)絡(luò)在處理序列信息方面較其他神經(jīng)網(wǎng)絡(luò)有著很大的優(yōu)勢。即使窗口內(nèi)操作碼稍有不同,RNN 也會很快地學(xué)習(xí)到類似的序列特征。在反向傳播階段,參數(shù)沿?fù)p耗函數(shù)梯度的相反方向更新,梯度方向是損耗函數(shù)變化最大的方向。為了使損失函數(shù)盡快下降,滑動窗口的測試結(jié)果將是相似窗口最常見的操作碼。因此,即使原始代碼序列的某些部分不同,RNN 也能生成相似的預(yù)測序列,使得同一家族的惡意代碼更加相似。
本文對提取的每個函數(shù)塊操作碼序列和經(jīng)過RNN生成的預(yù)測碼進(jìn)行SimHash,經(jīng)過分詞、Hash、加權(quán)、合并以及降維五個過程。該算法中,每個操作碼序列被看成是一個文檔,每個操作碼都是關(guān)鍵字,且被同等對待,因此所有權(quán)重操作碼都為1。通過Hash 算法獲得每個操作碼序列的64 位Hash 值;然后根據(jù)Hash 值是“1”還是“0”,來判斷該位是加上還是減去權(quán)值,得到加權(quán)數(shù)列;接著將函數(shù)塊的所有操作碼加權(quán)序列疊加起來得到新的序列;最后判斷新的序列上的值是否大于“1”,大于則為“1”,否則為“0”,從而得到了該操作碼序列的SimHash值。
SimHash算法實(shí)現(xiàn)過程如下:
以圖3中前5個操作碼和6位散列函數(shù)h為例來解釋計(jì)算過程,如圖7所示。
圖7 SimHash計(jì)算過程Fig.7 SimHash calculation process
惡意代碼的可視化方法在靜態(tài)分析領(lǐng)域取得了良好的效果。對于同一家族的惡意代碼,代碼中的有效信息非常相似。因此,使用SimHash 來處理每段惡意代碼。如上所述,SimHash 是一種對位置敏感的哈希,它對輸入項(xiàng)進(jìn)行哈希處理,以便相似項(xiàng)映射得到相同結(jié)果。而且通過相同的SimHash 獲得的信息長度是一致的,方便生成大小相同的灰度圖像。
本文使用SimHash 將每段惡意代碼映射為64 位哈希值,將哈希值轉(zhuǎn)換成兩個8位的十六進(jìn)制數(shù)。判斷十六進(jìn)制數(shù)是否大于7,是則記為1,反之記為0,得到兩個8 位的二進(jìn)制數(shù),數(shù)值大小為0~255。最后將這兩個數(shù)值作為橫縱坐標(biāo),標(biāo)記到256×256 的灰度值為255 的圖上(如圖8所示),每個坐標(biāo)出現(xiàn)一次則該點(diǎn)灰度值減少16,直到減少至0 時,灰度值將不再減少,最后生成如圖9 所示的惡意軟件灰度圖像。同時對預(yù)測碼也進(jìn)行SimHash,得到預(yù)測碼SimHash值,然后使用SimHash值映射得到預(yù)測碼的特征圖像。如圖10 所示,將原始代碼特征圖像與預(yù)測碼特征圖像融合在一起,RNN 的預(yù)測碼會添加一些有助于分類的信息,過濾一些原始干擾。但在以往RNN的研究中會存在丟失一些有效信息的問題。
圖8 SimHash值映射得到特征圖像Fig.8 SimHash value mapping to obtain feature images
圖9 同一家族的兩個惡意代碼原始圖像Fig.9 Two original images of malicious code from same family
圖10 原始代碼特征與預(yù)測代碼特征融合的特征圖像Fig.10 Feature image of original code feature and predicted code feature fusion
因此,本文將原始特征與預(yù)測特征一起映射到同一圖像中,這樣即使預(yù)測特征在某一位置遺失像素,原始數(shù)據(jù)在該位置依然會有特征信息,從而提高惡意軟件分類的準(zhǔn)確性。圖11為使用BRNN后獲得的惡意軟件灰度圖。
圖11 同一家族的兩個惡意代碼的特征融合圖像Fig.11 Feature fusion image of two malicious codes of same family
隨著惡意軟件可視化的發(fā)展,研究員發(fā)現(xiàn)來自相同惡意家族的特征圖像非常相似,并且不同的惡意家族也僅包含少數(shù)共同特征。因此,將卷積神經(jīng)網(wǎng)絡(luò)引入到惡意軟件家族分類中。
本文使用的CNN結(jié)構(gòu)如圖12所示。作為輸入的每個惡意軟件圖像需要經(jīng)過三個卷積層、兩個二次池化層和三個全連接層。在卷積(C1,C2,C3)過程中,每個卷積層包含32 個2×2 的卷積核。如果輸入特征映射顯示為xi,權(quán)重為wij,則輸出特征映射為:
圖12 CNN結(jié)構(gòu)圖Fig.12 CNN structure diagram
其中“*”表示卷積算子,ai表示可學(xué)習(xí)偏置參數(shù)。接著采用tanh作為激活函數(shù)R進(jìn)行非線性映射:
每個池化操作接收前一個卷積層的最后輸出,并設(shè)置池化大小為2×2。在第二個池化層后,將輸出特征映射平坦化,并連接到三個全連接層,大小分別為512、256和9。前兩個全連接層采用tanh 作為激活函數(shù),最后一個使用softmax函數(shù)。
基于深度學(xué)習(xí)可視化的分類模型包含RNN與CNN兩個深度學(xué)習(xí)神經(jīng)網(wǎng)絡(luò),其中RNN 是對惡意軟件原始代碼進(jìn)行預(yù)測,生成能反映惡意軟件家族共同特征的預(yù)測代碼;CNN則是對軟件進(jìn)行分類,避免了繁瑣的特征提取過程。該模型使用SimHash 可視化的方式完成惡意軟件到灰度圖的轉(zhuǎn)變,克服了灰度圖因軟件大小不同而尺寸不一的問題,同時預(yù)測代碼的加入,增強(qiáng)了信息密度,提高了模型的分類精度。
本文實(shí)驗(yàn)數(shù)據(jù)來源于2015年的Kaggle Microsoft[22]惡意軟件分類挑戰(zhàn)。此數(shù)據(jù)集中有9 個家族的10 868個標(biāo)記惡意軟件樣本,包含二進(jìn)制和反匯編文件,其中80%用于訓(xùn)練,其余用于測試。實(shí)驗(yàn)數(shù)據(jù)集中的惡意軟件樣本分布如表1 所示。實(shí)驗(yàn)程序用Python 和Matlab編寫,硬件環(huán)境為Intel Core i5-5200處理器,主存8 GB。
表1 用于實(shí)驗(yàn)的惡意軟件數(shù)據(jù)集Table 1 Malware data set used in experiment
本文使用召回率來評價RSCM的分類結(jié)果,用準(zhǔn)確率、誤報率、漏報率來比較RSCM 與其他方法的對比結(jié)果。具體來說,正確預(yù)測樣本屬于惡意軟件家族A為真陽率(TP),不屬于家族A的樣本被預(yù)測到家族中為假陽率(FP),屬于家族A的樣本沒有被預(yù)測到A中為假陰率(FN),不屬于家族A 的樣本沒有被預(yù)測到家族A 中為真陰率(TN)。召回率、準(zhǔn)確率、誤報率、漏報率定義如下。
召回率:所有樣本中,屬于家族A 的樣本中被正確預(yù)測為家族A的樣本所占的比例。
準(zhǔn)確率:被測試樣本中被正確預(yù)測的比例。
誤報率:所有樣本中,不屬于家族A 的樣本被預(yù)測為家族A樣本的比例。
漏報率:所有樣本中,屬于家族A 的樣本被預(yù)測為別的家族樣本的比例。
使用RNN 滑動窗口,需要考慮特定時段N值(滑動窗口)和預(yù)測第M位的值。如圖13 所示,當(dāng)滑動窗口的大小N固定,M接近N/2 時,RNN能夠更好地學(xué)習(xí)惡意家庭的特征。因此,應(yīng)將要預(yù)測的操作碼設(shè)置在滑動窗口的中心附近。
圖13 RNN滑動窗口N 和預(yù)測碼M 的選擇結(jié)果Fig.13 RNN sliding window N and prediction code M selection results
本文在提取特征時僅考慮提取PE 文件的“.text”段特征,為了驗(yàn)證“.text”段的有效性,對比使用PE 文件“.text”段與完整PE文件可視化的分類結(jié)果。并與其他分類方法進(jìn)行比較,包括基于特征提取的傳統(tǒng)分類算法、基于紋理圖像的CNN 分類算法。實(shí)驗(yàn)結(jié)果表明本文提出的分類模型擁有更好的分類效果。
表2 中,RSGC 為本文方法的實(shí)驗(yàn)結(jié)果。Gist 即為按照文獻(xiàn)[7]方法將全部PE 文件轉(zhuǎn)化為灰度圖并提取Gist特征的實(shí)驗(yàn)結(jié)果,LBP表示對惡意代碼二進(jìn)制文件提取LBP 特征的實(shí)驗(yàn)結(jié)果,并且兩者都采用K最近鄰(K-NearestNeighbor,KNN)算法(K=2)對樣本進(jìn)行分類。CNN表示采用文獻(xiàn)[16]的方法利用CNN進(jìn)行分類。LBP-text、Gist-text、CNN-text 分別表示對“.text”段進(jìn)行LBP特征提取、Gist特征提取、CNN分類的實(shí)驗(yàn)結(jié)果。
表2 是否使用”.text”段灰度圖分類結(jié)果Table 2 Gray image classification results whether to use“.text”segment
從表2 可以看出,RSGC 較另外幾種方法而言有最高的準(zhǔn)確率、最低的誤報率和漏報率,說明本文方法具有更高的有效信息密度,且在分類階段能自動提取出更多有代表性的特征。Gist 方法分類精確度高于LBP 方法,說明針對全部PE 文件全局特征(Gist)比局部特征(LBP)更能反映惡意軟件類別;而在局部文件“.text”段對應(yīng)的灰度圖像上,局部特征更能凸顯類別。CNN 方法表明,不管是全局還是局部,CNN都有著優(yōu)秀的自動化分類能力。同時,LBP-text 方法和CNN-text 方法比LBP 方法和CNN 方法有著更高的準(zhǔn)確率,也驗(yàn)證了使用“.text”段特征能夠提高惡意軟件分類的準(zhǔn)確率。
從時間消耗方面來說,CNN 方法因?yàn)椴恍枰M(jìn)行特征提取亦不需要操作碼提取,所以用時最短。本文方法雖然需要使用IDA來提取“.text”段函數(shù)塊操作碼,還要經(jīng)過RNN 生成預(yù)測碼,但所需時間仍然比需要進(jìn)行特征提取的LBP、Gist方法少。
本文通過SimHash 值映射得到包含原始代碼和預(yù)測代碼的灰度圖像,隨后將圖像放入CNN中進(jìn)行分類,得到了GSCM的惡意軟件家族混淆矩陣(圖14)?;煜仃嚨闹涤蒅SCM 的真陽率與假陰率構(gòu)成。主對角線上的值為真陽率,其他的值表示假陰率。同時,為了驗(yàn)證加入預(yù)測代碼能夠提高圖像分類進(jìn)度,將原始灰度圖像與加入預(yù)測代碼后的灰度圖像放入同樣的CNN中進(jìn)行分類,同時進(jìn)行“.text”段的LBP 特征提取并用KNN算法(K=2)進(jìn)行分類。如表3所示,實(shí)驗(yàn)結(jié)果證明加入預(yù)測代碼能夠提高模型的分類效果。
圖14 GSCM分類器的混淆矩陣Fig.14 Confusion matrix of GSCM classifier
表3 有無預(yù)測碼灰度圖像分類結(jié)果Table 3 Gray image classification results with or without prediction code
本文提出了RSGC 算法,基于靜態(tài)分析的方法,將惡意代碼轉(zhuǎn)化為灰度圖片,同時引入RNN和CNN兩種深度學(xué)習(xí)網(wǎng)絡(luò)實(shí)現(xiàn)預(yù)測和分類功能。RNN生成的預(yù)測序列,增加信息之間的相關(guān)性,一定程度上提高了分析過程中的抗干擾能力。再用CNN 對圖像進(jìn)行分類,取得了很好的分類效果。未來將繼續(xù)收集數(shù)據(jù),將該方法在更大的數(shù)據(jù)集上進(jìn)行運(yùn)用,并將繼續(xù)嘗試別的方法,提高無監(jiān)督學(xué)習(xí)能力,減少分類時間。
此外,針對操作碼序列進(jìn)行SimHash后生成的灰度點(diǎn)陣圖進(jìn)行分析,發(fā)現(xiàn)在同一家族樣本中反復(fù)出現(xiàn)的點(diǎn),對應(yīng)的函數(shù)在結(jié)構(gòu)上有很大的相似性,且具有明顯的特征。這樣的點(diǎn)是很有意義的,很大可能是該家族的顯著特征。因此,可以考慮獲取同一家族中較多這樣的點(diǎn),進(jìn)而形成顯著特征集,為后續(xù)研究提供基礎(chǔ)。