劉紫煊,王 晨
(1.武漢郵電科學(xué)研究院,湖北武漢 430000;2.南京烽火天地通信科技有限公司,江蘇南京 210000)
目前,全球使用互聯(lián)網(wǎng)的人數(shù)已經(jīng)達(dá)到47 億人次,互聯(lián)網(wǎng)正成為全人類最廣泛使用的工具。但與此同時(shí),針對(duì)互聯(lián)網(wǎng)的網(wǎng)絡(luò)攻擊現(xiàn)象也越來越頻繁,個(gè)人終端遇到的網(wǎng)絡(luò)攻擊行為主要包括惡意代碼、惡意病毒、流氓軟件等。企業(yè)終端除上述攻擊外,還包含大量滲透攻擊。由于近年混淆器的更新迭代日新月異,病毒使用混淆器的情況也逐漸增多,這就導(dǎo)致了病毒變得更加難以發(fā)現(xiàn),病毒生成速度更快,產(chǎn)生數(shù)量更多。惡意代碼利用代碼變形、反追蹤、反虛擬機(jī)、代碼混淆等技術(shù)避開安防系統(tǒng),攻擊計(jì)算機(jī)的現(xiàn)象時(shí)有發(fā)生。根據(jù)報(bào)告,2020 年1-6 月,我國境內(nèi)共攔截計(jì)算機(jī)惡意軟件約1 815 萬個(gè),平均每日傳播次數(shù)約400 多萬次,其中相關(guān)惡意軟件家族達(dá)1 萬余個(gè),被感染惡意程序的計(jì)算機(jī)約300 萬臺(tái)。
為了避免惡意軟件受到殺毒軟件的偵測和查殺,惡意軟件開發(fā)者通常會(huì)加入以下反檢測技術(shù)。加殼:加殼技術(shù)主要包括加密和壓縮兩個(gè)流程,將惡意代碼先加密后壓縮,從而提高代碼被檢測到的難度;寡態(tài)與多態(tài):寡態(tài)是指在惡意代碼中植入多組加密器和解密器,惡意代碼每一次運(yùn)行之后,就會(huì)隨機(jī)自動(dòng)選擇其中一組加密器重新加殼;多態(tài)技術(shù)則是將惡意代碼進(jìn)行加密過程之后,又為解密器添加了一個(gè)引擎,該引擎的主要作用是對(duì)解密器進(jìn)行變形,以便將代碼混淆。代碼混淆:其基本原理是將原始惡意代碼的結(jié)構(gòu)打亂重排,使其更加難以被逆向分析,而代碼的功能卻沒有變化,進(jìn)而躲過查殺。
靜態(tài)分析技術(shù)是指在源代碼未被運(yùn)行的條件下,運(yùn)用專業(yè)的輔助工具,通過分析軟件代碼的結(jié)構(gòu)、功能、操作碼、API 序列、函數(shù)調(diào)用等對(duì)代碼進(jìn)行分析,進(jìn)而驗(yàn)證其是否為惡意軟件以及其所屬的類別。動(dòng)態(tài)分析技術(shù)是指將代碼放置在一個(gè)條件可控的實(shí)際工作環(huán)境或虛擬環(huán)境中,運(yùn)行程序代碼,通過定位到代碼運(yùn)行時(shí)所執(zhí)行的指令和調(diào)用的函數(shù)類型等,進(jìn)而分析代碼的行為軌跡與目的,監(jiān)測其是否為惡意代碼。需要注意的是,動(dòng)態(tài)分析技術(shù)所依賴的實(shí)驗(yàn)環(huán)境是要與外界網(wǎng)絡(luò)徹底隔絕,避免惡意軟件通過網(wǎng)絡(luò)向外傳播,導(dǎo)致其他計(jì)算機(jī)“中毒”,造成損失。
2015 年Microsoft 曾在kaggle 上發(fā)起過一個(gè)惡意軟件分類的挑戰(zhàn)賽,引起了全世界網(wǎng)絡(luò)安全行業(yè)相關(guān)學(xué)者的關(guān)注,微軟發(fā)布比賽的同時(shí),又發(fā)布了近1 000 GB 的惡意軟件數(shù)據(jù)集,該數(shù)據(jù)集共分為九大類,包含超過一萬個(gè)惡意軟件樣本。具體分類和數(shù)量如表1 所示。
表1 惡意軟件家族分類及數(shù)量
由于原始數(shù)據(jù)量過大,解壓后占用存儲(chǔ)空間近200 GB,并受到機(jī)器性能的限制,因此在實(shí)驗(yàn)之前,先對(duì)數(shù)據(jù)集進(jìn)行抽樣處理。從10 868 個(gè)樣本中抽取十分之一作為實(shí)驗(yàn)用樣本。
N-Gram 是根據(jù)統(tǒng)計(jì)學(xué)的模型原理生成的一種新算法,將每次滑動(dòng)的窗口長度設(shè)置為N。N-Gram算法原理是提取文本內(nèi)容,根據(jù)設(shè)置的窗口長度,將文本內(nèi)容依此分割成n個(gè)片段,得到每個(gè)片段的長度為N。每完成一次分割后,便將窗口向后滑動(dòng)一個(gè)單元,經(jīng)過多次的分割移動(dòng),最終形成一個(gè)字節(jié)長度為N的序列。N-Gram 算法的性能和提取特征的總數(shù)取決于窗口的設(shè)定值。
每個(gè)被分割的片段稱為一個(gè)Gram 片段,統(tǒng)計(jì)被分割的Gram 片段出現(xiàn)的頻次,實(shí)驗(yàn)前設(shè)定一個(gè)閾值,并依此過濾出一個(gè)Gram 列表,列表中一個(gè)Gram片段代表一個(gè)特征向量,多個(gè)特征向量組合便是該文本對(duì)應(yīng)的特征向量空間[1]。該模型提出的前提是第n個(gè)片段只受前面n-1 個(gè)片段影響,而不受其他片段影響,整個(gè)片段出現(xiàn)的概率等于各個(gè)片段出現(xiàn)概率的乘積。常見的N-Gram 算法包括N為2 的Bi-Gram 和N為3 的Tri-Gram。N-Gram 生成的窗 口包含了對(duì)應(yīng)操作碼序列的全部子序列,該子序列與其相鄰的子序列形成一種聯(lián)系,根據(jù)這種聯(lián)系,可以得出對(duì)應(yīng)程序的語義。
以片段{push,mou,add,dec,lea,sub,mov} 為例,設(shè)窗口每次滑動(dòng)長度L=3,每個(gè)窗口代表這段操作碼序列的子序列,每個(gè)子序列與其前后序列存在對(duì)應(yīng)關(guān)系,如圖1所示,由此可以得到子序列集合{(push,mov,add),(mov,add,dec),(add,dec,lea),(dec,lea,sub),(lea,sub,mov)},子序列集合中所包含的子序列個(gè)數(shù)由n決定,如果一個(gè)二進(jìn)制序列操作碼片段長度為L,那么將生成L-n+1個(gè)子序列[2],操作碼特征提取流程如圖1所示。
圖1 操作碼特征提取流程
根據(jù)上述流程,每一個(gè)編譯文件都可以生成一個(gè)集合文件,集合文件中包含多個(gè)子序列,生成的子序列可以組成一個(gè)子序列集:
A集合中包含了所有操作碼的子序列,例如(add,dec,lea)。如果要將該子序列集合作為機(jī)器學(xué)習(xí)模型的輸入特征,則需將子序列集特征轉(zhuǎn)化為可以應(yīng)用到算法模型中的數(shù)字特征。假設(shè)一個(gè).bytes 文件生成的子序列集合為(push,mov,add,dec,lea),那么可以定義一個(gè)數(shù)值化操作函數(shù),將其轉(zhuǎn)化為一個(gè)維度方向向量:φ(x)=(φa(x))a∈A,其中:
假設(shè),如果全部二進(jìn)制子序列的總集合A和所需要驗(yàn)證的集合B分別為{(push,mov,add),(mov,add,dec),(add,dec,lea),(dec,lea,mov),(lea,mov,sub)}和φ(push,mov,add,dec,lea)那么可以得到如下子序列:
則向量(1,1,1,0,0)便是該二進(jìn)制文件的向量化和數(shù)值化的子序列,由此可得出集合B與集合A的關(guān)系。
B2M 算法的原理是以二進(jìn)制比特流的形式讀取惡意代碼源文件,以16 個(gè)字節(jié)為一個(gè)單元,將其轉(zhuǎn)化為十六進(jìn)制向量,設(shè)二進(jìn)制文件固定寬度width 為2n,長度length 由文件大小和寬度相除獲得(length=文件長度/width),生成的向量仿照矩陣格式排列,設(shè)置矩陣中元素大小在0~255 之間。
灰度圖是指用黑白灰三種顏色描述的圖像?;叶葓D像像素值介于0~255 之間,越靠近0 代表黑色越深,越靠近255 代表白色越深。在灰度圖像中,色彩的飽和度通常為零,像素信息由灰度信息與其位置信息共同構(gòu)成[3-7]。根據(jù)算法原理,二進(jìn)制文件可以灰度可視化成圖片。因?yàn)樵O(shè)置的矩陣值在0~255 之間,所以要將一個(gè)二進(jìn)制文件轉(zhuǎn)換為灰度圖形式,必須把二進(jìn)制文件按照每8 bits 為一組進(jìn)行分塊,8 bits代表0~28中任意一個(gè)數(shù),每個(gè)塊中的二進(jìn)制序列可以被轉(zhuǎn)換為對(duì)應(yīng)的整數(shù),那么這個(gè)整數(shù)必然可以表示為一個(gè)灰度[3]。
隨機(jī)選取以下樣本,惡意代碼家族1 中的“1u3PmQiD0bX6RcgoCNKe”、“6bu0NZAsYoiUlCjEy H4X”、“8APhEd3UCifDsc4zVemR”,惡意代碼家族2中 的“aXMsY6r5HDflGbOjUcu7”、“czxjYgBb4TeOD 38AhNvi”、“DRXe2HIAxJaiFp0joQr1”以及惡意代碼家族3 中的“1iFYGHfzdnCJRXA5uby9”、“BLGY8Ek5 f4JlhOvIXxz2”、“ehW19YdIEik3jUpGA8sX”,分別將其灰度化后進(jìn)行比較。結(jié)果發(fā)現(xiàn),同一家族的惡意代碼生成的灰度圖具有相似的紋理結(jié)構(gòu)。
隨機(jī)森林模型主要用作對(duì)數(shù)據(jù)集進(jìn)行分類,模型根據(jù)數(shù)據(jù)集的特征進(jìn)行劃分,每一棵決策樹代表一個(gè)特征,根據(jù)特征劃分?jǐn)?shù)據(jù)集,在數(shù)據(jù)節(jié)點(diǎn)特征中找到最優(yōu)解,進(jìn)行分裂。隨機(jī)森林不依賴一棵決策樹,而是根據(jù)預(yù)測的多數(shù)票從每棵樹中獲取預(yù)測,并預(yù)測最終輸出[4]。RF 算法從訓(xùn)練集中選擇隨機(jī)的K個(gè)數(shù)據(jù)點(diǎn),構(gòu)建與所選數(shù)據(jù)點(diǎn)(子集)關(guān)聯(lián)的決策樹,為要構(gòu)建的決策樹選擇編號(hào)N,對(duì)于新數(shù)據(jù)點(diǎn),找到每個(gè)決策樹的預(yù)測,然后將新數(shù)據(jù)點(diǎn)分配給贏得多數(shù)票的類別[8]。將樣本中的訓(xùn)練集生成k個(gè)樹,這些分類樹組成隨機(jī)森林,分類樹投票分?jǐn)?shù)的權(quán)重將決定測試數(shù)據(jù)的分類效果,隨機(jī)森林的構(gòu)建流程如下[6]:
隨機(jī)森林的學(xué)習(xí)模型原理如圖2 所示。
圖2 隨機(jī)森林模型原理圖
設(shè)單個(gè)樹誤差為a,每個(gè)樹之間互相獨(dú)立,則組合樹的誤差為:
十折交叉驗(yàn)證的具體流程:數(shù)據(jù)集被平均分成10 份,按順序選中其中每一份作為測試數(shù)據(jù),剩下的9 份作為訓(xùn)練集,進(jìn)行實(shí)驗(yàn)得到10 個(gè)值,取10 個(gè)值的平均值,作為待驗(yàn)證算法的近似準(zhǔn)確率,通常一次實(shí)驗(yàn)要進(jìn)行多次十折交叉驗(yàn)證。K折交叉驗(yàn)證雖消耗的計(jì)算資源較高,但可以在數(shù)據(jù)集較少時(shí)獲得最優(yōu)解,之所以選擇將K定為10,是因?yàn)橥ㄟ^大量數(shù)據(jù)集測試結(jié)果表明,十折交叉驗(yàn)證可以使誤差估計(jì)最小。該文所使用的算法模型訓(xùn)練和評(píng)估測試方法,均是十折交叉驗(yàn)證。
LSTM 模型示意圖如圖3 所示。
圖3 LSTM模型示意圖
圖3 中的A表示了LSTM 三個(gè)時(shí)間步的三個(gè)單元,其中第二個(gè)單元顯示了LSTM 內(nèi)部單元的工作結(jié)構(gòu)。該單元的第一個(gè)長方形A表示遺忘門,中間部分表示輸入門,右邊長方形A表示輸出門,σ表示以sigmoid為激活函數(shù)的神經(jīng)元,tanh 表示以雙正切函數(shù)為激活函數(shù)的神經(jīng)元[2]。多個(gè)神經(jīng)元的組合和運(yùn)算,可以計(jì)算當(dāng)前時(shí)刻輸入與輸出數(shù)據(jù)、上一時(shí)刻輸出數(shù)據(jù)以及單元狀態(tài),并將信息傳遞到下一個(gè)單元結(jié)構(gòu)。每進(jìn)行到一個(gè)時(shí)間節(jié)點(diǎn),LSTM 模型便更新一次隱藏狀態(tài)和單元狀態(tài)。其中,xt-1、xt、xt+1分別表示不同時(shí)刻的輸入,ht-1、ht、ht+1分別表示不同時(shí)刻的隱藏狀態(tài)[5]。
在一個(gè)給定的輸入序列X={x1,x2,…,xt}中,若將LSTM 結(jié)構(gòu)中的輸入門、遺忘門、輸出門、隱藏狀態(tài)和單元狀態(tài)分別設(shè)置為it、ft、ot、ht和ct,wc為細(xì)胞狀態(tài)的權(quán)重矩陣,bc代表細(xì)胞狀態(tài)的偏置項(xiàng),附加的權(quán)重標(biāo)記為wi、wf、wo、bi、bf、bo,用σ表示sigmoid 函數(shù),則上述參數(shù)的公式表示如下:
采用OpCode N-Gram 的方式作為特征預(yù)測,數(shù)據(jù)集中不同惡意代碼文件大小不一,從全部的惡意代碼數(shù)據(jù)集中提取所有操作指令的N-Gram 數(shù)量過大,文中對(duì)此進(jìn)一步作特征選擇。分別選取不同元組N值為{2,3,4,5,6}進(jìn)行隨機(jī)森林分類準(zhǔn)確率對(duì)比實(shí)驗(yàn),結(jié)果如圖4 所示。經(jīng)過測試發(fā)現(xiàn),與隨機(jī)森林算法結(jié)合后,N取值為3 得到的特征準(zhǔn)確率和穩(wěn)定性要略優(yōu)于N取其他值時(shí)的準(zhǔn)確率[9]。
圖4 N-Gram算法不同N值得到的準(zhǔn)確率
因此,該文采用基于3-Gram 算法的隨機(jī)森林算法,將特征值輸入到算法選擇器中,采用十折交叉進(jìn)行驗(yàn)證,最終得到10 次測試結(jié)果如下:[0.950 617 28,0.925 925 93,0.937 5,0.887 5,0.887 5,0.962 5,0.975,0.925,0.937 5,0.987 5],預(yù)測準(zhǔn)確率平均值等于0.937 65。
該文分別選取像素點(diǎn)數(shù)目pix值為{1 000,1 500,2 000,2 500}進(jìn)行對(duì)比驗(yàn)證,得到的準(zhǔn)確率結(jié)果如表2 所示[10]。
表2 不同像素點(diǎn)數(shù)目的分類準(zhǔn)確率
根據(jù)實(shí)驗(yàn)結(jié)果顯示,像素值pix 的個(gè)數(shù)在1 500~2 000 之間,分類準(zhǔn)確率取得最大值,由此該文選取1 500 個(gè)像素進(jìn)行驗(yàn)證,并將特征值輸入到隨機(jī)森林分類選擇器中,采用十折交叉驗(yàn)證,最終得到10 次測試結(jié)果如下:[0.975 308 64,0.938 271 6,0.937 5,0.937 5,0.925,0.925,0.967 5,0.975,0.887 5,0.937 5],預(yù)測準(zhǔn)確率平均值等于0.942 608。
根據(jù)前文實(shí)驗(yàn),N取值為3,像素取值1 500,得到的預(yù)測準(zhǔn)確率值最大[11]。基于此,將N-Gram 特征和紋理特征兩者結(jié)合作為聯(lián)合輸入特征,應(yīng)用到隨機(jī)森林算法選擇器中,并采用十折交叉驗(yàn)證,最終得到10 次測試結(jié)果如下:[0.987 654 32,0.950 617 28,0.9625,0.962 5,0.95,0.987 5,0.987 5,0.987 5,0.975,1.0],預(yù)測準(zhǔn)確率的平均值為0.975 077,三種算法的結(jié)果如圖5 所示。
圖5 三種不同特征的預(yù)測結(jié)果準(zhǔn)確率
由結(jié)果可知,只采用N-Gram 特征或圖像紋理特征作為輸入特征,得到的預(yù)測準(zhǔn)確率結(jié)果互有勝負(fù),采用二者聯(lián)合特征作為輸入特征,得到的準(zhǔn)確率均好于單一特征得到的準(zhǔn)確率[12]。
在LSTM 模型中,模型所包含的遞歸自然學(xué)習(xí)能力,能夠自動(dòng)提取N-Gram 和紋理兩種特征結(jié)合后形成的深層次的特征,然后將融合該特征通過輸入門輸入到LSTM 模型后,依次經(jīng)過隱含層中的遺忘門、輸入門、輸出門,計(jì)算出融合特征的特征圖,LSTM中每個(gè)隱藏神經(jīng)元都是循環(huán)連接,輸出層輸出的向量大小要與分類的惡意軟件的類別數(shù)目相等[13]。該實(shí)驗(yàn)采用單層長短時(shí)記憶網(wǎng)絡(luò),模型每層結(jié)構(gòu)采用兩個(gè)方向相反的LSTM模型,LSTM的隱含神經(jīng)元個(gè)數(shù)初始值定為20,BiLSTM 雙向長短時(shí)記憶網(wǎng)絡(luò)模型圖如圖6所示。
圖6 BiLSTM雙向長短時(shí)記憶網(wǎng)絡(luò)模型圖
針對(duì)BiLSTM 模型,通過實(shí)驗(yàn)不斷調(diào)整和優(yōu)化LSTM 網(wǎng)絡(luò)結(jié)構(gòu)中的有關(guān)參數(shù),調(diào)整的參數(shù)包括隱藏神經(jīng)元n_hidden 的個(gè)數(shù)、學(xué)習(xí)率lr、批次大小banth_size、網(wǎng)絡(luò)層數(shù)、數(shù)據(jù)集劃分比例、迭代次數(shù)epoch 等,使用控制變量法,先將某個(gè)參數(shù)值固定,通過調(diào)整其他參數(shù),使泛化能力達(dá)到最優(yōu),得到一個(gè)最優(yōu)解[14]。依此類推,直到得到所有的最優(yōu)化參數(shù),便得到了LSTM 結(jié)構(gòu)的一組最優(yōu)模型。在后續(xù)的融合特征數(shù)據(jù)作為輸入時(shí)均采用該最佳的參數(shù)組合情況,其最佳參數(shù)組合情況如表3 所示[15]。
表3 網(wǎng)絡(luò)結(jié)構(gòu)最佳參數(shù)
通過實(shí)驗(yàn)驗(yàn)證,在相同輸入特征的條件下,該文提出的BiLSTM 雙向長短時(shí)記憶網(wǎng)絡(luò)對(duì)惡意軟件數(shù)據(jù)集分類的準(zhǔn)確率達(dá)到了0.985,結(jié)果高于隨機(jī)森林分類器準(zhǔn)確率0.976,也高于KNN、SVM 等傳統(tǒng)分類器的準(zhǔn)確率[16],不同分類器得到的分類準(zhǔn)確率如圖7所示,實(shí)驗(yàn)結(jié)果符合預(yù)期。
圖7 不同分類器得到的分類準(zhǔn)確率
該文根據(jù)惡意代碼源文件反匯編生成的.bytes文件和.asm 文件,基于.bytes 文件提取了N-Gram 操作碼子序列特征,基于.asm 文件提取了灰度圖像紋理特征,并基于隨機(jī)森林分類算法以及十折交叉算法,分別驗(yàn)證了兩種輸入特征,得到每一種特征對(duì)應(yīng)的分類準(zhǔn)確率。最后將兩種特征結(jié)合在一起,作為輸入特征重復(fù)計(jì)算,發(fā)現(xiàn)預(yù)測準(zhǔn)確率均高于單一特征的預(yù)測準(zhǔn)確率。在此基礎(chǔ)上,該文基于LSTM 模型,提出一種新的BiLSTM 雙向長短時(shí)記憶網(wǎng)絡(luò)結(jié)構(gòu),在相同的輸入特征條件下,該模型的準(zhǔn)確率要高于隨機(jī)森林等傳統(tǒng)分類模型準(zhǔn)確率。