SecurityRonin/bam-forensic
GitHub: SecurityRonin/bam-forensic
bam-forensic 从 Windows SYSTEM hive 中解析 BAM/DAM 记录,提取按用户区分的程序最后执行时间证据,并自动检测可疑执行行为。
Stars: 0 | Forks: 0
# bam-forensic
[](https://github.com/SecurityRonin/bam-forensic/actions)
[](https://www.rust-lang.org)
[](https://github.com/rust-secure-code/safety-dance)
[](LICENSE)
[](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, 可视化界面, 数字取证, 注册表分析, 网络信息收集, 网络流量审计, 自动化脚本, 通知系统