◆賈立鵬 王鳳英 姜倩玉
(山東理工大學(xué) 山東 255049)
飛速發(fā)展的互聯(lián)網(wǎng)技術(shù)推動(dòng)了人類社會(huì)的不斷進(jìn)步,但互聯(lián)網(wǎng)技術(shù)的不斷革新也促進(jìn)了惡意代碼的發(fā)展壯大,隨著大數(shù)據(jù)時(shí)代的來臨,惡意代碼的數(shù)量和種類呈現(xiàn)爆發(fā)式增長。2019年上半年,國家互聯(lián)網(wǎng)應(yīng)急中心 CNCERT新增捕獲計(jì)算機(jī)惡意程序數(shù)量約3200萬個(gè),我國境內(nèi)感染惡意程序的主機(jī)數(shù)量約240萬臺(tái),惡意程序傳播次數(shù)平均每天達(dá)998萬次。惡意代碼給個(gè)人和社會(huì)造成了嚴(yán)重的危害,高效的惡意代碼檢測技術(shù)成為當(dāng)前網(wǎng)絡(luò)安全領(lǐng)域研究的熱點(diǎn)。
惡意代碼分析技術(shù)分為兩種,基于內(nèi)容的靜態(tài)分析技術(shù)和基于行為特征的動(dòng)態(tài)分析技術(shù)[1]。靜態(tài)分析技術(shù)不需要運(yùn)行惡意代碼,而是通過反匯編等方式得到惡意代碼的指令和結(jié)構(gòu)信息,完成對惡意代碼的靜態(tài)特征和功能模塊的分析。動(dòng)態(tài)分析技術(shù)需要在計(jì)算機(jī)中運(yùn)行惡意代碼,通過監(jiān)視惡意代碼運(yùn)行過程并捕捉其動(dòng)態(tài)行為特征進(jìn)行惡意代碼分析。動(dòng)態(tài)分析技術(shù)消耗資源較大,需要花費(fèi)大量時(shí)間,難以處理大量的惡意代碼。
近年來,機(jī)器學(xué)習(xí)技術(shù)在圖像分類、語音識(shí)別和自然語言處理等領(lǐng)域獲得了巨大成功,由于這些成功的案例,一些學(xué)者開始將機(jī)器學(xué)習(xí)方法應(yīng)用于惡意代碼的檢測和研究,并取得了不錯(cuò)的檢測效果。Schultz等人[2]提取了惡意代碼 DLL(Dynamic Link Library)和API(Application Programming Interface)中的特征,使用樸素貝葉斯算法對未知的惡意代碼進(jìn)行檢測,這也是機(jī)器學(xué)習(xí)算法第一次運(yùn)用在惡意代碼檢測中。和傳統(tǒng)的靜態(tài)和動(dòng)態(tài)分析技術(shù)相比,惡意代碼可視化為圖像的過程不受惡意代碼數(shù)量的影響,因此可視化的方法被用于大規(guī)模的惡意代碼分類。Nataraj等人[3]首次設(shè)計(jì)了完整的利用惡意代碼圖像對其進(jìn)行分類的方案,通過可視化方式對惡意代碼分類取得了良好的效果,此后的研究中不斷有學(xué)者借助此思想進(jìn)行惡意代碼的檢測和研究;Kancherla等人[4]使用對惡意代碼灰度圖像進(jìn)行信號處理,并使用支持向量機(jī)對其進(jìn)行檢測和分類;韓曉光等人[5]基于惡意代碼圖像提出了一種基于內(nèi)容指紋的檢測方案,提升了檢測惡意代碼變種的能力。劉亞姝等人[6]將惡意代碼可視化技術(shù)與逆向分析結(jié)合,使用MobileNet輕量模型提升了惡意代碼的分類準(zhǔn)確率。文獻(xiàn)[7]的作者使用灰度紋理特征、操作碼指令特征結(jié)合灰度直方圖對惡意代碼進(jìn)行分類,該方法結(jié)合了惡意代碼的局部特征和全局特征。文獻(xiàn)[8]的作者提出了一種基于N-Gram特征的惡意代碼可視化檢測方法,并使用深度融合網(wǎng)絡(luò)驗(yàn)證了方法的分類能力。
面對大數(shù)據(jù)時(shí)代爆炸式增長的惡意代碼數(shù)量,傳統(tǒng)的動(dòng)態(tài)檢測技術(shù)無法同時(shí)應(yīng)對海量的惡意代碼,本文提出一種基于 DQN(Deep Q Network)的惡意代碼檢測分類方法,屬于靜態(tài)分析方法。該方法將惡意代碼反匯編文件轉(zhuǎn)換為灰度圖像數(shù)據(jù),建立基于DQN的惡意代碼分類模型對惡意代碼灰度圖像數(shù)據(jù)集進(jìn)行訓(xùn)練,該模型結(jié)合了強(qiáng)化學(xué)習(xí)中Q-Learning算法的試錯(cuò)機(jī)制和動(dòng)作優(yōu)化策略,以及深度學(xué)習(xí)中卷積神經(jīng)網(wǎng)絡(luò)算法對圖像數(shù)據(jù)深層特征的挖掘?qū)崿F(xiàn)對9類惡意代碼的檢測分類。
Q-Learning[9]是一種基于值的強(qiáng)化學(xué)習(xí)[10]算法,強(qiáng)化學(xué)習(xí)是機(jī)器學(xué)習(xí)中重要的一部分。強(qiáng)化學(xué)習(xí)是一種通過智能體(動(dòng)作的執(zhí)行者)和所給環(huán)境交互進(jìn)行學(xué)習(xí)的方法,通過環(huán)境的反饋信息,智能體不斷調(diào)整在不同環(huán)境狀態(tài)下采取的動(dòng)作,以此獲得更多的獎(jiǎng)勵(lì),最終達(dá)到完成學(xué)習(xí)任務(wù)的目的。強(qiáng)化學(xué)習(xí)的核心思想是試錯(cuò)機(jī)制和動(dòng)作優(yōu)化策略,智能體通過在環(huán)境中不斷嘗試來改進(jìn)所采取的動(dòng)作策略。
Q-Learning的核心是Q(s,a)函數(shù)和 Q-table。Q(s,a)函數(shù)計(jì)算在s狀態(tài)下做出a動(dòng)作后獲得的期望獎(jiǎng)勵(lì)數(shù)值(Q值),該數(shù)值用于更新Q-table的內(nèi)容。Q-table是用于存儲(chǔ)Q(s,a)函數(shù)產(chǎn)生的Q值的表格,作用是指導(dǎo)智能體執(zhí)行可以獲得更大獎(jiǎng)勵(lì)的動(dòng)作,智能體通過Q-table得到關(guān)于狀態(tài)和動(dòng)作的最佳策略。Q(s,a)函數(shù)的計(jì)算方式如公式(1)所示。

式中:α表示學(xué)習(xí)率;r表示當(dāng)前獲得的獎(jiǎng)勵(lì)值;γ表示獎(jiǎng)勵(lì)衰減值,該值決定對未來獎(jiǎng)勵(lì)的重視程度;maxa′Q(s′,a′)表示下步狀態(tài)執(zhí)行不同的動(dòng)作所獲得的期望獎(jiǎng)勵(lì)數(shù)值中的最大值。
DQN[11]是一種融合了 Q-Learning和神經(jīng)網(wǎng)絡(luò)的算法。QLearning使用Q-table的方式存儲(chǔ)狀態(tài)和動(dòng)作,但是當(dāng)狀態(tài)和動(dòng)作的空間非常大的時(shí)候,Q-Learning無法在計(jì)算機(jī)的內(nèi)存中維護(hù)這么大的表格,而且每次在表格中搜索狀態(tài)和動(dòng)作是非常耗時(shí)的。DQN的提出解決了這個(gè)問題,DQN不需要表格存儲(chǔ)Q值,而是直接通過神經(jīng)網(wǎng)絡(luò)生成。DQN通過神經(jīng)網(wǎng)絡(luò)的分析得到某個(gè)狀態(tài)執(zhí)行相應(yīng)動(dòng)作所獲得的Q值,并通過不斷更新神經(jīng)網(wǎng)絡(luò)從而學(xué)習(xí)到最佳的動(dòng)作策略。
DQN中最重要的技術(shù)是經(jīng)驗(yàn)回放,經(jīng)驗(yàn)回放使得DQN在更新的時(shí)候能夠隨機(jī)抽取之前經(jīng)歷進(jìn)行學(xué)習(xí)。DQN通過在經(jīng)驗(yàn)回放集合中進(jìn)行隨機(jī)均勻采樣,打亂了訓(xùn)練數(shù)據(jù)之間的相關(guān)性和學(xué)習(xí)經(jīng)歷之間的相似性,使得神經(jīng)網(wǎng)絡(luò)的更新更有效率。
首先,將惡意代碼反匯編文件可視化為灰度圖像;然后,建立基于DQN的惡意代碼檢測分類模型,將惡意代碼灰度圖像劃分為訓(xùn)練數(shù)據(jù)和測試數(shù)據(jù),訓(xùn)練模型提取灰度圖像的紋理特征并完成學(xué)習(xí);最后,利用訓(xùn)練好的模型對待測試的惡意代碼灰度圖像進(jìn)行檢測分類。
本文使用惡意代碼灰度圖像的紋理特征作為特征向量,根據(jù)紋理特征的相似性對惡意代碼進(jìn)行分類。惡意代碼可視化的流程如下:
(1)對惡意代碼反匯編文件采取二進(jìn)制方式進(jìn)行讀取,其中以8個(gè)bits為一組序列,序列數(shù)值的范圍在0x00到0xFF之間,剛好對應(yīng)灰度圖像像素值的取值范圍,將每個(gè)序列值映射成灰度圖的像素值。
(2)為了最大限度保持圖像的紋理特征,將上述生成的灰度圖像像素值轉(zhuǎn)換為行寬向量為128的二維矩陣,利用該二維矩陣生成惡意代碼的灰度圖像。同家族惡意代碼的灰度圖像有相似的結(jié)構(gòu)特征,不同家族之間有著較為明顯的區(qū)分,圖1為兩種不同家族惡意代碼的灰度圖像。

圖1 不同家族的惡意代碼灰度圖像
(1)設(shè)定模型環(huán)境和學(xué)習(xí)任務(wù)。將2.1節(jié)中生成的惡意代碼灰度圖像用于構(gòu)建模型的虛擬環(huán)境,該環(huán)境設(shè)定為不斷產(chǎn)生惡意代碼灰度圖像的場景,將每張灰度圖像視為環(huán)境狀態(tài),圖像的類別作為動(dòng)作編碼,智能體的任務(wù)是識(shí)別圖像中的內(nèi)容,達(dá)到對惡意代碼圖像進(jìn)行分類的目的。本文規(guī)定智能體正確識(shí)別圖像時(shí),將得到1分的獎(jiǎng)勵(lì),否則將被扣除1分。
(2)提取惡意代碼灰度圖像的特征。本模型選擇卷積神經(jīng)網(wǎng)絡(luò)提取惡意代碼灰度圖像中的紋理特征,和其他的神經(jīng)網(wǎng)絡(luò)相比,卷積神經(jīng)網(wǎng)絡(luò)最主要的兩個(gè)特征是局部連接和權(quán)值共享,這大大減少了參數(shù)量,使得卷積神經(jīng)網(wǎng)絡(luò)被廣泛應(yīng)用。卷積神經(jīng)網(wǎng)絡(luò)的主要結(jié)構(gòu)包括卷積層、池化層和全連接層,卷積層使用卷積核提取圖像中的特征,池化層減小卷積核的尺寸,保留圖像重要的特征,同時(shí)防止過擬合的發(fā)生。
本模型選擇Relu函數(shù)作為卷積層的激活函數(shù),Relu函數(shù)使得部分神經(jīng)元的輸出為0,減少了參數(shù)之間的依存關(guān)系,加快了模型的訓(xùn)練過程。
使用MSE(Mean Square Error)作為本模型的損失函數(shù),MSE作為損失函數(shù)可以計(jì)算真實(shí)數(shù)據(jù)和模型擬合數(shù)據(jù)之間的差距,計(jì)算方法如公式(2)所示。

式中:n為樣本的數(shù)量,yi為真實(shí)數(shù)據(jù),yi′為擬合數(shù)據(jù)。
(3)計(jì)算Q(s,a),訓(xùn)練模型。將卷積層和池化層提取惡意代碼灰度圖像的紋理特征作為全連接層的輸入,得到每個(gè)動(dòng)作對應(yīng)的Q值。具體地,輸入的惡意代碼灰度圖像經(jīng)過卷積神經(jīng)網(wǎng)絡(luò)的卷積層和池化層后生成特征向量,全連接層以這些特征向量作為輸入,輸出9個(gè)Q值。另外,將當(dāng)前圖像對應(yīng)類別one-hot編碼值和9個(gè)Q值做點(diǎn)乘操作,整合得到Q(s,a),結(jié)構(gòu)如圖2所示。

圖2 計(jì)算Q(s,a)
根據(jù)Q(s,a)選擇執(zhí)行動(dòng)作,即輸出當(dāng)前圖像的類別來獲得分?jǐn)?shù)和環(huán)境提供的下一張待識(shí)別的圖像,并將這次的學(xué)習(xí)經(jīng)歷存儲(chǔ)在經(jīng)驗(yàn)回放集合中;重復(fù)以上操作直到遍歷完所有的圖像。本模型經(jīng)驗(yàn)回放集合的內(nèi)容包括當(dāng)前狀態(tài)的圖像,智能體對當(dāng)前圖像做出的動(dòng)作,智能體得到的獎(jiǎng)勵(lì)以及下個(gè)狀態(tài)的圖像。從經(jīng)驗(yàn)回放集合中進(jìn)行隨機(jī)采樣,用記憶中的樣本數(shù)據(jù)訓(xùn)練模型。
本文的實(shí)驗(yàn)數(shù)據(jù)來自2015年Kaggle舉辦的惡意代碼檢測大賽,共有9類惡意代碼家族,數(shù)量為10868個(gè)。
為了更好地說明分類效果,本文使用準(zhǔn)確率(Accuracy)作為模型分類的評價(jià)指標(biāo),計(jì)算方式如公式(3)所示。

式中:TP表示正確類被模型預(yù)測為正確類的數(shù)量;TN表示錯(cuò)誤類被模型預(yù)測為錯(cuò)誤類的數(shù)量;FP表示錯(cuò)誤類被模型預(yù)測為正確類的數(shù)量;FN表示正確類被模型預(yù)測為錯(cuò)誤類的數(shù)量。
本模型隨機(jī)抽取80%的數(shù)據(jù)用于訓(xùn)練,20%的數(shù)據(jù)用于測試。參數(shù)的設(shè)置對分類結(jié)果有較大的影響,經(jīng)過實(shí)驗(yàn)對比,將本模型中的卷積層和池化層的個(gè)數(shù)分別設(shè)置為3,詳細(xì)設(shè)置如表1所示。

表1 參數(shù)設(shè)置
由于生成的惡意代碼圖像樣本之間是獨(dú)立同分布的,為避免下一個(gè)狀態(tài)的Q值影響當(dāng)前狀態(tài)的計(jì)算,所以將模型的獎(jiǎng)勵(lì)衰減值設(shè)置為0。以下主要關(guān)注模型中經(jīng)驗(yàn)回放集合的尺寸、學(xué)習(xí)率以及模擬次數(shù)對分類準(zhǔn)確率的影響。保持其他參數(shù)的值不變,調(diào)整經(jīng)驗(yàn)回放集合的尺寸,模型的分類準(zhǔn)確率的變化如圖 3所示。

圖3 經(jīng)驗(yàn)回放集合尺寸對準(zhǔn)確率的影響
如圖3所示,當(dāng)經(jīng)驗(yàn)回放集合的尺寸為64時(shí),模型的分類能力是最佳的。將經(jīng)驗(yàn)回放集合的尺寸設(shè)置為64,調(diào)整學(xué)習(xí)率的數(shù)值,模型的分類準(zhǔn)確率變化如圖4所示。

圖4 學(xué)習(xí)率對準(zhǔn)確率的影響
如圖4所示,當(dāng)學(xué)習(xí)率為0.5時(shí),模型的分類能力達(dá)到最佳。將經(jīng)驗(yàn)回放集合的尺寸設(shè)置為64,學(xué)習(xí)率設(shè)置為0.5,調(diào)整模型的模擬次數(shù),模型的分類準(zhǔn)確率如圖5所示。

圖5 模擬次數(shù)對準(zhǔn)確率的影響
如圖5所示,當(dāng)模擬次數(shù)為200時(shí),模型的分類能力達(dá)到最佳,當(dāng)模擬次數(shù)大于200次時(shí)模型出現(xiàn)過擬合現(xiàn)象。綜上所述,當(dāng)模型中的經(jīng)驗(yàn)回放集合尺寸為64,學(xué)習(xí)率為0.5,模擬次數(shù)為200時(shí),模型的分類效果是最好的,平均分類準(zhǔn)確率為98.3%。為了驗(yàn)證本文所用模型的有效性,將本文模型與其他傳統(tǒng)機(jī)器學(xué)習(xí)模型進(jìn)行了實(shí)驗(yàn)結(jié)果的對比,如表2所示。

表2 本文模型與其他模型的對比
由表2可知,其他分類模型中分類效果最好的是 CNN,但仍與本文所用模型的分類效果有較大差距。和單純的卷積神經(jīng)網(wǎng)絡(luò)模型相比,本文方法結(jié)合了強(qiáng)化學(xué)習(xí)的試錯(cuò)機(jī)制和動(dòng)作優(yōu)化策略,以及深度學(xué)習(xí)對于特征的深層挖掘,提升了惡意代碼紋理特征的表達(dá)能力,提高了惡意代碼家族分類的準(zhǔn)確率。
本文提出了一種基于DQN的惡意代碼檢測分類方法,該方法結(jié)合強(qiáng)化學(xué)習(xí)試錯(cuò)機(jī)制和動(dòng)作優(yōu)化策略,以及深度學(xué)習(xí)對圖像特征的深層挖掘完成對惡意代碼的分類。將惡意代碼反匯編文件轉(zhuǎn)換為灰度圖像,并建立基于DQN的惡意代碼分類模型對惡意代碼灰度圖像的紋理特征進(jìn)行提取和學(xué)習(xí)。模型的環(huán)境設(shè)定為產(chǎn)生圖像的場景,智能體在環(huán)境中不斷進(jìn)行識(shí)別圖像的任務(wù),并根據(jù)環(huán)境的反饋信息調(diào)整動(dòng)作策略,達(dá)到分類惡意代碼圖像的效果。實(shí)驗(yàn)結(jié)果表明,本文所用方法在分類準(zhǔn)確率方面優(yōu)于傳統(tǒng)的機(jī)器學(xué)習(xí)方法。