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, 内存取证, 逆向工具