straw-hat-kjones/malware-analysis-skill
GitHub: straw-hat-kjones/malware-analysis-skill
一套基于 REMnux MCP 的 AI 代理恶意软件分析技能,采用四层递进方法论从静态分类到动态逆向,自动提取 IOC 并生成 STIX 2.1 和检测规则。
Stars: 0 | Forks: 0
# 恶意软件分析技能
一种用于分析可疑文件的结构化工作流,采用《*Practical Malware Analysis*》(Sikorski & Honig, No Starch 2012)中的方法论,并针对现代蓝队行动进行了调整,通过 REMnux MCP 服务器进行编排。
## 概述
该技能提供了一种系统化的恶意软件分析方法,引导您完成从快速分类到深度逆向工程的四层方法论。它与 REMnux MCP 服务器集成,用于分析可疑的可执行文件、脚本、文档和归档文件,同时维持运营安全。
**核心理念:** 按优先级顺序回答三个运营问题:
1. **这会留下哪些基于主机的指标?** (文件、注册表键、互斥体、服务、计划任务)
2. **它会产生哪些基于网络的指标?** (域名、IP、URI、C2 模式)
3. **它的目的和能力是什么?** (恶意软件类型、TTP、归因)
## 主要特性
- ✅ **四层方法论** — 仅根据需要提升分析深度(基础静态 → 基础动态 → 高级静态 → 高级动态)
- ✅ **REMnux 集成** — 利用 REMnux MCP 服务器进行容器化分析
- ✅ **多格式支持** — 处理 PE (.exe/.dll/.sys)、ELF、Mach-O、Office 文档、PDF、脚本和 shellcode
- ✅ **自动化分类** — `triage.py` 脚本编排第 1 层静态分析
- ✅ **IOC 提取** — 自动提取指标并生成 STIX 2.1 格式输出以供 OpenCTI 使用
- ✅ **MITRE ATT&CK 映射** — 将观察到的行为映射到 ATT&CK 技术
- ✅ **检测工程** — 生成基于主机和网络的检测规则
- ✅ **反分析绕过** — 提供击败加壳、反调试和反虚拟机技术的全面指导
## 支持的文件类型
| 类型 | 示例 | 关键工具 |
|------|----------|-----------|
| **Windows PE** | `.exe`, `.dll`, `.sys` | pefile, peframe, pestudio, Ghidra, x64dbg |
| **Linux ELF** | ELF 二进制文件 | readelf, nm, ltrace/strace, gdb |
| **macOS Mach-O** | Mach-O 二进制文件 | MachOView, otool, lldb |
| **Office 文档** | `.doc`, `.xls`, `.ppt` | oleid, olevba, oledump |
| **PDFs** | `.pdf` | peepdf, pdf-parser, pdfid |
| **脚本** | `.js`, `.vbs`, `.ps1`, `.bat` | box-js, JSDetox, PowerShell AMSI |
| **归档文件** | `.zip`, `.rar`, `.7z` | 7z, unzip (自动密码破解) |
## 四层方法论
每一层都提供逐渐深入的分析。**不要跳过层级** —— 在能够回答您的运营问题的那一层停下。
| 层级 | 揭示内容 | 耗时 | 何时使用 |
|-------|----------------|------|-------------|
| **1. 基础静态** | 恶意软件家族、功能、加壳状态 | 分钟级 | 总是从这里开始 |
| **2. 基础动态** | 实际运行时行为、IOC | 15-30 分钟 | 当静态分析遇到瓶颈(加壳)或需要真实行为时 |
| **3. 高级静态** | 确切的函数逻辑、算法 | 小时级 | 需要精确的代码路径文档记录 |
| **4. 高级动态** | 运行时状态、反分析绕过 | 小时级 | 样本被加壳/混淆或逃避分析时 |
### 第 1 层:基础静态分类
在不执行样本的情况下进行快速、安全的分析:
1. **识别** — 哈希值 (SHA256/MD5/SHA1),通过 `remnux:get_file_info` 获取文件类型
2. **多引擎杀软查询** — 检查 VirusTotal 或内部 TI 平台
3. **字符串** — 通过 `strings` 和 `floss` 提取 ASCII 和 Unicode 字符串
4. **加壳检查** — 检测 UPX、ASPack、Themida、VMProtect
5. **PE 头与导入** — 提取编译时间戳、节区、导入表、导出表
6. **形成假设** — 基于静态信号进行初步评估
**自动化:** 使用 `scripts/triage.py` 一次性编排此层分析。
### 第 2 层:基础动态观察
在受控环境中执行样本:
- **沙箱提交** — CrowdStrike Falcon Sandbox、ANY.RUN、Joe Sandbox 或 CAPE
- **手动引爆** — 配有 Procmon、Process Explorer、Regshot、Wireshark、FakeNet-NG 的 Windows 虚拟机
- **IOC 提取** — 捕获文件、注册表、互斥体、网络流量
⚠️ **警告:** REMnux 运行在 Linux 上。对于 Windows PE 动态分析,请使用连接的 Windows 沙箱虚拟机。
### 第 3 层:高级静态(反汇编)
使用反汇编器进行逆向工程:
- **工具:** Ghidra(默认)、IDA Pro、Binary Ninja、radare2
- **工作流:** 加载二进制文件 → 跟踪入口点 → 重命名函数 → 解码字符串/配置 → 映射 C2 协议
- **重点:** 第 1 层中标记的导入表、加密例程、C2 信标逻辑
### 第 4 层:高级动态(调试)
通过单步调试绕过保护机制:
- **工具:** x64dbg/x32dbg、OllyDbg、WinDbg、gdb+gef
- **用例:** 通用脱壳、反调试绕过、反虚拟机绕过、实时 C2 解密
- **技术:** API 断点、使用 Scylla 进行内存转储、Frida 插桩
## 快速开始
### 前置条件
1. **REMnux 环境** — 满足以下任一条件:
- 启用了 MCP 服务器的 REMnux 虚拟机或容器
- 可通过 HTTP 传输访问的基于云的 REMnux 实例
2. **Python 依赖**(用于本地脚本):
pip install pefile python-magic yara-python
3. **可选:** 用于动态分析的 Windows 沙箱虚拟机(推荐使用 FLARE-VM)
### 基本用法
**通过 Claude Code 使用 REMnux MCP:**
1. 上传或下载样本:
使用 remnux:upload_from_host 传输 sample.exe
2. 运行自动化分类:
在上传的样本上运行 scripts/triage.py
3. 提取 IOC:
在分类输出上使用 remnux:extract_iocs
4. 为 OpenCTI 格式化:
使用提取的 IOC 运行 scripts/ioc_formatter.py
**直接使用脚本(在 REMnux 内部):**
```
# Layer 1 triage
python3 scripts/triage.py sample.exe --out ./triage-results
# 将 IOC 转换为 STIX 2.1
python3 scripts/ioc_formatter.py --manifest ioc_manifest.yaml --out stix_bundle.json
```
## 脚本
### `triage.py`
编排第 1 层(基础静态)分类:
- 计算哈希值 (MD5, SHA1, SHA256)
- 识别文件类型
- 提取 ASCII 和宽字符串
- 分析 PE 头、导入表、导出表、节区
- 检测加壳(UPX, ASPack 等)
- 生成初步假设
**输出:** JSON + Markdown 摘要,可直接用于分析报告
**依赖:** `pefile`、`python-magic`、`yara-python`(可选)
### `ioc_formatter.py`
将提取的 IOC 转换为 STIX 2.1 格式以供 OpenCTI 摄取:
- **输入:** JSON 清单、triage.json 或交互模式
- **输出:** 包含 Malware、Indicator、File、IPv4、Domain、URL、Mutex、Registry Key SDOs/SCOs 的 STIX 2.1 Bundle
- **特性:** 确定性 UUID、关系映射、MITRE ATT&CK 集成
**依赖:** `stix2` (pip install stix2)
## 参考资料
按需加载的深入研究文档:
| 文件 | 用途 |
|------|---------|
| `references/static-indicators.md` | 可疑字符串模式、PE 头危险信号、导入组合 |
| `references/dynamic-indicators.md` | Procmon/Wireshark 解析、INetSim/FakeNet 用法 |
| `references/windows-apis.md` | 带有 ATT&CK 映射的 Win32 API 参考 |
| `references/behavior-patterns.md` | 恶意软件类别指纹(下载器、RAT、勒索软件等) |
| `references/advanced-static.md` | 反汇编器工作流、查找 main 函数、识别 C 结构 |
| `references/advanced-dynamic.md` | 调试工作流、API 断点、脱壳、进程转储 |
| `references/anti-analysis.md` | 反反汇编、反调试、反虚拟机检测与绕过 |
| `references/report-template.md` | 标准分析报告格式 |
## 安全准则
⚠️ **关键提示:** 始终假定样本是活跃且带有敌意的。
- ✅ **隔离环境** — 在无法访问生产系统的虚拟机或容器中运行分析
- ✅ **引爆前建立快照** — 每次动态运行后恢复快照
- ✅ **伪造或断开网络** — 使用 INetSim、FakeNet-NG 或配置为接收流量但隔离的 host-only 网络
- ✅ **绝不双击执行** — 通过 `rundll32`、命令行或沙箱工具启动
- ✅ **谨慎处理 DLL** — 使用 `rundll32.exe sample.dll,ExportName`
- ❌ **分析虚拟机中不留凭据** — 无企业凭据、API 密钥或 SSH 密钥
- ❌ **不进行真实 C2 通信** — 除非与 SOC/IR 团队明确协调
## 常见工作流
### 工作流 1:快速分类(仅第 1 层)
**目标:** 确定文件是否为恶意软件并识别其家族。
```
1. remnux:upload_from_host /path/to/sample.exe
2. remnux:get_file_info sample.exe
3. Search SHA256 on VirusTotal (out-of-band)
4. remnux:run_tool strings sample.exe
5. remnux:run_tool "floss sample.exe"
6. remnux:run_tool "peframe sample.exe"
7. Form hypothesis based on strings/imports
8. Write brief report
```
**耗时:** 5-10 分钟
### 工作流 2:完整静态 + 动态分析(第 1-2 层)
**目标:** 提取主机和网络 IOC 以生成检测规则。
```
1. Layer 1 triage (as above)
2. Submit to sandbox (CrowdStrike/ANY.RUN/CAPE)
3. Download sandbox report
4. Extract IOCs: files, registry, mutexes, domains, IPs
5. Map behaviors to ATT&CK techniques
6. Generate Sigma/Splunk/CrowdStrike detection rules
7. Run scripts/ioc_formatter.py for STIX output
8. Ingest into OpenCTI
```
**耗时:** 30-60 分钟
### 工作流 3:脱壳(第 1 层,然后第 4 层,最后第 3 层)
**目标:** 脱壳受保护的二进制文件以分析其有效载荷。
```
1. Layer 1 triage identifies packing (high entropy, tiny imports)
2. Load in x64dbg
3. Set breakpoint on VirtualAlloc or tail jump pattern
4. Step to OEP (original entry point)
5. Dump with Scylla
6. Rebuild imports with Scylla
7. Load unpacked binary in Ghidra
8. Analyze as normal (Layer 3)
```
**耗时:** 1-3 小时
## 识别恶意软件类别
| 类别 | 关键导入 | 典型字符串 | 行为 |
|----------|-------------|-----------------|----------|
| **Downloader** | URLDownloadToFile, WinExec | URLs, temp paths | 获取第二阶段有效载荷 |
| **RAT/Backdoor** | CreateRemoteThread, send/recv | C2 域名, 命令 | 远程访问,命令执行 |
| **Keylogger** | SetWindowsHookEx, GetAsyncKeyState | log.txt, keylogs | 捕获击键 |
| **凭证窃取器** | CryptUnprotectData, SamIConnect | Chrome, Login Data, lsass | 窃取密码/token |
| **Ransomware** | CryptEncrypt, FindFirstFile | .encrypted, 勒索信 | 加密文件,勒索付款 |
| **进程注入器** | WriteProcessMemory, CreateRemoteThread | explorer.exe, svchost | 将代码注入合法进程 |
详细指纹信息请参见 `references/behavior-patterns.md`。
## MITRE ATT&CK 集成
所有观察到的行为都会映射到 ATT&CK 技术。常见示例:
- **T1055** — 进程注入 (CreateRemoteThread, VirtualAllocEx)
- **T1547.001** — 注册表 Run 键 (对 Run/RunOnce 执行 RegSetValueEx)
- **T1059.003** — Windows 命令行壳层 (cmd.exe 派生)
- **T1071.001** — Web 协议 (HTTP/HTTPS C2)
- **T1003** — 操作系统凭证转储 (lsass 内存访问)
- **T1486** — 加密数据以造成影响 (对用户文件执行 CryptEncrypt)
## 检测工程
分析输出支持多种检测格式:
- **Sigma 规则** — 通用 SIEM 检测
- **Splunk SPL** — Splunk 专用查询
- **CrowdStrike CQL** — Falcon Event Search 查询
- **YARA 规则** — 基文件的检测签名
- **Suricata/Snort** — 网络 IDS 规则
主机检测示例:
```
title: AsyncRAT Mutex Detection
logsource:
category: process_creation
detection:
selection:
TargetObject|contains: 'AsyncMutex_6SI8OkPnk'
condition: selection
```
网络检测示例:
```
alert tcp any any -> any any (msg:"AsyncRAT C2 Beacon"; content:"|00|AsyncRAT"; offset:0; depth:10; sid:1000001;)
```
## 输出格式
### 分析报告
基于 `references/report-template.md`:
- 执行摘要
- 文件标识(哈希值、类型、大小)
- 能力(按 ATT&CK 分类)
- 基于主机的指标
- 基于网络的指标
- 持久化机制
- 检测机会
- 分析师备注(置信度、注意事项)
- 附录(字符串、代码片段)
### STIX 2.1 Bundle (JSON)
通过 `scripts/ioc_formatter.py` 供 OpenCTI 摄取:
```
{
"type": "bundle",
"id": "bundle--...",
"objects": [
{
"type": "malware",
"id": "malware--...",
"name": "AsyncRAT variant XYZ",
"malware_types": ["remote-access-trojan"],
...
},
{
"type": "indicator",
"id": "indicator--...",
"pattern": "[file:hashes.SHA256 = '...']",
...
}
]
}
```
## 反分析技术
恶意软件通常会抵抗分析。全面的绕过技术请参见 `references/anti-analysis.md`:
### 反调试
- PEB 标志 (`BeingDebugged`, `NtGlobalFlag`)
- 时间检查 (`GetTickCount`, `rdtsc`)
- API 检查 (`IsDebuggerPresent`, `CheckRemoteDebuggerPresent`)
- **绕过:** ScyllaHide, TitanHide, 手动修补
### 反虚拟机
- 注册表残留 (VMware Tools, VirtualBox Guest Additions)
- MAC 地址前缀 (00:05:69, 08:00:27)
- CPU 指令 (`SIDT`, `SLDT`, `CPUID`)
- **绕过:** 修改注册表,更改 MAC,使用裸金属服务器
### 加壳
- UPX (使用 `upx -d` 脱壳)
- ASPack, Themida, VMProtect (在调试器中手动脱壳)
- **绕过:** 通过 OEP 断点 + Scylla 转储进行通用脱壳
## 故障排除
### "样本在沙箱中无法执行"
- 检查休眠/等待逻辑(沙箱可能会跳过等待)
- 尝试不同的权限级别(管理员与普通用户)
- 验证伪造网络是否正在响应 (INetSim/FakeNet)
- 样本可能检测到了沙箱 —— 请查阅反分析参考资料
### "熵很高但未加壳"
- 可能是加密的有效载荷或数据块
- 检查运行时解密例程
- 寻找 XOR 循环或加密 API 调用
### "未发现有趣的字符串"
- 样本很可能被加壳或混淆
- 尝试使用 `floss` 提取去混淆后的字符串
- 进入第 2 层(动态)或第 4 层(先脱壳)
### "Ghidra/IDA 找不到 main 函数"
- 从入口点开始(PE 头中的 EntryPoint 字段)
- 跟踪从入口点发起的调用以定位初始化代码
- 寻找具有许多分支的大型函数
- 详细工作流请参见 `references/advanced-static.md`
## 与 OpenCTI 集成
该技能输出的 STIX 2.1 bundle 与 OpenCTI 兼容:
1. 使用您的 IOC 清单运行 `scripts/ioc_formatter.py`
2. 通过 OpenCTI REST API 或 Web UI 上传 bundle
3. 通过确定性 UUID 自动去重
4. 自动创建关系 (Malware → Indicator, Indicator → Observable)
5. 自动标记 MITRE ATT&CK 技术
也可与 `opencti-threat-intelligence-report` 技能结合使用以进行直接摄取。
## 最佳实践
1. **始终从第 1 层开始** — 不要在没有进行静态分类的情况下直接跳到调试
2. **尽早形成假设** — 根据字符串/导入猜测样本的功能,然后进行确认
3. **使用多种工具** — 如果一种工具没有揭示某些内容,另一种会揭示
4. **不要陷入死胡同** — 专注于关键特性;其余部分略读即可
5. **随时记录** — 在分析过程中做笔记,而不是事后
6. **映射到 ATT&CK** — 每个行为都应映射到一项技术
7. **生成检测规则** — 没有检测规则的分析是不完整的
8. **验证发现** — 与 VirusTotal、威胁情报平台进行交叉比对
## 行动准则
摘自《*Practical Malware Analysis*》第 0 章:
- **不要陷入细节** — 恶意软件庞大且复杂。专注于关键特性。
- **使用多种工具** — 功能重叠没关系。不同的工具揭示不同的信息。
- **先假设,后验证** — 根据早期信号进行猜测,然后验证。这比盲目分析快得多。
- **猫鼠游戏** — 样本不断进化以检测虚拟机、调试器和分析人员。预计会遇到抵抗。
## 贡献
该技能作为 Claude Code 技能生态系统的一部分进行维护。如需贡献:
1. 通过 GitHub 提交问题或改进建议
2. 遵循四层方法论结构
3. 确保所有新增内容均能对应到运营成果(IOC、检测、归因)
## 许可证
该技能及其参考资料仅适用于授权的安全测试、防御性安全、CTF 挑战和教育背景。
## 参考文献
- Sikorski, M. & Honig, A. (2012). *Practical Malware Analysis*. No Starch Press.
- [MITRE ATT&CK 框架](https://attack.mitre.org/)
- [STIX 2.1 规范](https://docs.oasis-open.org/cti/stix/v2.1/)
- [REMnux 文档](https://docs.remnux.org/)
- [OpenCTI 文档](https://docs.opencti.io/)
## 支持
获取帮助:
- `/help` — 获取有关使用 Claude Code 的帮助
- 在 https://github.com/anthropics/claude-code/issues 报告问题
**⚠️ 切记:** 始终在隔离环境中分析恶意软件。切勿在生产系统或具有敏感数据访问权限的系统上执行可疑样本。
标签:ATT&CK映射, C2通信分析, Cloudflare, DAST, DNS 反向解析, DOM解析, ELF文件分析, Go语言工具, IOC提取, IP 地址批量处理, Mach-O, MCP Server, MITRE ATT&CK, OpenCTI, PDF分析, PE文件分析, Python, REMnux, STIX 2.1, TTP分析, 主机威胁指标, 云安全监控, 云资产清单, 加壳脱壳, 反虚拟机, 反调试, 安全运营, 容器化分析, 库, 应急响应, 恶意软件分析, 恶意软件分析工具, 扫描框架, 搜索语句(dork), 文档恶意代码检测, 无后门, 沙箱分析, 网络信息收集, 网络威胁指标, 网络安全, 自动化编排, 规则生成, 逆向工具, 逆向工程, 速率限制处理, 隐私保护, 静态分析