黃 科,袁啟平,董 薇,孫沂昆,亢 勇,王天翔
(北京特種工程設(shè)計研究院,北京 100028)
隨著信息技術(shù)的發(fā)展,惡意代碼也呈爆炸式增長,對互聯(lián)網(wǎng)安全的方方面面都產(chǎn)生了威脅。在對惡意軟件的防范中,對惡意代碼的檢測顯得十分重要。目前,惡意代碼檢測方式有靜態(tài)檢測和動態(tài)檢測兩種。靜態(tài)檢測一般是依據(jù)代碼的結(jié)構(gòu)、邏輯,通過代碼走查、數(shù)據(jù)流分析、控制流分析和信息流分析等方法分析代碼特征,從而判斷軟件是否為惡意軟件。動態(tài)檢測可以通過調(diào)試器運行被檢測的軟件的某項功能,動態(tài)監(jiān)測程序調(diào)用來判斷程序是否屬于惡意軟件。
加密、代碼混淆技術(shù)的使用和惡意代碼檢測對抗等方法的發(fā)展,在一定程度上增大了動態(tài)分析和靜態(tài)分析檢測的困難。因此,無論是在檢測的精確性還是對計算機(jī)硬件的損耗上,傳統(tǒng)惡意軟件檢測技術(shù)都具有局限性。L.NATARAJ等人[1]提出了將惡意軟件的可執(zhí)行文件轉(zhuǎn)化為灰度圖的方法,在灰度圖中可以明顯分類出有特定含義的片段,如.data、.text等,并且惡意代碼家族內(nèi)部的圖像紋理具有相似性。惡意軟件轉(zhuǎn)化為圖片的本質(zhì)是將一段線性代碼按照某種轉(zhuǎn)化方式投放至二維空間中,將代碼的特征轉(zhuǎn)化為圖像紋理的特征。但這種方式弱化了惡意代碼的線性特征。惡意軟件文件轉(zhuǎn)化成的像素點進(jìn)行排布后,圖像多出了像素點上下間的空間相關(guān)性,而這樣的相關(guān)性是原文件不具有的。
在CUI等人[2]的論文中,將惡意代碼二進(jìn)制文件轉(zhuǎn)換成十進(jìn)制一維數(shù)組后,根據(jù)文件的大小設(shè)定寬度,將一維數(shù)組轉(zhuǎn)換成多維度的矩陣,從而形成灰度圖片并壓縮到同一大??;通過傾斜圖像等數(shù)據(jù)增強(qiáng)的方法增加樣本數(shù)量,之后輸入到神經(jīng)網(wǎng)絡(luò)中進(jìn)行識別。但是,這個過程有以下幾個問題。
(1)灰度圖像的紋理來源于惡意代碼的二進(jìn)制文件的組合,如L.NATARAJ[1]針對圖像不同部分拆分為.text段、.data段一樣,其相鄰像素點之間是有邏輯關(guān)聯(lián)的。因此,對惡意代碼的灰度圖像紋理的分析,不僅僅要分析圖像,還要考慮紋理間的邏輯關(guān)聯(lián)。在二維卷積神經(jīng)網(wǎng)絡(luò)(2 Dimention Convolutional Neural Networks,2D CNN)中,卷積核是一個多維矩陣,提取圖像特征時,提取的是方形像素塊,而像素塊內(nèi)的像素點之間是跨行的,提取的特征未考慮像素點間的邏輯關(guān)聯(lián)。
(2)在對惡意代碼的圖像進(jìn)行壓縮時,由于各個惡意軟件的大小不同,導(dǎo)致圖像的長寬比不同,壓縮成同一大小的正方形矩陣后,會導(dǎo)致不同圖像長寬壓縮比例不同,圖像特征損失差距較大。
(3)惡意軟件的各個家族內(nèi)樣本數(shù)量不同,比例差異較大,產(chǎn)生了數(shù)據(jù)不平衡的情況。數(shù)據(jù)不平衡會導(dǎo)致深度學(xué)習(xí)模型的泛化性下降,也會在訓(xùn)練過程中產(chǎn)生過擬合。
為了解決上述問題,本文提供如下解決方法:
(1)將惡意代碼二進(jìn)制文件轉(zhuǎn)化為范圍為0~255的十進(jìn)制一維數(shù)組,每個數(shù)充當(dāng)像素點,形成像素向量,將圖像紋理的分析轉(zhuǎn)化成為對一段向量明暗變化的研究;
(2)基于這種變換方式,引入一維卷積神經(jīng)網(wǎng)絡(luò)(1 Dimention Convolutional Neural Networks,1D CNN),以提取向量明暗變化的特征;
(3)為了解決惡意代碼家族之間樣本數(shù)量的不平衡,引入近年來在分類問題上表現(xiàn)良好的XGBoost模型,將1D CNN提取的特征輸入到該模型中進(jìn)行分類的預(yù)測。
實驗結(jié)果表明,本文提出的方法能夠達(dá)到97%的精確度,并且大大減輕了數(shù)據(jù)不平衡帶來的 問題。
本節(jié)介紹檢測惡意軟件的相關(guān)研究。一般情況下,針對惡意代碼的檢測主要分為啟發(fā)式檢測和基于特征碼的檢測[3]。啟發(fā)式的惡意代碼檢測方法主要利用系統(tǒng)上層信息以及內(nèi)核文件系統(tǒng)來識別惡意代碼的隱藏信息等,比較依賴人員的經(jīng)驗,且誤報率較高。基于特征碼的檢測方法主要通過比較識別惡意代碼的顯性特征,一般對特征進(jìn)行偽裝變形便能繞過檢測。下面將重點介紹惡意代碼可視化、基于深度學(xué)習(xí)的惡意軟件檢測以及分類器的選擇等方面的內(nèi)容。
利用文本編輯器和二進(jìn)制編輯器就可以將二進(jìn)制數(shù)據(jù)可視化,已經(jīng)有諸多研究人員對惡意軟件可視化做出了深入的研究。YOO等人[4]利用自組織映射方法實現(xiàn)惡意代碼的檢測識別和可視化呈現(xiàn)。QUIST等人[5]開發(fā)了一套可視化框架用來逆向惡意代碼,他們提出利用節(jié)點和鏈接的可視化方法實現(xiàn)對惡意代碼的功能、混淆區(qū)域的有效識別。TRINIUS等人[6]分別利用樹形拓?fù)鋱D和線程圖兩種圖方法來分別表示惡意代碼的操作分布和操作序列,實現(xiàn)對惡意代碼的檢測。CONTI等人[7]實現(xiàn)文本、圖像、視頻等非結(jié)構(gòu)化數(shù)據(jù)以及C++源代碼等原始二進(jìn)制數(shù)據(jù)段,通過可視化技術(shù)轉(zhuǎn)化為圖像,實現(xiàn)對惡意特征的識別。KANCHERLA等人[8]通過將惡意代碼可執(zhí)行文件轉(zhuǎn)化為字節(jié)圖特征,并利用支持向量機(jī)(Support Vector Machine,SVM)分類器進(jìn)行識別,實現(xiàn)對2.5萬惡意代碼語料庫的分類。GOODALL等人[9]開發(fā)了可視化分析環(huán)境,該環(huán)境不僅可以幫助程序員更好地理解代碼,還可以將程序中的漏洞可視化,以便更好地發(fā)現(xiàn)和解決漏洞。HAN等人[10]提出一種基于紋理指紋的惡意代碼特征提取及檢測方法,通過結(jié)合圖像分析技術(shù)與惡意代碼變種檢測技術(shù),將惡意代碼映射為無壓縮灰階圖片,并采用加權(quán)綜合多分段紋理指紋相似性匹配方法檢測惡意代碼變種和未知惡意代碼。
研究人員也利用深度學(xué)習(xí)去檢測惡意軟件,TOBIYAMA等人[11]提出一種基于進(jìn)程行為進(jìn)行惡意進(jìn)程檢測的方法,利用長短時記憶網(wǎng)絡(luò)(Long Short-Term Memory,LSTM)進(jìn)行特征提取,用卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Networks,CNN)進(jìn)行特征分類,特征是從轉(zhuǎn)化為含有本地特征的圖片的進(jìn)程行為日志文件中提取的,這些本地特征表示進(jìn)程活動。然而這些分析方式是基于軟件行為進(jìn)行的檢測,仍受到代碼混淆等的干擾。如上文所述,若將對惡意軟件的研究轉(zhuǎn)化為對圖像紋理的研究,會繞開程序行為的干擾。鑒于1D CNN在如文本、一維信號等序列數(shù)據(jù)上的良好效果,采用1D CNN對惡意軟件轉(zhuǎn)化成的像素序列進(jìn)行特征提取,而對惡意軟件的分析轉(zhuǎn)化成對一條像素條帶明暗變化的分析。
CNN深度學(xué)習(xí)會遇到一個廣泛存在的問題,即數(shù)據(jù)集不平衡帶來的過擬合。HUANG等人[12]提出使用CNN模型從不平衡數(shù)據(jù)集中學(xué)習(xí)得到每個樣本的embedding向量,然后使用改進(jìn)的k近鄰分類算法對其分類。TANG等人[13]提出使用SVM分類器去解決數(shù)據(jù)不平衡的情況。而近年來由CHEN等人[14]開發(fā)的XGBoost系統(tǒng)在許多比賽上能出色地完成分類任務(wù),利用CART回歸樹模型,每學(xué)習(xí)一個新特征,就擬合上一次預(yù)測的殘差,從而分裂出一棵新的樹,每個葉子節(jié)點就對應(yīng)一個分?jǐn)?shù),最后只需要將每棵樹對應(yīng)的分?jǐn)?shù)加起來就是該樣本的預(yù)測值。利用貪婪算法,遍歷所有特征的所有特征劃分點,找到最優(yōu)解。
文章嘗試了一種新的惡意代碼的可視化方式?;趷阂獯a01比特流之間具有邏輯相關(guān)性以及家族內(nèi)惡意軟件可視化圖片的紋理相似性,家族間惡意軟件可視化圖片紋理相差性,以二進(jìn)制讀入惡意軟件可執(zhí)行文件,得到一串01比特串,每八個為一組,組合成一個8位二進(jìn)制的數(shù)字,將其轉(zhuǎn)化為一個范圍為0~255的無符號10進(jìn)制數(shù),得到一組10進(jìn)制數(shù)組,每一個數(shù)組代表一個像素點,輸出一個條紋向量圖。可視化操作的具體轉(zhuǎn)化過程算法如下:
利用上述算法對惡意代碼家族Agent.FYI、Lolyda.AA3、Yuner.A進(jìn)行轉(zhuǎn)化。轉(zhuǎn)換后,各個代碼家族的條紋特征分別如圖1、圖2及圖3所示。
圖1 家族Agent.FYI的條紋特征
圖2 家族Lolyda.AA3的條紋特征
圖3 家族Yuner.A的條紋特征
家族之內(nèi)的惡意代碼條紋有著非常高的相似性,而家族之間的惡意軟件條紋差距較大。因此可以通過這些像素條帶的明暗變化特征對惡意軟件進(jìn)行檢測并判斷其家族歸屬。
卷積神經(jīng)網(wǎng)絡(luò)有稀疏權(quán)重、參數(shù)共享及等變表示等特點,可以先學(xué)習(xí)局部的特征,再將局部特征組合起來形成更復(fù)雜和抽象的特征,這使得卷積神經(jīng)網(wǎng)絡(luò)在存儲大小和統(tǒng)計效率方面極大地優(yōu)于傳統(tǒng)的使用矩陣乘法的神經(jīng)網(wǎng)絡(luò)。1D CNN廣泛應(yīng)用于自然語言處理、傳感器數(shù)據(jù)的時間序列分析以及具有固定長度周期的信號數(shù)據(jù)的分析等多種場景。
根據(jù)1D CNN對一維序列數(shù)據(jù)的處理產(chǎn)出的良好表現(xiàn),可以采用一維卷積神經(jīng)網(wǎng)絡(luò)對像素向量進(jìn)行特征提取。用于像素向量識別的CNN的結(jié)構(gòu)組成如圖4所示。具體過程如下。
圖4 用于像素向量識別的CNN的結(jié)構(gòu)組成
(1)將像素向量壓縮成相同的大小,以便輸入神經(jīng)網(wǎng)絡(luò)。
(2)進(jìn)入卷積層,卷積層實際上是卷積核與像素向量之間的運算,使用一維卷積對像素向量進(jìn)行特征提取。一維卷積是取向量的點積,因此點積后會得到一個新的序列。
(3)進(jìn)入池化層,池化層提供了很強(qiáng)的魯棒性,并且減少了參數(shù)的數(shù)量。算法采用MaxPooling和Global Average Pooling。MaxPooling提取區(qū)域中的最大值,因此若此區(qū)域中的其他值略有變化或者存在平移,pooling后的結(jié)果仍不變,可以防止過擬合。Global Average Pooling將最后一層特征圖針對整張圖進(jìn)行均值池化,形成一個特征點并起到全連接的作用,將這些特征點組成最后的特征向量輸入softmax進(jìn)行處理。
(4)輸入softmax前,需要利用Dropout層丟棄一些信息。在每個訓(xùn)練批次中隨機(jī)地隱藏網(wǎng)絡(luò)中一部分隱藏神經(jīng)元,輸入輸出神經(jīng)元保持不變。之后將輸入節(jié)點通過修改后的網(wǎng)絡(luò)前向傳播,得到的損失結(jié)果通過修改的網(wǎng)絡(luò)反向傳播,從而防止過 擬合。
(5)利用softmax將輸出映射為0-1的數(shù)字,產(chǎn)生一個初步分類的結(jié)果。分類器根據(jù)其特征將惡意軟件圖像識別并分類為不同的系列。
對于測序得到的序列信息,首先根據(jù)PE reads之間的Overlap關(guān)系,將Hiseq測序得到的雙端序列數(shù)據(jù)進(jìn)行拼接以獲得完整的一條序列Tags,同時對Reads的質(zhì)量和拼接的效果進(jìn)行質(zhì)控過濾。之后利用不同軟件進(jìn)行數(shù)據(jù)分析,如QIIME軟件進(jìn)行OTU劃分,基于Silva和UNITE分類學(xué)數(shù)據(jù)庫對OTU進(jìn)行分類學(xué)注釋分析、利用MEGAN軟件分析樣品中所有微生物的進(jìn)化關(guān)系和豐度差異,利用Mothur軟件對樣品進(jìn)行Alpha多樣性指數(shù)評估等。
輸入到CNN中的數(shù)據(jù)集需要統(tǒng)一大小,因此需要對向量進(jìn)行壓縮。根據(jù)壓縮比例不同,向量特征的保留程度也不同。如圖5所示,三種比例的壓縮都能保持像素向量的基本特征。
圖5 家族Agent.FYI在三種壓縮比例下的條紋特征
利用上述CNN模型將圖片導(dǎo)入神經(jīng)網(wǎng)絡(luò)進(jìn)行訓(xùn)練,但訓(xùn)練的結(jié)果與訓(xùn)練數(shù)據(jù)集的質(zhì)量關(guān)系非常大。當(dāng)樣本出現(xiàn)數(shù)據(jù)不平衡的情況時,會出現(xiàn)過擬合、低準(zhǔn)確率、低魯棒性的現(xiàn)象。然而由于代碼形成的像素向量之間有邏輯關(guān)系,因此不應(yīng)使用目前常用的旋轉(zhuǎn)、傾斜、切割、拼接等數(shù)據(jù)增強(qiáng)方法。本文引用近年來在分類問題上表現(xiàn)良好的XGBoost,通過對樣本特征的權(quán)重增強(qiáng)來防止過擬合的情況,以提高分類準(zhǔn)確率。
XGBoost算法的思想是不斷地進(jìn)行特征分裂來生長一棵樹,每次添加一個樹,其實是學(xué)習(xí)一個新函數(shù),去掉擬合上次預(yù)測的殘差。當(dāng)訓(xùn)練完成得到k棵樹,要預(yù)測一個樣本的分?jǐn)?shù),其實就是根據(jù)這個樣本的特征,在每棵樹中對應(yīng)到一個葉子節(jié)點,每個葉子節(jié)點對應(yīng)一個分?jǐn)?shù),最后只需將每棵樹對應(yīng)的分?jǐn)?shù)加起來,就是該樣本的預(yù)測值。
對于XGBoost的分類結(jié)果評估,實驗使用Accuracy、Precision、Recall、F1(F1-score)四 個不同方向的值進(jìn)行評估精確度。
式中:是預(yù)測值,i樣本yi對應(yīng)的真實值。
精度是分類器不將陰性樣本標(biāo)記為陽性的 能力。
式中:TP是真實肯定的數(shù)目,F(xiàn)P是錯誤否定的 數(shù)目。
召回是分類器查找所有陽性樣本的能力:
式中:TP是真實的陽性數(shù),F(xiàn)N是錯誤的陽性數(shù)。
表1 CNN結(jié)構(gòu)
各層功能及設(shè)定如下。
(1)第一1D CNN層。具有ReLU函數(shù)的卷積層,輸入已經(jīng)預(yù)處理的數(shù)據(jù),即輸入長度為1000的平面向量。此層使用了100個維度為3的過濾器,輸出結(jié)果為卷積后尺寸998×100。
(2)第二1D CNN層。具有ReLU函數(shù)的卷積層,以第一層的輸出結(jié)果作為輸入。此層定義100個維度為4的過濾器,輸出結(jié)果為卷積后的尺寸995×100。
(3)最大池化層。設(shè)置參數(shù)選擇3,即池化核長度為3,步長為3,池化后數(shù)據(jù)長度為331,輸出為331×100,降低輸出的復(fù)雜性。
(4)第三1D CNN層。具有ReLU函數(shù)的卷積層,此層使用100個維度為5的過濾器,輸出尺寸為327×160。
(5)第四1D CNN層。具有ReLU函數(shù)的卷積層,此層使用了100個維度為4的過濾器,輸出尺寸為324×160。
(6)平均池化層。為避免再次過度擬合,每個特征檢測器在這一層的神經(jīng)網(wǎng)絡(luò)中僅剩一個權(quán)重,輸出160個數(shù)值。
(7)dropout層。在此層將比例設(shè)定為0.5,因此有一半的神經(jīng)元的權(quán)重為零,輸出160個數(shù)值。
(8)全連接層。具有softmax激活函數(shù)的全連接,輸出為25個數(shù)值,代表25個家族中每個家族的概率。
如圖6所示,實驗設(shè)定了60輪(Epoch)的學(xué)習(xí),學(xué)習(xí)結(jié)果為損失值達(dá)到0.16,精確度達(dá)到0.95。實驗中,觀察每個家族下的混淆矩陣,發(fā)現(xiàn)第6個家族、第13個家族準(zhǔn)確率極低,這是數(shù)據(jù)不平衡帶來的過擬合現(xiàn)象,因為機(jī)器將少量的數(shù)據(jù)判斷到錯誤的家族,整體準(zhǔn)確率不會受到非常大的影響。
圖6 模型精度與損失
實驗使用了3種方式對特征進(jìn)行分類,首先利用softmax函數(shù)對特征進(jìn)行映射分類,其次將CNN提取的特征輸入SVM分類器進(jìn)行分類,最后將CNN提取的特征輸入XGBoost分類器中分類。其中,XGBoost模型的參數(shù)設(shè)置為:
分類結(jié)果的混淆矩陣以及F1-score結(jié)果如圖7所示。
圖7 分類結(jié)果的混淆矩陣以及F1-score結(jié)果
通過數(shù)據(jù)比對可見,XGBoost表現(xiàn)明顯優(yōu)于另外兩種分類方式,準(zhǔn)確率提升到了97%的同時,數(shù)據(jù)集不平衡帶來的過擬合現(xiàn)象有較大的緩解,較少的幾個家族的預(yù)測率有所提高。
惡意代碼可視化使得對惡意軟件特征的分析轉(zhuǎn)換為對圖像紋理特征的分析,而線性惡意代碼可視化既保留了惡意軟件的圖像的特征,又兼顧了條紋間的邏輯關(guān)聯(lián),在使用CNN+XGBoost模型聯(lián)合分類檢測下能達(dá)到97%的準(zhǔn)確率,為以后網(wǎng)絡(luò)安全相關(guān)工作人員對惡意代碼的檢測提供了更廣闊的可能性。