TimothyVang/verdict-dfir

GitHub: TimothyVang/verdict-dfir

VERDICT 是一个以 Claude Code 为引擎的 DFIR 智能代理,自动化 Windows 主机取证调查并生成加密签名、可离线验证的结论。

Stars: 4 | Forks: 2

VERDICT

License Documentation Rust 1.88 Python 3.11 Node 20

提供经得起证明结论的数字取证与事件响应。

**VERDICT** 自动化了 Windows 主机 DFIR 调查中可重复的机械流程 —— 内存镜像、 EVTX 日志、磁盘工件以及网络捕获 —— 并生成一个有证据支持、由任何第三方均可 离线验证的加密证据保管链作为支撑的结论 (`SUSPICIOUS` / `INDETERMINATE` / `NO_EVIL`)。它作为 [Claude Code](https://claude.com/claude-code) agent 运行, 在一个狭窄的、有类型的、只读的工具表面上操作,因此每一个 Finding(发现)都会引用产生它的准确工具调用。 没有单独的应用服务器 —— **Claude Code 就是引擎。** 在此仓库中运行 `scripts/verdict `(或 `claude`)会将该会话转变为分析师:它打开 Case,驱动 43 个有类型的只读工具,运行验证器,并对结论进行签名。VERDICT 减少了可重复的 DFIR 机制中的摩擦;它不是自主响应者 —— 分析师负责批准计划,而在任何 Finding 进入报告之前, 验证器会重新运行每一个被引用的工具。 ## 安装与运行 | 需求 | 从这里开始 | |---|---| | 全新克隆安装 | [`INSTALL.md`](INSTALL.md) | | 三条命令快速入门 | [`QUICKSTART.md`](QUICKSTART.md) | | 所有运行模式、标志和输出文件 | [`docs/using/running-verdict.md`](docs/using/running-verdict.md) | | 故障模式修复 | [`docs/troubleshooting.md`](docs/troubleshooting.md) | ``` git clone --depth 1 https://github.com/TimothyVang/verdict-dfir.git verdict cd verdict bash scripts/setup # toolchain + DFIR binaries + both MCP servers + preflight doctor scripts/verdict ``` 将其指向支持的证据 —— 内存镜像、EVTX 日志、磁盘镜像(`.E01` / `.dd`)、数据包 捕获、Velociraptor 收集结果,或整个多主机 case 文件夹。输出将存放在 `tmp/auto-runs//` 中。不支持的格式会降级为保管/限制记录,而不是 宽泛的无害声明。 偏好交互式使用 Claude Code?在仓库中运行 `claude` 并输入 `/verdict ` 或 `investigate `。 ## 您将获得什么 每次运行都会写入一个独立的 case 目录: | Artifact | 它是什么 | |---|---| | `audit.jsonl` | 每个工具调用和 Finding 的只追加、哈希链日志(每条记录包含 `prev_hash`) | | `verdict.json` | 绑定证据的结论和 Findings,每个都引用了 `tool_call_id` 和置信度层级 | | `coverage_manifest.json` | 按 artifact 类别划分的范围台账:可用 / 已尝试 / 已解析 / 失败 / 不支持 / 未提供 —— 明确的防过度声明边界 | | `run.manifest.json` | 规范化工具输出的 Merkle root 以及签名元数据 —— 可离线验证 | | `REPORT.md` / `REPORT.html` / `REPORT.pdf` | 分析师报告:Findings、ATT&CK 覆盖率、标准化时间线、后续行动。`REPORT.md` 总会被写入;当系统中存在相应工具时,将生成 `REPORT.html`(需要 pandoc)和 `REPORT.pdf`(需要 headless Chrome) |

Chain of custody: hash-chained audit log to Merkle root to signed manifest

Each run seals into a hash-chained audit log, a Merkle root over canonical tool outputs, and a signed manifest — verifiable offline with manifest_verify.

## 查看运行过程 下方的每一次捕获都是真实运行,而非模拟。完整图库:[`docs/showcase/`](docs/showcase/)。

End-to-end DFIR investigation: case_open, EVTX and Hayabusa, verifier, judge, signed manifest, SUSPICIOUS verdict

One command, the typed DFIR pipeline, a signed SUSPICIOUS verdict with manifest_verify = PASS.

Verdict banner: SUSPICIOUS, 8 confirmed findings on SCHARDT.dd, signed and verifiable offline   Tool-cited findings, each citing a tool_call_id and SHA-256 with ATT&CK technique tags   Signed forensic investigation report with cryptographic attestation

The NIST SCHARDT.dd case through SIFT: SUSPICIOUS with 8 confirmed tool executions (cain.exe, mIRC, Ethereal, NetStumbler), each tool-cited, in a signed report.

VERDICT investigating the SRL-2018 base-file host with the forensic toolchain running inside the SANS SIFT VM

A 22-host compromised-enterprise case (SRL-2018, 198 GB) run host-by-host with the toolchain executing inside the SANS SIFT VM over SSH. Showcase walkthrough (4:35).

Fleet rollup across 22 hosts with cross-host process correlations and multi-host temporal clusters   base-file file server: SUSPICIOUS, confirmed Windows Security-log wipe, signed and verifiable offline

Cross-host fleet rollup, and the base-file server flagged SUSPICIOUS on a confirmed Security-log wipe (EID 1102), with PowerShell-LOLBin and service-install leads held at HYPOTHESIS.

## 工作原理 每个 Case 都运行相同的九阶段 pipeline,每个阶段完成后都会实时显示在仪表板上:

The nine-stage VERDICT pipeline: evidence locked, persistence pool, exfiltration pool, cross-check, verify, weigh, correlate, sign, report

1. **Evidence locked** — `case_open` 对证据进行 SHA-256 计算并打开一个只读的 Case。 2. **Persistence pool** — 第一个分析 pool 作为 subagent 分支并搜寻持久化机制;每个 Finding 都会引用生成它的 `tool_call_id`。 3. **Exfiltration pool** — 第二个 pool 以倾向于数据渗出的先验假设并行处理相同的证据,因此相互竞争的假设会浮出水面,而不是隐藏在共识中。 4. **Cross-check** — `detect_contradictions` 在任何内容合并之前标记出存在分歧的 Findings。 5. **Verify** — 验证器重新运行每个被引用的工具并比较输出哈希;输出发生漂移的 Finding 将被拒绝。 6. **Weigh** — `judge_findings` 按声明以可信度加权进行合并;执行声明需要 ≥2 种 artifact 类别,否则保持为 `HYPOTHESIS`。 7. **Correlate** — `correlate_findings` 将幸存的发现整合为一个连贯的攻击故事。 8. **Sign** — `manifest_finalize` 将运行封装为哈希链、Merkle root 和签名的 manifest。 9. **Report** — 分析师报告和结论。 三个设计选择承载了核心重任: 1. **类型化的 MCP 工具表面 —— 没有 `execute_shell`。** 43 个狭窄的、经过 schema 验证的产品工具:31 个 Rust DFIR 工具(`case_open`、`vol_pslist`/`psscan`/`psxview`、`mft_timeline`、`evtx_query`、 `hayabusa_scan`、`yara_scan`、`registry_query`、`prefetch_parse`、`pcap_triage` 以及允许列表内的 长尾封装器)加上 12 个 Python 加密/分析工具。Copyleft 和源码可用的引擎 (Hayabusa、pandoc、tshark、Volatility 3、Velociraptor)仅作为 subprocess 被调用,从而保持 Apache-2.0 代码树的许可证纯净。 2. **加密的证据保管链。** 哈希链审计日志 → 基于 canonical-JSON 工具输出的 Merkle root (由 Python manifest 构建器计算,映射 `rs_merkle` 语义) → 签名的 manifest。默认签名者是可以离线验证的本地 Ed25519 密钥;Sigstore/Rekor 是 身份和透明度日志层。`manifest_verify` 离线检查链和 root,并且 客户发布候选版本携带专家签名包。该保管模型是为 FRE 902(14) 自我认证证据而构建的 —— 参见 [`docs/cryptographic-attestation.md`](docs/cryptographic-attestation.md)。 3. **将竞争性假设分析作为 agent 拓扑。** 两个 pool 以相反的先验假设调查相同的证据。 它们的分歧将作为第一类 `kind=contradiction` 记录输出,然后再由可信度加权的裁判合并它们 —— 浮出水面,而非隐藏。两个 pool 并不能证明 真相;可重放的工具输出链才能做到。 Findings 遵循严格的认知层级 —— **CONFIRMED**(≥2 种确凿的 artifact 类别, 验证器通过) > **INFERRED**(从已确认的事实推导而来) > **HYPOTHESIS** —— 并且执行 声明至少需要两种 artifact 类别。 ## 功能 - **在一个 Case 中同时处理磁盘和内存。** 借助本地 Sleuth Kit/libewf 支持或在 SIFT 模式下,它可以只读地打开 原始/E01 镜像,并提取 `$MFT`、注册表 hive、EVTX 和 Prefetch (`disk_mount` / `disk_extract_artifacts` / `disk_unmount`),然后在同一个 Case 中分析内存。 没有支持已挂载/提取内容的原始磁盘将保持仅为保管状态,并诚实地标记为 `INDETERMINATE`。 当前提条件具备时,支持的磁盘镜像可以通过 Sleuth Kit 直接读取在本地解析;仅运行 `case_open` 依然只保持保管状态,而不支持的 artifact 类别将作为指定的限制保留。 ([工具清单](docs/reference/mcp-and-tools.md)) - **自我验证的 Findings。** `verify_finding` 重新运行每个被引用的工具调用,并确认输出 SHA-256 仍然匹配;`detect_contradictions` 在裁判合并之前将 pool 冲突作为第一类记录提出 —— 因此第三方可以独立重放该链条。([工具](agent-config/TOOLS.md)) - **大规模 fleet 扫描。** 运行整个资产,而不只是一台机器:investigate → correlate → render pipeline 生成单个跨主机的 `FLEET_REPORT`,显示仅出现在多台机器上的信号 —— 多台主机上运行的相同罕见进程、近乎同时的进程创建浪潮、MITRE 技术的 传播。可在 SANS SIFT VM 中运行([fleet 分析](docs/using/fleet-analysis.md))或在本地逐主机运行而无需 VM([全 case 本地运行](docs/using/whole-case-local-run.md))。 - **可选的判定后操作。** 当操作员部署了 n8n 工作流时,判定可以驱动 通知、工单或遏制步骤。开箱即用时不会部署任何工作流,因此该步骤 记录为已跳过。无论哪种情况,它都位于审计链之外 —— 既不是证据,也不是 Finding。 ## 准确性与范围 如果没有解析器或工具能提取出某个 artifact 类别,VERDICT 就无法对其进行推理 —— 这就是信任 边界,而不是脚注。每次运行都会写入一个 `coverage_manifest.json` sidecar(并将相同的 对象嵌入到 `verdict.json` 中),每个 artifact 类别对应一行。最强有力的声明不是“AI 审查了整个镜像”;而是通过可重放的工具检查了被引用的 artifact。 有争议或不支持的线索保持可见,表现为矛盾、`HYPOTHESIS` 或 `analysis_limitations`。 准确性是根据公布的答案标准进行衡量的,而非断言。该仓库在 `goldens/` 下附带了小型答案标准; 大型测试集使用 `scripts/fetch-fixtures.sh` 进行分阶段处理,然后使用 `scripts/score-recall.py tmp/auto-runs/ --golden goldens/` 进行评分。方法、语料库形态、 误报控制以及客观限制详见 [`docs/accuracy-report.md`](docs/accuracy-report.md); 对抗性挑战详见 [`docs/red-team-challenge.md`](docs/red-team-challenge.md)。 ## 开始使用 单条命令即可安装产品前提条件并验证环境: ``` bash scripts/setup ``` 它将安装工具链(Rust、uv、Node、pnpm)以及它能管理的受支持的本地 DFIR 二进制文件 (Volatility 3、Hayabusa、Chainsaw、Velociraptor、Sleuth Kit、tshark、pandoc —— YARA 内置于 Rust 二进制文件中),构建并验证两个 MCP 服务器,运行 preflight `doctor`,并打印出客观的 绿色/黄色摘要。常见变体: ``` bash scripts/setup --run # install, then watch evidence/ and investigate on drop bash scripts/setup --with-sift # install local prerequisites and provision the SANS SIFT VM bash scripts/setup --json # machine-readable status for scripts/CI ```

scripts/doctor.sh preflight printing a green READY summary

scripts/doctor.sh: one preflight, an honest green/amber summary, then you are ready to run.

**SANS SIFT VM** 是参考取证环境,并为磁盘镜像一致性提供完整的工作站基准; `--with-sift` 以无头模式获取受限的 9.3 GB OVA 并构建 VM, 遇到任何故障时都会干净地回退到本地模式(内存、EVTX、PCAP、Velociraptor 和受支持的磁盘工件)。 完整的前提条件见 [INSTALL.md](INSTALL.md);各环境(本地 vs. SIFT VM)的详细信息见 [QUICKSTART.md](QUICKSTART.md)。 要运行 Case,请将 `verdict` 指向单个镜像或混合的 case 目录(内存 + EVTX + 磁盘 + 网络 + Velociraptor): ``` scripts/verdict # --sift 在 SANS SIFT VM 内运行 DFIR 工具(默认:local host) # --watch 监视 evidence/ 并在下次放入时进行调查 # --no-dashboard 不要自动打开浏览器 ``` 位于 `http://localhost:3000` 的仪表板会实时流式传输运行过程。证据文件绝不会被提交 (它们被 gitignore 忽略),因此全新的克隆不包含任何证据文件 —— 使用 `bash scripts/fetch-fixtures.sh` 暂存公共数据集(来源和 SHA-256 见 [docs/DATASET.md](docs/DATASET.md))或者将 您自己的镜像拖放到 `evidence/` 中。每次运行都是一次实时测试:确认 `tmp/auto-runs//verdict.json` 包含真实的结论,且 `manifest_verify.json` 报告 `overall: true`。

Driving VERDICT interactively as a Claude Code agent investigating four EVTX samples

Agent mode: one prompt scopes the evidence (four EVTX samples — lateral movement, defense evasion, credential access) and bootstraps the pipeline.

## 仓库结构 ``` . ├── agent-config/ — runtime agent identity (SOUL / AGENTS / PLAYBOOK / TOOLS / MEMORY) ├── services/mcp/ — Rust MCP server (31 typed DFIR tools) ├── services/agent_mcp/ — Python MCP server (12 crypto / ACH / memory tools) ├── services/agent/ — findevil_agent package (crypto chain + ACH primitives) ├── apps/web/ — Next.js dashboard (live audit-stream viewer + design system) ├── scripts/ — verdict launcher, report renderer, CI smoke runners ├── docs/ — reference/ (tools + deps + env), using/ (how to run), architecture, crypto attestation └── .mcp.json — Claude Code auto-spawn registry: 6 MCP servers (2 product + 4 non-product helpers) ``` ## 文档 - [已发布的文档](https://timothyvang.github.io/verdict-dfir/) — GitHub Pages 站点 - [docs/README.md](docs/README.md) — 官方文档索引 - [docs/using/running-verdict.md](docs/using/running-verdict.md) — 所有标志、运行模式和输出文件 - [docs/reference/mcp-and-tools.md](docs/reference/mcp-and-tools.md) — 完整的 MCP-server 和工具清单([依赖项](docs/reference/dependencies.md)) - [docs/architecture.md](docs/architecture.md) — 信任边界和 agent 拓扑 - [docs/cryptographic-attestation.md](docs/cryptographic-attestation.md) — 证据保管链和 FRE 902() - [docs/verdict-semantics.md](docs/verdict-semantics.md) — `SUSPICIOUS` / `INDETERMINATE` / `NO_EVIL` 的含义 - [docs/false-positives.md](docs/false-positives.md) — VERDICT 如何避免过度声明 - [docs/release-surface.md](docs/release-surface.md) — 发布渠道和公开来源边界 ## 许可证 Apache-2.0。见 [LICENSE](LICENSE)。 VERDICT 最初是为 SANS Find Evil! 2026 挑战赛开发的,并作为一个 独立的 DFIR 工具进行维护。内部标识符(findevil-mcp@findevil/webscripts/find-evil)保留了该名称;标准的操作员命令是 scripts/verdict
标签:AI智能体, Claude Code, MITM代理, Python, Rust, 可视化界面, 库, 应急响应, 数字取证, 无后门, 网络流量审计, 自动化脚本, 逆向工具