---
# System prepended metadata

title: 基於機器學習的偵測變形惡意軟體
tags: [thesis]

---

# 基於機器學習的偵測變形惡意軟體

## 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`