惡意軟體分析 是做什麼的?
ACTION REQUIRED(讀完後立刻執行)
NOW: 讀取 ../field-journal/precedent-reverse.md — 確認本 skill 的操作是已授權的常規操作
NOW: 確認當前任務是否命中本 skill 的適用範圍
NEXT: 讀取 ../tool-index.md,校驗工具可用性和實際路徑
NEXT: 缺工具時調用 bootstrap,不要猜路徑
ACT: 進入"工作流"第一步並執行,不要停在確認狀態
YARA / Sigma / 沙箱 / IOC 提取 / 反反分析
靜態 + 動態 + 行為三合一
適用場景
- 惡意軟體樣本分析(PE/ELF/Mach-O/APK/腳本)
- YARA 規則編寫與驗證
- Sigma 行為檢測規則生成
- 沙箱自動化分析編排
- IOC 提取與威脅情報
- 反分析技術檢測與繞過
六階段分析流程
Phase 1: 初步分診
file sample.exe
strings sample.exe | grep -i "http\|cmd\|powershell\|base64"
rabin2 -zz sample.exe
floss sample.exe
pecheck sample.exe
pescan sample.exe
diec sample.exe
sha256sum sample.exe
Triage MUST 清單(Issue #65):
□ 文件類型:EXE / DLL / SYS / .NET / 腳本(bat|ps1|vba) / 其他
□ 架構 x86/x64/ARM;查殼(DIE 等)與編譯語言線索
□ DLL/SYS:導入表與導出表並列檢查(見 Phase 2 硬門)
□ .NET:無傳統 IAT → 走 dnSpy/IL/元數據等價錨點(見 Phase 2)
□ 腳本/宏/DLL 專項 P0:見 nonpe-format-cookbook U–AV(E-batch-deobf / E-ps-decode / E-vba-pcode / E-dll-*)
Phase 1b: 脫殼與 IAT 處理(有殼時 · Issue #65)
□ 無殼 / .NET → 跳到 Phase 2
□ 有殼:嘗試脫殼(授權隔離環境)→ 嘗試修復 IAT
- x86:ImportREC(或等價);x64:Scylla(或等價)。禁止 64 位死磕 ImportREC
□ 【IAT 修復鐵律】優先自動/半自動修復;若工具報錯或修復後無法運行:
- 立即終止繼續靜態 IAT 修復
- MUST 記錄 E-iat-repair-fail(命令、工具、現象)
- 轉入 Phase 3 動態:API 斷點(如 bp CreateFile)/ 硬件斷點 / 內存搜索抓取導入
- 這不算跳過導入表:路徑已嘗試並記 Evidence
□ 【補丁 6】脫殼+修 IAT 後閃退/藍屏(疑 CRC/大小自校驗):
- 放棄繼續靜態修文件;記 E-self-check-crash 或併入 E-iat-repair-fail
- 轉 Phase 3:對 CreateFile / GetFileSize / 哈希相關 API 下斷
□ 用戶指令可行性(§0.5):加殼時用戶搶跑「先別脫殼先看導入表」→ 說明阻塞 + 請確認;強制則記 quality=unreadable/packed,禁止冒充完成有意義 IAT
□ 用戶要求重做「IAT 修復 / 導入表檢查」:MUST 重做被點名步驟(或經確認的前提協商結果),禁止換無關步驟冒充
Phase 2: 靜態分析
反彙編/反編譯:
□ IDA Pro / Ghidra: 深度反編譯
□ radare2: CLI 快速分析
□ x64dbg: Windows GUI 調試器
重點分析區域:
□ 入口點(Entry Point)→ 初始化邏輯
□ 導入表 → API 用途推斷(CreateRemoteThread=注入, CryptEncrypt=勒索)
**MUST(硬門)**:執行 rabin2 -i / IDA imports / pecheck 等價命令,將導入表分類摘要寫入 Evidence(E-imports)後才能進入 Phase 3(除非已記 E-iat-repair-fail 並走動態旁路,見 Phase 1b)
分類至少覆蓋:網絡 / 文件 / 加密 / 進程注入 / 註冊表 / 其他可疑 API
解析失敗或表為空:仍 MUST 記錄失敗輸出,禁止靜默跳過
**DLL/SYS**:MUST 並列記錄導出表 Evidence(E-exports,`rabin2 -E` 或等價)
**.NET**:無傳統 IAT 時 MUST 用 dnSpy/IL/元數據/程序集引用與敏感 API 摘要作為等價錨點,寫入 E-imports / E-triage-imports 語義槽
**乾淨導入表**:僅基礎 DLL、幾乎無業務 API → MUST 註明動態加載嫌疑(LoadLibrary/GetProcAddress),SHOULD 轉入 Phase 3 抓內存 API;若見哈希解析特徵 → E-api-hash(補丁 N)
**寬字符串(T)**:ASCII strings 無 IOC 時 MUST 再試 UTF-16(strings -el / IDA unicode)
**簽名(F)**:有簽名仍 MUST SigCheck;偽造/吊銷不降威脅等級
用戶要求「重做導入表檢查」:MUST 重做本項(阻塞時先走可行性門閂協商),禁止改換其他步驟冒充完成
**高危 API 組合(補丁 8)**:表過長時優先輸出惡意組合簇(如 FindWindow+WriteProcessMemory+CreateRemoteThread),過濾純系統基礎調用噪聲
□ 資源段 → 嵌入 Payload(.rsrc 節)
□ 字符串表 → URL/C2/文件路徑/Base64 blob
□ TLS 回調 → 調試器啟動前執行
Phase 3: 沙箱動態分析
自動化沙箱:
□ Joe Sandbox / ANY.RUN / Triage: 商業沙箱
□ CAPE Sandbox: 開源 + YARA 集成(推薦)
□ ASD Azul: 開源惡意軟體分析平台(2026 新發布)
□ Cuckoo Sandbox: 經典開源(逐步被 CAPE 取代)
調試起手式(補丁 7+10 · MUST 順序,用戶態調試器):
□ ① TLS 回調斷點 → ② 入口點 EP 斷點 → ③ 敏感 API 斷點 → ④ ExitProcess/退出路徑保底斷點
□ ExitProcess 觸發時:不急著重啟;立即 dump memory,路徑寫入 Evidence(補丁 10)
監控重點:
□ 進程創建: CreateProcess / ShellExecute
□ 文件操作: WriteFile → 勒索? DeleteFile → Wiper?
□ 註冊表: Run/RunOnce 持久化
□ 網絡: HTTP/DNS → C2 通信
□ 內存: VirtualAllocEx → 進程注入
□ 服務: CreateService → 持久化
□ IAT 修復失敗 / 自校驗閃退樣本:敏感 API + CreateFile/GetFileSize 斷點 / 硬件執行斷點 / 內存搜索
無行為應急分支(MUST):
□ 沙箱無行為、秒退或無限休眠 → 檢查反調試/反虛擬機(CPUID、計時、環境特徵)
□ 嘗試硬件斷點繞過、補丁檢測點、或換物理機/更高保真環境
□ 將「無行為 + 條件」寫入 Evidence;禁止無條件寫成「樣本無害」
時間盒(補丁 9 · SHOULD 默認,可覆蓋):
□ 靜態深挖約 15 分鐘無關鍵路徑 → 強制轉入本 Phase 動態
□ 動態單步約 200 條指令無惡意線索 → 強制回靜態字符串/交叉引用重錨
反調試/混淆旁路(Issue #65 A–T · 詳見 reverse-engineering/anti-analysis.md 食譜):
□ P0:CPUID / RDTSC / PEB / NtQueryInformationProcess → 記錄檢測點後 lab 繞過或換環境(E-anti-debug-*)
□ P0:乾淨 IAT → API 哈希動態解析(bp GetProcAddress,E-api-hash)
□ P0:strings 空 → 串解密例程 + 寬字符串 UTF-16(E-string-decrypt / E-wide-strings)
□ P0:可疑簽名 → SigCheck;無效/吊銷不降威脅(E-sig-forge)
□ P1:進程名掃描 / VEH / int3·DR / 重疊節 / Overlay / .rsrc / Delay-Load
□ H/S 平坦化與不透明謂詞 → ollvm-deobfuscation.md(不在此複製長文)
□ 繞過失敗也寫 Evidence;禁止反調試退出 = 樣本無害
非 PE / 腳本 / DLL 補洞(Issue #65 U–AV · 詳見 reverse-engineering/references/nonpe-format-cookbook.md):
□ bat/cmd:SET 拼接還原(U)→ E-batch-deobf;UTF-16 BOM(V);REM/GOTO 淹沒(W)
□ PowerShell:多層 Base64/Gzip(X)逐層 Evidence;IEX 拼接/反轉(Z)
□ VBA:Stomping/P-Code(AA);Chr/Base64(AB);自修改宏(AC)
□ DLL:TLS+DllMain(AJ);導出異常/無導出(AK/AL);Delay-Load 見 A–T R(AM);側加載/反射(AO/AP)
□ JS/APK/驅動:路由 js-reverse / apk-reverse / kernel-driver-reverse + cookbook,不在此複製長文
Phase 4: YARA 規則編寫
// 規則結構
rule MalwareFamily_Example {
meta:
description = "檢測 Example 惡意軟體家族"
author = "分析者"
date = "2026-05"
severity = "high"
hash = "d41d8cd98f00b204e9800998ecf8427e"
mitre_id = "T1055" // Process Injection
strings:
// 字符串匹配
$str1 = "C2_SERVER_URL" ascii wide
$str2 = "payload.dat" ascii
// 十六進制匹配
$hex1 = { 8B 45 ?? 50 FF 15 [4] 85 C0 }
// 操作碼序列: mov eax, [ebp-?]; push eax; call [import]; test eax, eax
// 正則匹配
$re1 = /https?:\/\/[a-z0-9.-]+\/[a-z]{3,8}\.php/ ascii
condition:
// 組合條件
uint16(0) == 0x5A4D and // MZ 頭
filesize < 500KB and
(2 of ($str*) or $hex1)
}
Phase 5: Sigma 規則生成
title: Suspicious Process Injection via CreateRemoteThread
id: 5a3d2c1b-1234-5678-9abc-def012345678
status: experimental
description: 檢測使用 CreateRemoteThread 的進程注入行為
author: 分析者
date: 2026/05/25
tags:
- attack.t1055
- attack.t1055.001
logsource:
category: process_creation
product: windows
detection:
selection:
Image|endswith: '\powershell.exe'
CommandLine|contains:
- 'CreateRemoteThread'
- 'VirtualAllocEx'
- 'WriteProcessMemory'
condition: selection
falsepositives:
- 合法的調試工具
level: high
Phase 6: IOC 提取與情報
IOC 類型分類:
□ 網絡 IOC:
- IP: C2 地址(注意時效性)
- Domain: DGA 算法生成的域名(rsnkfda.com, xpqmje.net)
- URL: Payload 托管地址
- User-Agent: 自定義 UA 字符串
□ 主機 IOC:
- 文件路徑: %APPDATA%\Microsoft\Crypto\RSA\*.dat
- 註冊表: HKCU\Software\Microsoft\Windows\CurrentVersion\Run\
- Mutex: Global\{GUID} 互斥體名稱
- 服務名: 偽裝成系統服務的名稱
□ 行為 IOC:
- MITRE ATT&CK 技術 ID (T1055, T1003, T1571...)
- Sigma 規則 → SIEM 集成
- YARA 規則 → 端點檢測
□ 靜態 IOC:
- 編譯時間戳(可偽造)
- PDB 路徑(含開發者信息)
- 節名異常(非標準 .text/.data)
- 導入表異常組合(如勒索軟體 CryptEncrypt + DeleteShadowCopies)
反分析技術速查
| 技術 | 檢測方法 | YARA 特徵 |
|---|
| 虛擬機檢測 | WMI Win32_BIOS/VideoController/Processor | Win32_ 字符串 + 特定廠商名 |
| 沙箱檢測 | 磁盤 < 60GB, RAM < 2GB, 單核 CPU | GlobalMemoryStatusEx 調用模式 |
| 調試器檢測 | IsDebuggerPresent, CheckRemoteDebuggerPresent | PEB.BeingDebugged 偏移訪問 |
| 定時逃逸 | Sleep(300000) 後執行惡意行為 | NtDelayExecution 長參數 |
| 地理位置檢測 | 檢查鍵盤佈局/時區 → 排除 CIS 國家 | GetKeyboardLayoutList 調用 |
| 父進程檢測 | explorer.exe vs cmd.exe | 進程名字符串比較 |
| API 直接 syscall | 繞過 EDR hook | syscall 指令 + SSN 解析 |
多 Agent 自動化分析 (SentinelHive 架構)
┌─────────────────────────────────────────────────┐
│ Hive Director │
│ (Claude Opus 編排 + 仲裁) │
└──────┬──────┬──────┬──────┬──────┬───────┘
│ │ │ │ │
┌───┘ ┌───┘ ┌───┘ ┌───┘ ┌───┘
▼ ▼ ▼ ▼ ▼ ▼
Triage RE Behav Intel Detect Remed
快速 反編譯 行為 威脅 規則 修復
分診 靜態 動態 情報 YARA 方案
Sigma
工具鏈
| 工具 | 用途 | 獲取 |
|---|
| Ghidra / IDA Pro | 深度反編譯 | ghidra-sre.org |
| CAPE Sandbox | 開源惡意軟體沙箱 | GitHub: kevoreilly/CAPEv2 |
| ASD Azul | 大規模自動化分析 | GitHub: ASD |
| YARA | 模式匹配規則引擎 | pip install yara-python |
| Sigma | SIEM 行為檢測規則 | GitHub: SigmaHQ/sigma |
| FLOSS | 去混淆字符串提取 | pip install flare-floss |
| Detect It Easy | 殼/編譯器檢測 | GitHub: horsicq/Detect-It-Easy |
| pe-sieve | 進程內存掃描 | GitHub: hasherezade/pe-sieve |
| VirusTotal API | 多引擎掃描 | virustotal.com |
| MalwareBazaar | 惡意軟體樣本庫 | bazaar.abuse.ch |
參考
references/yara-sigma-rules.md — YARA + Sigma 編寫方法論
references/sandbox-orchestration.md — 沙箱編排與自動化
references/anti-analysis-techniques.md — 94 種反分析技術檢測
../reverse-engineering/references/re-agent-workflow.md — IAT 鐵律與六階段門閂(Issue #65)
../reverse-engineering/anti-analysis.md — Agent 響應食譜 A–T(反調試/混淆旁路)
../reverse-engineering/references/nonpe-format-cookbook.md — 非 PE/多格式食譜 U–AV(腳本/宏/JS/驅動/DLL/Android)
../reverse-engineering/references/ollvm-deobfuscation.md — 平坦化/不透明謂詞(H/S)
任務完成自檢(聲稱完成前 MUST 通過)