内容
# TRUDI
**数字调查威胁响应单元**
基于SANS SIFT工作站的自主DFIR代理。TRUDI运行完整的事件响应调查——磁盘分类、内存取证、Windows工件解析、IOC丰富、YARA搜索——并生成结构化的分析师报告,附有完整的审计轨迹,无需在每一步都提示确认。
一个单独的模型分阶段指导调查,一个对抗性审查者挑战每一个结论,直到报告完成。TRUDI只报告那些经过审查的内容。
为 [Find Evil! 黑客马拉松](https://findevil.devpost.com/) 构建 —— SANS Institute / Devpost,2026年4月至6月。
---
## 目录
**本README:** [工作原理](#工作原理) · [前提条件](#前提条件) · [设置](#设置) · [API密钥](#API密钥) · [启动案例](#启动案例) · [实时监控(实验性)](#实时监控--自主响应-实验性) · [生成内容](#生成内容) · [跟踪仪表盘](#跟踪仪表盘) · [提交组件](#Find-Evil-提交组件) · [工具命名空间](#工具命名空间) · [YARA规则](#捆绑YARA规则) · [证据约束](#证据约束) · [测试套件](#运行测试套件) · [存储库布局](#存储库布局) · [许可证](#许可证)
**文档:**
| 文档 | 内容 |
|-----|--------------|
| [试用](docs/try-it-out.md) | 逐步:浏览已完成的运行(无需密钥)或驱动全新调查直至结束 |
| [架构](docs/architecture.md) | 组件、MCP边界、防护层、安全边界([Mermaid源代码](docs/architecture.mmd) · [图表PNG](docs/media/architecture.png)) |
| [项目描述](docs/project-description.md) | Devpost故事——设计原理、推理循环、门控、好奇心预算 |
| [数据集文档](docs/datasets.md) | 每个案例的来源、证据来源、发现和答案密钥 |
| [准确性报告](docs/accuracy-report.md) | 假阳性、漏报的工件、幻觉被捕获、置信度校准、污染 |
| [实时监控演示](demo/live-monitoring/README.md) | *(实验性)* Velociraptor + 受害者Docker栈和自动保护循环演练 |
| [实时终端测试](docs/live-endpoint-testing.md) | *(实验性)* 只读`live.*` SSH分类针对正在运行的主机 |
| [媒体](docs/media/README.md) | 仪表盘截图 + 演示视频笔记 |
---
## 工作原理
TRUDI是一个**三模型系统** —— 一名分析师和两个独立配置的推理模型,指导和挑战分析师:
**Claude(主要分析师)** —— 协调调查,选择工具,通过TRUDI MCP服务器运行它们,解释输出并编写报告。
**DAIR阶段指导者** (`dair.*`) —— 将调查作为递归状态机运行(分类 → 收集 → 分析 → 扫描 → 报告)。每次工具批处理后,`dair_assess`重新读取证据图,决定下一阶段,并发出绑定`priority_tools`工作订单。 **DAIR规定;Claude执行。** 其后端通过`DAIR_BACKEND`独立配置。
**对抗性审查者** (`reason.*`) —— 从两个方向挑战调查:
1. **上游** —— 在每个分类入口处,它生成一个优先计划和竞争假设(包括至少一个非主导参与者/机制),绑定哪些区分工具首先运行。
2. **下游** —— 在任何结论到达报告之前,它评估发现,评估置信度,检查引文,并运行预报告门控——标记不支持的声明,逻辑漏洞和替代解释。
两个推理表面都可以更换:`REASON_BACKEND`和`DAIR_BACKEND`都接受Claude API(默认),任何OpenAI兼容的端点或本地Foundation-Sec-8B-Reasoning服务器,并且可能指向不同的模型。模型交换结构化的`DIRECTIVES`块,绑定下一阶段的工具选择。分歧通过上限自我纠正循环解决(最多3次迭代);未解决的项目报告为`UNCERTAIN`而不是丢弃。
> **Find Evil! 提交配置:** 黑客马拉松提交运行完全在Claude上 —— Claude Code(Opus)作为主要分析师,**Opus**作为推理(`REASON_BACKEND=claude`)和DAIR(`DAIR_BACKEND=claude`)模型。无需本地模型服务器。
### 执行流程
```
案例打开
│
├─ misc.start_execution_log ← 跟踪日志初始化
├─ [并行] 预计划分类 ← ez.recmd_hive ×3 + vol.symbol_check + hash.verify_evidence_hash
├─ reason.hypothesize (案例问题) ← 竞争假设,包括≥1个非主导
├─ reason.plan ← 优先级分类计划
│
└─ DAIR循环 ── 重复直到 next_phase = 报告 ───────────────┐
├─ dair.dair_assess ← 阶段决策 + 优先级工具工作订单
├─ [工具批处理 — 磁盘、内存、工件、网络、…] │ (+ 可选的好奇心探针)
│ └─ reason.hypothesize ← 每个可疑工件
└─ dair.dair_assess (结果) ──────────────────────────────┘
│
(任何确认/可能发现之前)
├─ reason.evaluate_finding / 置信度计算 / 引文检查
├─ misc.record_finding ← 门控,链接到源调用ID
│
(报告阶段)
├─ reason.synthesize ← 跨发现一致性检查
├─ reason.pre_report_check ← 阻止直到发现 + 属性解决
├─ misc.export_execution_log ← 跟踪写入报告/
└─ misc.write_final_report ← 门控最终报告写入
```
每次工具调用、DAIR调用、原因调用和确认发现都会写入实时JSON跟踪日志,贯穿整个调查过程。Markdown导出是人类可读的。
---
## 先决条件
1. **SANS SIFT工作站** —— Ubuntu 22.04 x86-64,带有取证工具(Volatility 3、EZ Tools、Sleuth Kit、Plaso、YARA、bulk_extractor等)
- 下载:https://www.sans.org/tools/sift-workstation/
2. **协议SIFT** —— 安装Claude Code和取证技能剧本
- 安装:https://github.com/teamdfir/protocol-sift
3. **Python 3.10+** 和 **dotnet** —— 两者都包含在SIFT工作站中
4. **推理后端** —— **必需**
TRUDI使用两个独立配置的推理模型——对抗性审查者(`REASON_BACKEND`)和DAIR阶段指导者(`DAIR_BACKEND`)。这些是TRUDI工作原理的核心,而不是附加组件:没有它们,代理将无监督运行,发现永远不会被挑战或置信度评分,阶段方向将回退到静态路径。配置两者,然后再运行。每个选项与Claude API(默认)、OpenAI兼容端点或本地Foundation-Sec-8B-Reasoning服务器相同,并且可能指向相同或不同的模型:
| 后端 | 配置 |
|---------|--------|
| `claude`(默认) | `ANTHROPIC_API_KEY=sk-ant-...` —— 无服务器要求 |
| `openai-compat` | `REASON_URL` / `DAIR_URL` + `REASON_API_KEY` / `DAIR_API_KEY` |
| Foundation-Sec(本地) | `…_BACKEND=openai-compat` + `…_URL=http://localhost:8000` |
| Foundation-Sec(HF) | `…_BACKEND=openai-compat` + `…_URL=<hf-endpoint>` + `…_API_KEY=hf_...` |
提交运行都在`claude`上,带有Opus(参见[工作原理](#工作原理))—— 最简单的设置是添加`ANTHROPIC_API_KEY`,就完成了。TRUDI将在没有配置后端的情況下启动,但这**不是评估TRUDI的受支持方式**:原因和DAIR调用将被跳过,您将看到一个空壳代理,而不是TRUDI。
### 系统取证包
`install.sh`会自动安装这些(如果需要,会启用`universe` apt组件)。在完整的SIFT工作站上,大多数已经存在;在更轻量级的基礎上,或者如果安装程序记录了一个`!`警告,手动安装:
```bash
sudo add-apt-repository -y universe # pst-utils / pff-tools / tcpxtract live here
sudo apt-get update
sudo apt-get install -y pff-tools pst-utils binwalk tcpxtract sleuthkit ewf-tools
```
| apt包 | 二进制文件 | TRUDI工具需要它 |
|-------------|----------|--------------------------|
| `pff-tools` | `pffexport`, `pffinfo` | `misc.pff_export`(PST/OST电子邮件提取) |
| `pst-utils` | `readpst`, `lspst` | `misc.readpst_extract`(PST→mbox)—— **不是** `libpst-utils`; 该包不存在 |
| `sleuthkit` | `fls`, `icat`, `istat`, `mmls`, `blkls`, `mactime`, `tsk_recover` | `tsk.*` |
| `ewf-tools` | `ewfmount`, `ewfinfo`, `ewfverify` | `ewf.*`, `img.*` E01安装 |
| `tcpxtract` | `tcpxtract` | `net.tcpxtract_streams` |
| `binwalk` | `binwalk` | 固件/嵌入式雕刻 |
| **chainsaw** (GitHub发布`v2.10.2` → `/usr/local/bin`,不是apt) | `chainsaw` | `misc.chainsaw_hunt`(Sigma超过EVTX)—— 可选;TRUDI运行没有它 |
验证安装后:`for b in pffexport readpst fls ewfmount tcpxtract; do command -v "$b" || echo "MISSING: $b"; done`
---
## 设置
```bash
git clone https://github.com/nebulae/trudi ~/trudi
cd ~/trudi
./install.sh
```
`install.sh`执行以下操作:
- 检查`python3`、`dotnet`和`claude` CLI
- 在`~/.venv`处创建Python venv并安装所有依赖项
- 复制`.env.example` → `.env`(编辑此文件添加API密钥)
- **备份** 现有的`~/.claude/CLAUDE.md`,并带有UTC时间戳,然后安装TRUDI协调器
- 注册Claude Code钩子、斜杠命令和技能(钩子直接从存储库运行——没有漂移倾向的部署副本)
- 在`claude mcp add --scope global`全局注册TRUDI MCP服务器
- 运行完整的测试套件(1,100+测试)作为烟雾检查
如果`~/.claude/CLAUDE.md`已经存在(例如,从Protocol SIFT安装),备份将被写入`~/.claude/CLAUDE.md.<YYYYMMDDTHHMMSS>.bak`——原始文件永远不会被覆盖而无需备份。
### API密钥
编辑`~/trudi/.env`。TRUDI在没有任何密钥的情况下运行,但**缺少密钥会降低运行而不是破坏它** —— 降低的程度不是纯粹的视觉效果:
| 密钥 | 权力 | 如果缺失 |
|-----|--------|-----------|
| `ANTHROPIC_API_KEY` | `reason.*`审查者和`dair.*`指导者(当`…_BACKEND=claude`) | **原因和DAIR调用被跳过。** 发现永远不会被挑战、评分或引文检查;阶段方向回退到静态路径。审计线索和分析严谨性使TRUDI运行失去了区别。 |
| `VIRUSTOTAL_API_KEY` | `enrich.vt_lookup_*` | 哈希/IP/域名声誉查找返回“未配置”;其他一切继续。 |
| `ABUSEIPDB_API_KEY` | `enrich.abuseipdb_check` | IP滥用评分跳过;其他一切继续。 |
> **黑客马拉松条目必填:** `ANTHROPIC_API_KEY`。提交运行主要分析师、审查者和DAIR指导者都在Claude/Opus上(参见[工作原理](#工作原理)),因此这个密钥使运行成为一个**真正的TRUDI运行** —— 对抗性审查和阶段方向取决于它。两个丰富密钥是推荐的(它们添加IOC验证),但可选且永远不会阻止调查。
```bash
# IOC丰富
VIRUSTOTAL_API_KEY=your_key_here
ABUSEIPDB_API_KEY=your_key_here
# 推理后端 - 审查者 + DAIR指导者(默认为claude)
REASON_BACKEND=claude
DAIR_BACKEND=claude
ANTHROPIC_API_KEY=sk-ant-... # Claude API - 由两者使用,当backend=claude
# 提交默认:Opus用于推理和DAIR
REASON_MODEL=claude-opus-4-8
DAIR_MODEL=claude-opus-4-8
# 或将后端指向OpenAI兼容的/本地端点:
# REASON_BACKEND=openai-compat
# REASON_URL=https://api.openai.com/v1 # 或 http://localhost:8000 本地vLLM
# REASON_API_KEY=sk-...
# DAIR_BACKEND=openai-compat
# DAIR_URL=http://localhost:8001 # 可能与REASON_URL不同
```
**Foundation-Sec(openai-compat后端,本地vLLM):**
```bash
pip install vllm
vllm serve "fdtn-ai/Foundation-Sec-8B-Reasoning" \
--reasoning-parser minimax_m2 \
--quantization bitsandbytes --load-format bitsandbytes # for <24 GB VRAM
# 然后设置:REASON_BACKEND=openai-compat, REASON_URL=http://localhost:8000
```
---
## 启动案例
### 1. 创建案例目录
```bash
cp -r ~/trudi/case-template ~/cases/<CASE_ID>
```
### 2. 编辑案例CLAUDE.md
在`~/cases/<CASE_ID>/CLAUDE.md`中填写证据路径、主机名和范围。这是唯一的手动步骤 - 其他一切都是自主的。
```
~/cases/<CASE_ID>/
├── CLAUDE.md ← 编辑此文件
├── .claude/
│ └── settings.json ← MCP工具允许列表(预填充)
├── evidence/ ← 将磁盘镜像和内存捕获放在此处
├── analysis/ ← 中间工件(自动创建)
├── exports/ ← 工具输出:CSV,JSON,bodyfiles(自动创建)
└── reports/ ← 最终报告 + 跟踪日志(自动创建)
```
### 3. 放置证据
```bash
cp /path/to/image.E01 ~/cases/<CASE_ID>/evidence/
cp /path/to/memory.img ~/cases/<CASE_ID>/evidence/
```
### 4. 在案例目录中打开Claude Code
```bash
cd ~/cases/<CASE_ID>
claude
```
### 5. 启动调查
```
Investigate this case. Start with the pre-enumeration triage, then follow the plan.
```
TRUDI将从那里自主运行。 它不会在步骤之间请求确认。最终输出是`reports/`中的结构化报告和`reports/`中的完整执行跟踪。
---
## 实时监控 & 自主响应(实验性)
> **状态:进行中,不是Find Evil! 提交的一部分。** 此层今天运行,但是实验性脚手架;被评判的提交是上述只读静态调查员。
静态图像调查之外,TRUDI可以通过Velociraptor监视实时端点并自主响应。这是TRUDI写入系统的位置,并且仅在**证据边界之外**,通过单独的门控路径。
- `monitor.*` - 基线捕获、监视器生命周期、警报排水、每项调查的跟踪
- `velo.*` - 只读Velociraptor API(客户端、工件收集、VQL)
- `live.*` - 只读实时分类SSH(进程、网络、持久性、服务、登录)
- `respond.*` - **门控** 遏制(进程挂起/杀死、网络阻塞)通过结构化、类型验证的SSH路径
**自动保护(http://localhost:ACT-N)自动执行**可逆且低风险**层面的遏制,并显示每个动作的回滚命令;任何破坏性(不可逆转,或风险≥中级)的操作都会暂停循环,直到操作员输入`approve ACT-N`。自动与批准的边界由服务器根据每个配方的`risk`/`reversible`元数据分类 - 代理无法重新分类。
**尝试端到端:** [demo/live-monitoring/README.md](demo/live-monitoring/README.md) - 一个自包含的Velociraptor + 受害者Docker栈,具有一键启动、分阶段的Atomic Red Team攻击和TRUDI循环的完整演练(基线→监视器→警报排水→自动保护,包括`approve ACT-N`流程)。它由`/trudi-*`斜杠命令驱动,`install.sh`将其安装到`~/.claude/commands/`。对于只读SSH分类路径,请参阅[docs/live-endpoint-testing.md](docs/live-endpoint-testing.md)。
---
## 生成内容
| 文件 | 内容 |
|------|----------|
| `reports/<CASE_ID>_investigation_report.md` | 结构化分析师报告 — 执行摘要、攻击时间线、置信度级别的环境警告 |
| `reports/<CASE_ID>_trace.md` | 人类可读的审计轨迹 — 每个工具调用、原因调用和确认的发现都有UTC时间戳 |
| `reports/<CASE_ID>_trace.json` | 机器可读的跟踪 — 相同的数据,结构化以适应摄入 |
| `analysis/<CASE_ID>_trace.json` | 实时跟踪(在调查过程中增量写入) |
| `exports/` | 原始工具输出 — MFT CSV、EVTX导出、预取、注册表、amcache、shimcache、USN日志、netscan等 |
## 跟踪仪表盘
每次调查都会编写一个实时JSON跟踪;捆绑的仪表盘在浏览器中实时渲染。启动它一次,它将为`~/cases`下的所有案例提供服务:
```bash
./dashboard.sh # 在 http://127.0.0.1:8765 提供 ~/cases 服务
./dashboard.sh --port 9090
./dashboard.sh --cases-root /data/cases
```
`install.sh`还将`trudi-dashboard`启动器安装到`/usr/local/bin`。在案例打开时,TRUDI会打印该案例的实时仪表盘网址,因此您可以实时查看调查的展开:
| 视图 | 显示 |
|------|-------|
| **跟踪查看器** | 每项工具调用、DAIR调用、原因调用和发现的按时间顺序流 — UTC时间戳、参数和门控结果 |
| **调查链** | 发现的线性链 — 每个发现通过`input_call_ids`链接回生成它的确切工具执行 |
| **调查图** | 跟踪的因果DAG — 节点为假设、工具运行和发现;线性为边 |
**跟踪查看器** - 每个工具/DAIR/原因调用和发现,带有参数和门控结果:

**调查链** - 每个发现通过`input_call_ids`链接回生成它的确切工具执行:

<!-- 图形视图:删除docs/media/dashboard-graph.png并取消注释:

-->
> 📹 **演示视频:** [Find Evil! — TRUDI 演练](https://youtu.be/Dbx5DcH6V5E)
> · 📦 **演示运行包**(跟踪、报告、控制台): [cases/vanko/](cases/vanko/README.md)
---
## 查找 Evil! 提交组件
八个必需的提交组件及每个组件的位置。标有 **Devpost** 的项目在 [提交页面](https://findevil.devpost.com/) 上输入;其他内容都在此仓库中,并在下面链接。
| # | 组件 | 位置 |
|---|-----------|-------|
| 1 | 代码仓库 | 此仓库(MIT — 参见 [LICENSE](LICENSE)) |
| 2 | 演示视频 | [YouTube](https://youtu.be/Dbx5DcH6V5E) (也在 **Devpost** 上) |
| 3 | 架构图 | [docs/architecture.md](docs/architecture.md) · [Mermaid 源代码](docs/architecture.mmd) |
| 4 | 项目书面描述 | [docs/project-description.md](docs/project-description.md) (与 **Devpost** 故事镜像) |
| 5 | 数据集文档 | [docs/datasets.md](docs/datasets.md) — 每个案例的来源、证据指针和调查结果;运行捆绑在 [cases/](cases/) 下,安装到 `~/cases/` 以供仪表盘使用 |
| 6 | 准确性报告 | [docs/accuracy-report.md](docs/accuracy-report.md) — 错误阳性、错过的工件、测试中捕获的幻觉、置信度校准和证据完整性/破坏部分 |
| 7 | 试用说明 | [docs/try-it-out.md](docs/try-it-out.md) — 浏览一个完成的运行(约 2 分钟,无密钥)或驱动一个全新的调查到底;浓缩在 [设置](#设置) + [启动案例](#启动案例) |
| 8 | 代理执行日志 | 提交的运行跟踪 + 报告 + 控制台,位于 [cases/vanko/](cases/vanko/README.md);每个捆绑案例在 [cases/](cases/) 下,提供完整的跟踪,每个运行导出到 `reports/<CASE_ID>_trace.{json,md}`,通过 `misc.export_execution_log` |
辅助材料(实验性,不评分):[demo/live-monitoring/README.md](demo/live-monitoring/README.md) (Velociraptor 即时监控 + 自动保护演练),[docs/live-endpoint-testing.md](docs/live-endpoint-testing.md) (只读 `live.*` SSH 诊断)。另外,[docs/media/](docs/media/README.md) (仪表盘截图 + 演示视频笔记)。
> **对于评委 — 什么是全质量运行的要求:** TRUDI 与 **Claude Code** 和 **`ANTHROPIC_API_KEY`** 一起运行。使用 Opus 驱动分析师、`reason.*` 审查员和 `dair.*` 指挥官(提交配置 — 参见[工作原理](#工作原理)),每个调查结果都经过假设测试、置信度评分、引用检查和阶段指导。**没有密钥,TRUDI 会降级:`reason.*` 和 `dair.*` 调用被跳过** — 调查结果从不受到对抗性挑战,阶段方向恢复到静态路径,因此无密钥运行不能反映提交的系统。参见 [API 密钥](#api-密钥) 以获取完整的降级表。两个丰富密钥(VirusTotal,AbuseIPDB)是推荐但可选的,从不阻止运行。
> 从 [工作原理](#工作原理) 概述开始,然后 **[试用](docs/try-it-out.md)** — 它从克隆到可浏览的完成运行,约两分钟(无需密钥),然后进行全新的调查。执行日志 (#8) 中的每个调查结果都链接到生成它的确切工具调用 — 可在 [跟踪仪表盘](#跟踪仪表盘) 中实时查看。
---
## 工具命名空间
所有法医执行都通过 TRUDI MCP 服务器 — **24 个命名空间**。当存在 MCP 工具时,Claude 从不直接调用二进制文件。
| 命名空间 | 领域 | 关键工具 |
|-----------|--------|-----------|
| `img.*` | 磁盘镜像安装 | `ewf_mount`, `vshadow_mount`, `bde_mount`, `xmount`, `photorec_carve`, `losetup_create` |
| `vol.*` | 内存法医(Volatility 3) | `pstree`, `pslist`, `psscan`, `cmdline`, `netscan`, `dlllist`, `malfind`, `hollowprocesses`, `pebmasquerade`, `suspicious_threads`, `scheduled_tasks`, `registry_hivelist`, `dumpfiles` |
| `tsk.*` | 文件系统(Sleuth Kit) | `fls`, `icat`, `istat`, `ils`, `mactime`, `tsk_recover`, `sigfind`, `mmls`, `fsstat`, `jls`, `jcat` |
| `ewf.*` | E01 镜像 | `ewf_mount`, `ewf_info`, `ewf_verify`, `mount_full_image`, `mount_ntfs` |
| `ez.*` | Windows 工件(EZ 工具) | `mftecmd`, `evtxecmd`, `recmd_hive`, `amcacheparser`, `appcompatcacheparser`, `pecmd`, `lecmd`, `jlecmd`, `sbecmd`, `wxtcmd`, `sqlecmd`, `rbcmd` |
| `plaso.*` | 超级时间线 | `plaso_create_timeline`, `plaso_export_csv`, `plaso_filter_incident_window`, `plaso_info` |
| `yara.*` | 威胁狩猎 | `yara_scan_file`, `yara_scan_directory`, `yara_scan_memory_image`, `yara_scan_strings` |
| `hash.*` | 完整性/相似性 | `hash_file`, `hash_directory`, `verify_evidence_hash`, `ssdeep_hash`, `hashdeep_compute` |
| `strings.*` | 静态分析 | `strings_extract`, `strings_grep`, `hexdump`, `file_identify`, `exiftool_metadata`, `stat_file` |
| `carve.*` | 文件切割 | `carve_bulk_extractor_scan`, `carve_foremost_carve`, `carve_scalpel_carve` |
| `net.*` | 网络分析 | `tcpdump_read`, `tcpdump_extract_http`, `tcpdump_extract_dns`, `tcpdump_extract_ips`, `ngrep_search` |
| `enrich.*` | 威胁情报 | `vt_lookup_hash`, `vt_lookup_ip`, `vt_lookup_domain`, `abuseipdb_check` |
| `misc.*` | Windows 工件 | `evtx_dump`, `evtx_filter`, `regripper_hive`, `parse_scheduled_tasks`, `usbdeviceforensics`, `usnparser_parse`, `analyzeMFT_parse`, `hindsight_chrome`, `clamscan_file`, `pe_scanner`, `pdf_parser_analyze` |
| `reason.*` | 对抗性审查 | `reason_plan`, `reason_hypothesize`, `reason_evaluate_finding`, `reason_confidence_score`, `reason_cite_check`, `reason_synthesize`, `reason_pre_report_check` |
| `dair.*` | 阶段指挥官(状态机) | `dair_assess` |
| `correlate.*` | 跨工具关联 | `process_to_file`, `network_to_process`, `mitre_map`, `mitre_validate` |
| `accuracy.*` | 真实性评分 | `accuracy_compare`, `accuracy_export_report` |
| `coverage.*` | 证据覆盖率报告 | `coverage_report` |
| `af.*` | 反法医检测 | `timestomp_drift`, `event_log_clear`, `sysmon_evasion`, `usn_gaps`, `prefetch_deletion` |
| `attribution.*` | 威胁者归因 | `attribute_actors` |
| `live.*` | 即时终端诊断(只读,SSH) | `live_processes`, `live_network_connections`, `live_persistence_audit`, `live_services`, `live_recent_logins`, `live_yara_scan` |
| `velo.*` | Velociraptor API(只读关于证据) | `list_clients`, `collect_artifact`, `wait_for_flow`, `get_collection_results`, `query` |
| `monitor.*` | 即时监控生命周期 | `baseline_capture`, `start_watcher`, `check_alerts`, `start_investigation`, `end_investigation` |
| `respond.*` | **受控** 隔离和响应 | `suggest_containment`, `approve_action`, `execute_action`, `revert_action` |
> `live.*`、`velo.*`、`monitor.*` 和 `respond.*` 属于 **实验性即时监控层** (参见[上方](#即时监控--自主响应-实验性)),并且 **不是 Find Evil! 提交的一部分**。
---
## 捆绑 YARA 规则
位于 `rules/` — 由 `yara.*` 工具调用自动使用:
| 规则集 | 涵盖 |
|---------|--------|
| `cobalt_strike/` | 默认命名管道、反射加载器、阶段模式、信标配置 |
| `persistence/` | 调度任务 XML 异常、运行密钥模式、服务安装签名 |
| `lateral_movement/` | 传递哈希、网络使用、SMB 横向移动指标 |
| `powershell/` | 混淆 PowerShell、AMSI 绕过、下载摇篮 |
| `anti_forensics/` | 日志清除、时间戳修改、MFT 操作指标 |
---
## 证据约束
TRUDI 在执行者级别强制执行只读证据处理 — 不仅仅是指令。`core/paths.py` 模块阻止任何输出写入解析为 `/cases/`、`/mnt/`、`/media/` 或包含 `evidence/` 段的路径。 此检查在每个带有输出路径的子进程调用之前运行。 它不能通过提示绕过。
所有工具输出在返回给代理之前限制为 50 KB / 150 行,以防止上下文泛滥。 截断在响应中明确标记。
---
## 运行测试套件
```bash
cd ~/trudi
source ~/.venv/bin/activate
pytest --cov --tb=short
```
1,100+ 测试。所有工具调用都被模拟 — 测试在没有安装 SIFT 工具的情况下运行。
---
## 仓库布局
```
trudi/
├── server.py ← FastMCP 服务器 — 安装所有 24 个工具命名空间
├── install.sh ← 从 Protocol SIFT 基线一键安装
├── claude/
│ └── CLAUDE.md ← 全局编织器(安装到 ~/.claude/CLAUDE.md)
├── case-template/ ← 新调查的起始案例目录
│ ├── CLAUDE.md
│ ├── .claude/settings.json
│ └── evidence/ analysis/ exports/ reports/
├── cases/ ← 捆绑案例研究(跟踪 + 报告,无证据)
│ └── <CASE>/ ← 安装到 ~/cases/ 以供仪表盘使用(参见 docs/datasets.md)
├── docs/ ← 提交文档:架构、准确性报告、数据集、
│ 项目描述 + 媒体/(截图、演示视频笔记)
├── core/
│ ├── executor.py ← 安全的子进程运行器(重试、超时、行上限)
│ ├── execution_log.py ← 跟踪日志单例
│ └── paths.py ← 证据路径强制 + 工具二进制位置
├── tools/ ← 每个 MCP 命名空间一个模块(共 24 个)
├── rules/ ← 捆绑 YARA 规则集(5 类)
└── tests/ ← 完整测试套件(1,100+ 测试,模拟)
```
---
## 许可证
在 [MIT License](LICENSE) 下发布。 © 2026 Trinity Harrison.
MCP 配置
以下是此 MCP Server 的配置信息,可直接复制到 Cursor 或其他 MCP 客户端中使用。
mcp.json
连接信息
猜你喜欢
暂无推荐服务器