惡意軟件樣本由NTT Secure Platform Laboratory收集,共26個惡意軟件,使用Symantec(賽門鐵克)將其標記爲11個家族。算法
在Ubuntu上使用VirtualBox搭建windows環境,使用Process Monitor、INetSim二、Cuckoo Sandbox等工具生成惡意和良性軟件的日誌。共生成81個惡意軟件、69個良性軟件日誌文件。windows
日誌數據生成環境以下圖:安全
使用Process Monitor來記錄ReadFile,RegSetValue,Thread Start等行爲;
經過Process Monitor記錄的行爲(Operation)數據以下表所示。網絡
字段 | 說明 |
---|---|
Time | Operation執行時間 |
Process Name | Process名 |
PID | Operation的PID |
Event | Operation名 |
Path | Operation執行時所在路徑 |
Result | 執行結果狀態 |
Detail | 參數等信息 |
Result記錄了Operation的結果,如SUCCESS,ACCESS DENIED,FILE NOT FOUND等;
Detail記錄了參數等信息。函數
算法的主要思路爲:將Process行爲日誌轉化爲向量,使用RNN轉換爲特徵圖像,在用CNN對這些特徵圖像進行分類。
流程圖以下:工具
Step1: 監視Process的行爲,並生成日誌文件。
Step2: 將日誌數據轉爲one-hot向量,按Operation執行輸入RNN訓練,獲取trained RNN模型。
Step3: 用trained RNN從日誌文件中提取特徵,並將特徵轉換爲特徵圖像。
Step4: 使用標有惡意、良性標籤的特徵圖像數據,訓練CNN模型。
Step5: 訓練結束後,由訓練的RNN模型將Process行爲日誌文件轉化爲特徵圖像,再由訓練的CNN模型進行分類,最後輸出Process爲惡意軟件的機率。學習
將日誌文件的Operation數據基於Operation Name轉爲one-hot向量做爲輸入,隱藏層\(h^1\)的神經元爲普通神經元,\(h^2\)、\(h^3\)層爲LSTM神經元。
網絡結構以下:spa
用trained RNN提取Process的特徵並生成特徵圖像。
特徵提取流程以下圖所示:日誌
將日誌文件中的Operation轉換爲one-hot向量,而後依次將它們輸入到trained RNN中。 獲取每一個輸入的第三隱藏層\(h^3\)的值,獲得集合{\(h^3_1\),\(h^3_2\),...,\(h^3_L\)}。 CNN模型輸入圖像矩陣爲固定大小,故需將每一個Process日誌文件轉爲相同大小的特徵圖像矩陣。
用瞭如下等式將Operation特徵向量集轉爲Process特徵圖像矩陣\(F\):orm
\(f_k\):固定大小的特徵圖像矩陣的元素
\(N\):集合{\(h^3_1\),\(h^3_2\),...,\(h^3_L\)}分爲N組並計算每組的平均值,\(N\)也就是特徵圖像矩陣\(F\)的行數。
\(p_k\):第\(k\)個矢量集的最後一個數。
\(W\):設爲第3隱藏層的維數,則固定向量序列能夠描述爲矩陣F.
經過sigmoid函數將矩陣F的每一個元素映射到[0,1]空間,並乘以255來造成256級灰度圖像。 最後,輸出矩陣\(F\)做爲特徵圖像矩陣。
使用帶有惡意、良性標記的特徵圖像矩陣做爲輸入訓練CNN網絡。CNN網絡結構以下圖:
輸出\(y_0\)、\(y_1\)分別爲爲良性軟件、惡意軟件的機率。可用sigmoid函數\(Sig\)(\(y_1\))計算出爲惡意軟件的機率。
做者嘗試了不一樣的RNN的隱含層維度、CNN輸入矩陣大小、CNN卷積層池化層參數\(w\)。使用5折交叉驗證,最佳結果爲在下表中Cond2條件時,AUC爲0.96。
在惡意程序檢測方向,將程序的動靜態數據轉爲圖像,再套用CNN對圖像分類,這是一個常見的思路。