?

一種基于特征編碼技術的惡意代碼檢測方法

2021-01-19 02:24應,李
計算機技術與發展 2021年1期
關鍵詞:灰度字節數值

丁 應,李 琳

(武漢科技大學 計算機科學與技術學院,湖北 武漢 430065)

0 引 言

早期的惡意代碼由于沒有采用復雜的加密算法對其進行加密,因此可以通過交叉匹配部分代碼的方式來檢測惡意代碼。但是隨著多態和變態(混淆)等現象的出現,惡意代碼每經過一輪迭代就進行一次相同密鑰的加密算法進行加密(多態),有的甚至使用不同密鑰的加密算法進行加密(變態),使惡意代碼變得極難檢測,惡意代碼分析師往往需要花費至少一周甚至更久的時間才能分析一個新出現的病毒屬于哪個家族。最近的一份安全報告顯示,雖然攻擊者對開發移動端的惡意代碼的興趣越來越高,但是Windows系統依然是黑客攻擊的首要目標。2019年至今,幾乎每周都有重大網絡事件發生,給受害者造成了巨大的經濟損失,更嚴重的甚至會危害受害者的生命安全。

傳統的惡意代碼檢測技術可以分為靜態分析和動態分析兩種方法。靜態分析[1]的優勢是可以在代碼執行之前對其進行分析[2],并且可以在確切的位置挖掘出代碼的敏感信息,通過這些信息可以判斷該代碼屬于哪種類型的惡意代碼(木馬,蠕蟲,后門),動態分析方法很難做到這些;而在動態分析[3]中,代碼在執行階段會被實時監控[4](虛擬機,沙箱技術等),可以輕易地找到軟件受感染的位置,但在靜態分析中這是不可能的。

靜態檢測技術在對惡意代碼進行分析時,需要借助惡意數據特征庫。由于惡意數據特征庫存在一段時間的更新周期,如果檢測不及時,會存在漏檢、誤報等問題;并且靜態檢測技術對新型病毒也會顯得心有余而力不足。

動態檢測技術在對惡意代碼進行分析時,需要借助虛擬機、虛擬鏡像、沙箱等技術,這不僅會造成資源的浪費,而且一些病毒甚至能判斷自身所處的環境,在虛擬環境下并不表現出自身的特點,導致動態檢測誤報。

無論是動態檢測技術還是靜態檢測技術,在進行檢測時還存在著其他的局限性,比如只能用于某些安全公司的“自產自銷”。如今,互聯網高度集成發達,如果不能將自身資源分享出去,也是一種資源的浪費。

針對上述傳統的惡意代碼檢測技術的不足,深度學習算法憑借其強大的特征提取能力自然而然地被研究者用來對惡意代碼進行檢測和分類。T.Kim等人[5]將RGB編碼技術和卷積神經網絡結合起來對異常網絡進行檢測,通過將數據特征編碼成彩色圖像,然后使用卷積神經網絡對生成的彩色圖像進行分類,在三個不同的數據集上都取得了不錯的準確率。韓曉光等人[6]通過把惡意代碼映射為無壓縮的灰度圖片,然后對圖片進行相應的處理,最后使用深度學習算法對其進行分類,準確率不高,而且過程過于復雜,單給研究者提供了思路。Baptista I[7]通過將惡意樣本轉換為灰度圖像后,與無監督學習方法結合,對各種惡意文檔或軟件(pdf,txt,exe,doc等)的分類都能達到較高的準確率。

由此可以看出,將深度學習算法與其他方法結合起來,然后應用于對惡意代碼的檢測和分類,其性能遠遠優于傳統的惡意代碼檢測技術。但是上述文獻中大多沒有引入良性數據集,嚴格意義來講,它們并不能算是對惡意代碼的檢測。因此,該文采用的數據集包含良性樣本和惡意樣本,然后將數據集上待檢測的PE文件的特征進行雙字節編碼,轉換為8×8的灰度圖像,最后通過卷積神經網絡提取圖像特征并對測試集進行檢測。實驗結果表明,提出的雙字節特征編碼方法在Ember數據集上的準確率為92.82%,與傳統的灰度編碼技術相比,提高了11.42%。

1 相關工作

隨著深度學習算法的不斷發展,它們已經被廣泛地應用于惡意代碼的檢測和分類當中。蔣晨等人[8]通過將深度神經網絡應用于不同平臺下惡意代碼的分類,其結果表明該方法在Windows平臺上的分類效果遠高于安卓平臺。A. I. Elkhawas等[9]通過將待檢測的PE文件的特征轉換成三元組的形式,然后通過SVM算法對其進行分類,在PE文件的分類上具有非常好的表現。A. Utku 等[10]采用的決策樹算法在移動端惡意代碼的分類上的準確率可以達到95%以上。其他的深度學習算法[11-15],在檢測其他的惡意事件中也具有良好的表現。有趣的是,當生成對抗網絡技術出現時,研究者發現可以通過生成技術在惡意代碼某些特定的部分填充一些字節,在不改變該代碼功能的前提下來逃避深度學習方法對可執行軟件的檢測,進而把惡意樣本誤判為良性樣本。而Vineeth S. Bhaskara等人[16]通過生成技術在已知惡意軟件行為的可逆分布RGB圖像表示上訓練GAN,編碼API調用n-gram的序列和相應的項頻率,生成的圖像表示可以重新解碼為底層API,通過調用序列信息可以合成惡意軟件。Z. Li等人[17]提出了一種灰度編碼方法,通過將入侵檢測數據集的單個特征編碼為10位二進制數(0b0000000000-0b1111111111),然后轉換為灰度圖像,并用深度學習算法對其進行分類,最終的準確率為82%。由此可知,將各種特征處理方法與深度學習算法相結合,在惡意代碼的檢測和分類上的表現都優于傳統方法。

EMBER數據集是Endgame公司在2018年四月份發布的一個大型開源數據集。該數據集可以用于訓練機器學習模型來檢測靜態Windows便攜式可執行文件。它總共有110萬條數據,其中訓練集有90萬條,惡意樣本、良性樣本以及未標注樣本各30萬條;測試集有20萬條,惡意樣本和良性樣本各10萬條。該數據集用jsonlines格式保存,并詳細解釋了各數據的含義。其父特征有8類,部分父特征又可以分解成子類特征,總共構成了56個特征(父特征和子類特征的集合);這些特征又可以分成數值特征和非數值特征。

2 雙字節特征編碼與深度學習

在使用深度學習算法對惡意代碼進行檢測之前,首先需要將非數值特征轉化為數值特征,然后將數值特征轉換成二進制數,接著通過雙字節特征編碼技術將其轉成灰度圖片,最后使用深度學習算法對其進行檢測。本章主要介紹了該文使用的EMBER數據集的特征、提出的雙字節特征編碼技術以及所使用的深度學習算法。

2.1 相關特征介紹

根據EndGame公司對EMBER數據集特征的描述篩選出如圖1中的特征用來編碼,包含4個父特征和35個子類特征。具體描述如下:

label:標簽,值為1代表惡意樣本,0為良性樣本,-1表示未標記,可用作半監督學習。

general:常規文件信息,主要包括的特征有文件大小、從PE頭獲得的基本信息、文件的虛擬大小、導入函數和導出函數、文件是否具有調試部分、線程本地存儲、資源、重定位、簽名以及符號數。

header:在coff標頭中,主要包括目標主機(字符串)和圖像特征列表(字符串列表);在optional標頭中,特征有目標子系統(字符串)、DLL特性(字符串列表)、magic字符串(例如“PE32”)、主要和次要映像版本、鏈接器版本、系統版本和子系統版本、代碼、標頭以及提交大小。

strings:字符串中的特征包括簡單的統計信息,至少五個可打印字符長度的可打印字符串(由0x20到0x7f范圍內的字符組成)、字符串的數量、字符串的平均長度、所有可打印字符串中字符的熵;此外,字符串特征還包括以C:(不區分大小寫)開頭的可能表示路徑的字符串數,以及http://或https://(不區分大小寫)的出現次數、它們表示路徑URL、還有表示注冊表項的HKEY_的出現次數以及可能提供Windows PE刪除程序或捆綁的可執行文件的短字符串MZ的出現次數。該數據集提供的是字符串的簡單統計摘要而不是原始字符串的列表,可以盡量不泄露某些良性文件可能存在的隱私問題。

圖1 單個PE文件的部分原始特征

圖1和2.1節詳細地描述了單個PE文件的部分原始特征以及特征的含義。

2.2 特征編碼技術

本節主要介紹該文對數值特征采用的數據預處理技術以及提出的雙字節特征編碼方法,并將該方法相較于傳統灰度編碼方法的優點進行了簡單的描述。

2.2.1 數據預處理

由圖1可知數據集的子類特征包含兩種,一種是非數值特征,比如subsystem和dll_characteristics等特征;另一種是數值特征,比如numstrings和entropy等特征。對于非數值特征,如果該特征中的子類特征的數目不超過16,那么就可以使用獨熱編碼的方式對其進行編碼,例如subsystem的子類特征數目為12,所以其編碼方式為(0b000000000001,0b100000000000),即12個位置上每一個位置只有一位為1,其余為0。對于子類特征數目超過16的情況(如圖1中的dll_characteristics),直接對其進行類別編碼并轉換為數值特征。

對于數值特征,使用MIN-MAX歸一化的方法對其進行處理,轉換成[0,1]范圍的值,公式如下:

(1)

其中,xnorm為歸一化后的數字,x為原始數字,xmin和xmax分別為該特征的最小值和最大值。

2.2.2 雙字節特征編碼方法

該文提出了一種雙字節特征編碼方法,是將單個的數值特征都編碼為相等數量的字節(每個數值特征編碼為兩個字節),非數值特征根據子類特征數目分別進行獨熱編碼或類別編碼。而數值特征的編碼規則如式(2):

(2)

由式(2)可知,對于數值特征的子類特征,如果該值為0.0或1.0,就將其編碼為0x0000(值為“0”)或0xffff(值為“1”);如果該值在0.0到1.0之間,那么就將十進制小數轉換為二進制小數并取前十六位,即每個特征代表兩個字節。非數值特征的處理方式在2.2.1節中已作詳細介紹。

將待檢測的PE文件特征通過該文提出的雙字節特征編碼方法進行編碼后,得到的字節的數量是確定的。假設N為數值特征,M為非數值特征中子特征數大于16的特征,K為非數值特征中子特征數小于16的所有特征經過獨熱編碼后相加的數量。則該文提出的編碼方法的字節數量為((M+N)×16+K)/8,最后得到的字節數目是64,剛好可以轉換為8×8的灰度圖像。而傳統的灰度編碼方法經過相同處理后,最終得到的大小為42.5的字節,需要填充6.5個都為0的字節才能轉換為7×7的灰度圖像。圖2為任意四個待檢測的PE文件的特征值經過雙字節特征編碼后生成的圖片(經過1 228%放大后)。

圖2 待檢測PE文件的特征編碼圖片

該文提出的特征編碼與灰度編碼相比,有以下優點:

在編碼時將每個數值特征以及子類特征中類別超過16的都編碼為2個字節,而灰度編碼只是將特征編碼為1.25個字節?;叶染幋a在轉換為圖像的時候會造成特征分裂,降低準確率。

在精度方面,灰度編碼的損失遠遠大于特征編碼。比如灰度編碼將特征值0.400 1和0.499 9都編碼為0b0001000000,損失值為0.098。而雙字節特征編碼則分別將其編碼為0b0110011001101100和0b0111111111111001,是完全兩個不同的值, 且損失值

小于2-16,與灰度編碼方法相比,損失值可以忽略不計。

2.3 深度學習算法

CNN(convolutional neural network)模型的靈感來源于動物視覺皮層組織,該組織負責小范圍內的光檢測[18]。通常,CNN由兩種類型的層組成,分別稱為提取特征的卷積層和用于特征映射的池化層,可以很好地提取特征,通過該特征可以輕易地識別出圖像之間的區別,因此CNN在圖像分類上具有卓越效果。在2014年,ImageNet大規模視覺識別挑戰賽(ILSVRC)競賽的獲勝者也是以CNN模型為架構的[19],在比賽中,它的錯誤率僅為6.67%,與人類水平的性能幾乎相同。由2.1節可知,該文的輸入是8×8大小的灰度圖片,而輸出分別為0(良性)或者1(惡意),屬于二分類問題。因此,適合用CNN模型來對待檢測的PE文件進行檢測。

在TensorFlow框架的基礎上,把輸入大小為8×8的灰度圖片,經過一次3×3的卷積之后,得到6×6大小的灰度圖片,通過使用ReLU激活函數可以有效防止梯度消失問題,并且計算量也比較小,然后使用2×2的最大池化層來減少參數誤差造成的均值偏移,最后輸出的圖片大小為5×5。由于此時的分類效果并不理想,因此在此基礎上重復做了一次3×3的卷積和2×2的最大池化,得到輸出為2×2大小的灰度圖片。為了避免出現梯度消失和過擬合等問題,分別使用帶有ReLU激活函數和dropout的全連層,最后使用softmax對數據集進行分類。圖3為該文采用的CNN網絡架構。

圖3 CNN網絡架構

3 實驗結果分析

由于大部分開源數據集都只有惡性樣本而沒有良性樣本(例如:BigData2015),因此該文選擇EndGame公司在2018年四月份公布的包含兩種樣本的EMBER數據集;并通過準確率、查全率、查準率三種具有代表性的度量性能比較該文提出的雙字節特征編碼以及傳統的灰度編碼技術。

本節主要介紹了實驗過程中使用到的數據集以及對實驗結果的具體分析。

3.1 數據集

在EMBER數據集的基礎上分別隨機選取30萬條良性樣本和惡意樣本,以形成60萬條樣本的新數據集。然后將該數據集以9∶1的大小隨機劃分為訓練集和測試集,表1詳細描述了該數據集訓練集和測試集的大小。

表1 數據集分布

3.2 實驗結果

通過采用如圖3所示的卷積神經網絡架構,對3.1節中劃分的數據集進行實驗,并且采用準確率(accuracy)、查全率(precision)、查準率(recall)和F1值度量兩種方法的性能,以比較雙字節特征編碼方法與灰度編碼方法的優劣性。其中查準率P、查全率R和F1值分別定義為:

(3)

(4)

(5)

其中,TP表示真正例,FP表示假正例,FN表示假反例。圖4為雙字節特征編碼和灰度編碼在CNN上的準確率曲線。

由圖4可以看出,在同等情況下,當經過100個epoch之后,灰度編碼方法的準確率僅為81.4%,而該文提出的雙字節特征編碼方法的準確率達到92.82%,比灰度編碼提高了11.42%。

圖4 特征編碼和灰度編碼的準確率曲線

由表2可知,特征編碼方法在查準率P、查全率R和F1值上的表現都優于灰度編碼;雙字節特征編碼在正常樣本和惡意樣本上的查全率分別為93.14%和93.16%,而灰度編碼分別為81.39%和81.41%;雙字節特征編碼在正常樣本和惡意樣本上的查準率分別為93.17%和93.14%,而灰度編碼分別為81.42%和81.38%;雙字節特征編碼在正常樣本和惡意樣本上的F1值為93.15%,而灰度編碼分別為81.4%和81.39%。由此可知,該文提出的雙字節特征編碼的性能遠優于傳統的灰度編碼方法。

表2 度量性能

4 結束語

針對傳統的惡意代碼檢測技術存在漏報、誤報以及資源浪費等的不足,結合卷積神經網絡技術在圖像分類上的優異表現,提出了一種新的雙字節特征編碼方法。該方法通過將待檢測的PE文件的單個數值特征和非數值特征中子特征數目超過16的編碼為2個字節,并將編碼后的所有字節轉換為灰度圖像,然后使用卷積神經網絡對其進行特征提取并檢測。在帶有標簽的EMBER數據集中的數據上進行了實驗,實驗數據為60萬條,其中良性樣本和惡意樣本數各30萬條。實驗結果表明,提出的雙字節特征編碼方法通過與卷積神經網絡算法結合,在6萬條測試集上的準確率accuracy、查全率P、查準率R和F1值的表現都優于傳統的灰度編碼方法。由此可知,提出的雙字節特征編碼方法比灰度編碼方法更加有效。

提出的雙字節特征編碼與傳統的灰度編碼相比具有以下兩個優點:

(1)由于提出的雙字節編碼是將特征編碼為兩個字節,因此在生成灰度圖像時,不會造成特征分裂,保存了特征的完整性。

(2)在精度方面,提出的雙字節編碼方法的損失值僅為2-16,遠低于灰度編碼的2-10,因此在分類性能上大大提升。

提出的雙字節特征編碼方法存在三點不足:

(1)在對一些非數值特征里面的相關子類特征進行處理時,并沒有根據該特征的特點進行對應編碼。

(2)沒有考慮父特征和子類特征的關聯性,沒有將父特征與其對應的子類特征進行結合編碼。

(3)在深度學習算法方面,CNN網絡結構上的優化也存在不足,并且只使用了一種網絡架構。

未來的工作可能會采用新的編碼方法對非數值特征里的子類特征進行編碼,根據其特點進行對應編碼;并且將父特征和子類特征進行結合編碼,體現其關聯性;并使用更加成熟的網絡結構進行訓練(例如:VGG-16,Inception-v4等)。

猜你喜歡
灰度字節數值
航空濾光片陣列多光譜圖像條帶灰度調整算法
No.11 字節跳動計劃自研芯片:僅供內部使用
體積占比不同的組合式石蠟相變傳熱數值模擬
No.8 字節跳動將推出獨立出口電商APP
數值大小比較“招招鮮”
天津港智慧工作平臺灰度發布系統和流程設計
艦船測風傳感器安裝位置數值仿真
鋁合金加筋板焊接溫度場和殘余應力數值模擬
Arduino小車巡線程序的灰度閾值優化方案
人類進入“澤它時代”
91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合