前言:為什麼要學習惡意程式分析?
在資訊安全的世界裡,「知己知彼,百戰百勝」這句話特別適用。想要有效防禦駭客攻擊,首先必須了解攻擊者使用的武器——惡意程式(Malware)。
惡意程式分析是資安領域中極為重要的一環,透過分析,我們可以:
- 建立入侵指標(IOC):識別惡意程式的特徵,幫助其他系統偵測類似威脅
- 掌握攻擊趨勢:了解最新的 CVE 漏洞與零時差攻擊手法
- 事件回應:當資安事件發生時,快速分析惡意程式以制定應對策略
- 識別攻擊者:透過程式特徵追溯攻擊來源
惡意程式分析的兩大方法
靜態分析(Static Analysis)
靜態分析是在「不執行程式」的情況下進行分析。就像是檢查一顆未爆彈的外觀、結構,而不引爆它。
優點:
– 安全,不會觸發惡意行為
– 可以看到完整的程式碼結構
缺點:
– 遇到加殼或混淆的程式時,分析難度大增
– 無法觀察程式實際執行時的行為
動態分析(Dynamic Analysis)
動態分析則是在受控環境(如虛擬機或沙箱)中實際執行惡意程式,觀察它的行為。
優點:
– 可以直接觀察程式的實際行為
– 能繞過某些混淆技術
缺點:
– 存在風險,需要隔離環境
– 可能被惡意程式的反分析技術偵測到
常用分析工具介紹
動態分析工具
| 工具名稱 | 用途說明 |
|---|---|
| x64dbg / x32dbg | 功能強大的 Windows 除錯器,可以逐步執行程式、設定中斷點 |
| API Monitor | 紀錄惡意程式呼叫的 Windows API,了解程式與系統的互動 |
| Cheat Engine | 常用於遊戲修改,但也可作為記憶體分析的除錯工具 |
靜態分析工具
| 工具名稱 | 用途說明 |
|---|---|
| IDA Pro | 業界標準的逆向工程工具,可將機器碼反組譯為組合語言 |
| Ghidra | 由美國國安局(NSA)開發的免費逆向工具,功能媲美 IDA Pro |
線上沙箱服務
| 服務名稱 | 特色 |
|---|---|
| Hybrid Analysis | 免費的線上沙箱,提供詳細的分析報告 |
| Any.Run | 互動式沙箱,可以即時觀察惡意程式行為 |
| VirusTotal | 整合多家防毒引擎的掃描服務 |
其他實用工具
| 工具名稱 | 用途說明 |
|---|---|
| Scylla | IAT(Import Address Table)重建工具,脫殼必備 |
| python-oletools | 擷取 Office 檔案中的巨集程式 |
| PCHunter | Windows Rootkit 偵測工具 |
惡意程式分析步驟
第一步:線上沙箱初步分析
拿到一個可疑檔案時,最安全的第一步是丟到線上沙箱進行分析。沙箱會自動執行程式並產生報告,讓你初步了解:
- 程式是否有程式碼注入行為
- 是否執行其他程式
- 網路活動(連線的 IP 或網域)
- 檔案讀寫操作
沙箱的限制:
雖然沙箱很方便,但它有一些限制:
- 沙箱逃逸技術:有些惡意程式會偵測自己是否在沙箱中執行,若是則自動關閉
- 執行分支不足:沙箱可能無法觸發所有程式邏輯,只擷取到部分行為
第二步:使用 API Monitor 收集資訊
API Monitor 可以記錄程式呼叫的所有 Windows API,包含:
- API 名稱與參數
- 呼叫位址與返回位址
- 是否啟動其他程式
這些資訊對於了解惡意程式的行為模式非常有幫助。
第三步:IDA Pro 靜態分析
使用 IDA Pro 進行深入的靜態分析時,重點關注:
Import Address Table(IAT)
– 列出程式使用的所有外部 API
– 可以快速了解程式的功能取向(例如大量使用網路 API 可能是後門程式)
Strings(字串表)
– 可能包含 C&C 伺服器的 IP 或網域
– 錯誤訊息、除錯資訊等有用線索
常見的分析障礙與解決方案
障礙一:字串被加密
惡意程式作者為了躲避偵測,經常將敏感字串加密儲存。
常見加密方式:
– XOR 加密(最常見)
– 凱薩加密法
– AES、DES、RSA(較少見)
解決方法:
- 搜尋加密特徵常數
- AES 的 SBOX、RSBOX
- DES 的 PC1、PC2 表
- 搜尋加密相關 API
CryptAcquireContextWCryptDecrypt
- 撰寫 IDAPython 腳本自動解密
障礙二:動態載入 API
有些惡意程式不會在 IAT 中顯示使用的 API,而是在執行時期動態載入。
Windows 動態載入 API 的標準流程:
// 1. 取得 DLL Handle
HMODULE hModule = LoadLibraryA("kernel32.dll");
// 2. 取得函數位址
FARPROC pFunc = GetProcAddress(hModule, "VirtualAlloc");
解決方法:
– 追蹤 LoadLibrary 和 GetProcAddress 的呼叫
– 如果只有 LoadLibrary,可能透過 EAT(Export Address Table)自行定位函數
障礙三:程式被加殼
加殼(Packing)是將原始程式碼加密或壓縮,在執行時才解開。這會讓 IDA Pro 無法正確分析。
脫殼步驟:
- 找特徵 – 對
VirtualAlloc、VirtualProtect設定中斷點 - 找 OEP(Original Entry Point)- 逐步執行直到跳到原始程式入口
- Memory Dump – 使用 Cheat Engine 或 Scylla 將記憶體內容匯出
- 修復 PE – 使用 Scylla 重建 IAT
- 繼續分析
Shellcode 分析技巧
Shellcode 是一段可獨立執行的機器碼,常被用於:
– 注入其他程式
– 反沙箱偵測
– 執行惡意功能
Shellcode 執行的四大步驟:
| 步驟 | 說明 | 常見 API |
|---|---|---|
| 申請空間 | 配置一塊記憶體存放 Shellcode | malloc、VirtualAlloc |
| 複製 | 將 Shellcode 複製到該空間 | memcpy、迴圈複製 |
| 解密 | 將加密的 Shellcode 解開 | XOR、AES 等 |
| 執行 | 跳轉到 Shellcode 開始執行 | VirtualProtect(設為可執行) |
取出 Shellcode 的方法:
- 在執行前設定中斷點
- 觀察暫存器中 Shellcode 的位址(通常是
jmp <reg>或call <reg>) - 使用 Memory Dump 匯出分析
程式碼注入技術介紹
惡意程式經常使用程式碼注入來隱藏自己,以下是三種常見技術:
DLL Injection(DLL 注入)
將惡意 DLL 載入到目標程式的記憶體空間中執行。
基本步驟:
1. OpenProcess – 取得目標程式權限
2. VirtualAllocEx – 在目標程式中申請記憶體
3. WriteProcessMemory – 寫入 DLL 路徑
4. CreateRemoteThread – 建立執行緒呼叫 LoadLibrary
Process Hollowing(程序挖空)
建立一個合法程式,然後將其記憶體內容替換成惡意程式碼。
執行流程:
1. 以暫停狀態創建合法程式
2. 將原本的程式碼區段清空
3. 寫入惡意程式碼
4. 修改入口點並恢復執行
這種技術特別難以偵測,因為從外表看起來是正常程式在執行。
ATOM Bombing(APC 注入)
利用 Windows 的 APC(Asynchronous Procedure Call)機制注入程式碼,不需要建立新執行緒。
反分析技術
惡意程式作者會使用各種技術來阻撓分析:
Anti-VM / Anti-Sandbox
偵測是否在虛擬環境中執行:
– 檢查特定的註冊機碼
– 檢查網路卡廠商(如 VMware、VirtualBox)
– 檢查執行中的程式(如分析工具)
Anti-Dump
阻止記憶體傾印:
– 將 PE Header 的記憶體屬性設為 No Access
– 抹除 PE Header
– 修改 SizeOfImage
應對方法:
重新映射 PE 檔案到記憶體中,取得正確的 SizeOfImage。
分析重點指標整理
進行惡意程式分析時,應該特別注意以下指標:
| 指標類型 | 說明 |
|---|---|
| CVE / Payload | 利用的漏洞與攻擊載荷 |
| C&C 伺服器 | IP 位址與網域名稱 |
| 惡意行為 | 檔案操作、網路通訊、權限提升等 |
| 通訊協定 | HTTP、DNS Tunneling、自訂協定等 |
| 反分析技術 | 沙箱逃逸、反除錯手法 |
給初學者的建議
- 從線上沙箱開始:先熟悉分析報告的閱讀,了解惡意程式的常見行為
- 學習基礎組合語言:至少要能看懂 x86/x64 的基本指令
- 動手實作:找一些 CTF 題目或公開的惡意樣本練習
- 善用社群資源:Twitter 上的資安研究員、部落格、技術文章都是很好的學習來源
- 建立安全的分析環境:使用虛擬機,並確保網路隔離
結語
惡意程式分析是一門需要長期累積經驗的技術。本文介紹的只是入門概念,實際分析時會遇到各種複雜情況。但只要持續學習、多加練習,你也能成為一位優秀的惡意程式分析師!
記住:每一個惡意程式都是攻擊者的作品,透過分析它們,你正在學習攻防雙方的思維,這將使你成為更全面的資安專家。
延伸閱讀與資源
- Practical Malware Analysis(惡意程式分析實戰)- 經典入門書籍
- Hybrid Analysis – https://www.hybrid-analysis.com/
- Any.Run – https://any.run/
- VirusTotal – https://www.virustotal.com/
