基於深度學習的惡意樣本行為檢測(含源碼) ----采用CNN深度學習算法對Cuckoo沙箱的動態行為日志進行檢測和分類


from:http://www.freebuf.com/articles/system/182566.html

0×01 前言

目前的惡意樣本檢測方法可以分為兩大類:靜態檢測和動態檢測。靜態檢測是指並不實際運行樣本,而是直接根據二進制樣本或相應的反匯編代碼進行分析,此類方法容易受到變形、加殼、隱藏等方式的干擾。動態檢測是指將樣本在沙箱等環境中運行,根據樣本對操作系統的資源調度情況進行分析。現有的動態行為檢測都是基於規則對行為進行打分,分值的高低代表惡意程度的高低,但是無法給出類別定義。

本文采用CNN深度學習算法對Cuckoo沙箱的動態行為日志進行檢測和分類嘗試,分別測試了二分類和多分類方法,效果還有不小提升空間,希望共同交流。

0×02 現有技術

在大數據環境背景下,使用機器學習算法成為選擇的趨勢。相比手工分析,機器學習算法更加高效。目前已經有不少采用機器學習算法對樣本動態行為進行檢測的研究。Malheur由Konrad Rieck等人提出並給出了相應的開源實現,以樣本中API出現的相對順序作為特征向量,利用原型和聚類算法進行檢測分析,該方法的缺點是特征向量過於稀疏,在高達幾萬維的特征向量中往往只有幾十到幾百維的特征值非零。

Radu等人采用隨機森林算法檢測惡意動態行為,根據API調用信息提取了68維的特征向量,對四類惡意樣本進行了分類。該研究沒有考慮白樣本,適合在對樣本黑白分類后進行惡意類別細分。Ivan等人用KNN,朴素貝葉斯,SVM,J48,MLP這5種算法進行了比較分析,不過其用於實驗的總樣本數只有470個,其結果的可靠性不是很高。筆者也用這些算法進行了實驗,其結果沒有論文中的數據那么好。

上述研究方法都采用了傳統機器學習算法,利用手工分析獲取特征向量進行分類處理,其結果受特征向量選取的影響極大。本文采用卷積神經網絡(CNN)算法,借助CNN在自然語言處理方面的研究成果,進行樣本的惡意動態行為檢測。特點是不需要人工提取特征向量,具體的特征是算法根據樣本的動態行為信息自行學習的。

CNN即卷積神經網絡,1998年Yann LeCun設計了用於手寫數字識別的卷積神經網絡LeNet-5,后經Hinton及其學生Alex Krizhevskyx修改,於2012年獲得了ImageNet競賽冠軍。之后CNN就得到了廣泛應用,檢測結果十分優異。下圖是經典卷積神經網絡LeNet-5的網絡結構,可以看到CNN主要包括卷積層,降采樣層和全連接層等部分。本文采用CNN算法分別對樣本的動態行為進行二分類和多分類。二分類表示只根據樣本的動態行為判別樣本是否為惡意的。多分類是指對於惡意樣本還更詳細的划分出惡意類別信息。后面給出具體的算法實現過程。

基於深度學習的惡意樣本行為檢測

0×03 數據預處理

通過在沙箱運行樣本,獲取樣本的動態行為報告。這里受限於兩個條件:1)樣本能跑出動態行為;2)該樣本在VirtusTotal上能查詢到對應結果。由於當前處於預研階段,故先采用了部分樣本進行試驗。動態行為報告格式如下圖。

基於深度學習的惡意樣本行為檢測在實驗過程中一共使用了7類共15921個樣本。樣本的分布如下表:

基於深度學習的惡意樣本行為檢測對於每一個樣本,其原始的動態行為報告是json結構數據。為了便於使用,將原始報告轉為了如下圖(a)所示的文本格式。每個樣本的行為由一個txt文檔表示,文檔中的每一行表示一個api調用。每一行分為三個部分,由空格分隔。第一部分是api類型,對應原始report.json中的category字段;第二部分是調用的api名稱;剩下部分是調用過程中的相關參數。在實際實驗過程中發現,不考慮參數信息時算法效果更好,所以去除了動態行為的參數信息,如下圖(b)。最終使用時對於相鄰的重復api調用只考慮一次,相當於做了去重處理,如下圖(c)。經過處理后每個樣本的動態行為日志信息可以得到大幅度精簡。

基於深度學習的惡意樣本行為檢測

經過格式轉換后,動態行為檢測問題就變成了對文本的分類問題。因此可以采用CNN在自然語言處理方面的方法。

0×04 算法實現

1.  獲取詞庫

在動態行為文本中的每一行表示一個動態行為,將一行視為一個整體,遍歷所有的動態行為日志,獲取所有出現過的動態行為,作為詞庫。用連續數字對詞庫中的每一個詞進行標號,這樣可以獲取動態行為到標號id的映射。注意,除了出現過的動態行為外,還另外添加了一個“Unknown”動態行為,用於之后匹配不在詞庫中的未知行為。下圖是一個簡單的例子,表示在一共只有兩個樣本的情況下,獲取到的詞庫信息。

基於深度學習的惡意樣本行為檢測

2.  將樣本轉為矩陣表示

CNN最初用於圖像處理。在使用CNN進行文本分類時首先需要將文本轉為類似圖片的二維矩陣。為了實現文本的矩陣表示,先將詞庫中的每一個詞用一個長度為300的向量表示,這個向量長度是一個可以選擇的參數。初始化向量時采用隨機初始化,之后會隨着訓練不斷更新詞向量。對於每一個樣本,將樣本中的動態行為根據詞庫轉換為對應的id序列。再根據此id序列以及詞庫中每個id的向量將樣本轉換為二維矩陣。整體過程如下圖所示。注意,在轉換過程中需要制定最大詞長度,以保證所有樣本轉換后的矩陣有相同的維度。對於長度不足的樣本需要在最后進行補0,對於超長的樣本,筆者嘗試過用tf-idf分析處理,但實際效果並沒有提升,所以這里采用直接截斷。

基於深度學習的惡意樣本行為檢測

3.  使用CNN訓練樣本

借用一張Ye Zhang等人論文中的流程圖。對於輸入的樣本矩陣,分別用多個卷積核進行卷積。卷積核的長度可以是任意選擇的,本文中使用的是(3, 4, 5),即使用了3個不同長度的卷積核。卷積核的寬度與詞向量的長度相同。這樣經過一次卷積操作后,原本的二維矩陣就會變成一個列向量。這種處理類似於N-Gram算法,取長度為3的卷積核其實就是對相鄰的3個動態行為提取特征。每一種尺度的卷積核都可以有多個,圖中每種尺度的卷積核有2個。本文實際使用時采用了128個。經過卷積后,再對每一個卷積結果使用max-pooling,取列向量中的最大值。這樣每一個列向量就轉變成了一個1×1的值。將所有卷積核結果對應的最大值連接在一起構成全連接層。最后用softmax進行多分類處理。

基於深度學習的惡意樣本行為檢測

0×05 實驗結果

本文采用Tensorflow實現算法結構。整體流程的計算圖如下圖所示。Embedding是詞嵌入部分,即將動態行為文本轉換為二維,conv對應上面介紹的卷積操作,pool對應max-pooling,fc為全連接層,最后結果由softmax輸出。在具體實現時還加入了batchnorm和學習速率指數衰減,用以加速學習和優化結果。注意圖中有一個dropout層,但實際使用時keep_prob傳入的是1.0,即並沒有進行dropout。該層是在調試結果時使用的。

運行時采用80%的數據作為訓練數據,20%的數據作為測試數據。每個batch大小為128,共迭代50輪,每輪需迭代99個batch,每訓練200個batch統計一次模型在測試集上的效果。

分別測試了二分類和多分類效果。二分類是指只判斷樣本的行為是否為惡意的。多分類指將樣本根據動態行為划分為數據預處理中提到的7類。

基於深度學習的惡意樣本行為檢測

1.  二分類結果

只對樣本的動態行為進行黑白分類。算法在訓練集和測試集上的准確率和損失值如下圖所示,藍色線是訓練集結果,紅色線是測試集結果。可以看到結果在迭代1400個batch后趨於穩定。在訓練集上,准確率在98%附近浮動,損失值在0.04附近浮動。在測試集上,准確率最高為93.37%,但是損失值在迭代400個batch后就開始發散,並沒有收斂。

基於深度學習的惡意樣本行為檢測

2.  多分類結果

下面給出了隨着訓練次數增加算法在訓練集和測試集上的准確率和損失值變化。藍色線表示訓練集上效果,橙色線表示測試集上效果。可以看到,在迭代到1600個batch后,算法效果已經基本趨於穩定,訓練集准確率在98%附近波動,損失值在0.07附近波動。在測試集上,算法准確率最高點出現在迭代了2600個batch的時候,准確率為89.20%,損失值也在迭代了400個batch后開始發散。

基於深度學習的惡意樣本行為檢測

0×06 相關代碼

代碼的git地址為:https://github.com/zwq0320/malicious_dynamic_behavior_detection_by_cnn 歡迎大家交流指正。

0×07 參考資料

【1】http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.702.6310&rep=rep1&type=pdf

【2】https://ieeexplore.ieee.org/abstract/document/7166115/

【3】https://www.researchgate.net/profile/Charles_Lim3/publication/232627329_Analysis_of_Machine_learning_Techniques_Used_in_Behavior-Based_Malware_Detection/links/00b7d5283431427b55000000.pdf

【4】https://pdfs.semanticscholar.org/d3f5/87797f95e1864c54b80bc98e957da6746e27.pdf

【5】http://www.aclweb.org/anthology/I17-1026

【6】https://www.tensorflow.org/?hl=zh-cn


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM