bitbug0x55AA/dumpex
GitHub: bitbug0x55AA/dumpex
一款快速、轻量的 Windows Minidump 文件 DFIR 取证与威胁狩猎分析引擎。
Stars: 17 | Forks: 5
# dumpex
**dumpex** 是一款用于分析 Windows minidump (`.DMP`) 文件的命令行 DFIR/CTF 取证工具。它通过解析 minidump 结构来提取系统信息、内存布局、已加载模块和线程状态——并包含一个 TTP 检测引擎,用于追踪进程注入、模块篡改、C2 命名管道、Cobalt Strike beacon 以及编码/混淆 payload 的迹象。
## 功能
- **侦察** — 从 dump 文件中提取系统信息、PID、PEB、已加载模块、线程和内存区域
- **TTP 追踪** — 检测进程注入、进程掏空、模块篡改、命名管道 C2、Cobalt Strike beacon 产物以及编码/混淆 payload
- **告警分析** — 生成以线程 ID、内存地址或字符串匹配为锚点的重点报告
- **差异比对** — 比较两个 dump 文件以识别新增/移除的模块、线程和内存区域(包括 RWX 属性的更改)
- **提取** — 转储原始字节或从特定内存区域提取字符串,支持正则表达式过滤
- **规则驱动** — 检测模式外置在 `rules.yaml` 中;无需修改代码即可扩展检测覆盖范围
- **结构化输出** — 将结果导出为 JSON、CSV 或纯文本格式,便于供下游工具和报告使用
## 调查背景
dumpex 是更广泛的 DFIR 调查体系中的 **minidump 分析层**。它填补了全内存分析工具(Volatility、MemProcFS)和基于日志的平台(Splunk、Sysmon)未能覆盖的特定空白:
| 证据来源 | 工具 | 解决的问题 |
|---|---|---|
| 完整 RAM 镜像 | Volatility 3 / MemProcFS | 整个系统上曾经运行过什么 |
| Windows 事件日志 | Splunk + Sysmon | 发生了什么、何时发生以及从何处发起 |
| **进程 .DMP 文件** | **dumpex** | **在捕获时特定进程的内存中有什么** |
相比完整的内存镜像,Minidump 的产生场景要广泛得多——包括由 EDR 触发的捕获、Windows 错误报告 (WER)、崩溃转储,以及攻击者通过 `MiniDumpWriteDump` 生成的转储。当无法获取完整的 RAM 镜像时,进程的 `.DMP` 往往是唯一的内存取证痕迹。
有关展示 dumpex 如何在整个事件响应生命周期中与 Volatility、Sysmon 和 Splunk 集成的完整调查工作流:
→ **[蓝队追踪实战笔记](https://github.com/bitbug0x55AA/Blue_Team_Hunting_Field_Notes/tree/main)**
参见:[`3.2.06 Minidump 分析工作流`](https://github.com/bitbug0x55AA/Blue_Team_Hunting_Field_Notes/blob/main/03_DFIR_Analysis/3.2_Investigation_Workflow/3.2.06_Minidump_Analysis.md) — 何时使用 dumpex,它如何与 Sysmon 告警关联,以及如何从内存发现回溯到基于日志的调查。
## 环境要求
- Python 3.10+
- [`minidump`](https://github.com/skelsec/minidump) 库
```
pip install minidump
```
可选(用于 YAML 规则文件和 YARA 扫描):
```
pip install pyyaml yara-python
```
## 安装说明
```
git clone https://github.com/bitbug0x55AA/dumpex.git
cd dumpex
pip install -e .
```
包含 YAML 规则和 YARA 扫描在内的完整功能:
```
pip install -e ".[full]"
```
## 运行说明
### 侦察
```
# OS、host、process 和 CPU 摘要
python -m dumpex dump.DMP --sysinfo
# dump 中记录的 process ID
python -m dumpex dump.DMP --pid
# PEB (Process Environment Block) 信息
python -m dumpex dump.DMP --peb
# 列出已加载的 module
python -m dumpex dump.DMP --modules
# 列出 thread 并进行分析
python -m dumpex dump.DMP --threads
# 列出所有 memory region,可选按 protection 过滤
python -m dumpex dump.DMP --list
python -m dumpex dump.DMP --list --filter PAGE_EXECUTE
```
### TTP 追踪
```
# 检测 process injection(RWX region、unbacked executable memory)
python -m dumpex dump.DMP --hunt injection
# 检测 process hollowing 指标
python -m dumpex dump.DMP --hunt hollowing
# 检测 module stomping(合法 DLL 内存中的 IOC 字符串)
python -m dumpex dump.DMP --hunt stomping
# 检测可疑的 named pipe(C2 framework、横向移动工具)
python -m dumpex dump.DMP --hunt pipe
# 检测 Cobalt Strike beacon artifact
python -m dumpex dump.DMP --hunt cs-beacon --verbose
# 检测已编码或混淆的 payload(Base64、XOR、GZIP、high entropy)
python -m dumpex dump.DMP --hunt obfuscation
python -m dumpex dump.DMP --hunt obfuscation --verbose
# 对 dump 内存运行 YARA rule
python -m dumpex dump.DMP --hunt yara --yara-dir ./rules/yara/
# 运行所有 TTP 检查
python -m dumpex dump.DMP --hunt all --verbose
```
### 告警分析
```
# 锚定到 thread ID 的报告
python -m dumpex dump.DMP --report --report-tid 0x3a8
# 锚定到 memory address 的报告
python -m dumpex dump.DMP --report --report-addr 0xb120870000
# 在所有内存中搜索 string 并报告每个命中 region
python -m dumpex dump.DMP --report --report-string "192.168.1.1"
```
### 差异比对 (Diff)
```
# 完整 diff(module、thread、memory)
python -m dumpex before.DMP --diff after.DMP
# Diff 特定类别
python -m dumpex before.DMP --diff after.DMP --diff-mode modules
python -m dumpex before.DMP --diff after.DMP --diff-mode threads
python -m dumpex before.DMP --diff after.DMP --diff-mode memory
```
### 提取
```
# 从 memory region 提取 raw byte 到文件
python -m dumpex dump.DMP --extract 0x3a0000 --size 0x4e000 -o out.bin
# 从 region 提取 string,支持可选 regex filter
python -m dumpex dump.DMP --strings 0x3a0000 --size 0x4e000 --grep "http|cmd"
# 提取 Unicode string,最小长度为 4
python -m dumpex dump.DMP --strings 0x3a0000 --encoding unicode --min-len 4
```
### 结构化输出
```
# 将结果导出为 JSON
python -m dumpex dump.DMP --hunt all --json results.json
# 将结果导出为 CSV(单个文件或目录)
python -m dumpex dump.DMP --modules --csv modules.csv
python -m dumpex dump.DMP --hunt all --csv ./output/
# 保存所有控制台输出的纯文本副本
python -m dumpex dump.DMP --hunt all --txt report.txt
# 合并输出格式
python -m dumpex dump.DMP --hunt all --json results.json --csv ./output/ --txt report.txt
```
## 检测规则 (`rules.yaml`)
TTP 检测由 `rules.yaml` 驱动,该文件从相对于包目录的 `rules/rules.yaml` 路径加载(或默认从当前工作目录加载)。如果未找到该文件,则使用内置默认规则,因此该工具始终可以独立运行。
该规则文件控制以下内容:
| 部分 | 描述 |
|---|---|
| `suspicious_protections` | 被标记为可疑的内存保护标志(例如 `PAGE_EXECUTE_READWRITE`) |
| `stomping_whitelist` | 免除网络 IOC 检查以减少误报的 DLL |
| `stomping_ioc_patterns` | 在所有模块中检查的绝对可疑字符串 |
| `stomping_net_ioc_patterns` | 在白名单 DLL 之外被标记的网络 IOC 模式(URL、IP、API 名称) |
| `pipe_c2_context_patterns` | 在可疑管道名称附近的内存中进行匹配的模式 |
| `framework_pipes` | 映射到 C2 框架和 MITRE ATT&CK 技术 ID 的命名管道模式 |
要增加新的检测覆盖范围,只需编辑 `rules.yaml` ——无需修改代码。
YARA 规则从 `rules/yara/` 加载。将任何 `.yar` 文件放入该目录即可扩展扫描范围。
## MITRE ATT&CK 覆盖范围
| 技术 | ID | 检测方式 |
|---|---|---|
| 进程注入 | T1055 | RWX 内存区域、无文件支持的执行内存、隐藏的 PE 头 |
| 进程掏空 | T1055.012 | 镜像基址内存类型、MZ 头、模块列表不匹配 |
| 进程间通信:命名管道 | T1559.001 | Cobalt Strike postex、msagent、status、beacon 管道 |
| 代理:内部代理 | T1090.001 | CS SMB Beacon 点对点管道 |
| 远程服务:SMB/Windows 管理共享 | T1021.002 | PsExec、PAExec、RemCom、svcctl 管道 |
| 利用漏洞进行权限提升 | T1068 | PrintNightmare / Spooler 管道 (DserNamePipe) |
| 混淆文件或信息 | T1027 | CS beacon XOR 编码配置;单字节 XOR payload 检测 |
| 混淆文件或信息:HTML 暗藏 | T1027.006 | 内存中 Base64 编码的 payload |
| 加密通道:非对称加密 | T1573.002 | CS beacon RSA 公钥 ASN.1 头 |
| 损害防御:执行护栏 | T1622 | CS 64 位睡眠掩码解混淆例程 |
| 解混淆/解码文件或信息 | T1140 | Shannon 熵扫描;GZIP/ZLIB 压缩 payload 检测 |
## 选项参考
| 标志 | 描述 |
|---|---|
| `--list` | 列出所有内存区域 |
| `--modules` | 列出已加载的模块 |
| `--threads` | 列出线程及其分析 |
| `--peb` | 显示 PEB 信息 |
| `--pid` | 显示记录的进程 ID |
| `--sysinfo` | 显示操作系统、主机、进程和 CPU 摘要 |
| `--hunt TTP` | TTP 检测:`injection`、`hollowing`、`stomping`、`pipe`、`cs-beacon`、`yara`、`obfuscation`、`all` |
| `--report` | 生成分析报告(需要提供 `--report-tid`、`--report-addr` 或 `--report-string`) |
| `--diff DUMP2` | 与第二个 dump 文件进行差异比对 |
| `--diff-mode` | 差异比对范围:`modules`、`threads`、`memory`、`all`(默认:`all`) |
| `--extract ADDR` | 提取指定地址的原始字节 |
| `--strings ADDR` | 提取指定地址的字符串 |
| `--size SIZE` | 十六进制格式的区域大小 |
| `-o FILE` | `--extract` 的输出文件 |
| `--filter PROT` | 按保护名称过滤 `--list` |
| `--grep REGEX` | `--strings` 的正则表达式过滤器 |
| `--min-len N` | `--strings` 的最小字符串长度(默认:6) |
| `--encoding` | 字符串编码:`ascii`、`unicode`、`both`(默认:`both`) |
| `--verbose` | 显示所有区域,包括常规区域 |
| `--yara-dir DIR` | 用于 `--hunt yara` 的 `.yar` 规则文件目录 |
| `--json FILE` | 将结构化结果以 JSON 格式写入 FILE |
| `--csv PATH` | 写入 CSV 输出:`FILE.csv` → 单个合并文件,`DIR\` → 每个表生成一个文件 |
| `--txt FILE` | 写入控制台输出的纯文本副本(去除 ANSI 颜色) |
## 致谢
Dumpex 建立在公共安全社区中多位研究人员和组织的成果之上。在此对他们的贡献表示诚挚的感谢。
### Didier Stevens — 1768.py 和 cs-analyze-processdump.py
[`dumpex/hunt/cs_beacon.py`](dumpex/hunt/cs_beacon.py) 中的 Cobalt Strike beacon 配置扫描器改编自 [Didier Stevens](https://blog.didierstevens.com/) 的 **1768.py**。同时,[`dumpex/hunt/encoding.py (Layer 0 — _scan_sleep_mask and helpers)`](dumpex/hunt/encoding.py) 来自于他的 **cs-analyze-processdump.py**。
特别源自 1768.py 的内容包括:
- XOR 编码配置块检测算法 (`AnalyzeEmbeddedPEFileSub`)
- TLV 配置字段解析器 (`AnalyzeEmbeddedPEFileSub2`)
- Malleable C2 指令流解码器 (`DecodeInstructions`)
- 配置字段标识符表 (`dConfigIdentifiers`)
- Beacon 类型和代理类型查找表 (`LookupConfigValue`)
- 根据最大字段 ID 估算 CS 版本 (`DetermineCSVersionFromConfig`)
- 配置完整性检查逻辑 (`SanityCheckExtractedConfig`)
[`rules/yara/cs_indicators.yar`](rules/yara/cs_indicators.yar) 中的 YARA 规则 `CS_Beacon_Config_XOR69` 和 `CS_Beacon_Config_XOR2E` 同样源自该项工作。
### Elastic Security
[`rules/yara/cs_indicators.yar`](rules/yara/cs_indicators.yar) 中的 YARA 规则 `CS_SleepMask_64bit` 和 `CS_SleepMask_32bit` 基于 **Elastic Security** 发布的字节签名。
### NVISO Labs
`cs_beacon.py` 设计中所参考的关于 Cobalt Strike beacon 内存布局和配置提取的上下文理解,借鉴了 **NVISO Labs** 发布的公开研究系列。
### Stephen Fewer — ReflectiveDLLInjection
[`rules/yara/suspicious_memory.yar`](rules/yara/suspicious_memory.yar) 中用于 `Reflective_Loader_Signature` YARA 规则的哈希常量源自 Stephen Fewer 的 **ReflectiveDLLInjection** 项目。
*所有引用的成果均仅用于防御、教育和事件响应目的,符合原作者的意图。*
## 免责声明
本工具专为教育目的、授权的数字取证及事件响应操作而设计。对于因使用本工具而造成的任何误用或损害,作者不承担任何责任。
## 作者
由 Juana (Tao Fan) 开发
网络安全分析师,专注于 DFIR、威胁狩猎、操作性恶意软件分析和检测工程。
在 [LinkedIn](https://www.linkedin.com/in/tao-f-272929229) 上与我联系
## 许可证
本项目基于 MIT 许可证授权。
标签:Cobalt Strike检测, SecList, TTP检测, Windows Minidump, 内存取证, 逆向工具