蔣 晨,胡玉鵬,司 凱,曠文鑫
(湖南大學(xué) 信息科學(xué)與工程學(xué)院,長(zhǎng)沙 410000)(*通信作者電子郵箱yphu@hnu.edu.cn)
大數(shù)據(jù)環(huán)境下,如何從各種海量的已知數(shù)據(jù)中提取有價(jià)值的信息來(lái)對(duì)未知事件作出預(yù)測(cè)或者防止未知惡意事件發(fā)生的這個(gè)問(wèn)題引起了各個(gè)領(lǐng)域的研究者們的關(guān)注和研究。在這樣的大環(huán)境下,再加上如今互聯(lián)網(wǎng)的飛速發(fā)展,Android系統(tǒng)由于其高開源性和基于Android系統(tǒng)開發(fā)的軟件沒有一個(gè)統(tǒng)一的發(fā)布和管理平臺(tái),所以導(dǎo)致了很多程序開發(fā)者受黑色經(jīng)濟(jì)的誘惑開發(fā)出了大量的安卓惡意軟件。這不僅制造了整個(gè)Android市場(chǎng)的混亂,還對(duì)每個(gè)移動(dòng)用戶的隱私以及財(cái)產(chǎn)安全造成了更加嚴(yán)重的威脅。
賽門鐵克于2016年只記錄了4個(gè)新惡意家族,較2015年大幅下降,可以看出移動(dòng)威脅領(lǐng)域的創(chuàng)新放緩了。而且,每個(gè)家族中的惡意移動(dòng)應(yīng)用變體數(shù)量增長(zhǎng)了1/4以上,可以看出大多惡意軟件是來(lái)自同一惡意家族,只是通過(guò)代碼混淆和變形成為新的惡意軟件??偟膩?lái)說(shuō),可以推斷出攻擊者選擇改進(jìn)和修改現(xiàn)有的惡意軟件系列和類型,而不是開發(fā)新的和獨(dú)特的威脅類型,可以說(shuō)在某種程度上可執(zhí)行文件代碼是具有相似性的,因此通過(guò)對(duì)惡意文件圖像化處理可以更加直觀地展現(xiàn)經(jīng)過(guò)代碼變種和混淆后惡意文件之間的相似點(diǎn)。除此之外,還有“.pdf”“.doc”“.exe”等類型的惡意軟件,惡意軟件類型的多樣化對(duì)檢測(cè)手段提出了很大的挑戰(zhàn)。因此,需要使用更通用的方式來(lái)分析和檢測(cè)安卓惡意軟件的威脅和攻擊,以及解決跨平臺(tái)惡意文件檢測(cè)問(wèn)題。
傳統(tǒng)的惡意軟件檢測(cè)技術(shù)無(wú)外乎兩種:一種是基于靜態(tài)特征的檢測(cè)分析,例如,Zhu等[1]提出的基于應(yīng)用程序編程接口(Application Programming Interface, API)序列的惡意軟件檢測(cè)方法,將惡意軟件API特征提取出來(lái),建立特征庫(kù)用于惡意軟件的檢測(cè);Zhang等[2]提出的基于n-gram屬性相似度的惡意軟件檢測(cè)方法,將n-gram屬性中的相似度作為惡意文件檢測(cè)的特征。這一類檢測(cè)技術(shù)雖然對(duì)軟件代碼的分析速度比較快,但是對(duì)于混淆或者加密后的軟件無(wú)法作出準(zhǔn)確的分析,無(wú)法對(duì)未知惡意軟件作出判斷[3-5]。另外一種則是基于動(dòng)態(tài)特征的檢測(cè)分析,例如,林鑫[6]提出了基于沙箱的惡意軟件檢測(cè)方法,通過(guò)在沙箱環(huán)境中觀察惡意軟件的行為特征,從而判斷出軟件的性質(zhì);Yewale等[7]提出了基于操作碼頻率的惡意軟件檢測(cè)方法,這種方法通過(guò)檢測(cè)操作碼使用頻率來(lái)判別軟件的好壞,這一類檢測(cè)技術(shù)雖然精確度高,能夠有效處理靜態(tài)檢測(cè)中存在誤報(bào)、漏報(bào)的問(wèn)題。但是這種方法消耗大量的資源,在模仿程序執(zhí)行時(shí)常常耗時(shí)太嚴(yán)重,而且需要非常高的實(shí)時(shí)性[8]。這兩種檢測(cè)技術(shù)都不能很好地解決未知惡意軟件檢測(cè)問(wèn)題,因此,如何從這些海量的惡意軟件中提取有價(jià)值的信息來(lái)對(duì)未知惡意軟件進(jìn)行檢測(cè)就是本文的研究點(diǎn)。另外,韓曉光等[9]提出了一種基于紋理指紋的惡意代碼變種檢測(cè)方法,該方法結(jié)合灰度共生矩陣(Gray Level Co-occurrence Matrix, GLCM)的圖像紋理特征和局部敏感哈希(Locality-Sensitive Hashing,LSH)算法對(duì)PE文件格式的惡意軟件進(jìn)行檢測(cè),準(zhǔn)確率約為78%,并不能完成對(duì)Android平臺(tái)下惡意文件進(jìn)行檢測(cè),不能很好地解決跨平臺(tái)檢測(cè)問(wèn)題,而且這種方法不能有效地避免人工篩選特征所帶來(lái)的問(wèn)題,無(wú)法實(shí)現(xiàn)端到端的檢測(cè)。
因此,本文針對(duì)惡意代碼變種和混淆以及傳統(tǒng)惡意文件檢測(cè)存在的各種問(wèn)題,提出一種新的基于圖像紋理和卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Network, CNN)的惡意文件檢測(cè)技術(shù),該技術(shù)結(jié)合圖像生成技術(shù)和深度學(xué)習(xí)算法,先通過(guò)圖像生成技術(shù)將惡意軟件轉(zhuǎn)換為灰度圖像,再通過(guò)卷積神經(jīng)網(wǎng)絡(luò)算法自動(dòng)提取惡意軟件圖像特征并同時(shí)學(xué)習(xí)訓(xùn)練這些圖像特征,構(gòu)建一個(gè)訓(xùn)練好的卷積神經(jīng)網(wǎng)絡(luò)模型用于對(duì)未知惡意軟件的檢測(cè)。
基于圖像紋理和卷積神經(jīng)網(wǎng)絡(luò)的惡意文件檢測(cè)總體流程主要包括病毒樣本圖像化處理、卷積神經(jīng)網(wǎng)絡(luò)模型構(gòu)建、卷積神經(jīng)網(wǎng)絡(luò)模型訓(xùn)練和卷積神經(jīng)網(wǎng)絡(luò)測(cè)試四大步,總體流程如圖1所示。
圖1 惡意文件檢測(cè)總體流程Fig.1 Overall flow of detection of malicious files
針對(duì)本文所研究的問(wèn)題建立起來(lái)的卷積神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)總共有9層深度:惡意軟件圖像輸入層、4個(gè)連續(xù)的卷積層和池化層、3個(gè)連續(xù)的全連接層、分類結(jié)果輸出層。本文卷積神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)如圖2所示。
圖2 基于卷積神經(jīng)網(wǎng)絡(luò)的惡意文件檢測(cè)模型結(jié)構(gòu)Fig.2 Architecture of malicious file detection model based on CNN
卷積神經(jīng)網(wǎng)絡(luò)的初始化配置如表1所示。
表1 模型網(wǎng)絡(luò)參數(shù)初始化設(shè)置Tab. 1 Model network parameter initialization
1)本文卷積神經(jīng)網(wǎng)絡(luò)的訓(xùn)練函數(shù)采用梯度下降法。
2)神經(jīng)網(wǎng)絡(luò)的學(xué)習(xí)率η取值在區(qū)間[0,1]內(nèi):學(xué)習(xí)率η越大,那么對(duì)權(quán)值的修改就越大,而且訓(xùn)練學(xué)習(xí)速度也越快;學(xué)習(xí)率η越小,則訓(xùn)練學(xué)習(xí)速度就越慢,使用的時(shí)間更多。所以太大的學(xué)習(xí)速率η容易在訓(xùn)練學(xué)習(xí)過(guò)程中造成震蕩,而太小的學(xué)習(xí)速率η則使得網(wǎng)絡(luò)收斂的速度變緩慢,權(quán)值就很難趨于穩(wěn)定。為此,本文使用變學(xué)習(xí)率的方法,該方法的學(xué)習(xí)率η會(huì)隨著訓(xùn)練的時(shí)間改變,在卷積神經(jīng)網(wǎng)絡(luò)初期初始值較大,網(wǎng)絡(luò)收斂迅速,而隨著訓(xùn)練的進(jìn)行,學(xué)習(xí)率η會(huì)不斷減小網(wǎng)絡(luò)就越趨于穩(wěn)定。其公式如下:
(1)
1.4.1 模型在訓(xùn)練階段的流程和算法
第1步 使用灰度圖像生成技術(shù)將大量的實(shí)驗(yàn)樣本轉(zhuǎn)換成灰度圖像。
灰度圖像生成技術(shù)主要使用的是B2M算法,該算法是將任意已知的惡意軟件的可執(zhí)行文件,就是二進(jìn)制文件,每8 bit讀取為一個(gè)不帶符號(hào)的整型(范圍是[0,255]),將固定的行寬設(shè)為一個(gè)向量,這樣整個(gè)文件在最后會(huì)生成一個(gè)二維數(shù)組[10]。下面為文件轉(zhuǎn)換為灰度圖像的大致算法流程。
function B2M(file)
file_size← get_file_size(file)
width← GET_IMAGE_WIDTH(file_size)
rows← size(binaryfile) /width
columns←width/ 8
initarray[rows][columns]
fori=0 →rowsdo
forj=0 →columnsdo
array[i][j] ← convert 8 bit to unsigned integer (0-255)
end for
end for
GrayscaleImage← convert 8 bit vector toGrayscaleImage
returnGrayscaleImage
end function
第2步 將這些樣本的灰度圖像作為卷積神經(jīng)網(wǎng)絡(luò)的輸入。
第3步 使用卷積神經(jīng)網(wǎng)絡(luò)對(duì)這些輸入的灰度圖像自動(dòng)提取圖像紋理特征并同時(shí)對(duì)這些提取的特征進(jìn)行學(xué)習(xí)訓(xùn)練;在這一步驟中使用的卷積神經(jīng)網(wǎng)絡(luò)相關(guān)算法如下:
1)卷積層中圖像特征處理算法。
一般地,以2維圖像為例,則卷積層的形式為:
z(x,y)=f(x,y)*g(x,y)=
mf(x-m,y-n)*g(m,n)
(2)
其中:f代表輸入,通常為2維圖像;g代表卷積核;m和n分別為卷積核的尺寸。卷積層中圖像特征提取流程如下。
輸入 特征圖Input,寬度Width1,長(zhǎng)度Height1,深度Depth1。
參數(shù) 卷積核尺寸F,步進(jìn)Stride,卷積核的個(gè)數(shù)K,填充因子P。
輸出 卷積后的特征圖Output,寬度Width2,長(zhǎng)度Height2,深度Depth2。
InitalizeInput
Width2=(Width1-F+2P)/Stride+1
Height2=(Height1-F+2P)/Stride+1
Depth2=K
Output← [Width2,Height2,Depth2]
2)池化層中圖像特征的處理流程。
輸入 特征圖Input,寬度Width1,長(zhǎng)度Height1,深度Depth1。
超參數(shù) 卷積核尺寸F,步進(jìn)Stride。
輸出 卷積后的特征圖Output,寬度Width2,長(zhǎng)度Height2,深度Depth2。
InitalizeInput
Width2=(Width1-F)/Stride+1
Height2=(Height1-F)/Stride+1
Depth2=Depth1
Output←[Width2,Height2,Depth2]
3)反向傳播訓(xùn)練算法計(jì)算過(guò)程。
輸入 輸入值x,損失函數(shù)E。
參數(shù) 權(quán)重參數(shù)w,偏置項(xiàng)b,輸入層的激活值α1。
輸出 損失函數(shù)的梯度。
for eachl=2, 3, …,L
// 前向傳播
zl=wlαl-1+bl
αl=σ(zl)
end for
δL=▽?duì)罞⊙σ′(ZL)
// 計(jì)算最后一層的殘差
for eachl=L-1,L-2,…,2
// 反向傳播,計(jì)算每一層的殘差
δl=(wl+1)Tδl+1⊙σ(Zl)
end for
outputwandbargmin(E)
//輸出使損失函數(shù)極小化的w和b
第4步 卷積神經(jīng)網(wǎng)絡(luò)模型訓(xùn)練完畢。
1.4.2 模型在測(cè)試階段的流程和算法
第1步 同樣使用灰度圖像生成技術(shù)將待檢測(cè)的未知文件轉(zhuǎn)換成灰度圖像;
第2步 使用訓(xùn)練好的卷積神經(jīng)網(wǎng)絡(luò)模型自動(dòng)提取圖像紋理特征并學(xué)習(xí);
第3步 輸出檢測(cè)結(jié)果,如正常文件或者惡意文件。
在全連接層的最后一層用的是Softmax回歸分類模型,輸出值為[0,1]區(qū)間的每個(gè)類別的概率[11]。
a)0為正常文件,1為惡意文件。
b)p(0)判定為正常文件的概率,P(1)判定為惡意文件的概率。
c)當(dāng)p(0)>p(1),則表示待檢測(cè)文件為正常文件;否則表示該文件被判定為惡意文件。
基于圖像紋理和卷積神經(jīng)網(wǎng)絡(luò)的惡意文件檢測(cè)技術(shù)的實(shí)驗(yàn)運(yùn)行的環(huán)境:深度學(xué)習(xí)框架Tensorflow[12],64位Windows 7,CPU為酷睿8核2.4 GHz,內(nèi)存為DDR4 2800 8 GB,SSD固態(tài)硬盤512 GB。
本文選取使用量最大的Android和Windows平臺(tái)上惡意樣本作為實(shí)驗(yàn)對(duì)象。Android的惡意軟件來(lái)源于virusshare項(xiàng)目,該惡意樣本庫(kù)收集了大量的惡意樣本。本實(shí)驗(yàn)隨機(jī)選取Android下3 000個(gè)apk文件作為惡意樣本,同時(shí)在移動(dòng)端小米應(yīng)用市場(chǎng)上下載了在各個(gè)分類中下載量靠前的3 000個(gè)正常apk樣本。此次實(shí)驗(yàn)最終在Android平臺(tái)下采用3 000個(gè)惡意樣本與3 000個(gè)良性樣本,合計(jì)6 000個(gè)樣本。同樣,從virusshare項(xiàng)目選取Windows病毒文件2 000個(gè),同時(shí)從360安全衛(wèi)士里下載了各個(gè)種類中下載量靠前的共2 000個(gè)正常Windows程序。最終在Windows平臺(tái)下采用2 000個(gè)惡意樣本和2 000個(gè)良性樣本,合計(jì)4 000個(gè)樣本。本文將每個(gè)平臺(tái)下數(shù)據(jù)集分成2份,分別為訓(xùn)練樣本集和測(cè)試樣本集,比例分別為80%和20%。
本文使用檢測(cè)率TPR、誤報(bào)率FPR和準(zhǔn)確率ACC來(lái)對(duì)模型檢測(cè)性能進(jìn)行評(píng)估,分別定義如下。
真陽(yáng)率,也就是檢測(cè)率,即所有惡意樣本中正確分類為惡意樣本的比例:
假陽(yáng)率,也就是誤報(bào)率,即所有良性樣本中錯(cuò)誤分類為惡意樣本的比例:
準(zhǔn)確率,即所有被正確分類的樣本與所有實(shí)驗(yàn)樣本的比例:
其中:TP表示正確分類為惡意軟件的惡意樣本個(gè)數(shù);FP為錯(cuò)誤分類為惡意軟件的正常樣本個(gè)數(shù);TN表示正確分類為正常軟件的正常樣本個(gè)數(shù);FN表示錯(cuò)誤分類為正常軟件的惡意樣本個(gè)數(shù)。
在卷積神經(jīng)網(wǎng)絡(luò)的初始化配置下通過(guò)實(shí)驗(yàn)得出實(shí)驗(yàn)結(jié)果表2所示。在Android平臺(tái)和Windows平臺(tái)下,其最高準(zhǔn)確率分別達(dá)79.6%和97.6%,平均準(zhǔn)確率分別約為79.3%和96.8%。
表2 本文方法Android及Windows平臺(tái)下檢測(cè)性能對(duì)比結(jié)果Tab. 2 Detection performance of proposed method under Android and Windows platform
而文獻(xiàn)[9]在未分塊和分塊兩種情況下,平均準(zhǔn)確率分別只有71.7%和78.6%,結(jié)果如表3所示。
本文方法和文獻(xiàn)[9]方法的實(shí)驗(yàn)結(jié)果對(duì)比如圖3所示。
由此可得出:本文方法無(wú)論是在Android平臺(tái)還是Windows平臺(tái)下檢測(cè)準(zhǔn)確率都高于文獻(xiàn)[9]方法的準(zhǔn)確率,并且在Windows平臺(tái)的準(zhǔn)確率高出文獻(xiàn)[9]方法約20%。而且,文獻(xiàn)[9]一個(gè)明顯的缺陷就是實(shí)驗(yàn)的樣本量太少,不足以說(shuō)明問(wèn)題,因此可見本文研究所提出的方法實(shí)驗(yàn)有效而且準(zhǔn)確度較高,而且可以很好地解決跨平臺(tái)惡意軟件檢測(cè)問(wèn)題。
表3 文獻(xiàn)[9]中各樣本集檢測(cè)準(zhǔn)確率結(jié)果Tab. 3 ACC of different sample sets in reference [9]
圖3 本文方法與文獻(xiàn)[9]方法的準(zhǔn)確率對(duì)比Fig.3 Accuracy comparison of proposed method and reference [9]
同時(shí),為測(cè)試本文方法在時(shí)間以及內(nèi)存開銷上的情況,分別對(duì)32 KB、64 KB、128 KB、256 KB、512 KB、1 024 KB、2 048 KB、3 072 KB以及4 096 KB大小的樣本進(jìn)行分析,測(cè)試這些樣本分別在灰度圖像映射、卷積神經(jīng)網(wǎng)絡(luò)灰度圖像特征提取和訓(xùn)練兩個(gè)階段的耗時(shí)以及內(nèi)存使用情況,如圖4~5所示。
圖4 本文檢測(cè)模型各階段耗費(fèi)時(shí)間與樣本大小的關(guān)系Fig.4 Relationship between the time cost and the sample size at each stage of the proposed model
圖5 本文檢測(cè)模型各階段內(nèi)存使用與樣本大小的關(guān)系Fig.5 Relationship between memory usage and sample size at each stage of proposed model
可見對(duì)于單個(gè)待檢測(cè)樣本來(lái)說(shuō),系統(tǒng)檢測(cè)的時(shí)間隨著樣本增加而增加,其中,在灰度圖像特征提取和訓(xùn)練這個(gè)階段會(huì)消耗更多的時(shí)間和內(nèi)存。
文獻(xiàn)[9]的時(shí)間開銷如圖6所示,分析可知,文獻(xiàn)[9]的方法主要有五個(gè)階段,而本文方法只有兩個(gè)階段,大幅減少了檢測(cè)所需要的時(shí)間。本文方法無(wú)論在時(shí)間開銷上還是內(nèi)存開銷上都比文獻(xiàn)[9]節(jié)省了不少,而且大幅提高了檢測(cè)準(zhǔn)確率。綜合來(lái)說(shuō),本文提出的檢測(cè)方法在準(zhǔn)確率、時(shí)間開銷和內(nèi)存開銷上的優(yōu)勢(shì)都非常明顯,而且相對(duì)于文獻(xiàn)[9],本文提出的基于圖像紋理和卷積神經(jīng)網(wǎng)絡(luò)的惡意文件檢測(cè)技術(shù)有效地解決了惡意文件跨平臺(tái)檢測(cè)問(wèn)題。
圖6 文獻(xiàn)[9]中檢測(cè)各階段耗費(fèi)時(shí)間與各樣本集的關(guān)系Fig.6 Relationship between time cost and sample set at each stage of reference [9]
本文主要研究大數(shù)據(jù)環(huán)境下一種能從海量的已知惡意文件樣本中提取有用的信息來(lái)檢測(cè)未知惡意文件的檢測(cè)技術(shù),提出了一種基于圖像紋理和卷積神經(jīng)網(wǎng)絡(luò)的惡意文件檢測(cè)方法。該方法先使用灰度圖像生成技術(shù)將大量的惡意文件樣本轉(zhuǎn)換成灰度圖像,再通過(guò)卷積神經(jīng)網(wǎng)絡(luò)算法自動(dòng)提取這些圖像特征并同時(shí)學(xué)習(xí)訓(xùn)練這些特征,建立一個(gè)訓(xùn)練好的卷積神經(jīng)網(wǎng)絡(luò)模型用于檢測(cè)未知惡意文件。最后通過(guò)實(shí)驗(yàn)驗(yàn)證了本文所提出的惡意文件檢測(cè)方法檢測(cè)準(zhǔn)確率高、檢測(cè)速度快,可以實(shí)現(xiàn)自動(dòng)化檢測(cè),并且可以有效地解決跨平臺(tái)惡意文件檢測(cè)的問(wèn)題。但是本文提出的惡意文件檢測(cè)方法在Android平臺(tái)下的檢測(cè)準(zhǔn)確率遠(yuǎn)遠(yuǎn)不到Windows平臺(tái)下的檢測(cè)準(zhǔn)確率,如何進(jìn)一步提高Android平臺(tái)下的惡意文件的檢測(cè)準(zhǔn)確率值得更進(jìn)一步研究。