齊彩云,胡勇
(四川大學(xué)電子信息學(xué)院,成都 610065)
目前,惡意軟件是信息安全領(lǐng)域的一個(gè)重要挑戰(zhàn)。根據(jù)McAfee[1]的數(shù)據(jù),在2018年第一季度,檢測到超過7億個(gè)惡意程序。2018年4月10日,Spring官方宣布Spring Data Commons存在遠(yuǎn)程代碼執(zhí)行漏洞(CVE-2018-1273),攻擊者可構(gòu)造包含有惡意代碼的SPEL表達(dá)式實(shí)現(xiàn)遠(yuǎn)程代碼攻擊,直接獲取服務(wù)器控制權(quán)限。GandCrab勒索病毒于2018年1月面世以來,短短一年內(nèi)歷經(jīng)多次版本更新。從今年9月份V5版本面世以來,出現(xiàn)了多個(gè)版本變種,并將感染主機(jī)桌面背景替換為勒索信息圖片。2018年5月,Talos團(tuán)隊(duì)發(fā)現(xiàn)一款名為VPNFilter的惡意軟件。該惡意軟件具有多種功能,可支持情報(bào)收集和破壞性網(wǎng)絡(luò)攻擊操作,可感染71款甚至更多物聯(lián)網(wǎng)設(shè)備。
雖然越來越多的惡意軟件出現(xiàn),但是大多數(shù)新的惡意程序是已知的惡意樣本變種的,這些惡意軟件可以分為不同的類型,因而每個(gè)相同類型的惡意軟件都具有高度相似的行為特征。因此,屬于同一類型的惡意樣本之間的這些共同的特征可以用于對未知程序的檢測和分類。Nataraj等人將惡意代碼二進(jìn)制文件映射為圖像,利用Gabor濾波器多尺度和多方向的特點(diǎn)提取圖像的全局特征,然后使用最近臨近算法對惡意代碼那進(jìn)行分類。Kancherla等人將惡意代碼圖像的強(qiáng)度特征和小波特征與Gabor濾波器提取的全局特征結(jié)合,然后使用這三種特征對惡意代碼進(jìn)行分類。Hanks等人將惡意代碼圖像的熵值映射到曲線上,然后計(jì)算曲線的相似度對惡意代碼分類。Farrokhmanesh等人將惡意代碼映射為灰度圖,使用三種哈希算法提取惡意代碼的指紋,然后計(jì)算圖像指紋之間的距離對惡意代碼分類。由于存在惡意代碼二進(jìn)制文件重新分配問題,所以上述惡意代碼分類方法分類效果并不理想。
卷積神經(jīng)網(wǎng)絡(luò)是一種基于“輸入-輸出”直接端到端的學(xué)習(xí)方法,直接利用圖像像素信息作為輸入,最大程度保留了輸入圖像的所有信息,通過卷積操作進(jìn)行特征的提取和高層抽象,模型輸出直接是識別的結(jié)果。模型中的參數(shù)可以通過反向傳播和梯度下降方法進(jìn)行訓(xùn)練。卷積神經(jīng)網(wǎng)絡(luò)經(jīng)過訓(xùn)練后可以自動學(xué)習(xí)原始數(shù)據(jù)的特征,并且可以提取學(xué)習(xí)到的特征并分類。卷積神經(jīng)網(wǎng)絡(luò)的下采樣層和卷積層之間不是全連接的方式,層與層之間也是非線性映射的,通過局部感知野、權(quán)值共享、池化三個(gè)方面可以減少需要訓(xùn)練的參數(shù)。近幾年,卷積神經(jīng)網(wǎng)絡(luò)在圖像識別、自然語言處理、語音識別等方面應(yīng)用廣泛,并表現(xiàn)出了很大的發(fā)展?jié)摿?。?012年,Image圖像分類挑戰(zhàn)賽[10]上就用到了卷積神經(jīng)網(wǎng)絡(luò),其分類效果遠(yuǎn)遠(yuǎn)超過其他方法。因此,由于卷積神經(jīng)網(wǎng)絡(luò)有良好的圖像分類性能,現(xiàn)在已經(jīng)應(yīng)用到了網(wǎng)絡(luò)流量的檢測與分類研究中[7-8]。文獻(xiàn)[11]提出了一種基于離差標(biāo)準(zhǔn)化的卷積神經(jīng)網(wǎng)絡(luò)(MMN-CNN,Min-Max Normalization Convolutional Neural Network)對流量進(jìn)行分類,設(shè)計(jì)了6種不同網(wǎng)絡(luò)結(jié)構(gòu)的卷積神經(jīng)網(wǎng)絡(luò),將所設(shè)計(jì)的6種不同卷積層結(jié)構(gòu)的卷積神經(jīng)網(wǎng)絡(luò)分別采用平均池化和最大池化進(jìn)行性能對比,最終選擇輸入層為16×16,卷積層為3×3以及采用最大池化方法的模型,最終準(zhǔn)確率高達(dá)99.3%。文獻(xiàn)[12]提出了一種基于卷積神經(jīng)網(wǎng)絡(luò)的流量識別技術(shù)研究,將輸入層設(shè)置為24×24,并根據(jù)TCP數(shù)據(jù)包的有序性和UDP數(shù)據(jù)包的無序性,對原始的網(wǎng)絡(luò)數(shù)據(jù)進(jìn)行了擴(kuò)展,進(jìn)一步提高了識別率.文獻(xiàn)[13]提出了一種基于深度學(xué)習(xí)的惡意URL識別,通過正常URL樣本訓(xùn)練得到URL中的字符的分布表示,將URL轉(zhuǎn)化成二維圖像,然后通過訓(xùn)練CNN模型對二維圖像進(jìn)行特征抽取,最后使用全連接層進(jìn)行分類,并取得了精度為0.973和F1為0.918的結(jié)果。
根據(jù)以上研究成果,本文提出了一種基于卷積神經(jīng)網(wǎng)絡(luò)的惡意軟件檢測與分類方法[2-3],即使惡意代碼二進(jìn)制文件重新分配,在預(yù)處理階段也可以將這些二進(jìn)制數(shù)據(jù)形成和原惡意代碼相似的圖像,所以該方法可以更準(zhǔn)確的將惡意代碼分類,并且提高分類精度。實(shí)驗(yàn)表明,所提出的CNN模型的性能更高,其準(zhǔn)確率為99.96%,這表明了其作為準(zhǔn)確分類模型的可行性。
在2015年由微軟主辦的基于機(jī)器學(xué)習(xí)的數(shù)據(jù)分析競賽Kaggle機(jī)器學(xué)習(xí)挑戰(zhàn)賽上,將惡意軟件數(shù)據(jù)集進(jìn)行了分類,本文將其惡意軟件數(shù)據(jù)集作為提出的基于卷積神經(jīng)網(wǎng)絡(luò)的惡意軟件檢測及分類系統(tǒng)的學(xué)習(xí)和驗(yàn)證數(shù)據(jù)[4]。表1顯示了總共10868個(gè)惡意軟件,包括9種不同類型,大約200GB。
表1 惡意軟件數(shù)據(jù)集
在使用傳統(tǒng)的基于機(jī)器學(xué)習(xí)的分類器檢測惡意軟件的研究中,可以發(fā)現(xiàn)傳統(tǒng)機(jī)器學(xué)習(xí)的特點(diǎn)是需要根據(jù)人工選擇的惡意軟件特征來從已有的數(shù)據(jù)中擬合模型,從而用于分類。因此,本文提出了一種基于深度CNN的惡意軟件檢測系統(tǒng),自動選擇圖像的最優(yōu)特征。CNN通過對圖像進(jìn)行卷積和池化運(yùn)算來提取圖像的最優(yōu)特征。它的運(yùn)算由式(1)定義:
向量v'1的元素為式(1)中第一個(gè)卷積層的輸出,并對前一層的輸出向量yl-1進(jìn)行卷積,filter為m×m的向量W。Max-pooling計(jì)算在池化層中進(jìn)行,從輸入N×N矢量的K×K區(qū)域選擇一個(gè)最大值代表這一部分的特征,輸出為矢量。
圖1顯示了基于卷積神經(jīng)網(wǎng)絡(luò)的惡意軟件檢測系統(tǒng)的總體結(jié)構(gòu)。首先對惡意軟件映像的二進(jìn)制文件重復(fù)執(zhí)行3×3卷積和2×2池化計(jì)算。最后,使用完全連接層。在圖像分類中主要采用了卷積和池化的運(yùn)算,并取得了較好的分類效果。在此系統(tǒng)中,輸入惡意軟件的圖像就可以輸出惡意軟件的類型。
本文實(shí)驗(yàn)環(huán)境及其配置如下:
●CPU:Intel i7-7700K
●內(nèi)存:16GB RAM
●GPU:NVIDIA GTX 1080Ti
●編程語言:Python 3.5
●深度學(xué)習(xí)框架:TensorFlow 1.4.0
圖1 惡意軟件檢測系統(tǒng)
為了評估使用方法的性能,本文使用了K-折交叉驗(yàn)證。將數(shù)據(jù)集分成K個(gè)大小相等的子樣本。在K個(gè)子樣本中,保留一個(gè)子樣本作為模型測試的驗(yàn)證數(shù)據(jù),其余子樣本作為訓(xùn)練數(shù)據(jù)。這個(gè)過程重復(fù)的次數(shù)與折疊次數(shù)相同,每個(gè)子樣本都只作為驗(yàn)證數(shù)據(jù)使用一次。此外,為了選擇最佳模型,還使用了其他評價(jià)指標(biāo):精確度、召回率和F1得分。這是因?yàn)榫瓤赡苁且环N誤導(dǎo)性衡量標(biāo)準(zhǔn)。當(dāng)存在較大的類別不平衡時(shí),可能需要選擇具有較低精度但對問題具有較大預(yù)測能力的模型(也就是說精度悖論)。其中模型可以預(yù)測多數(shù)類別的值,并且在少數(shù)或關(guān)鍵類別出現(xiàn)錯(cuò)誤的同時(shí)實(shí)現(xiàn)高分類準(zhǔn)確度。精度(P)是真陽性率(Tp)除以真陽性率(Tp)與假陽性率(Fp)之和所得商。
召回率(R)是真陽性率(Tp)除以真陽性率(Tp)與假陰性率(Fn)之和所得商。
F1的分?jǐn)?shù)是精度的加權(quán)平均值,定義如下:
由于本文的目標(biāo)任務(wù)是一個(gè)多類別分類問題,所以使用的是F1分?jǐn)?shù)的一個(gè)改編版本,稱為宏平均F1分?jǐn)?shù),它定義為每個(gè)類的單獨(dú)F1分?jǐn)?shù)的平均值。
其中q是數(shù)據(jù)集中的類數(shù),F(xiàn)1i是第i類的F1分?jǐn)?shù)。因此,大類不會在小類上占主導(dǎo)地位。
為了保證輸入到卷積神經(jīng)網(wǎng)絡(luò)的數(shù)據(jù)大小一致,所以本文將圖像降采樣到固定大小,將所需圖像的高度和寬度設(shè)置為128×128。如果將圖像的高度和寬度設(shè)為較低的值將不能保留所有重要的信息,而設(shè)置為較高的值在不提高總體精度的情況下會增加計(jì)算時(shí)間。例如,將圖像降采樣到16×16像素,則來自KELIHOS v.1類型和VUNDO類型的樣本將會彼此無法區(qū)分,如果將圖像降采樣到64×64像素,則該模型正確分類VUNDO類型的樣本的百分比是50.45%,如果將圖像降采樣為128×128像素,則該模型正確分類VUNDO的百分比將達(dá)到97.1%。此外,本文進(jìn)行了5折和10折交叉驗(yàn)證來評估此惡意軟件檢測模型。表2和表3顯示了對于5次交叉驗(yàn)證和10次交叉驗(yàn)證獲得的檢測結(jié)果。
表22015 年的數(shù)據(jù)集使用128×128像素的圖像進(jìn)行5折驗(yàn)證
表3 2015年的數(shù)據(jù)集使用128×128像素的圖像進(jìn)行10折驗(yàn)證
表4顯示了其他文獻(xiàn)中的方法獲得的結(jié)果,這些方法都是從數(shù)據(jù)集中提取基于圖像的特征以對惡意軟件進(jìn)行分類。納拉亞南等人[5]使用PCA提取前10、12和52個(gè)主成分,使用不同的機(jī)器學(xué)習(xí)分類算法對惡意軟件進(jìn)行分類。此外,Ahmadi等人[6]從圖像中提取Haralick特征和LBP特征,并訓(xùn)練了集成樹用于分類。他們的方法分別使用5倍和10倍交叉驗(yàn)證進(jìn)行評估。由評估結(jié)果可以看出,本文的方法優(yōu)于其他方法。
表4 2015年的數(shù)據(jù)集分類方法的性能比較
本文提出了一種基于灰度圖像可視化的惡意軟件分類的深度學(xué)習(xí)系統(tǒng),這是一種應(yīng)用深度學(xué)習(xí)將惡意軟件的二進(jìn)制內(nèi)容轉(zhuǎn)換為圖像的模式。該解決方案具有許多優(yōu)點(diǎn),允許在實(shí)時(shí)環(huán)境中檢測惡意程序。首先,該系統(tǒng)與執(zhí)行的文件無關(guān),而是完全基于可執(zhí)行文件的二進(jìn)制代碼。其次,將可執(zhí)行文件轉(zhuǎn)換為灰度圖像的成本較低。第三,預(yù)測時(shí)間比其他方法要更短。第四,與以往基于惡意軟件灰度圖像表示的方法相比,該方法具有更高的分類準(zhǔn)確率。
盡管本文提出的方法在準(zhǔn)確性和分類時(shí)間方面能夠優(yōu)于其他的方法,但它存在一些與惡意軟件作為灰度圖像的可視化相關(guān)的問題。雖然可以看到屬于同一類型的惡意軟件的可視化具有相似的模式,但是由于某些壓縮或加密的樣本可能具有完全不同的結(jié)構(gòu),所以這種方法所達(dá)到的效果不佳。針對這種情況,筆者認(rèn)為可以將卷積神經(jīng)網(wǎng)絡(luò)提取的特征與手動提取的特征相結(jié)合作為基于不同類型文件特征的機(jī)器學(xué)習(xí)模型的輸入[9]。