Jadeite:基於行為和深度學習的Java惡意軟體檢測新方法

語言: CN / TW / HK

原文標題: Jadeite: A novel image-behavior-based approach for Java malware detection using deep learning

原文作者:Obaidat I, Sridhar M, Pham K M, et al.

原文連結:https://www.sciencedirect.com/science/article/pii/S0167404821003710

發表期刊:Computers & Security 2022

筆記作者:[email protected]

筆記小編:[email protected]

其實不難發現,由於Java本身是一門較為安全的語言,所以針對Java安全相關的研究,如:Java漏洞挖掘和Java惡意程式碼檢測,相對來說比較少,通過現有的檢測和分析方法就能夠達到一個不錯的檢測效果。

在惡意程式碼檢測領域,將惡意程式碼轉換成影象,配合影象處理技術進行檢測是一種常用的手段。然而,如果直接將惡意程式碼的二進位制檔案轉換成影象,可能導致程式碼的語義丟失。

本文提出了一種新的基於行為的Java程式轉換方法,用於基於深度學習的惡意軟體分類。通過基於位元組碼級別的過程間API呼叫靜態捕獲Java程式的行為,將這些行為轉換成影象,利用影象處理模型(CNN)實現對惡意程式碼的檢測。為降低模型受程式碼混淆等技術的影響,作者還從位元組碼檔案中提取了一組額外的特徵。

模型已開源:https://github.com/sridhar-research-lab/jadeite。

圖1是Jadeite模型的方法框架。Jadeite以JAR形式的Java位元組碼作為輸入,由3個部分組成:(1)位元組碼轉換引擎,(2)特徵提取引擎和(3)基於CNN的分類引擎。

Fig. 1 方法框架

(1)位元組碼轉換引擎

目標是將位元組碼轉換成灰度圖。

首先,從JAR檔案中提取出位元組碼,然後使用Soot將位元組碼轉換成Jimple中間語言(一種三地址碼);接著基於Heros從Jimple構建過程間控制流圖(ICFG)。由於生成的JAR檔案的過程間控制流圖很大,所以需要對其進行裁剪以降低模型受維數災難和過擬合問題的影響。具體來說,通過刪除如變數賦值、變數初始化等瑣碎質量,僅保留API呼叫指令(儘可能保證API指令的呼叫順序),降低ICFG的複雜性。

接著,將ICFG用鄰接矩陣表示,矩陣中的每個元素的值存在於[0, 255]中。A[i, j]表示API呼叫指令i與API呼叫指令j之間存在一條邊。如果A[i, j]的值大於255,表示API呼叫指令i與API呼叫指令j之間的邊數大於255,則說明可能存在迴圈或者遞迴的情況,因此需要將該值設定為255。基於ICFG的鄰接矩陣,生成灰度圖,圖的維數為矩陣的維數。

(2)特徵提取引擎

特徵提取引擎的框架如圖2所示,目標是使用Jarhead從輸入的位元組碼中提取一組額外的特徵,減低檢測模型受程式碼混淆技術的影響。

Jarhead主要提取兩種特徵:混淆特徵和行為特徵。具體來說,Jarhead從位元組碼的反彙編程式碼中提取統計資訊來表示混淆特徵,如:是否存在Java物件的特定例項,字串長度等;行為特徵包括下載和執行外部檔案等。Jarhead從Java直接碼中總共提取42個特徵,而本文模型梯度推進演算法(gradient boosting algorithm)從這42個特徵中選擇出20個特徵,如表1所示。本文所用到的特徵可以分為兩大類:已知存在漏洞的函式(如:MidiSystem.getSoundbank),下載和執行行為(如:java.net.URL)。

Fig. 2 特徵提取引擎框架
Tab. 1 額外特徵

(3)基於CNN的分類引擎

基於CNN的分類引擎需要接收位元組碼轉換引擎獲得的灰度圖和特徵提取引擎提取的特徵,因此需要對這兩種輸入進行組合。圖3是作者探究的幾種不同的輸入組合方式。

  • Image Load:僅使用灰度圖作為輸入;

  • Single Load:同時使用灰度圖和特徵作為輸入,將灰度圖展開成1維向量,然後將特徵拼接到其後;

  • Double Load:同時使用灰度圖和特徵作為輸入,分別使用不同的網路對二者進行處理,然後將處理的結果進行拼接(這個就類似於推薦系統中的雙塔模型)。

Fig. 3 CNN網路構架及輸入組合方式

實驗結果及混淆矩陣分別如圖4和5所示。

Fig. 4 實驗結果
Fig. 5 混淆矩陣

安全學術圈招募隊友-ing

secdr#qq.com