# 基於機器學習的偵測變形惡意軟體 ## Abtract 某些 **惡意軟體** 會利用 **混淆化** 或 **加殼** 來規避偵測 **混淆化** 又分成 >**寡型 多型 變形** **檢測難度: 易 -> 難** 作者用提出一個自動偵測變形惡意軟體的方式: >1.**透過 PE標頭檔** >2.**操作碼 作為 "特徵" 用來靜態分析 用ML訓練兩個模型 在改善誤判率** ## Introduce 靜態分析 : 不執行惡意軟體 用分析工具進行 分析 tools:pestudio、ida pro 動態分析 : x64dbg 看記憶體狀態 在 VM or 沙箱裡面執行 :::info __有些惡意軟體會使用混淆化或加殼來處理__ 加入一些 junk code(垃圾程式碼)插入一些無意義的code 有些惡意軟體會在要執行惡意區段加密(代表說逆向時加密的內容可能是重點 即惡意行為) ==混淆化指的是針對操作碼進行修改 只要符合calling convention (一些函數呼叫不僅只是跳到該位址而已 還必須要符合參數填入數 以及回傳的結果) 不同op code 也可以相同功能== ::: #### 兩種偵測方法 - - **基於行為** Signature - based 將惡意軟體某些片段作為特徵來偵測 (快速 準確) - **基於特徵** Behavior - based 執行時觸發某些特定敏感API組合來判斷惡意行為 (避免加殼或混淆影響) #### 缺點: - 基於特徵容易被規避 - 基於行為容易耗時 #### 作者解決方法: - 自動化提取特徵並進行變形惡意軟體偵測。 - 針對惡意程式的數個層面進行偵測:PE 標頭與操作碼。 - 透過二階段分類,降低偵測的誤判率 - 結合 TF-IDF 演算法提取出操作碼的特徵,加快偵測效率 - 提出一個通用的偵測方法,避免需針對個別不同變形惡意軟體建立模型 ## Literature review **加密惡意軟體**: 惡意軟體將加密過的主體,用解密器將其復原之後再加以利用,藉以隱藏特徵, 但是解密器仍是可被偵測的特徵 寡形 多形 惡意軟體: 寡型惡意軟體的解密器隨著每次改版而更迭 多型惡意軟體則是使用混淆技巧將解密器進行混淆,可以容易產出數百種版本的惡意軟體。 變形惡意軟體:透過變形引擎(Mutation Engine)將二進位檔的主體全部混淆化,容易產生多 個版本,每個版本特徵皆不同但行為相同,使得依靠特徵掃描的防毒軟體無法輕易 偵測。 ---- 混淆化:不影響程式執行結果的情況下,消除原始特徵, 常見混淆化手法 1. junk code insertion:加入nop等無效程式碼 或 對stack 操作,修改特徵但功能一樣 增加執行流程複雜度 2. Register reassignment:將原本對於某暫存器的操作,替換成對另一個暫存器的操做 3. subroutine reordering:不影響程式運作目的的前提下,將原本函式的執行順序隨機替換先後順序 4. Instruction Substitution:將原本的操作碼替換成等義的操作碼。例如將 test al, al 替換成 or al, al 5. Code Transposition:在不影響程式運作目的的前提下,更改一部分操作碼的執行順序 6. Procedure Inlining: 將原本呼叫(call)或跳轉(jmp)到函式的操作碼替換成該函式的真正內容 7. Procedure Outlining: 將原本的操作碼用 call 或 jmp 等操作碼替代,藉此跳轉到其他部分繼續執行原本應執行的內容 --- 偵測變形惡意軟體: 分類器 & 相似度 分類器的偵測方式主要是透過 從程式中**擷取出特徵**,並使用**機器學習模型**,針對這些特徵進行分類,區分出多個程式 中,哪些程式是屬於惡意的分類 相似度偵測主要是**判斷程式本身特定特徵的相似度**,透過相似度公式計算出兩個程 式間該特徵的相似程度,藉由**設定一個門檻值來區別出軟體惡意與否**。兩種方式的差異 在於,相似度偵測需著重於特徵本身是否存在一定的相似程度,而分類器偵測需仰賴機 器學習模型進行分類 opcodes:(運算程式碼) push pop mov等 問題: 篩選特徵 挑選權重最大 機器學習分類良性&惡意軟體運作流程: ```flow st=>start: 資料蒐集 e=>end: 預測 op=>operation: 預處理 op2=>operation: 訓練模型 st->op->op2->e ``` 資料蒐集 : 用IDA pro擷取執行檔資訊 因為操作碼是一個程式本身會執行的指令與動作,可代表程式本身行為 透過反組譯 拿出 opcodes 預處理:TF-IDF 文字探勘 :評估一個詞語在文件中的重要程度 方法: CNN PE格式: windows 執行檔 和 DLL檔 都屬於PE格式 在PE檔案結構裡面 執行檔的標頭區段良性軟體和惡意軟體有一定差異 除了用opcode之外 其餘部分也可用於偵測 為了避免誤判 因此作者加入了 PE執行檔的標頭當作特徵 研究架構: 把PE模組解析 後抓取特徵 Random forest 作為模組 結果:成效很高 ###### tags: `thesis`