WilBtc/find-evil-sleuth
GitHub: WilBtc/find-evil-sleuth
一个基于 Postgres 和 SANS SIFT 的自主数字取证智能体系统,能够端到端完成从原始证据分析到带引用报告生成的全流程调查。
Stars: 0 | Forks: 0
# 🔍 find-evil-sleuth
### 基于 Postgres 底座的自主、防篡改 DFIR —— 从原始证据到带引用的报告,全程无需人工干预。
[](LICENSE)
[](https://github.com/WilBtc/find-evil-sleuth/actions/workflows/ci.yml)
[](https://www.sans.org/)
[](https://www.sans.org/tools/sift-workstation/)
[](#architecture)
**专为 SANS "FIND EVIL!" 黑客松打造的 Level-5 智能体 DFIR 系统。**
约束条件不是提示词,而是架构。
## ✅ 黑客松提交合规性
每一项必交内容都映射到了确切的位置,以便评委一眼核验完整性。
| # | 必交项 | 位置 |
|---|---------------|----------|
| 1 | 公开代码仓库 | **本仓库** — https://github.com/WilBtc/find-evil-sleuth |
| 2 | 开源许可证 (Apache-2.0) | [`LICENSE`](LICENSE) |
| 3 | 包含设置说明的 README | 本文件 → [快速开始](#-quick-start) |
| 4 | 在线部署 URL 或分步说明 | [快速开始](#-quick-start) + [持久化检查器 (SaaS)](#-persistent-inspector-saas) |
| 5 | 功能与特性的文字描述 | [它是什么](#what-it-is) + [`submission/devpost-form.md`](submission/devpost-form.md) |
| 6 | 演示视频 (≤5 分钟,含语音解说,展示自我纠错能力) | [`submission/demo.mp4`](submission/demo.mp4) · 托管 URL 见 [`submission/devpost-form.md`](submission/devpost-form.md) |
| 7 | 架构图 | [`docs/architecture.svg`](docs/architecture.svg) (渲染于 [架构](#architecture)) |
| 8 | 证据数据集文档 | [`docs/EVIDENCE.md`](docs/EVIDENCE.md) |
| 9 | 准确率报告 | [`docs/ACCURACY.md`](docs/ACCURACY.md) |
| 10 | Agent 执行日志 | [`submission/execution-log.ndjson`](submission/execution-log.ndjson) · 实时日志见 [`logs/`](logs/) |
## 它是什么
**find-evil-sleuth** 能够自主运行完整的数字取证与事件响应调查 —— 从原始磁盘、内存和网络证据,到结构化且附带完整引用的报告 —— 全程无需任何人工介入。
三个专家级子 Agent(磁盘、内存、网络)驱动了完整的 SANS SIFT 工具链。每个子 Agent 都会在 Postgres 17 底座中生成 `findings` 记录,每一条记录都包含 **BLAKE3 哈希的 artifact 链**、一条 **Merkle 链式审计追踪**,以及一个 **Apache AGE 攻击图**节点。验证器子 Agent 会针对原始证据重新执行*每一个*声明;IR 叙述器子 Agent 则会将已确认的发现转化为报告,其中每一句话都带有 `[F-NNN]` 引用,以追溯至其来源。
### 与众不同之处
大多数智能体 DFIR 工具依赖提示词工程将模型限制在界限内。而 find-evil-sleuth 让违规操作在**结构上变得不可能**:
- 🔒 **护栏是架构,而非指令。** 一个 Bash `PreToolUse` 钩子会对任何非 `./bin/sb`(broker)或 `./bin/es`(evidence-store)的命令执行退出码为 1 的终止操作 —— 这是在 shell 接触到命令*之前*强制执行的。Agent 根本无法直接运行 `strings`、`grep` 或 `tshark`。
- 🦀 **Rust broker 负责协调每一次工具调用。** 它使用 `pg_jsonschema` 验证参数,在带有自定义 **seccomp** 配置文件和**只读**证据挂载的 **rootless podman 容器**中运行每个取证二进制文件,并将 stdout/stderr 直接流式传输到 Postgres 中。
- 🧠 **通过重新执行来限制幻觉。** 验证器会使用完全相同的参数重新运行每个发现对应的原始工具调用,并比对输出。任何无法复现的内容都会被标记为 `refuted` 并从报告中剔除。
- 🗄️ **Postgres 是 Agent 的大脑。** 每次工具调用都是一条记录。每个 artifact 都通过内容寻址。`./bin/es cite F-001` 会在 100 毫秒内返回完整的溯源链 —— 工具调用、参数、退出码、stderr、BLAKE3 哈希、artifact 内容。评委可以在演示期间运行实时的 `SELECT` 查询。
## 🏆 评审标准 → 设计
| # | 标准 | 我们的应对方案 |
|---|-----------|-------------------|
| 1 | **自主执行质量** | ADW 外部循环 + Best-of-N 叙述器 (Opus 评判);基于单个发现的事件驱动式重新验证 (数据库触发器 + `LISTEN/NOTIFY`,无时钟,无人工输入);自我纠错限制为每个发现最多重试 3 次 |
| 2 | **IR 准确性** | 验证器通过 broker 重新运行每个声明;`validation_status ∈ {confirmed, refuted, inconclusive, drift}`;pgvector 余弦去重合并重复的 IOC。详见 [`docs/ACCURACY.md`](docs/ACCURACY.md) |
| 3 | **广度 × 深度** | 针对完整 SIFT 工具链的三个深度专家:Sleuth Kit + Plaso (磁盘),Volatility 3 (内存),tshark + Zeek + Suricata 配合 ET-Open 规则 (网络) |
| 4 | **约束实现** | 架构级护栏:Bash 钩子 + Rust broker + rootless podman + 自定义 seccomp + 只读挂载 + `pg_jsonschema` —— 结构性的,而非系统提示词 |
| 5 | **审计追踪** | BLAKE3 内容寻址 artifact,Merkle 链式 `tool_calls` hypertable,`findings.tool_call_id` 外键;`es cite F-NNN` 在 <100 ms 内返回完整追踪记录;pgaudit 记录每一次 `SELECT` |
| 6 | **可用性与文档** | 单命令快速启动;持久化浏览器检查器;架构 SVG;每个报告段落中包含 `[F-NNN]` 引用 |
## 🚀 快速开始
```
# 1. 克隆并启动 Postgres substrate
git clone https://github.com/WilBtc/find-evil-sleuth
cd find-evil-sleuth
docker compose -f docker/compose.yaml up -d
# 2. 获取 SANS evidence case(从 digitalcorpora.org 下载)
./scripts/fetch-evidence.sh ./cases/lone-wolf/
# 3. 运行完整调查(triage → specialists → validator → narrator)
./scripts/investigate.sh ./cases/lone-wolf/
# 4. 引用任何发现 — 完整 provenance chain 在 <100 ms 内
./bin/es cite F-001
```
`investigate.sh` 驱动完整的 ADW pipeline:分类阶段对证据进行分流,三个专家 Agent 并行运行,验证器重新执行每一个声明,最后由叙述器将 `report.md` 输出到案例目录中。在 8 核 / 32 GB 机器上的典型挂钟时间:处理完整的磁盘+内存+网络案例需 **20–40 分钟**;证据下载是唯一耗时的步骤。
一个快速的端到端冒烟测试(底座已运行)可在几秒钟内完成:
```
./scripts/smoke-test.sh --skip-compose # clone-to-`cite` sanity check
```
## 🖥️ 持久化检查器 (SaaS)
`bin/sleuth-saas` 是一个编译好的 Rust Web 应用 —— 一个用于浏览任何已完成调查的持久化浏览器 UI。无需 Python,无需 notebook,也不需要终端。
```
./scripts/saas.sh up # starts Postgres if needed, launches inspector on :8932
```
打开 **http://127.0.0.1:8932/**,即可在不到一秒的时间内浏览任何案例。
| 页面 | URL | 显示内容 |
|--------|-----|--------------|
| 案例列表 | `/` | 所有案例,包含证据数量和最新活动徽章 |
| 发现表格 | `/case/标签:Metaprompt, PostgreSQL, Rust, 可视化界面, 子域名变形, 数字取证, 网络流量审计, 自动化分析, 自动化脚本, 请求拦截, 跨站脚本, 逆向工具, 防篡改