曾婭琴,張琳琳,張若楠,楊 波
(新疆大學 a.軟件學院; b.網(wǎng)絡空間安全學院; c.信息科學與工程學院,烏魯木齊 830046)
自動化代碼生成工具可以迅速生成大量的惡意代碼變體,這對互聯(lián)網(wǎng)的安全構(gòu)成了極大的威脅。根據(jù)瑞星公司2019年中國網(wǎng)絡安全報告統(tǒng)計,2018年共截獲病毒樣本總量多達7 786萬個,病毒感染次數(shù)11.25億次,病毒總體數(shù)量比去年同期上漲55.63%。因此,如何對大量的惡意軟件進行檢測和分類已成為惡意代碼分析的挑戰(zhàn)之一。
常用的惡意代碼分析方法有靜態(tài)分析和動態(tài)分析2種。靜態(tài)分析是通過提取源代碼中的操作碼[1-2]、API調(diào)用[3]和函數(shù)調(diào)用[4]等信息來分析軟件的執(zhí)行邏輯,從而實現(xiàn)對惡意代碼的檢測和分類。這種方法可以對代碼進行詳盡的細粒度分析,快速地捕獲語法和語義信息,從而能夠有效地識別出已知的惡意代碼。但此方法很容易受到代碼混淆和加密技術(shù)的干擾,無法檢測出未知的惡意代碼及其變體。動態(tài)分析方法是針對靜態(tài)方法存在的問題提出的,其通常在虛擬環(huán)境中執(zhí)行樣本來分析函數(shù)調(diào)用[5]、控制流信息[6]、文件操作和注冊表修改記錄[7]等行為信息。動態(tài)分析方法需要執(zhí)行惡意代碼,能夠有效地識別和分類惡意代碼,但在惡意代碼的運行過程中有可能對執(zhí)行惡意代碼的系統(tǒng)產(chǎn)生危害。靜態(tài)分析和動態(tài)分析都有各自的優(yōu)點和缺點,但考慮到動態(tài)分析所需的時間和資源,靜態(tài)分析更有利于分析呈指數(shù)爆炸性增長的惡意軟件及其變體。
近年來,基于可視化的方法[8-10]被用于惡意軟件的檢測和分類。文獻[8]通過結(jié)合惡意代碼逆向分析與可視化,將“.text”段函數(shù)塊的操作碼序列SimHash值可視化,提高了惡意代碼可視化的效率和惡意軟件分類準確率。文獻[9]為了獲得比全局特征更靈活和強大的特征描述符,采用局部特征,如局部二值模式和密集尺度不變特征變換,通過將它們分組成塊并使用新的視覺詞袋模型來獲得特征描述符。文獻[10]通過結(jié)合圖像分析技術(shù)與惡意代碼變種檢測技術(shù),將惡意代碼映射為無壓縮灰階圖片,使用灰階共生矩陣(GLCM)算法提取紋理指紋特征,采用加權(quán)綜合多分段紋理指紋相似性匹配方法檢測惡意代碼變種和未知惡意代碼。上述研究證明了基于可視化的惡意軟件檢測方法不但能夠有效地提高惡意軟件的檢測能力,而且能夠檢測出惡意軟件的變體。因此,本文將惡意軟件可視化為灰度圖,通過紋理特征來表示同一家族中的惡意軟件在代碼結(jié)構(gòu)上的相似性。
隨著人工智能的發(fā)展,基于可視化的方法大多結(jié)合支持向量機(SVM)[11-12]、K最近鄰(KNN)[13]、隨機森林(RF)[14-15]等機器學習和卷積神經(jīng)網(wǎng)絡(CNN)[16-19]、棧式自編碼(SAE)[20]等深度學習的方法。基于機器學習的方法需要依靠人工特征工程,特征提取過程耗時又費力。與機器學習方法相比,深度學習方法不但能夠自動提取特征,而且能夠提高惡意軟件的分類能力。例如文獻[18]的方法比SVM、KNN的分類準確率高,文獻[20]的方法分類準確率比RF提高了2.472%,比SVM提高了1.235%。但隨著CNN的層數(shù)越來越深,網(wǎng)絡越來越復雜,惡意軟件檢測過程中的參數(shù)量和計算量也逐漸增多。例如在文獻[16]中,隨著GoogleNet和ResNet的網(wǎng)絡加深,計算量不斷增加,資源消耗也不斷增加,運行時間也隨之增加。
為了解決CNN網(wǎng)絡中參數(shù)量過多和計算量過大的問題,本文構(gòu)建一種基于可視化方法的輕量級CNN的惡意軟件家族分類模型。
基于MobileNet v2的惡意軟件家族分類模型以惡意軟件的紋理特征作為分析對象。首先,需要將惡意軟件進行反匯編,生成反匯編.ASM文件;其次,利用.ASM文件將惡意軟件可視化,使惡意代碼以灰度圖的方式展示出來,以此表示惡意軟件家族在代碼結(jié)構(gòu)上的相似性;再次,采用MobileNet v2構(gòu)建深度學習模型,利用預處理的惡意軟件灰度圖數(shù)據(jù)作為模型的輸入,訓練模型,自動提取灰度圖的紋理特征;最終,利用Softmax分類器進行調(diào)整,通過對惡意代碼紋理進行特征篩選,將惡意軟件劃分到所屬的家族中,完成分類。本文模型工作原理如圖1所示。

圖1 本文模型整體技術(shù)路線
惡意代碼可視化的概念由NATARAJ等人[21]于2011年提出的,他們將惡意代碼的二進制文件轉(zhuǎn)換成灰度圖像,再結(jié)合GIST特征來進行聚類。由于采用可視化的思維,其難度不受惡意軟件數(shù)量的影響,這極大地提高了處理效率。
本文采用紋理特征作為研究對象,研究基于紋理的惡意軟件家族分類方法。因此,需要將惡意轉(zhuǎn)件可視化為灰度圖,其具體步驟如下:
步驟1以二進制的形式讀取樣本中任意一個經(jīng)過反編譯形成的.ASM文件,每讀取8 bit作為一個基本單元,并執(zhí)行后續(xù)步驟。
步驟2將該基本單元中的二進制序列轉(zhuǎn)換為一個無符號的十進制整數(shù),該數(shù)值范圍為0~255,然后將該值映射為圖像中的任意一個像素的灰階值(0表示黑色,255表示白色)。
步驟3將步驟2中灰階值組成的數(shù)組轉(zhuǎn)換為一個固定寬度的二維矩陣。
重復上述步驟,直到文件全部讀取完畢。惡意軟件可視化的流程如圖2所示。

圖2 惡意軟件可視化流程
在上述步驟生成的灰度圖基礎(chǔ)上,利用紋理特征篩選策略選擇出有效的紋理特征。本文通過輕量級的CNN模型自動進行特征的提取、篩選和描述。
相對于DBN、SAE方法,CNN的優(yōu)點是通過感受野和權(quán)值共享來減少網(wǎng)絡訓練過程的參數(shù)。但是隨著CNN網(wǎng)絡層數(shù)不斷的增多,參數(shù)量也隨之增加,從而增加了網(wǎng)絡運行過程的計算量與資源開銷。本文采用MobileNet v2模型[22]對惡意軟件進行特征提取和分類,其原因是MobileNet v2采用深度可分離卷積結(jié)構(gòu),不但能夠通過自學習機制自動提取紋理特征,而且能夠在保持類似精度的條件下顯著地減少模型參數(shù)和計算量。
MobileNet v2是在MobileNet v1[23]的基本概念上構(gòu)建的,它將MobileNet v1和殘差網(wǎng)絡ResNet的殘差單元結(jié)合起來,用深度可分離卷積層代替殘差單元的瓶頸層。深度可分離卷積是許多高效神經(jīng)網(wǎng)絡架構(gòu)的關(guān)鍵構(gòu)建塊,其基本思想是用分解版本替換完整的卷積運算符,該分解版本將卷積分成2個單獨的層,以此來減少運算量以及參數(shù)量。第1層是深度卷積層,它通過對每個輸入通道應用單個卷積濾波器來執(zhí)行輕量級濾波。第2層是1×1的點卷積層,該層通過計算輸入通道的線性組合來構(gòu)建新特征。
深度可分離卷積與標準卷積、深度卷積(DW)、點卷積在結(jié)構(gòu)上存在一定的區(qū)別,深度可分離卷積運行過程中的計算量也與它們存在差異。在標準卷積中,每個卷積核的通道數(shù)與輸入數(shù)據(jù)的通道數(shù)相同。若輸出圖像大小為DF(即卷積核在輸入圖像上執(zhí)行的卷積次數(shù)),二維卷積核的大小DK,輸入數(shù)據(jù)的通道數(shù)為M(即卷積核的通道數(shù)),輸出數(shù)據(jù)的通道數(shù)N(即卷積核的個數(shù)),則標準卷積的計算量為:
DK×DK×M×N×DF×DF
(1)
DW的計算量為:
DK×DK×M×DF×DF
(2)
點卷積的計算量為:
N×M×DF×DF
(3)
而深度可分離卷積的計算量為:
DK×DK×M×DF×DF+N×M×DF×DF
(4)
因此,傳統(tǒng)卷積相比于可分離卷積的計算量為:
(5)
由上述公式可看出,深度可分離卷積的計算量少于標準卷積,因此,MobileNet v2可在一定程度上減少模型的資源開銷。
直接將深度可分離卷積運用到殘差塊中,會產(chǎn)生以下問題:
1)深度可分離卷積層提取得到的特征受限于輸入的通道數(shù),若是采用以往的residual block,先“壓縮”,再通過“卷積提取特征”,那么深度可分離卷積提取到的特征就會很少,而MobileNet v2一開始先“擴張”6倍。 通常residual block里面是先“壓縮”,然后“卷積提取特征”,再“擴張”,MobileNet v2就變成了先“擴張”,然后“卷積提取特征”,再“壓縮”,因此被稱為倒立的殘差塊(inverted residuals)。
2)當采用倒立的殘差塊后ReLU會破壞特征,這是因為ReLU對于負的輸入,輸出全為零,而本來特征就已經(jīng)被“壓縮”,再經(jīng)過ReLU又會“損失”部分特征。因此,MobileNet v2不采用ReLU,而是采用線性瓶頸層,以達到保護特征的目的。
瓶頸層之間的連接捷徑(shortcut)連接的是縮減后的特征映射(feature map)。針對stride=1和stride=2,在塊上有稍微不同,主要是為了與shortcut的維度匹配,因此,當stride=2時,不采用shortcut。以上2種架構(gòu)構(gòu)成了MobileNet v2的基本結(jié)構(gòu)Bottleneck,具體結(jié)構(gòu)如圖3所示。

圖3 MobileNet v2的核心結(jié)構(gòu)
標準的MobileNet v2結(jié)構(gòu)如表1所示。

表1 標準MobileNet v2的網(wǎng)絡結(jié)構(gòu)
在表1中,每行描述一個或多個相同層的序列,重復n次,同一序列中的所有層具有相同的輸出通道數(shù)c,每個序列的第一層步長為s,其他層的步長為1,所有空間卷積使用3×3的核。擴展因子t用于調(diào)整輸入圖像的大小,如表2所示。

表2 擴展因子t的應用
Conv2d操作包含卷積和ReLU6,卷積公式如下:

(6)
其中,x(t)和h(t)函數(shù)是卷積的變量,p是積分變量,t是使函數(shù)h(-p)位移的量,*表示卷積。
在MobileNet v2模型的每一層中均有一個BN層,使網(wǎng)絡可以恢復出原始網(wǎng)絡所要學習的特征分布情況。
本文將惡意軟件的灰度圖作為惡意代碼分析的對象,選擇的紋理特征數(shù)量比文獻[17]少。因此,為了防止MobileNet v2網(wǎng)絡深度過大而引起過擬合的問題,通過多次實驗測試,本文在原MobileNet v2模型的基礎(chǔ)上去掉原始模型中最后2個Bottleneck層以及與最后1個Bottleneck層相連的Conv2d層,保留了原模型的前14層。為了適應模型的輸入數(shù)據(jù),將模型中的平均池化操作Avgpool的大小由原來的7×7改為3×3。本文的MobileNet v2的基本結(jié)構(gòu)如圖4所示。

圖4 本文神經(jīng)網(wǎng)絡模型結(jié)構(gòu)
上述模型將惡意軟件灰度圖作為輸入,輸出一組特征映射,然后將所得特征映射輸入Softmax分類器,輸出一組大小與惡意軟件家族數(shù)目相同的概率分數(shù),最后選擇得分最高的家族作為給定惡意樣本的類標簽。
通過本文MobileNet v2模型提取紋理特征后,采用Softmax將各個惡意樣本劃分到各自的家族中。Softmax模型是邏輯回歸模型在多分類問題上的推廣,其核心思想是通過估算樣本所屬類別的概率對多類別樣本進行分類。
在Softmax回歸中,假設訓練集為{(x1,y1),(x2,y2),…,(xm,ym)},標簽數(shù)據(jù)為yi∈{1,2,…,k},則對于一個給定的測試數(shù)據(jù)xi,其所對應的類別標簽yi的概率分布為:
(7)

本文實驗數(shù)據(jù)取自微軟公司發(fā)布在Kaggle上的惡意軟件分類大賽數(shù)據(jù)集,其中包含9個惡意軟件家族,所有惡意軟件去除PE頭,分別包含IDA反編譯工具得到的“.ASM”文件和16進制表示的“bytes”文件。本文采用“.ASM”文件,共10 868個樣本,表3給出了惡意軟件家族的分布情況。

表3 惡意代碼家族的分布情況
本文為了方便定量分析,統(tǒng)一使用數(shù)據(jù)集樣本數(shù)量為10 868,同時使用準確率A來評價模型的性能。
(8)
其中,NTP代表正確分為某一類別的惡意樣本數(shù)量,NTN代表被正確分為其他類別的惡意樣本數(shù)量,NP代表某一類惡意樣本的量,NN代表其他類別的樣本量,四者均由混淆矩陣得出。
2.3.1 模型調(diào)優(yōu)結(jié)果與分析
將預處理灰度圖數(shù)據(jù)輸入模型,對模型進行訓練。在實驗中,隨機按比例抽取70%數(shù)據(jù)作為訓練集,其余作為測試集。
模型中的學習率lr、迭代次數(shù)epoch和批次大小batch_size等參數(shù)的設置,都會對最終分類結(jié)果造成一定的影響。因此,本文通過調(diào)整參數(shù)來優(yōu)化模型,使其能夠適應惡意軟件的灰度圖數(shù)據(jù)。在實驗中,首先保持其他參數(shù)為默認值,調(diào)整學習率lr。經(jīng)過實驗,隨著lr的變化,模型的分類準確率隨之發(fā)生變化,結(jié)果如圖5所示。

圖5 學習率對分類結(jié)果的影響
由圖5可知,當lr=0.000 07時,模型的泛化能力最高。在此基礎(chǔ)上,保持其參數(shù)不變,調(diào)整迭代次數(shù)epoch,測試其對模型分類性能的影響,結(jié)果如圖6所示。

圖6 迭代次數(shù)對分類結(jié)果的影響
由圖6可知,隨著epoch的增加,分類準確率并不會一直提高。這是因為:當epoch少時,模型學習特征的能力不足;當epoch多時,模型出現(xiàn)過擬合的現(xiàn)象。本文取epoch=15。在確定lr和epoch后,本文實驗測試了批次大小batch_size對模型分類性能的影響,結(jié)果如圖7所示。

圖7 批次大小對分類結(jié)果的影響
由圖7可知,隨著batch_size的變化,模型的分類能力逐漸變化。當batch_size為10時,模型的分類能力最佳。同時可發(fā)現(xiàn),在不同的參數(shù)組合下,特征的表現(xiàn)能力有所不同。經(jīng)上述實驗得到最佳參數(shù),因此,下文實驗參數(shù)設置為lr=0.000 07,epoch=15,batch_size=10,在此情況下,模型能更好地適應惡意軟件樣本,其分類性能更佳。
2.3.2 灰度圖紋理分類能力
在本實驗中,紋理特征的選擇對于惡意軟件家族分類結(jié)果至關(guān)重要。因此,選取不同的像素點數(shù)目進行準確率對比實驗,結(jié)果如圖8所示。

圖8 不同灰度圖紋理的模型分類準確率
由圖8可知,當灰度圖的像素點數(shù)目在3 136時,模型的分類性能最佳,并且在3 600和4 096時分類效果相對穩(wěn)定。從圖中還可以看出,當灰度圖的像素點數(shù)目在2 500時,模型的準確率有一個提高,然后保持穩(wěn)定,因此,像素點數(shù)目在2 500到4 096間包含了惡意代碼家族類別的核心信息。
2.3.3 模型整體對比分析
將訓練數(shù)據(jù)與測試數(shù)據(jù)設置為7∶3的固定比例,驗證不同方法對于實驗結(jié)果的影響。
實驗使用MobileNet v2模型與文獻[16-18,21]的4種模型進行對比,其中文獻[16-18]的模型均采用了微軟發(fā)布的惡意軟件分類競賽數(shù)據(jù)集。文獻[16]將惡意軟件的操作碼轉(zhuǎn)為圖像,分別分析ResNet和GoogleNet在此圖像上的分類效果;文獻[17]將惡意軟件映射為彩色圖像,利用經(jīng)典的CNN模型對惡意代碼進行分類;文獻[18]利用了一種敏感哈希方法SimHash來表示操作碼的圖像,然后利用改進的神經(jīng)網(wǎng)絡模型MCSC對惡意代碼進行分類;文獻[21]是經(jīng)典的惡意代碼可視化方法,是一種通過提取圖像的GIST特征進行聚類的方法。各個模型的精度表現(xiàn)如圖9所示。

圖9 分類模型的準確率對比
由圖9可知,使用紋理特征來表示惡意代碼家族的相似性能達到較好的分類結(jié)果。而且從上述實驗能夠看出,在惡意代碼分類領(lǐng)域,本文模型能夠自動提取惡意代碼的紋理特征。實驗結(jié)果證明:本文模型對惡意代碼紋理特征的表達能力更顯著,能更準確地分類惡意代碼及其變體。
本文通過計算MobileNet v2模型的參數(shù)量,并統(tǒng)計其他對比模型的參數(shù)量,從側(cè)面反映各個模型的資源消耗情況,實驗結(jié)果如表4所示。

表4 7種網(wǎng)絡模型的參數(shù)使用情況
在表4中,層數(shù)僅包含卷積層和全連接層,不包含池化層。由表4可知,隨著模型層數(shù)的增加,模型的參數(shù)量逐漸增多,在輸入數(shù)據(jù)相同的情況下,模型的計算量隨之增大,從而增加了模型的資源開銷。通過對上述數(shù)據(jù)進行比較,本文模型不僅能提高模型的分類準確率,而且降低了模型運行過程中的資源開銷。
為了驗證所選可視化圖像和MobileNet v2模型對惡意軟件分類的有效性,將惡意代碼的灰度圖作為分析對象,利用機器學習的4個模型RF、SVM、決策樹、KNN對惡意代碼進行分類,并與本文模型進行對比,結(jié)果如圖10所示。

圖10 機器學習模型與MobileNet v2的分類結(jié)果對比
由圖10可知,在采用相同灰度圖的情況下,MobileNet v2模型的分類效果更好。實驗結(jié)果進一步證明,基于輕量級CNN的惡意代碼分類模型能夠提取惡意代碼的特征,提高特征的表達能力,從而提高模型的分類性能。
由上述實驗分析可知,MobileNet v2模型在計算量和參數(shù)量均較小的情況下,能夠自動提取紋理特征并進行惡意軟件家族的分類。該模型不受惡意軟件數(shù)量和類別的影響,能夠解決各類惡意代碼爆炸式增長而難以分析的問題,為實際應用提供了一種時間和資源消耗較低的惡意軟件家族分類方法。
本文結(jié)合惡意軟件可視化方法和輕量級的CNN模型,提出一種計算量和參數(shù)量較少的惡意軟件分類模型。利用灰度圖像表示同一家族的惡意軟件在代碼結(jié)構(gòu)上的相似性,構(gòu)建輕量級的CNN模型MobileNet v2并進行訓練。采用自學習機制自動提取惡意軟件的紋理特征,利用Softmax分類器將惡意軟件樣本劃分到所屬的家族。實驗結(jié)果表明,該模型具有良好的分類能力,并且時間和資源消耗均較低。下一步將利用大數(shù)據(jù)分析技術(shù),結(jié)合源代碼的操作碼特征或API特征,以提高本文模型對惡意軟件的檢測效率和準確率。