VisionSecurityLabs/memdump-toolkit
GitHub: VisionSecurityLabs/memdump-toolkit
Windows 进程内存转储取证分析工具包,支持多语言二进制恶意评分、进程注入检测和 C2 指标提取,生成 SIEM 就绪的 IOC 报告。
Stars: 2 | Forks: 0
# memdump-toolkit
Windows 进程内存转储的取证分析工具包。提取所有 DLL,无论其使用何种语言(Go、.NET、Rust、Delphi、Nim、native)均对恶意指标进行评分,并生成 SIEM 就绪的 IOC。
## 快速开始
```
# 安装
git clone && cd MemDump
rye sync
# 以下所有命令假设 venv 已激活。可以通过:
# source .venv/bin/activate (每个 shell 激活一次)
# rye run memdump-toolkit ... (为每个命令添加前缀)
# 分析 dump (一条命令完成所有操作)
memdump-toolkit full process_dump.dmp -o ./results
# 检查结果
cat results/triage_summary.json # prioritized findings
cat results/suspicious_binaries.csv # scored binaries
cat results/iocs.csv # SIEM-ready IOCs
cat results/full_report.txt # human-readable report
```
## 功能说明
`full` 命令在任何 Windows minidump 上运行 5 步流水线:
```
Step 1: Extract → Recovers all DLLs (listed + hidden PEs from raw memory)
Step 2: Injection → Flags 8 injection tactics (typosquatting, RWX, heap modules, ...)
Step 3: Analyze → Scores EVERY binary for malicious indicators (language-agnostic)
Step 4: C2 Hunt → Scans ALL process memory for live C2 URLs, keys, certs, pipes
Step 5: Report → Triage summary + IOC export (cross-references all findings)
```
**第 3 步是核心** —— 它对所有提取的二进制文件运行通用检查:
| 检查项 | 检测目标 |
|-------|----------------|
| 语言检测 | Go, .NET, Rust, Delphi, Nim(自动分发至深度分析器) |
| 加壳特征 | UPX, Themida, VMProtect, ASPack, MPRESS, Enigma, ... |
| 可疑导入 | 进程注入、凭据访问、内存操作 API |
| 节异常 | RWX 节、异常名称、零大小可执行节 |
| YARA 规则匹配 | Cobalt Strike, Metasploit, 自定义签名(通过 --yara-rules) |
| 时间戳异常 | Epoch 零、未来日期、2000 年之前 |
| 配置提取 | 嵌入的 IP、URL、命名管道、加密密钥、C2 参数 |
二进制文件评分为 0-100 并分类:**CRITICAL**(60+)、**HIGH**(30+)、**MEDIUM**(10+)。
### 三层过滤(大型转储处理快)
| 层级 | 应用对象 | 检查项 | 原因 |
|------|-----------|--------|-----|
| 跳过 | 仅资源 DLL(.mui, .rll) | 无 | 无代码,无威胁 |
| 轻量 | 受信系统 DLL(system32 等) | 仅时间戳 + 加壳器 + 语言 ID | 快速,低噪音 |
| 完整 | 隐藏 + 不受信二进制 | 所有检查 + 语言分发 + 配置 | 威胁所在 |
在 217 个模块的 SQL Server 转储上:58 个跳过,142 个轻量,17 个完整 → **约 25 秒完成**。
## 安装
```
# 克隆并安装
git clone && cd MemDump
rye sync
# 使用 YARA 扫描
rye sync --features yara
# 使用 .NET 元数据解析
rye sync --features dotnet
# 使用 capstone 反汇编 (shellcode 验证)
rye sync --features capstone
# 所有功能
rye sync --features all
```
需要 [Rye](https://rye.astral.sh/)。Python 3.10 将自动安装。核心依赖:`minidump`。可选:`yara-python`, `dnfile`, `capstone`。
## CLI 命令
### 完整流水线(推荐)
```
memdump-toolkit full dump.dmp -o ./results
memdump-toolkit full dump.dmp -o ./results --yara-rules auto # auto-discover fetched rules
memdump-toolkit full dump.dmp -o ./results --yara-rules ./rules/ # explicit path
memdump-toolkit full dump.dmp -o ./results -v # verbose/debug
```
### 单独命令
```
# 通用二进制分析 (提取 + 评估所有 DLL)
memdump-toolkit binary-scan dump.dmp -o ./results
# 仅提取 PE 模块
memdump-toolkit extract dump.dmp -o ./modules
# 仅检测注入
memdump-toolkit detect dump.dmp -o ./injection
# 仅扫描 Go implant
memdump-toolkit go-scan dump.dmp -o ./go
# Go 二进制结构分析 (buildinfo + pclntab)
memdump-toolkit go-info suspicious.dll -o ./go
# 仅扫描 .NET 程序集
memdump-toolkit dotnet-scan dump.dmp -o ./dotnet
# 检查任意二进制文件 (自动检测语言,分发至对应分析器)
memdump-toolkit inspect suspicious.dll -o ./inspect
memdump-toolkit inspect suspicious.dll --yara-rules ./rules/
# 在原始进程内存中搜寻 C2 指标
memdump-toolkit c2-hunt dump.dmp -o ./c2
# 配置提取 (单个二进制或 dump)
memdump-toolkit config malware.dll -o ./config
memdump-toolkit config dump.dmp --dump -o ./config
# 获取社区 YARA 规则集
memdump-toolkit fetch-rules # download or update all 6 rulesets
memdump-toolkit fetch-rules -r signature-base # just one
memdump-toolkit fetch-rules --list # show installed
```
## 输出文件
| 文件 | 内容 |
|------|-------------|
| **`triage_summary.json`** | 优先级排序的 CRITICAL/HIGH 发现及统计 |
| **`suspicious_binaries.csv`** | 每个评分二进制:文件、语言、风险、因素、哈希 |
| **`binary_analysis.json`** | 每个二进制的完整分析(通用 + 特定语言) |
| **`iocs.csv`** | 扁平 IOC 表(IP、URL、哈希、管道、工具)用于 SIEM 接入 |
| **`executive_summary.json`** | 纯文本结论、MITRE ATT&CK 映射、建议操作 |
| `full_report.txt` | 人类可读报告,包含执行摘要和执行时间线 |
| `injection_report.json` | 8 项注入分析 |
| `module_list.csv` | 已列出模块清单(地址、大小、哈希、熵) |
| `hidden_list.csv` | 隐藏 PE 清单 |
| `modules/` | 提取的已列出 PE 模块 |
| `hidden/` | 提取的隐藏 PE 镜像 |
| `go_implants.json` | Go 二进制分析(能力、包、已知工具) |
| `go_info.json` | 结构化 Go 元数据(buildinfo、pclntab 函数、依赖) |
| `go_binaries/` | 提取的 Go 二进制 |
| `dotnet_analysis.json` | .NET 程序集分析(元数据、P/Invoke、风险评分) |
| `dotnet/` | 提取的可疑 .NET 二进制 |
| `inspect_report.json` | 统一二进制检查(任何语言) |
| `c2_hunt.json` | 来自原始进程内存的 C2 指标(URL、密钥、证书、UA) |
## Python API
```
from minidump.minidumpfile import MinidumpFile
from memdump_toolkit import extract_dlls, detect_injection, analyze_binary
# 解析 dump 一次,传递给所有模块
mf = MinidumpFile.parse("process.dmp")
reader = mf.get_reader()
# 运行完整通用分析
extract_dlls.analyze(mf, reader, "output") # Step 1: extract all PEs
injection = detect_injection.analyze(mf, reader, "output") # Step 2: injection checks
results = analyze_binary.analyze(mf, reader, "output") # Step 3: score everything
# 或直接运行特定语言分析器
from memdump_toolkit import identify_go_implants, analyze_dotnet
go = identify_go_implants.analyze(mf, reader, "output")
dotnet = analyze_dotnet.analyze(mf, reader, "output")
```
每个模块导出 `analyze(mf, reader, out_dir)`(编排式)和 `run(dump_path, out_dir)`(独立式)。
## 评分机制
### 通用风险评分 (0-100)
| 信号 | 分值 | 示例 |
|--------|--------|---------|
| YARA 规则匹配(offensive_tool 标签) | +40 | Cobalt Strike beacon, Mimikatz |
| YARA 规则匹配(其他) | 最高 +30 | 自定义签名命中 |
| 进程注入导入 | +20 | VirtualAllocEx, CreateRemoteThread |
| 加壳特征 | +15 | UPX 节名称, VMProtect 字符串 |
| RWX 节 | +15 | 读+写+执行内存 |
| 凭据访问导入 | +15 | MiniDumpWriteDump, LsaLogonUser |
| Go 能力(3+) | +25 | socks_proxy, yamux, kerberos |
| .NET 混淆器 | +20 | ConfuserEx, .NET Reactor |
| .NET 规避 P/Invoke | +10 | AmsiScanBuffer, EtwEventWrite |
| 高熵节 | +10 | 加密/压缩内容 |
| 嵌入网络 IOC | +10 | 字符串中的 URL、命名管道 |
| 时间戳异常 | +5 | 未来日期,2000 年之前 |
### 特定语言深度分析
检测到语言时,二进制将获得额外的专项分析:
**Go** —— 基于评分的检测(快速首页 + 深度验证)、双层能力检测(socks、yamux、kerberos、NTLM、SMB...)、已知工具匹配(Chisel、Sliver、Merlin、Ligolo...)、包/模块路径提取、网络 IOC 发现。
**.NET** —— CLR 头 + dnfile 元数据提取、P/Invoke 分类(5 类)、可疑 API 模式(8 类)、攻击工具匹配(SharpHound、Rubeus、Seatbelt、Covenant...)、混淆器检测(10 个家族)、框架程序集白名单。
**Rust/Delphi/Nim** —— 通过字符串签名进行语言识别(panic 处理程序、编译器路径、运行时标记)。在输出中标记以提醒分析人员。
## 注入检测(8 项检查)
| 检查项 | 发现内容 |
|-------|--------------|
| 仿冒 | 模仿系统 DLL 的 DLL 名称(Levenshtein + 同形字) |
| 堆加载模块 | 位于堆地址的 DLL(位数感知) |
| 隐藏 PE 镜像 | 不在模块列表中的 PE 二进制 |
| 不受信路径 | 从非系统位置加载的模块 |
| 重复名称 | 同名的多个 DLL |
| 流氓线程 | 在已知模块外执行的线程 |
| 可执行内存 | RWX 和 RX 区域,采用 7 启发式 Shellcode 分析(序言、模式、NOP 滑梯、代码密度、嵌入 PE、统计分类、capstone 反汇编) |
| 可疑导入 | 用于注入/规避的 API 组合 |
## 二进制检查 (`inspect`)
分析任何独立二进制文件 —— 自动检测语言并分发到正确的分析器:
```
memdump-toolkit inspect malware.dll -o ./results
```
检测顺序:Go(结构化 `\xff Go buildinf:` 魔数) → .NET(CLR 头) → Rust/Delphi/Nim(字节签名) → Native 回退。如果提供了 `--yara-rules`,始终运行 YARA。
## C2 狩猎 (`c2-hunt`)
扫描 minidump 中所有内存段以查找实时运行时 C2 工件 —— 即捕获时存在于堆/栈中但不在静态二进制中的内容:
```
memdump-toolkit c2-hunt dump.dmp -o ./results
```
| 指标 | 发现内容 |
|-----------|--------------|
| URL | WebSocket/HTTP C2 端点(白名单优先过滤,减少证书存储噪音) |
| 主机名 | 云 C2 基础设施(AWS ELB、CloudFront、ngrok、Cloudflare) |
| IP:Port | 裸 IP 连接(过滤保留/回环地址) |
| 私钥 | 堆内存中的 PEM 编码 RSA/EC/DSA 密钥 |
| 证书 | 带内存地址的 PEM 证书 |
| 命名管道 | 植入物使用的 IPC 通道 |
| User-Agents | 按内存地址分为堆(可能是植入物)与系统 DLL(良性) |
## Go 结构分析 (`go-info`)
使用构建元数据而非字符串正则对 Go 二进制进行深度结构分析:
```
memdump-toolkit go-info implant.dll -o ./results
```
从 `\xff Go buildinf:` 标记提取模块路径、Go 版本、依赖。通过 pclntab 按模块前缀恢复函数名和源文件。检测 18 项能力(WebSocket C2、TCP C2、命名管道 C2、SOCKS 代理、Kerberos、NTLM、SMB、横向移动、端口转发等)。
## YARA 集成
```
# 一次性设置:获取社区规则集至 ~/.memdump-toolkit/rules/
memdump-toolkit fetch-rules
# 每次分析 — 只需添加 --yara-rules (自动发现已获取规则)
memdump-toolkit full dump.dmp -o ./results --yara-rules auto
# 或指向特定目录
memdump-toolkit full dump.dmp --yara-rules ./my-custom-rules/
```
**YARA 是攻击工具归因的唯一检测引擎。** 本工具包不内置 Cobalt Strike 或 Metasploit 等工具的签名 —— 请配合社区规则集使用 `--yara-rules` 进行工具识别。
`fetch-rules` 下载这些规则集(默认全部,或用 `-r` 选择):
| 规则集 | 重点 |
|---------|-------|
| **signature-base** (Neo23x0) | 最适合 Go 植入物、Cobalt Strike、Webshell |
| **yara-rules** (community) | 广泛的恶意软件家族、加壳器、漏洞利用 |
| **gcti** (Google) | 聚焦 APT,高质量 |
| **reversinglabs** | 大型恶意软件家族签名集 |
| **eset** | ESET 研究出版物 |
| **elastic** | Elastic 威胁研究 |
## 故障排除
| 问题 | 修复 |
|---------|-----|
| "rye not found" | 安装 Rye:参见 [rye.astral.sh](https://rye.astral.sh/) |
| "No modules found" | 转储可能缺少模块列表 —— 隐藏 PE 扫描仍会运行 |
| "YARA scan failed" | `rye sync --features yara` + 检查规则语法 |
| "Failed to read module memory" | 转储被截断 —— 工具包回退到逐页读取 |
| 大型转储处理慢 | 超过 1 GB 属正常;转储仅解析一次,模块按层过滤 |
| 误报太多 | 系统 DLL 评分应为 0 —— 检查路径是否在受信列表中 |
| 哈希与 VirusTotal/NSRL 不匹配 | **预期行为。** 内存转储的 DLL 由于重定位、IAT 修补和页面清零,与磁盘上的原始文件不同。参见 [架构 § 为什么内存转储哈希不匹配](docs/ARCHITECTURE.md#why-memory-dumped-hashes-dont-match-on-disk-files)。请改用带有内存镜像哈希集的 `--known-good`。 |
## 致谢
本工具包基于并与以下开源项目集成:
| 项目 | 作用 | 许可证 |
|---------|------|---------|
| [minidump](https://github.com/skelsec/minidump) | Windows minidump 解析 | MIT |
| [capstone](https://github.com/capstone-engine/capstone) | Shellcode 验证的 反汇编 | BSD 3-Clause |
| [signature-base](https://github.com/Neo23x0/signature-base) | YARA 规则 —— Go 植入物、Cobalt Strike、Webshell | CC BY-NC 4.0 |
| [YARA-Rules](https://github.com/Yara-Rules/rules) | YARA 规则 —— 广泛的恶意软件家族、加壳器、漏洞利用 | GPL 2.0 |
| [GCTI](https://github.com/chronicle/GCTI) | YARA 规则 —— 聚焦 APT (Google Threat Intelligence) | Apache 2.0 |
| [ReversingLabs YARA](https://github.com/reversinglabs/reversinglabs-yara-rules) | YARA 规则 —— 大型恶意软件家族签名集 | MIT |
| [ESET malware-ioc](https://github.com/eset/malware-ioc) | YARA 规则 —— ESET 研究出版物 | BSD 2-Clause |
| [Elastic detection-rules](https://github.com/elastic/detection-rules) | YARA 规则 —— Elastic 威胁研究 | Elastic License 2.0 |
## 相关工具
| 工具 | 功能 |
|------|-------------|
| [PE-sieve](https://github.com/hasherezade/pe-sieve) | 实时进程扫描器 —— 检测运行进程中的空洞、挂钩和注入代码 |
| [HollowsHunter](https://github.com/hasherezade/hollows_hunter) | 封装 PE-sieve 以一次性扫描所有运行进程 |
| [Volatility 3](https://github.com/volatilityfoundation/volatility3) | 原始内存镜像的完整取证框架 |
**区别:** PE-sieve/HollowsHunter 扫描 *实时进程*。Volatility 处理 *完整 RAM 捕获*。本工具包处理 *Windows minidump*(来自任务管理器、ProcDump 等的 `.dmp`)—— 这是一种更轻量的工件,在应急响应 (IR) 中更易于收集。
## 免责声明
本工具包提供**仅用于防御安全、应急响应和教育目的**。旨在帮助分析人员检查其经授权调查的系统的内存转储。
- **请勿**使用此工具分析您不拥有或未获得明确授权检查的系统或数据。
- 作者对误用或因使用本软件造成的任何损害**不承担任何责任**。
- 对攻击工具(例如 Cobalt Strike、Sliver)的检测旨在帮助防御者 —— 而非促进攻击。
本项目通过 AI 辅助编码开发,以快速编排多个分析引擎。虽然功能正常且经过测试,但尚未经过正式安全审计 —— 在集成到生产工作流之前,请自行判断。
使用本工具包即表示您同意遵守您所在司法管辖区适用的所有法律和法规。
## 许可证
请参阅仓库根目录中的 LICENSE 文件。
标签:C2通信发现, DAST, DLL提取, DNS信息、DNS暴力破解, DNS 反向解析, EDR增强, IP 地址批量处理, Python安全工具, SIEM集成, Triage, Windows内存取证, YARA规则, 二进制分析, 云安全运维, 信标扫描, 入侵指标IOC, 内存扫描, 加壳识别, 威胁情报, 安全工具包, 库, 应急响应, 开发者工具, 恶意软件分析, 数字取证, 自动化脚本, 进程注入检测, 进程转储分析, 逆向工具