MetaMaaz/Memory-Forensics-Investigation

GitHub: MetaMaaz/Memory-Forensics-Investigation

基于 Volatility 3 构建的内存取证调查工作流,将内存镜像分析过程自动化为可审计的证据包和 SOC 风格报告框架。

Stars: 0 | Forks: 0

# 内存取证调查 **一个可重复的 DFIR 工作流:输入内存镜像 → 输出结构化、经过完整性验证的证据包 —— 基于 Volatility 3 构建,最终由人类分析师完成。** 这是一个数字取证作品集项目,展示了事件响应中的*调查*阶段:对捕获的 RAM 进行分类筛查,查找恶意进程、注入的代码、C2 流量和持久化机制,然后以 SOC/DFIR 团队的方式进行记录——以证据为导向,映射 MITRE ATT&CK,并给出判定结果和建议。 📄 **调查报告是核心交付物 → [`docs/investigations/`](docs/investigations/)** ## 为什么选择内存取证 磁盘取证显示的是安装了什么;而内存显示的是*正在运行*什么。无文件恶意软件、反射式加载的植入物 (Meterpreter)、注入的代码和实时 C2 会话通常**仅**存在于 RAM 中。能够获取内存镜像并回答“这台主机是否被入侵、被什么入侵、正在与谁通信?”是一项核心的 DFIR 技能——本仓库将其转化为一个可重复、可审计的工作流。 ## 工作原理 ``` image ──> intake ──> OS detect ──> plugin runner ──> evidence pack ──> IOC extract ──> report scaffold (SHA256) (windows.info) (12 curated (JSON + txt (iocs.json, (Markdown, Vol3 plugins) + run_log.txt) defanged) analyst TODOs) └──── post-run SHA256 re-verification ────┘ ``` 该工具负责收集和组织;**它绝不自动下结论**。判定结果、时间轴和 ATT&CK 映射均由分析师在报告中编写——这种分离是刻意设计的。 ## 安装与使用 ``` python3 -m venv venv && source venv/bin/activate pip install -r requirements.txt vol --help # verify Volatility 3 (2.28.0+) # 完整 pipeline: hash -> detect OS -> plugins -> evidence pack -> IOCs -> report python3 -m src.cli analyze images/ # 针对现有的 evidence pack 重新运行部分 python3 -m src.cli iocs evidence/ python3 -m src.cli report evidence/ --case-name "Case 03" pytest # 10 tests on the IOC heuristics ``` 每次运行都会创建 `evidence/_/` 目录,其中包含 `image_metadata.json`(含 SHA256 + 完整性标志)、`run_log.txt`(记录执行的每一条命令)、各插件输出的 JSON + 文本文件、`iocs.json` 以及 `report_scaffold.md`。 ## 精选插件集(及其重要性) | 插件 | 重要性说明 | |--------|----------------| | `windows.info` | 确认镜像可正常解析;为案件文件提供 OS/构建版本信息 | | `windows.pslist` | 操作系统主动承认的进程 | | `windows.psscan` | 池扫描进程 —— **通过与 pslist 交叉比对揭示隐藏/已终止的进程 (DKOM)**,自动计算 | | `windows.pstree` | 进程父子关系 —— 出现在 `winword.exe` 下的 `cmd.exe` 就是一项重要发现 | | `windows.cmdline` | 揭示程序是如何启动的;通常是关键铁证 | | `windows.netscan` / `netstat` | 外部连接 → C2 IOCs | | `windows.dlllist` | 路径异常/未经签名的模块 | | `windows.malfind` | 无文件支持的 RWX 私有内存 —— 注入代码 | | `windows.svcscan` | 基于服务的持久化 | | `windows.registry.hivelist` | 排查 run-key 持久化的切入点 | | `windows.handles` | 被判定为恶意的进程接触过哪些资源 | 该列表位于 [`src/config.py`](src/config.py) —— 添加一个插件只需一行代码。Linux 插件集(`linux.pslist`、`linux.bash`、`linux.check_syscall`、…)已作为进阶目标接入(需要 ISF 符号)。 ## 证据完整性(证据监管链) 每个镜像在分析**之前**都会进行 SHA256 哈希计算,并在分析**之后**重新哈希;如果不匹配,运行将中止并报 `IntegrityError`,同时已验证的标志会被记录在证据包中。结合带有时间戳的、包含每一条执行命令的 `run_log.txt`,这里的任何调查都可以被独立重放和检查——这就是“相信我”与实质证据之间的区别。 ## 调查案件 | 案件 | 场景 | 关键技术 | |------|----------|----------------| | [01 — Cridex 银行木马](docs/investigations/case-01-cridex-banking-trojan.md) | XP 上的商业恶意软件:伪装、注入到 explorer.exe、run-key 持久化、HTTP C2 | T1036.005, T1055, T1547.001, T1071.001 | | [02 — DumpMe Meterpreter 入侵](docs/investigations/case-02-dumpme-meterpreter-intrusion.md) | Win7 上的交互式攻击者:随机命名的有效载荷、反射式加载、端口 :4444 上的内部 C2、数据访问 | T1204.002, T1620, T1571, T1005 | | [03 — HFS 漏洞利用 / RAT 部署](docs/investigations/case-03-hfs-exploitation-triage.md) | CVE-2014-6287 → VBS 释放器 → UWkpjFjDzM.exe → 注入到 14 个进程中;SMTP 数据外传候选者 | T1190, T1059.005, T1055, T1036, T1114, T1048.003 | | [04 — Reveal / StrelaStealer 凭据窃取](docs/investigations/case-04-reveal-strelastealer.md) | Win10 上的 StrelaStealer:钓鱼 → 隐藏的 PowerShell → WebDAV `net use` → 远程 DLL 的 `rundll32` 执行 (无磁盘落地);Thunderbird 凭据窃取 | T1566.001, T1059.001, T1218.011, T1620, T1571, T1555, T1114 | 有关报告状态和验证工作流,请参阅 [`docs/investigations/README.md`](docs/investigations/README.md);完整的可重现方法论请参阅 [`docs/methodology.md`](docs/methodology.md)。 ## IOC 提取与 ThreatLens 交接 `src/iocs.py` 会展示*候选对象*,并为每个命中结果提供可审计的原因:外部 IP(自动防误触处理:`41.168.5[.]140`)、隐藏进程的交叉比对差异、LOLBin 命令行(`powershell -enc`、`certutil -urlcache`、…)、用户可写的执行路径,以及可执行的 malfind 内存区域。 `iocs.json` 的结构设计专门用于通过 `--threatlens`(URL/密钥位于 `.env` 中,参见 `.env.example`)交接给我的 IOC 富化平台 —— **[ThreatLens](https://github.com/maazhusain)**。完全可选:该流水线支持离线运行,在未配置时会自动跳过富化步骤。 ## 获取内存镜像(合法且安全) 镜像文件均被 **gitignored**(体积达数 GB,且部分包含活动恶意软件 —— 本仓库仅进行静态分析;切勿提取并运行这些产物)。合法的公开来源已在各报告中按案件分别记录: - **CyberDefenders** 蓝队实验室 (DumpMe, Reveal, Ramnit) —— 现代化、场景驱动 - **Volatility Foundation samples wiki** —— 经典镜像 (Cridex, Zeus, R2D2) - **13Cubed** 内存取证挑战 Windows 符号表会在首次运行时自动从 Microsoft 下载(之后缓存在 `symbols/` 中)。 ## 技术栈与心得体会 Python 3.11 · Volatility 3 · Typer · Jinja2 · pytest —— 约 700 行代码的编排,追求可读性而非炫技。 构建该项目让我学到了:为什么交叉视图检测(`pslist` 对比 `psscan`)胜过盲目信任单一操作系统结构;`malfind` 如何将注入的 PE 镜像与良性的 JIT 内存区分开来;为什么证据监管链哈希必须包裹*整个*运行过程;以及如何撰写调查发现,使得另一位分析师——或法庭——能够根据运行日志回溯每一步操作。 ## 仓库结构图 ``` src/ pipeline (intake → runner → evidence → iocs → report → cli) tests/ IOC-heuristic tests (fixtures mirror real Volatility output) docs/methodology.md the reproducible workflow docs/investigations/ ★ the case reports images/ evidence/ gitignored working dirs ```
标签:JARM, Python, 内存分析, 安全规则引擎, 安全运营, 库, 应急响应, 扫描框架, 数字取证, 无后门, 自动化分析, 自动化脚本, 跨站脚本, 逆向工具