申高寧,陳志翔,王 輝,陳 姮
(1.閩南師范大學(xué) 計(jì)算機(jī)學(xué)院,福建 漳州363000;2.數(shù)據(jù)科學(xué)與智能應(yīng)用福建省高校重點(diǎn)實(shí)驗(yàn)室,福建 漳州363000;3.閩南師范大學(xué) 物理與信息工程學(xué)院,福建 漳州363000)
在過去幾年里隨著互聯(lián)網(wǎng)的飛速發(fā)展,惡意代碼數(shù)量也呈爆發(fā)式增長(zhǎng)。2020 年瑞星“云安全”系統(tǒng)共截獲病毒樣本總量1.48 億個(gè)[1],病毒感染次數(shù)為3.52 億次,病毒總體數(shù)量比2019 年同期上漲43.71%,惡意代碼已經(jīng)成為網(wǎng)絡(luò)安全的重要威脅之一[2]。惡意軟件作者經(jīng)常會(huì)重用代碼用來生成具有相似特征的其他惡意變體,而這些惡意變體通常可以歸類為同一個(gè)惡意軟件家族。因此,識(shí)別惡意軟件家族的能力變得十分重要,通過對(duì)惡意代碼的分類,可以更好防范惡意代碼攻擊。
近年來,惡意軟件檢測(cè)分類出現(xiàn)了靜態(tài)分析和動(dòng)態(tài)分析。靜態(tài)分析側(cè)重于統(tǒng)計(jì)特征,例如API 調(diào)用、操作碼序列等。Wang[3]等人通過提取權(quán)限、硬件功能和接收者動(dòng)作等122 個(gè)特征,使用多種機(jī)器學(xué)習(xí)分類器進(jìn)行訓(xùn)練和測(cè)試,并使用隨機(jī)森林(Random Forest)分類器獲得較高的分類準(zhǔn)確率。動(dòng)態(tài)分析則是使用虛擬的環(huán)境來分析惡意應(yīng)用程序的行為[4]。但是這些技術(shù)大多數(shù)需要提取大量特征,檢測(cè)效率不高,對(duì)特征的選擇需要一些專家知識(shí),并且有一定的主觀性。
為了降低特征工程成本和領(lǐng)域?qū)<抑R(shí),一些研究人員使用可視化方法來解決惡意軟件家族分類問題。例如,Nataraj 等人[5]提出把惡意代碼二進(jìn)制文件轉(zhuǎn)化為灰度圖,然后利用k 近鄰算法對(duì)惡意代碼進(jìn)行分類,這種方法相比于之前未轉(zhuǎn)換灰度圖,直接分類的方法準(zhǔn)確率有一定提高,但是該方法用GIST 提取圖片特征需要耗費(fèi)大量時(shí)間,導(dǎo)致效率不高。
隨著深度學(xué)習(xí)在圖像分類領(lǐng)域的快速發(fā)展,有學(xué)者將深度學(xué)習(xí)引入到惡意代碼檢測(cè)領(lǐng)域。Choi 等人[6]把惡意代碼二進(jìn)制文件轉(zhuǎn)化為灰度圖像,運(yùn)用深度學(xué)習(xí)的技術(shù),在12 000 個(gè)樣本中達(dá)到了95.66%的準(zhǔn)確率。Su 等人[7]用light-weight DL 技術(shù)進(jìn)行惡意代碼家族分類,取得94.00%的成績(jī),但是他們提出的網(wǎng)絡(luò)只對(duì)兩類家族進(jìn)行分類,有一定的局限性。Cui 等人利用卷積神經(jīng)網(wǎng)絡(luò)在圖像分類的出色表現(xiàn),并分別利用蝙蝠算法[8]和NSGA-Ⅱ算法[9]處理惡意代碼樣本數(shù)量不均的問題,該方法準(zhǔn)確率明顯高于傳統(tǒng)機(jī)器學(xué)習(xí)方法,且算法復(fù)雜度較低。隨著更深網(wǎng)絡(luò)的提出,Rezende 等人提出將VGG16 網(wǎng)絡(luò)[10]以ResNet 網(wǎng)絡(luò)[11]運(yùn)用在惡意代碼檢測(cè)分類上,該方法準(zhǔn)確率有所提升,但是參數(shù)量變得巨大,分類效率有待提升。
基于上述方法產(chǎn)生的問題,本文提出了一種基于卷積神經(jīng)網(wǎng)絡(luò)[12]的分類方法SE-CNN,實(shí)現(xiàn)惡意代碼家族分類。首先將惡意代碼的二進(jìn)制文件轉(zhuǎn)化成灰度圖得到灰度圖像數(shù)據(jù)集,然后構(gòu)建SE-CNN網(wǎng)絡(luò)模型對(duì)灰度圖像數(shù)據(jù)集進(jìn)行訓(xùn)練,最后實(shí)現(xiàn)對(duì)惡意代碼的檢測(cè)分類。該方法采用CNN 對(duì)灰度圖像自動(dòng)提取特征,解決了特征提取慢且耗時(shí)的問題;通過結(jié)合SE 模塊自適應(yīng)學(xué)習(xí)通道重要程度信息,并賦予特征通道權(quán)重,從而激勵(lì)有用特征信息,同時(shí)抑制無用信息,提升了模型分類準(zhǔn)確率。實(shí)驗(yàn)結(jié)果表明,本文方法準(zhǔn)確率高于傳統(tǒng)機(jī)器學(xué)習(xí)方法,且參數(shù)量相較于先進(jìn)的深度學(xué)習(xí)方法更低。
本文惡意代碼檢測(cè)模型框架如圖1 所示,首先將惡意代碼二進(jìn)制文件轉(zhuǎn)化為灰度圖像,然后將灰度圖作為輸入層,通過卷積神經(jīng)網(wǎng)絡(luò)層對(duì)圖片特征進(jìn)行提取,再經(jīng)過擠壓和激勵(lì)網(wǎng)絡(luò)模塊對(duì)特征通道權(quán)重分配,接著通過丟棄(Dropout)層減少一定參數(shù),從而防止模型過擬合,提升模型泛化能力,最后通過全連接層進(jìn)行檢測(cè)分類。具體模型參數(shù)如表1 所示,其中Conv 表示卷積層,Pool 表示池化層,F(xiàn)c 表示全連接層。
惡意代碼可執(zhí)行文件中的惡意行為不僅僅只存在于惡意代碼中,還可能存在于其他數(shù)據(jù)中。如果只提取惡意代碼進(jìn)行檢測(cè),可能檢測(cè)不全,如果全部提取又會(huì)增加時(shí)間消耗,還會(huì)降低準(zhǔn)確度。本文將惡意代碼可執(zhí)行文件直接轉(zhuǎn)換為灰度圖像[4],因此可以處理惡意代碼可執(zhí)行文件中的所有部分,同時(shí)相比于直接對(duì)文件進(jìn)行特征提取,時(shí)間可有效縮短。具體方法如圖2 所示,本文把二進(jìn)制可執(zhí)行文件轉(zhuǎn)化為二維的矩陣。
圖1 本文模型架構(gòu)
表1 模型參數(shù)
圖2 惡意代碼可視化
在二進(jìn)制文件轉(zhuǎn)換后的灰度圖像中,相同的家族有著類似的灰度圖紋理,不同家族的灰度圖紋理具有一定的差別,如圖3 所示,Swizzor.gen!E 和Swizzor.gen!I 家族灰度圖有著相似的紋理。在一些算法模型上,對(duì)有著相似紋理的家族分類效果也不太理想。
卷積神經(jīng)網(wǎng)絡(luò)是一種前饋神經(jīng)網(wǎng)絡(luò)[12],廣泛用于圖像分類[13]、語音識(shí)別等領(lǐng)域,它能以較少的時(shí)間提取特征信息。卷積神經(jīng)網(wǎng)絡(luò)對(duì)輸入的圖片提取特征,然后通過全連接層進(jìn)行分類。
1.2.1 卷積層
卷積層是對(duì)輸入的特征圖進(jìn)行特征提取,通過卷積核和特征圖做卷積運(yùn)算,然后通過激活函數(shù)得到輸出特征圖。本文模型使用了線性整流函數(shù)(Rectified Linear Unit,ReLU) 作為卷積層的激活函數(shù),式(1)為ReLU 函數(shù)的形式。ReLU 函數(shù)在x 大于0時(shí),可以有效防止梯度彌散,加快計(jì)算。
1.2.2 池化層
池化層又叫下采樣層,經(jīng)過卷積層后輸出的特征圖會(huì)被傳遞到池化層,然后進(jìn)行特征選擇和信息過濾。本文采取了極大池化(max pooling)方法,極大池化即輸出區(qū)域內(nèi)最大值。通過池化層能減少特征維度,降低過擬合。
1.2.3 全連接層
全連接層可以整合具有類別區(qū)分性的局部信息,在卷積神經(jīng)網(wǎng)絡(luò)中,通常會(huì)有一個(gè)或者一個(gè)以上的全連接層。本文模型最后是一個(gè)全連接層,用來對(duì)提取特征信息進(jìn)行整合,然后將結(jié)果傳遞給Softmax分類器進(jìn)行分類。式(2)為Softmax 函數(shù)。通過Softmax函數(shù)可以使分類的概率范圍在0~1 之間,輸出值可以用來檢測(cè)某一類樣本的概率,達(dá)到多分類的目的。
式中Zi表示第i 個(gè)節(jié)點(diǎn)的輸出值,M 表示輸出節(jié)點(diǎn)個(gè)數(shù)。
受啟發(fā)于擠壓和激勵(lì)網(wǎng)絡(luò)在圖像分類中優(yōu)異的表現(xiàn)[14],本文將結(jié)合擠壓和激勵(lì)模塊來對(duì)惡意家族灰度圖像進(jìn)行分類。擠壓和激勵(lì)模塊原理圖如圖4 所示。
圖4 擠壓和激勵(lì)模塊原理圖
擠壓和激勵(lì)模塊直接連接在卷積神經(jīng)網(wǎng)絡(luò)模塊之后,輸出的多通道特征圖用U=[u1,u2,…,uC]來表示,特征圖的寬為W,高為H,通道數(shù)為C。通過擠壓操作和激勵(lì)操作,最終得到加權(quán)特征圖X=[x1,x2,…,xC]。下面詳細(xì)介紹具體過程。
1.3.1 擠壓塊
為了得到多通道特征圖之間的相關(guān)權(quán)重信息,首先進(jìn)行擠壓操作,對(duì)多通道特征圖U 進(jìn)行全局平均池化(global average pool),把H×W×C 的多通道特征圖U 擠壓成1×1×C 的向量Z,公式如下:
其中zy(y=1,2,…,C)表示向量Z 中第y 通道的特征向量,uy(y=1,2,…,C)表示U 中第y 通道的特征圖。分別把C 個(gè)通道H×W×1 的特征圖池化為1×1×1 的信息點(diǎn),經(jīng)過C 個(gè)通道的池化,最后形成1×1×C 的向量Z。因此經(jīng)過擠壓操作后的向量Z 集合了整個(gè)特征圖像信息。
1.3.2 激勵(lì)塊
激勵(lì)塊的目的是為了利用擠壓操作后聚集的信息,充分獲取通道之間的關(guān)系,激勵(lì)有用的信息傳遞。為了限制模塊的復(fù)雜性和提升通用性,激勵(lì)操作包含了兩個(gè)全連接層,即一個(gè)降維層和一個(gè)升維層。通過兩個(gè)全連接層后得到1×1×C 的向量S,S 的公式如下:
其中σ 表示Sigmoid 函數(shù),δ 表示ReLU 激活函數(shù),W=[W1,W2],W1代表維度縮減參數(shù),W2代表維度增加參數(shù),F(xiàn)ex為加權(quán)函數(shù)。Sigmoid 函數(shù)表示如式(5)所示:
通過激勵(lì)操作中降維層和ReLU 激活函數(shù)以及升維層在進(jìn)行非線性變換時(shí)建立通道之間的相關(guān)性,然后通過Sigmoid 激活函數(shù)將權(quán)重信息歸一化到[0,1],最終輸出的向量S 包含了各通道重要程度的信息。
將向量S 中C 通道的權(quán)重系數(shù)sy(y=1,2,…,C)對(duì)C 通道特征圖U 進(jìn)行加權(quán),得到加權(quán)特征圖X,即:
式中xy(y=1,2,…,C)為加權(quán)特征圖X 中第y 通道特征圖,函數(shù)Fscale(uy,sy)把特征圖uy和對(duì)應(yīng)通道的權(quán)重系數(shù)相乘,其結(jié)果為xy。最終每個(gè)通道特征圖都被賦值了不同的權(quán)重,用來表示特征信息的重要程度,從而實(shí)現(xiàn)激勵(lì)有用信息,抑制無用信息。
深度學(xué)習(xí)的神經(jīng)網(wǎng)絡(luò)模型在訓(xùn)練時(shí)容易出現(xiàn)過擬合現(xiàn)象,Dropout 算法的提出,在一定程度上可以防止模型過擬合[15],提高模型泛化性。圖5 展示了其中一種忽略部分隱層節(jié)點(diǎn)的情況。Dropout 算法的原理是在模型訓(xùn)練中隨機(jī)忽略部分隱層節(jié)點(diǎn),在每批次的訓(xùn)練過程中,由于每次忽略的隱層節(jié)點(diǎn)不同,使得每次訓(xùn)練網(wǎng)絡(luò)都有所不同,每次訓(xùn)練都可以看作是一個(gè)“新”模型。此外,由于節(jié)點(diǎn)都是以一定概率隨機(jī)忽略,使模型不會(huì)過分依賴于某些局部特征。
圖5 使用Dropout 的網(wǎng)絡(luò)模型
Dropout 過程是一個(gè)有效的神經(jīng)網(wǎng)絡(luò)模型平均的方法,通過訓(xùn)練大量不同的網(wǎng)絡(luò)來平均預(yù)測(cè)結(jié)果,這使得模型泛化性更強(qiáng),防止了模型過擬合。
Dropout 取值大小代表隨機(jī)忽略的節(jié)點(diǎn)占總節(jié)點(diǎn)比率。Dropout 的取值會(huì)一定程度影響實(shí)驗(yàn)結(jié)果,Dropout 的值太小,會(huì)導(dǎo)致防止過擬合的作用效果不佳,Dropout 值過大就會(huì)導(dǎo)致模型欠擬合。所以針對(duì)Dropout 的取值本文做了對(duì)比實(shí)驗(yàn)。如圖6 所示,當(dāng)Dropout 取值為0.6 時(shí),準(zhǔn)確率最高,所以本文選取Dropout 為0.6 作為實(shí)驗(yàn)參數(shù)設(shè)置。
圖6 Dropout 取值對(duì)實(shí)驗(yàn)結(jié)果的影響
本文使用的數(shù)據(jù)集是Nataraj 等人公開的Malimg數(shù)據(jù)集,該數(shù)據(jù)集包含了9 339 個(gè)樣本,共有25 類。本文實(shí)驗(yàn)環(huán)境為64 位Windows 10 操作系統(tǒng),處理器為Intel Core i5-6300HQ,8 GB 內(nèi)存,NVIDIA GeForce GTX 960 M 顯卡以及2.2.0 版本Tensorflow-GPU。
本文使用的評(píng)價(jià)指標(biāo)分別為準(zhǔn)確率(Accuracy)、精確率(Precision)、召回率(Recall)和F1-Score,這些評(píng)價(jià)指標(biāo)也被廣泛地用在了最近研究中[9,15]。此外本文還引入了方差評(píng)價(jià)指標(biāo),用來評(píng)估模型在25 類家族準(zhǔn)確率的穩(wěn)定性。
Accuracy:是指分類正確的樣本占總樣本的比例,即用分類正確的正樣本和分類正確的負(fù)樣本之和除以總樣本數(shù)。其公式如下:
Precision:是指分類為正確樣本占真正正確樣本的比例。其公式如下:
Recall:是指分類為正樣本占總正樣本的比例。其公式如下:
F1-Score:是指精確率和召回率的調(diào)和平均數(shù),結(jié)合兩者綜合考慮的指標(biāo)。其公式如下,其中P 代表Precision,R 代表Recall。
方差:是每個(gè)樣本值與全體樣本值的平均數(shù)之差的平方值的平均數(shù)。其公式如下:
式中σ2表示總體方差,Xi表示第i 個(gè)變量,u 代表總體均值,N 表示總體個(gè)數(shù)。
上述評(píng)價(jià)指標(biāo)參數(shù)說明如下:TP 為將正樣本預(yù)測(cè)為正樣本的數(shù)量;TN 為將負(fù)樣本預(yù)測(cè)為負(fù)樣本的數(shù)量;FP 為將負(fù)樣本預(yù)測(cè)為正樣本的數(shù)量;FN為將正樣本預(yù)測(cè)為負(fù)樣本的數(shù)量。
不同的圖像尺寸對(duì)實(shí)驗(yàn)的效果也有一定的影響。針對(duì)輸入圖像尺寸問題,本文做了對(duì)比實(shí)驗(yàn),分別將惡意代碼圖像縮放為64×64、128×128、256×256 的尺寸作為輸入。如表2 所示,256×256 尺 寸的輸入圖像效果最好,64×64 尺寸的輸入圖像相比于其他尺寸在準(zhǔn)確率方面有一定下降,原因是尺寸過小會(huì)忽略一些原始圖像邊緣信息,導(dǎo)致分類效果稍微差一些。從表中還可以看出256×256 尺寸的輸入圖像時(shí)間開銷是128×128 尺寸的輸入圖像的10倍左右,但是128×128 尺寸的輸入圖像的效果和256×256 尺寸的輸入圖像效果相差不大,時(shí)間開銷卻更少,所以本文最終選取輸入圖像的尺寸為128×128。
為了驗(yàn)證本文提出模型的檢測(cè)效果,將本文提出的方法和支持向量機(jī)、隨機(jī)森林等傳統(tǒng)的機(jī)器學(xué)習(xí)方法以及未結(jié)合SE 模塊的卷積神經(jīng)網(wǎng)絡(luò)方法做了對(duì)比,對(duì)數(shù)據(jù)集中25 類家族的Accuracy、Precision、Recall、F1-Score 和方差等指標(biāo)進(jìn)行了比較。最后本文還和最近文獻(xiàn)使用了Malimg 數(shù)據(jù)集的機(jī)器學(xué)習(xí)方法和深度學(xué)習(xí)檢測(cè)分類方法[8-11]進(jìn)行了比較。
在上述實(shí)驗(yàn)條件下,本文獲得了98.86%的分類準(zhǔn)確率。表3 展示了5 種方法總體的準(zhǔn)確率、精確率、召回率和F1-score。結(jié)果表明,本文提出的分類方法在分類精度方面優(yōu)于其他所有分類方法,比未結(jié)合SE 模塊的卷積神經(jīng)網(wǎng)絡(luò)模型準(zhǔn)確率提高了0.32%。
表2 不同尺寸圖像的檢測(cè)結(jié)果
表3 模型檢測(cè)結(jié)果對(duì)比
圖7 ~圖10 展示了5 種方法在25 類惡意代碼家族的準(zhǔn)確率、精確率、召回率和F1-score。實(shí)驗(yàn)結(jié)果表明,本文提出的SE-CNN 算法(98.86%)在準(zhǔn)確度上高于支持向量機(jī)(96.96%)、隨機(jī)森林(97.68%)、決策樹(94.90%)、卷積神經(jīng)網(wǎng)絡(luò)(98.54%)等算法。并且在Swizzor.gen! E 和Swizzor.gen! I 兩個(gè)惡意家族十分相似的情況下,其他分類方法都不能準(zhǔn)確地區(qū)分它們,但本文方法還保持了較高準(zhǔn)確度。
圖11 表示了各類方法在25 類惡意家族準(zhǔn)確率的方差。可以看出本文的方法方差最小,一定程度上反映了本文方法在25 類惡意家族分類準(zhǔn)確率的穩(wěn)定性相較于其他方法更優(yōu)一些。
如表4 所示,本文與現(xiàn)有的基于機(jī)器學(xué)習(xí)和深度學(xué)習(xí)技術(shù)的惡意軟件分類方法進(jìn)行了比較。以下方法均使用了公開的Malimg 數(shù)據(jù)集。
由表4 可見,與深度學(xué)習(xí)算法VGG16 和ResNet相比,本文方法參數(shù)量更少。表中一些算法在網(wǎng)絡(luò)訓(xùn)練過程中,采用了不同的技術(shù)來平衡Malimg 數(shù)據(jù)集中惡意代碼家族不平衡的問題,如Cui 等人使用了BAT[8]和NSGA-II[9]等平衡數(shù)據(jù)集的技術(shù)。本文方法沒有采用任何平衡數(shù)據(jù)的技術(shù),并取得了較高分類準(zhǔn)確率。
本文在相似的家族分類中也保持了較高的召回率,如表5 所示,對(duì)C2LOP.gen!g 和C2LOP.P 家族,以及Swizzor.gen!E 和Swizzor.gen!I 家族的召回率進(jìn)行了對(duì)比。
表4 與其他文獻(xiàn)方法比較
表5 相似家族召回率比較 (%)
本文方法在相似家族的分類召回率上有較大提升,是因?yàn)楸疚姆椒ńY(jié)合了CNN 和SE 模塊的優(yōu)點(diǎn),通過激勵(lì)特征通道中有用信息并抑制無用信息,可以更好地區(qū)分相似惡意家族之間的細(xì)微變化。
圖7 不同分類方法在25 類惡意家族的準(zhǔn)確率
圖8 不同分類方法在25 類惡意家族的精確率
圖9 不同分類方法在25 類惡意家族的召回率
現(xiàn)有的反惡意代碼的解決方案主要還是依賴于機(jī)器學(xué)習(xí)技術(shù)。雖然基于機(jī)器學(xué)習(xí)的方法已經(jīng)被證明在檢測(cè)新的惡意代碼方面具有有效性,但同時(shí)也伴隨著巨大的開發(fā)成本。機(jī)器學(xué)習(xí)所需要的有用特征需要花費(fèi)大量時(shí)間以及一定的惡意代碼分析專業(yè)知識(shí)。
在深度學(xué)習(xí)架構(gòu)中,尤其是卷積神經(jīng)網(wǎng)絡(luò),在檢測(cè)惡意代碼方面有出色的表現(xiàn)。因此,本文提出了一種基于圖像和卷積神經(jīng)網(wǎng)絡(luò)的惡意代碼檢測(cè)方法,把SE 模塊和卷積神經(jīng)網(wǎng)絡(luò)相結(jié)合,快速對(duì)惡意代碼轉(zhuǎn)換的灰度圖像進(jìn)行分類,準(zhǔn)確識(shí)別惡意代碼所屬家族。實(shí)驗(yàn)結(jié)果證明,本文方法在大多數(shù)惡意樣本下分類正確,即使在惡意代碼家族相似的情況下也有較高的準(zhǔn)確率;本文方法與傳統(tǒng)的基于機(jī)器學(xué)習(xí)解決方案相比具有更高的準(zhǔn)確率,同時(shí)避免了手動(dòng)特征工程階段,節(jié)省了大量時(shí)間。未來工作將惡意代碼轉(zhuǎn)換成彩色圖像也是研究的一個(gè)方向。
圖10 不同分類方法在25 類惡意家族的F1-score
圖11 25 類惡意家族準(zhǔn)確率的方差