SecurityRonin/bam-forensic

GitHub: SecurityRonin/bam-forensic

bam-forensic 从 Windows SYSTEM hive 中解析 BAM/DAM 记录,提取按用户区分的程序最后执行时间证据,并自动检测可疑执行行为。

Stars: 0 | Forks: 0

# bam-forensic [![CI](https://static.pigsec.cn/wp-content/uploads/repos/cas/ad/ad5834178f7599af9fdda11629d49cae07f2997beec49821b2920eff5bfd50e7.svg)](https://github.com/SecurityRonin/bam-forensic/actions) [![Rust 1.85+](https://img.shields.io/badge/rust-1.85%2B-orange.svg)](https://www.rust-lang.org) [![禁用 unsafe](https://img.shields.io/badge/unsafe-forbidden-success.svg)](https://github.com/rust-secure-code/safety-dance) [![许可证:Apache-2.0](https://img.shields.io/badge/License-Apache--2.0-blue.svg)](LICENSE) [![赞助](https://img.shields.io/badge/sponsor-h4x0r-ea4aaa?logo=github-sponsors)](https://github.com/sponsors/h4x0r) **直接从 `SYSTEM` hive 证明某个程序上一次在 Windows 主机上运行的时间——按用户区分——可在任何 OS 上运行。** 这是一个针对 Background/Desktop Activity Moderator (BAM/DAM) 最后执行记录的解析器,在设计上确保不会引发 panic,并附带一个能够标记伪装和暂存目录执行情况的分析器。 ## 运行方式 ``` $ cargo install bam-forensic # installs the bam4n6 binary $ bam4n6 /path/to/SYSTEM BAM/DAM: 55 execution records across 2 user SID(s) Findings (1): [MEDIUM] BAM-SUSPICIOUS-PATH \Device\HarddiskVolume2\Users\tony\AppData\Local\Temp\…\dotnet-runtime-3.0.0-preview4-win-x64.exe dotnet-runtime-…-win-x64.exe last executed from …\Temp\…, a directory commonly used to stage malware — consistent with suspicious execution. ``` `--list` 会转储按 SID 分组的所有记录,并显示每个可执行文件的最后执行时间: ``` $ bam4n6 --list /path/to/SYSTEM SID S-1-5-90-0-1 (2 records): 2020-04-19T09:09:35.7318159Z \Device\HarddiskVolume2\Windows\System32\dwm.exe … ``` ## 解码内容 BAM/DAM(`SYSTEM\ControlSet00N\Services\bam` 和 `…\dam`,Windows 10 1709+)会记录**每个可执行文件上一次运行的时间**,以用户 `SID` 作为键值: - 在 `bam\State\UserSettings\{SID}`(以及早期 1709 版本的 `bam\UserSettings\{SID}` 变体)下,每个值**名称**都是内核设备形式的可执行文件路径,即 `\Device\HarddiskVolumeN\Windows\…\app.exe`(Store/AppX 应用显示为其包系列名称),而值**数据**的前 8 个字节是最后执行的 `FILETIME`(小端序)。`bam4n6` 会遍历 `ControlSet001`/`002` 下的所有路径变体,因此不会遗漏任何记录。 - 每个 SID 下的 `SequenceNumber` 和 `Version` `REG_DWORD` 是元数据,而非记录,因此会被排除。 ## 架构层级 - **`bam-core`** — `decode_entry(value_name, value_data) -> Option`。一个不带 hive I/O 的纯解码器:值名称 → 路径,前 8 个字节 → 最后执行 `FILETIME`。包含 `#![forbid(unsafe_code)]`,通过 lint 保证不会 panic。 - **`bam-forensic`** — `audit(&[BamEntry]) -> Vec`(经过分级处理的 `forensicnomicon` 发现结果;具备设备路径感知能力)以及 `bam4n6` CLI,它负责执行 `winreg-core` 的 hive 遍历。 ## 验证 基于**真实的 Windows 10 1709 `SYSTEM` hive**(`regipy` 测试语料库)进行一级验证,并与 **`regipy` 的 `BAMPlugin`** 进行交叉核对,将其作为独立的校验基准: | | regipy `BAMPlugin` | `bam4n6` | |---|---|---| | 执行记录 | 55 | 55 | | 已填充的 SID | 2 | 2 | | `dwm.exe` (SID `S-1-5-90-0-1`) | `2020-04-19T09:09:35.731816Z` | `2020-04-19T09:09:35.7318159Z` | 相同的计数、相同的行数、相同的最后执行时间(`bam4n6` 显示了完整的 100 ns `FILETIME` 精度)。结构已通过 RegRipper 的 `bam.pl`(`keydet89/RegRipper3.0`)和 `regipy` 的 `system.bam` 确认。详见 `core/tests/data/README.md`。 ## 发现结果 | 代码 | 严重程度 | MITRE | 触发条件 | |---|---|---|---| | `BAM-SYSTEM-BINARY-RELOCATED` | 高 | T1036.005 | 某个 Windows 系统二进制文件名称最后一次是从非 `System32` 路径运行的(伪装)。 | | `BAM-SUSPICIOUS-PATH` | 中 | T1204 | 某个可执行文件最后一次是从常见的暂存目录(Temp、Downloads、`$Recycle.Bin` 等)运行的。 | [隐私政策](https://securityronin.github.io/bam-forensic/privacy/) · [服务条款](https://securityronin.github.io/bam-forensic/terms/) · © 2026 Security Ronin Ltd
标签:BAM/DAM, DNS 解析, Rust, 可视化界面, 数字取证, 注册表分析, 网络信息收集, 网络流量审计, 自动化脚本, 通知系统