内容
<p align="center">
<img src="docs/assets/taotie-cover.png" alt="Taotie — 数字取证 & 事件响应" width="820">
</p>
<p align="center">
本地优先的 DFIR 时间线和检测工作台,用于 Windows 法医工件 - 离线,在您的机器上运行。 使用 Tauri v2 + Svelte 5 + Rust 构建。
</p>
<p align="center">
<img alt="License: MIT OR Apache-2.0" src="https://img.shields.io/badge/license-MIT%20OR%20Apache--2.0-1f6feb">
<a href="https://github.com/morimori-dev/taotie/actions/workflows/release.yml"><img alt="release build" src="https://github.com/morimori-dev/taotie/actions/workflows/release.yml/badge.svg"></a>
</p>
Taotie 接受一个三级收集的数据,将其摄入本地的 DuckDB 数据湖,并将其转换为一个统一的时间线,带有 sigma + 启发式检测、跨工件关联和分析图表。所有操作都在您的机器上运行 - 不会离开主机的数据。
<p align="center">
<img src="docs/assets/screenshot-overview.png" alt="Taotie 概览仪表盘" width="900">
</p>
---
## 为什么选择 Taotie
- **本地优先和离线**。单个桌面应用程序。证据被解析到本地数据湖中;不会上传任何数据。适用于隔离或敏感的任务。
- **跨 19 种工件类型的统一时间线**。 EVTX、 `$MFT` 、USN 日志、Prefetch、Amcache、注册表、SRUM、Defender 等,合并并归一化时间。
- **读取原始工件和工具导出**。本地二进制文件( `$MFT` 、 `$J` 、 `.evtx` 、 `.pf` 、 `Amcache.hve` 、注册表 hive ...)以及 KAPE、MFTECmd、PECmd、hayabusa 等的 CSV/JSON 导出。根据名称、扩展名或内容进行分类。
- **多引擎检测,非单次检测**。sigma 规则 + 本地启发式库 + IOC/YARA,层叠 **跨工件关联链**,使孤立的事件变成故事( `下载 → 执行 → 持久化` )。
- **可采取行动的发现**。每个检测结果都带有 ATT&CK 技术/策略映射、日语解释、受影响的主机/用户/进程实体、评分理由和建议的下一步行动。
- **大型案件快速处理**。列式 DuckDB/Parquet 数据湖可以处理数十万到数百万事件,响应迅速。
- **可选 AI 设计**。没有内置 AI - 每个检测结果都是确定的和可解释的,因此调查结果在报告中成立。当您需要模型时,Taotie 配备了一个只读的 [MCP 服务器](#询问您自己的AI-MCP),您可以将 Claude(或其他 MCP 客户端)指向案件,而证据仍保留在主机上。
## 比较
- **hayabusa** - Taotie 直接摄入其输出并添加其他工件类型、关联和调查 UI。互补,不竞争。
- **Timesketch** - 基于服务器和协作;Taotie 是一个本地桌面应用程序。无需服务器,不会上传数据。
- **EZ Tools + 时间线资源管理器** - Taotie 读取 EZ Tools 的 CSV 文件并添加内置检测、关联链和图表到事件的跳转。
## 截图
> 截图使用 HackTheBox 退休的 [_TickTock_]( https://app.hackthebox.com/sherlocks/TickTock ) Sherlock 作为样本数据。
**可疑事件**
<p align="center">
<img src="docs/assets/screenshot-suspicious-events.png" alt="可疑事件分类" width="900">
</p>
**关联链**
<p align="center">
<img src="docs/assets/screenshot-correlation.png" alt="跨工件关联链" width="900">
</p>
**事件浏览器**
<p align="center">
<img src="docs/assets/screenshot-events.png" alt="事件浏览器" width="900">
</p>
**Defender**
<p align="center">
<img src="docs/assets/screenshot-defender.png" alt="Defender 视图" width="900">
</p>
## 功能
- **摄入** 将三级收集的数据(文件夹或文件)摄入 Parquet/DuckDB 数据湖中,并自动检测工件类型。
- **时间线** 带有严重性叠加的 bins 和点击钻入事件。
- **事件浏览器** - 分页、可排序的网格,带有搜索 DSL、每事件详细信息和服务器端 CSV/JSONL 导出完整过滤集。
- **IOC 匹配** - 对整个数据湖进行 IP / URL / hash / path / name 指标扫描。
- **答案候选** - 自动提取的答案候选,用于每个调查问题(初始访问、执行、持久化、 exfiltration ...)。
- **三级工作流** - 三级队列、书签、保存的搜索、每个发现的审查状态。
- 另外还有 **十六进制查看器** 、 **Defender 视图** 和 **风险视图** (按严重性划分的 ATT&CK 技术)。
检测、关联和图表有其自己的部分如下。
## 搜索 DSL
事件浏览器和全文搜索共享一个查询语言。术语组合使用 AND;引用包含空格的值。
```text
finding:true severity:high channel:Security eid:4624 after:2023-05-01T00:00 path:"C:\Users"
```
| 过滤器 | 含义 |
| --- | --- |
| `after:` / `before:` | 时间窗口,UTC( `since:` / `until:` 也可用) |
| `host:` `user:` `process:` `path:` | 实体和文件路径过滤器 |
| `ip:` `url:` `hash:` | 指标 |
| `eid:` `channel:` `level:` `action:` `type:` | 事件日志字段、规范化操作、工件类型 |
| `severity:` / `finding:true` | 检测严重性 / 仅带有检测的事件 |
| 自由文本 | 消息和字段中的全文匹配 |
## 询问您自己的 AI (MCP)
Taotie 没有内置 AI - 检测是确定的,每个发现都是可解释的。但它配备了 `taotie-mcp`,一个 **只读的模型上下文协议** 服务器,因此您可以带来您自己的模型,并用自然语言询问案件。它通过 stdio 以 JSON-RPC 协议通信,打开只读案件(证据完整性不受影响),并暴露六个工具:
`case_summary` · `search_events` (完整的搜索 DSL)· `get_event_detail` · `list_findings` · `get_timeline` · `get_correlation_chains`
由于它是本地 stdio 和只读的, **案件永远不会离开您的主机** - 模型客户端在同一台机器上运行,并且只看到它询问的内容。
使用 Claude Code 注册:
```sh
claude mcp add taotie -- /path/to/taotie-mcp --case-root /path/to/your/case
```
或使用 Claude Desktop / 任意 MCP 客户端( `claude_desktop_config.json` ):
```json
{
"mcpServers": {
"taotie": {
"command": "/path/to/taotie-mcp",
"args": ["--case-root", "/path/to/your/case"]
}
}
}
```
然后询问类似的问题,例如 *"什么关键发现?"* , *"搜索 2023-05-01 以后编码的 PowerShell"*, 或 *"遍历涉及 setuphost.exe 的关联链"* 。 `taotie-mcp` 二进制文件随每个 [release](https://github.com/morimori-dev/taotie/releases) (以及 Windows 便携式 zip 文件)一起提供。
## UI 语言
语言和字体大小在 **设置** 选项卡中切换。日语(默认)和英语已完成; 中文 / हिन्दी / Français / Deutsch 目前涵盖导航和设置,在其他地方则回退到日语。现在,捆绑的检测描述是日语。
## 支持的工件和输入
Taotie 根据名称、扩展名或内容对每个文件进行分类,因此它接受 Windows 原始工件和常见三级工具的 CSV/JSON 导出。
| 工件 | 典型来源文件 / 日志 |
| --- | --- |
| Windows 事件日志( `evtx` ) | `Security.evtx` 、 `System.evtx` 、 `Application.evtx` 、 Sysmon、PowerShell、TaskScheduler、TerminalServices、… ( `.evtx` )、以及 EVTX CSV/JSON 和 hayabusa 输出 |
| NTFS MFT( `mft` ) | `$MFT` ( `.mft` )、MFTECmd CSV |
| USN 日志( `usn_jrnl` ) | `$Extend\$UsnJrnl:$J` 、USN CSV |
| Prefetch( `prefetch` ) | `*.pf` ( `C:\Windows\Prefetch` )、PECmd CSV |
| Amcache( `amcache` ) | `Amcache.hve` 、Amcache CSV |
| ShimCache( `shimcache` ) | AppCompatCache (SYSTEM 注册表)/ CSV |
| 注册表 hive( `registry_hive` ) | `SYSTEM` 、 `SOFTWARE` 、 `SAM` 、 `SECURITY` 、 `NTUSER.DAT` 、 `UsrClass.dat` |
| SRUM( `srum` ) | `SRUDB.dat` |
| Microsoft Defender( `defender` ) | MPLog、Operational 日志、检测历史 |
| 快捷方式( `lnk` ) | `*.lnk` |
| 跳转列表( `jump_list` ) | 自动/自定义目标 |
| 浏览器历史记录( `browser` ) | Chrome/Edge/Firefox 历史记录( `places.sqlite` 、 `History` )、CSV |
| Web 缓存( `web_cache` ) | `WebCacheV01.dat` |
| OneDrive( `onedrive_log` ) | OneDrive 同步日志( `*.odl` ) |
| 计划任务( `scheduled_task` ) | 任务定义 |
| Windows 搜索( `windows_search_log` ) | `Windows.edb` |
| ESE 数据库( `ese` ) | 通用 `.edb` / ESE 存储 |
| 通用( `csv` / `jsonl` / `text_log` ) | `.csv` 、 `.jsonl` 、 `.json` 、 `.txt` 、 `.log` 回归 |
## 检测引擎
- **sigma** - 24 条捆绑规则( LSASS 转储、事件日志清除、编码 PowerShell、 LOLBins、certutil/bitsadmin 下载、Defender 篡改、...),每条规则都有描述、引用、误报注释和 ATT&CK 策略。
- **taotie-core** - 本地启发式库:时间戳篡改( `$SI` / `$FN` 不匹配)、LOLBin/RAT/C2 执行清单、 pass-the-hash、密码喷洒、强行攻击 → 成功、伪造 Kerberos 票据、特权账户创建、服务安装、大规模可执行文件删除、执行后删除、非工作时间登录、RDP 来源、更新程序伪装、用户可写路径执行。
- **ioc / yara** - 指标和签名匹配整个数据湖。
**带来您自己的 sigma 规则**。将 `TAOTIE_SIGMA_RULES` 指向一个目录,它会加载(递归)该目录中的所有 `.yml` / `.yaml` 文件。修改器包括 `contains` / `startswith` / `endswith` / `all` / `re` / `windash` / `cased` ;无效规则被跳过,不会致命。
```sh
TAOTIE_SIGMA_RULES=/path/to/your/rules ./taotie-app
```
## 关联
关联将孤立的事件转化为攻击叙事。链基于共享实体(主机 / 用户 / 进程 / 文件 / IP / 哈希)和时间窗口: `下载 → 执行` 、 `文件创建 → 执行` 、 `计划任务 / 服务 / 注册表持久化 → 执行` 、 `执行 → 删除` 、 `Defender 威胁 → 执行` ,以及时间窗口内的多阶段入侵链。
## 证据完整性
为可能出现在报告中或在法庭上的工作而构建:
- **证据账本** - 每个摄入的文件都记录了大小和 SHA-256;原始字节逐字节保留。
- **监管清单** - 可导出、可重新验证的监管链。
- **签名报告包** - 使用每个工作区的密钥进行哈希和签名,内置验证。
- **审批和审计日志** - 交付件的审批状态、案件操作的审计跟踪。
参见 [docs/security.md](docs/security.md) 获取威胁模型。
## 分析图表
三级漏斗图、 `$SI` / `$FN` 时间戳散点图(离对角线点是时间戳篡改嫌疑人)、ATT&CK 策略 × 小时热图、进程树、USN 文件操作发散条形图,以及 beaconing 间隔直方图 - 每个图表都钻入事件列表。
## 架构
七个 crates Rust 工作区(schema / storage / parsers / api / jobs / search / [mcp](crates/taotie-mcp))。原始对象存储 + Parquet 读取模型背后是 **DuckDB** 查询层,带有 **SQLite** 作业队列驱动摄入。前端是带有 Svelte 5 UI 的 Tauri v2 shell;sigma 规则在构建时嵌入。MCP 服务器重用与桌面应用程序相同的查询层。
## 下载和运行
每个标记版本的预构建包都在 GitHub [Releases](https://github.com/morimori-dev/taotie/releases) 页面上提供。不需要构建环境。
**Windows**
- 便携版(无需安装):下载 `taotie_<version>_x64-portable.zip` ,解压后双击 `taotie.exe` 。需要 WebView2 运行时,它预安装在 Windows 11 和大多数 Windows 10 系统上(如果缺少,请 [下载](https://developer.microsoft.com/microsoft-edge/webview2/) )。
- 安装程序:下载 `taotie_<version>_x64-setup.exe` ,运行它并从开始菜单启动 Taotie。安装程序自动引导 WebView2。
> Windows 二进制文件 **尚未进行代码签名** ,因此 SmartScreen 显示一个蓝色的 *"Windows 保护了您的电脑 - 未知发布者"* 提示。 这是针对新的未签名应用程序的预期行为,而不是恶意软件检测;点击 **更多信息 → 运行任何方式** 。声誉会随着时间的推移而建立,签名也在路线图中。
**Linux**
1. 下载 `taotie_<version>_amd64.AppImage` ,将其放在任意位置并运行:
```sh
chmod +x taotie_<version>_amd64.AppImage
./taotie_<version>_amd64.AppImage
```
AppImage 是自包含的(WebKitGTK 捆绑) - 无需安装。
2. Debian/Ubuntu 替代方案: `sudo apt install ./taotie_<version>_amd64.deb`
版本由 [release workflow](.github/workflows/release.yml) 触发,通过推送 `v*` 标签。
**故障排除**
- *AppImage 无法启动* - 2 类 AppImages 需要 FUSE 2 ( `sudo apt install libfuse2` 在 Debian/Ubuntu 上),或运行它而无需 FUSE: `./taotie_<version>_amd64.AppImage --appimage-extract-and-run`
- *Linux 上空白窗口* - 一些 GPU/驱动器组合会遇到 WebKitGTK 渲染问题;尝试 `WEBKIT_DISABLE_DMABUF_RENDERER=1 ./taotie_<version>_amd64.AppImage`
- *Windows 10 上 Portable exe 显示 WebView2 错误* - 安装 [WebView2 运行时](https://developer.microsoft.com/microsoft-edge/webview2/) 一次,或使用安装程序,它会引导它。
## 从源代码构建
**前提条件**
- Rust(稳定版)和 Node.js 18+。
- Linux:Tauri v2 系统依赖项(WebKitGTK 4.1 等) - 参见 <https://v2.tauri.app/start/prerequisites/>。
**构建可分发包**
```sh
cd ui
npm install
npm run taotie:build
```
这会在 `src-tauri/target/release/bundle/` 下生成安装程序/软件包(Linux:AppImage + `.deb`;Windows:`.exe` 在 Windows 上构建)。
> 构建裸二进制文件?单独构建需要 `cargo build --release --features tauri/custom-protocol` - 普通构建运行在开发模式下并且期望 Vite 开发服务器。
## 工作流
1. 创建/打开一个案例并指向三级收集。
2. 摄入 - 工件被解析到湖中并构建读取模型。
3. 审查 **概览** 和 **三级漏斗图** ,然后是 **可疑事件** 。
4. 跟随 **关联** 链并从任意图表跳转到事件列表。
5. 导出过滤后的事件(CSV/JSONL)用于报告。
## 开发
```sh
cd ui
npm install
npm run taotie:dev # Tauri 开发(webview + Vite 开发服务器在 127.0.0.1:5174)
检查和测试:
```sh
cargo fmt --all
cargo test --workspace
cd ui && npm run check # svelte-check
```
## 更多文档
- [docs/architecture.md](docs/architecture.md) - crate 布局和数据流
- [docs/schema.md](docs/schema.md) - 规范的事件 schema
- [docs/security.md](docs/security.md) - 证据处理和威胁模型
- [docs/adapter_contract.md](docs/adapter_contract.md) - 添加解析器/适配器
- [docs/roadmap.md](docs/roadmap.md) - 此处进展
## 许可证
许可遵循以下任一版本:
- Apache License, Version 2.0( [LICENSE-APACHE](LICENSE-APACHE) 或 <http://www.apache.org/licenses/LICENSE-2.0> )
- MIT 许可证( [LICENSE-MIT](LICENSE-MIT) 或 <http://opensource.org/licenses/MIT> )
您的选项。
### 贡献
除非您明确说明,否则您提交的任何贡献意为 Apache-2.0 许可下的
提交将被双重许可,如上述定义。