[資安分析] 001 惡意程式分析入門指南:從零開始學習資安分析技術

前言:為什麼要學習惡意程式分析?

在資訊安全的世界裡,「知己知彼,百戰百勝」這句話特別適用。想要有效防禦駭客攻擊,首先必須了解攻擊者使用的武器——惡意程式(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 或網域)
  • 檔案讀寫操作

沙箱的限制:

雖然沙箱很方便,但它有一些限制:

  1. 沙箱逃逸技術:有些惡意程式會偵測自己是否在沙箱中執行,若是則自動關閉
  2. 執行分支不足:沙箱可能無法觸發所有程式邏輯,只擷取到部分行為

第二步:使用 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(較少見)

解決方法:

  1. 搜尋加密特徵常數
    • AES 的 SBOX、RSBOX
    • DES 的 PC1、PC2 表
  2. 搜尋加密相關 API
    • CryptAcquireContextW
    • CryptDecrypt
  3. 撰寫 IDAPython 腳本自動解密

障礙二:動態載入 API

有些惡意程式不會在 IAT 中顯示使用的 API,而是在執行時期動態載入。

Windows 動態載入 API 的標準流程:

// 1. 取得 DLL Handle
HMODULE hModule = LoadLibraryA("kernel32.dll");

// 2. 取得函數位址
FARPROC pFunc = GetProcAddress(hModule, "VirtualAlloc");

解決方法:
– 追蹤 LoadLibraryGetProcAddress 的呼叫
– 如果只有 LoadLibrary,可能透過 EAT(Export Address Table)自行定位函數

障礙三:程式被加殼

加殼(Packing)是將原始程式碼加密或壓縮,在執行時才解開。這會讓 IDA Pro 無法正確分析。

脫殼步驟:

  1. 找特徵 – 對 VirtualAllocVirtualProtect 設定中斷點
  2. 找 OEP(Original Entry Point)- 逐步執行直到跳到原始程式入口
  3. Memory Dump – 使用 Cheat Engine 或 Scylla 將記憶體內容匯出
  4. 修復 PE – 使用 Scylla 重建 IAT
  5. 繼續分析

Shellcode 分析技巧

Shellcode 是一段可獨立執行的機器碼,常被用於:
– 注入其他程式
– 反沙箱偵測
– 執行惡意功能

Shellcode 執行的四大步驟:

步驟 說明 常見 API
申請空間 配置一塊記憶體存放 Shellcode mallocVirtualAlloc
複製 將 Shellcode 複製到該空間 memcpy、迴圈複製
解密 將加密的 Shellcode 解開 XOR、AES 等
執行 跳轉到 Shellcode 開始執行 VirtualProtect(設為可執行)

取出 Shellcode 的方法:

  1. 在執行前設定中斷點
  2. 觀察暫存器中 Shellcode 的位址(通常是 jmp <reg>call <reg>
  3. 使用 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、自訂協定等
反分析技術 沙箱逃逸、反除錯手法

給初學者的建議

  1. 從線上沙箱開始:先熟悉分析報告的閱讀,了解惡意程式的常見行為
  2. 學習基礎組合語言:至少要能看懂 x86/x64 的基本指令
  3. 動手實作:找一些 CTF 題目或公開的惡意樣本練習
  4. 善用社群資源:Twitter 上的資安研究員、部落格、技術文章都是很好的學習來源
  5. 建立安全的分析環境:使用虛擬機,並確保網路隔離

結語

惡意程式分析是一門需要長期累積經驗的技術。本文介紹的只是入門概念,實際分析時會遇到各種複雜情況。但只要持續學習、多加練習,你也能成為一位優秀的惡意程式分析師!

記住:每一個惡意程式都是攻擊者的作品,透過分析它們,你正在學習攻防雙方的思維,這將使你成為更全面的資安專家。


延伸閱讀與資源

  • Practical Malware Analysis(惡意程式分析實戰)- 經典入門書籍
  • Hybrid Analysis – https://www.hybrid-analysis.com/
  • Any.Run – https://any.run/
  • VirusTotal – https://www.virustotal.com/
飛飛
飛飛

講師學歷:臺科資工所、逢甲資工系畢業。
技術專長:OSINT、滲透測試、網站開發、專業易懂教育訓練。
證照書籍:OSCP、OSCE³、著《資安這條路:領航新手的 Web Security 指南》。
教學經驗:60+ 企業教學經驗、指導過上百位學員。
教學特色:新手友善、耐心指導、擅長圖解(流程圖、心智圖)引導學習。
社群經驗:目前經營全臺資安社群 CURA,曾任臺科資安社社長、逢甲黑客社社長。
社群交流:LINE 社群《飛飛的資安大圈圈》,即時分享經驗、鼓勵交流。
社群分享:FB 粉專《資安這條路,飛飛來領路》,分享文章與圖卡整理。
個人網站:feifei.tw 分享資安技術文章;pbtw.tw 分享 AI 相關應用;ssdlc.feifei.tw 分享軟體安全開發流程文章。