SecurityRonin/usb-forensic

GitHub: SecurityRonin/usb-forensic

一款以 headless 库/CLI 形式运行的 USB 设备历史取证关联引擎,通过聚合多数据源痕迹并评分时间戳一致性,解决企业级 pipeline 中 Windows USB 连接历史重建与法庭可复现性问题。

Stars: 0 | Forks: 0

# usb-forensic [![CI](https://static.pigsec.cn/wp-content/uploads/repos/cas/ad/ad5834178f7599af9fdda11629d49cae07f2997beec49821b2920eff5bfd50e7.svg)](https://github.com/SecurityRonin/usb-forensic/actions) [![Rust 1.81+](https://img.shields.io/badge/rust-1.81%2B-orange.svg)](https://www.rust-lang.org) [![unsafe forbidden](https://img.shields.io/badge/unsafe-forbidden-success.svg)](https://github.com/rust-secure-code/safety-dance) [![License: Apache-2.0](https://img.shields.io/badge/License-Apache--2.0-blue.svg)](LICENSE) [![Sponsor](https://img.shields.io/badge/sponsor-h4x0r-ea4aaa?logo=github-sponsors)](https://github.com/sponsors/h4x0r) **首个专为 pipeline 和法庭构建的 USB 历史关联引擎,而非一个查看器窗口——具备 USB Detective 级别的 Windows 取证痕迹深度,以 headless 模式在任何操作系统上实现企业级规模部署,每个时间戳均可溯源至其原始字节,且每一个结论均可由任何人重新推导,包括对方的专家证人。** ## 这是什么 一个轻量级的 **orchestration / correlation** crate —— 它本身不解析任何原始格式。它 消费项目中已经构建好的 reader crate,将其输出标准化为一种 统一的 USB 设备历史事件,并跨数据源交叉关联时间戳, 将每个值报告为与其他数据源 *一致* 或 *不一致*,以便检验员能够从部分或矛盾的数据中分辨出可靠的首次连接时间。 USB 历史是一个 **多数据源的取证痕迹领域**,而不是一个单一解析器任务。在 Windows 上,证据分布在以下位置: - **Registry** —— `USBSTOR`、`Enum\USB`、`MountedDevices` (SYSTEM);Windows Portable Devices / `WPDBUSENUM`、`VolumeInfoCache` (SOFTWARE);`MountPoints2` (NTUSER.DAT); `Amcache.hve` (执行 / 首次出现信号) - **`Enum\SCSI`** —— UASP / USB-3 驱动器 (`uaspstor.sys`, Win8+) 在此处枚举,而 **不是** 在 `USBSTOR` 下;一个只读取 `USBSTOR` 的关联器会默默漏掉那些在现代数据泄露案件中最可能涉及的高性能驱动器 - **SetupAPI** 设备安装日志 (`setupapi.dev.log`) —— 本地时间,无时区标记 - **Event Logs** (用于获取卷序列号的 Partition/Diagnostic 日志) - **LNK 文件、跳转列表、shellbags** —— 设备上被打开的文件和被访问的目录 ## 它在系统架构中的位置 一个 **针对特定取证痕迹领域的分析器**,位于数据源解析器之上的一个层级 —— 它**消费** 它们而不是重新实现它们,并输出由 Issen 与所有其他分析器一起渲染的 `forensicnomicon::report::Finding`。 ``` usb-forensic ── correlates USB device history, scores cross-source timestamp consistency ├── consumes winreg-artifacts ── USBSTOR / MountedDevices / WPDBUSENUM / Amcache / … ├── consumes peripheral-core ── setupapi.dev.log device-install events ├── consumes winevt-forensic ── Partition/Diagnostic event log (volume serials) └── consumes lnk-core ── recent-file LNK volume-serial join ``` 它是 [`useract-forensic`](https://github.com/SecurityRonin/useract-forensic) 的深度、专注于 USB 领域的姊妹项目:那个 crate 将设备连接视为广泛用户活动时间线的一个输入; 而 `usb-forensic` 是专门针对 USB 领域本身的、专注于一致性评分的引擎。 ## 为什么要开发它 —— 空白领域(经过了对抗性压力测试) 参考产品是 [USB Detective](https://usbdetective.com/):仅支持 Windows、闭源、GUI、约有 6 年的成熟度。它的护城河是 **跨数据源的时间戳一致性 评分 + 每个值的来源溯源** —— 这是专家证人所必需的可辩护性。 本论点的一个早期草案声称我们可以 *带着相同的置信度模型实现跨平台* 并且“更好”。一项深入分析 (Fable 5) 和一次敌意评估 (Codex) 都拒绝了这一点。最终保留下来的内容是: **被拒绝的 —— 不是我们的突破口:** 1. **“在 macOS/Linux 上拥有相同的置信度模型” 是一种错觉。** 一致性评分需要 几个 *独立的、持久化的* 且具有不同更新语义的数据源来进行 交叉核对 —— 这是 Windows 特有的属性。macOS ≈ 一个带有强时间戳的数据源 (统一日志 / USBMSC,保留期为几天到几周) 加上仅有名称的 plists;Linux ≈ 单一来源的 journald。如果只有 1–2 个数据源,就根本没有可供评分对比的对象。 2. **“在 Windows 上完全匹敌 USB Detective” 并不是一个低成本的阶段一。** 评分 *算法* 只需一个周末;但其底层的语义模型(针对不同版本构建的时间戳重写怪癖、 `Enum\SCSI`/UASP 覆盖范围、Win10 30 天清理机制、本地时间与 UTC 的陷阱)却需要约 12–24 个月 基于语料库的差异化验证。 3. **“开源 = 可在法庭上辩护” 这种说法是狭隘的。** 法庭通常根据 Daubert 标准采信闭源工具;源代码的可获得性有助于 *作证*,但无助于可采性(而且这还会 把你的 bug 追踪系统暴露给对方的专家)。 **真正的突破口 —— 结构性的,而不是现有产品可以修补的功能差距:** 1. **形态要素是 USB Detective 无法匹配的,除非它彻底改变自身:** headless、 可作为库嵌入、原生适配 pipeline、可进行 diff 的 JSONL,可在任何 OS 上运行以 在 fleet 规模下分析 *Windows* 取证证据。目前没有任何开源工具能够作为 CLI/库 实现带评分的多数据源 USB 关联 (RegRipper = 原始插件;USBFT = 无评分的 GUI)。 2. **构建即实现的可复现性** —— 一种 `--reproduce` 模式,可以从 `hive → key → 原始字节 → 解码规则` 重新推导出每一个值, 可被哈希验证且可由对方的专家运行。这是“法庭就绪”持久有效的一半保证;而 PDF/DOCX 的 *格式* 只需一个周末就能实现的简单功能。 3. **我们的客户是 pipeline 操作员,而不是 GUI 检验员** (后者有免费的社区版,且毫无切换压力):实验室自动化、Velociraptor/KAPE、 fleet 集成。这是一个更小、更低调的市场 —— 侧重于基础设施,而不是打造英雄级产品。 完整的格局分析、数据来源和竞争对手矩阵: [`docs/competitive-landscape.md`](docs/competitive-landscape.md)。构建顺序: [`docs/roadmap.md`](docs/roadmap.md)。 ## 终止标准 —— 仅在以下条件均未触发时才进行开发 ## 信任,但要验证 `#![forbid(unsafe_code)]`,无 panic(工作区在生产环境拒绝使用 `unwrap`/`expect`),并以 100% 的库代码行覆盖率作为准入门槛。关联逻辑将通过在真实磁盘镜像上与 **独立的 oracle** (USB Detective 社区版、RegRipper) 进行 **差异化对比验证** —— 参见 [`docs/validation.md`](docs/validation.md)。调查结果是 **观察结果**,绝不是 结论:“与……一致”,由检验员自行得出结论。 [隐私政策](https://securityronin.github.io/usb-forensic/privacy/) · [服务条款](https://securityronin.github.io/usb-forensic/terms/) · © 2026 Security Ronin Ltd
标签:Rust, USB取证, 可视化界面, 数字取证, 网络流量审计, 自动化脚本, 通知系统