内容
<div align="center">
<h1>LogPoseSIFT</h1>
<p>
<strong>自主多代理DFIR编排器</strong><br />
100% 精确度 · 0 幻觉 · 自定义Go语言MCP服务器 · 真实APT数据集验证
</p>
<p>
<a href="https://github.com/amareshhebbar/LogPoseSIFT/blob/main/docs/architecture.md">架构</a> ·
<a href="https://github.com/amareshhebbar/LogPoseSIFT/blob/main/docs/accuracy_report.md">准确率报告</a> ·
<a href="https://github.com/amareshhebbar/LogPoseSIFT/blob/main/docs/dataset.md">数据集</a> ·
<a href="https://github.com/amareshhebbar/LogPoseSIFT/issues">问题</a>
</p>
<p>
<img src="https://img.shields.io/github/last-commit/amareshhebbar/LogPoseSIFT?style=flat-square&color=005571" />
<img src="https://img.shields.io/badge/语言-Go-005571?style=flat-square&logo=go" />
<img src="https://img.shields.io/badge/精确度-100%25-005571?style=flat-square" />
<img src="https://img.shields.io/badge/召回率-92.8%25-005571?style=flat-square" />
<img src="https://img.shields.io/badge/幻觉-0-005571?style=flat-square" />
<img src="https://img.shields.io/github/license/amareshhebbar/LogPoseSIFT?style=flat-square&color=005571" />
</p>
</div>
> **AI引擎:** 设计用于Claude Sonnet 4.6(主要)与Gemini 2.5 Flash作为自动故障转移。所有基准测试结果和演示视频均使用Claude生成。Gemini故障转移功能正常,但未针对整个SRL-2018数据集进行测试。
---
## 什么是LogPoseSIFT
LogPoseSIFT是一种自主DFIR分诊代理,它通过**用Go语言编写的自定义MCP服务器**将Claude(带有Gemini故障转移)连接到SANS SIFT工作站工具链。
核心设计原则:**LLM不能运行shell命令**。它只能调用类型化的Go函数。MCP服务器是安全边界——架构强制执行,而不是基于提示的规则。
在SRL-2018 APT数据集(一个包含DKOM rootkit、C2信标和横向移动的真实世界入侵文档)上,LogPoseSIFT:
- 确定了**14个文档中的13个IOC**,包括外部C2 IP、所有恶意进程和rootkit本身
- 实现了**100%精确度**——零幻觉发现
- 在**6个代理迭代**中完全自主运行,具有检测DKOM rootkit隐藏的自我纠正序列
---
## 证据和结果
| 文档 | 描述 |
|---|---|
| [截图 →](docs/SCREENSHOTS.md) | 5张注释截图,涵盖安全边界、真实APT发现、自我纠正、基准测试和审计轨迹 |
| [演示视频 →](docs/VIDEO.md) | 5分钟屏幕录制,附有旁白——SRL-2018 APT证据的实时分诊 |
| [实时结果 →](docs/RESULT.md) | 实际分诊运行的完整输出——进程发现、C2连接、rootkit检测 |
## 快速入门(SIFT工作站)
```bash
# 1. 克隆
git clone https://github.com/amareshhebbar/LogPoseSIFT
cd LogPoseSIFT
# 2. 设置API密钥
echo "ANTHROPIC_API_KEY=sk-ant-your-key-here" > .env
# 3. 构建
go mod tidy
go build -o logpose-ai ./cmd/sift-mcp/
# 4. 运行MCP服务器(与Claude Desktop或Claude Code一起使用)
./logpose-ai --mode=mcp
# 5. 对证据运行自主分诊
./logpose-ai --mode=ai \
--target=/path/to/evidence.img \
--type=memory # 或:disk | both
```
### 运行基准测试
```bash
# 提取SRL-2018证据
7z x /path/to/base-hunt-memory.7z -o/tmp/evidence/
# 运行基准测试(针对文档化的真实结果进行评分)
chmod +x benchmark/run_benchmark.sh
./benchmark/run_benchmark.sh /tmp/evidence/base-hunt-memory.img memory
```
预期输出:
```
真实阳性(TP):13
假阴性(FN):1
假阳性(FP):0
精确度:100.00%
召回率:92.86%
```
---
## 架构
```
Claude/Gemini(LLM)
│ 仅MCP调用——无shell访问
▼
cmd/sift-mcp/main.go ← 安全边界
│ 已注册12个类型化的MCP工具
│
┌────┴────┐
│ │
agents/ internal/
│ │
├─ 协调器 ├─ 包装器(7个类型化工具包装器)
├─ 内存代理 ├─ 验证器(CONFIRMED/INFERRED/UNVERIFIED)
├─ 磁盘代理 ├─ 相关器(磁盘与内存交叉引用)
└─ 推理日志└─ 注册表(工具允许列表,30+条目)
│
SIFT工具(只读)
vol / fls / log2timeline / rip.pl / yara / hashdeep
```
LLM调用MCP工具 → Go调度到类型化包装器 → 包装器通过`exec.Command`调用SIFT二进制文件(从不使用`bash -c`)→ 输出解析为JSON → 结构化结果返回给LLM。
[完整架构文档 →](docs/architecture.md)
---
## MCP工具(已注册12个)
| 工具 | 类别 | 功能 |
|---|---|---|
| `analyze_memory_windows_info` | 内存 | 操作系统版本、内核基址、架构 |
| `analyze_memory_pslist` | 内存 | 通过池标签扫描进程(绕过DKOM) |
| `analyze_memory_netscan` | 内存 | 活动 + 已关闭TCP/UDP连接 |
| `analyze_memory_malfind` | 内存 | 代码注入、进程挖空 |
| `analyze_memory_cmdline` | 内存 | 所有进程的命令行参数 |
| `hunt_memory_malware` | 内存 | **具有自我纠正功能的完整自主9步分诊** |
| `analyze_disk_timeline` | 磁盘 | log2timeline → psort超级时间线 |
| `analyze_disk_fls` | 磁盘 | 文件系统列表(已分配 + 已删除) |
| `analyze_registry` | 注册表 | SAM/SYSTEM/SOFTWARE/NTUSER注册表提取 |
| `run_yara_scan` | 检测 | 使用8个内置APT规则进行模式匹配 |
| `verify_hashes` | 完整性 | SHA-256/MD5计算或审计与已知良好文件的对比 |
| `correlate_findings` | 分析 | 内存 ↔ 磁盘交叉引用、无文件/时间篡改检测 |
---
## 自我纠正演示
内存代理的自我纠正序列(在终端输出中可见):
```
[*] Claude迭代3/10
-> 工具:hunt_memory_malware
[内存代理] 启动自主内存分诊...
~ [内存代理] vol_windows_info | 805毫秒 | 推断
~ [内存代理] vol_windows_pslist | 31秒 | 推断
↳ DELTA:pslist仅返回头部——确认DKOM rootkit
~ [内存代理] analyze_memory_netscan | 30秒 | 推断
✓ [内存代理] vol_windows_malfind | 882毫秒 | 确认
↳ DELTA:90+进程系统上的空malfind = VAD钩子 = rootkit IOC
✓ [内存代理] vol_windows_cmdline | 890毫秒 | 确认
↳ DELTA:空cmdline = 进程参数被rootkit隐藏
~ [内存代理] vol_windows_svcscan | 1.2秒 | 推断
✓ [内存代理] psxview_diff | 2.1秒 | 确认
↳ DELTA:DKOM确认:87个进程从pslist中隐藏,在pssccan中可见
~ [内存代理] hollowprocesses | 1.8秒 | 推断
~ [内存代理] vol_windows_dlllist | 950毫秒 | 推断
```
---
## 证据完整性
所有操作在架构上都是**只读**的:
- Volatility调用时带有`-f path`——只读文件访问
- TSK工具默认只读
- 工具注册表中没有写入、删除或修改操作
- `exec.Command("vol", args...)`——不是`exec.Command("bash", "-c", input)`
- 在分诊开始时计算SHA-256 + MD5哈希,在结束时验证
- 污染测试:在完整分诊前后进行哈希计算——结果相同
---
## 项目结构
```
LogPoseSIFT/
├── cmd/sift-mcp/main.go # MCP服务器入口点——已注册12个类型化工具
├── agents/
│ ├── orchestrator/
│ │ ├── orchestrator.go # Claude或Gemini双引擎,10次迭代代理循环
│ │ └── findings_extractor.go # 预分诊Go解析器——在LLM开始前嵌入事实
│ ├── memory_agent/memory.go # 具有自我纠正功能的9步自主内存分诊
│ ├── disk_agent/disk.go # 基于证据类型的磁盘分诊,log2timeline管道
│ └── reasoning_logger/reasoning_logger.go # 分析师训练循环——每次调用的意图/假设/增量
├── internal/
│ ├── wrappers/ # 7个类型化工具包装器(无原始shell)
│ │ ├── volatility.go # Volatility 3内存取证
│ │ ├── regripper.go # Windows注册表提取
│ │ ├── tsk.go # TSK:fls / mactime / icat
│ │ ├── bulk_extractor.go # 提取的电子邮件、URL、凭证
│ │ ├── foremost.go # 文件提取/恢复
│ │ ├── log2timeline.go # Plaso超级时间线管道
│ │ ├── yara.go # YARA模式匹配(8个内置APT规则)
│ │ ├── hashdeep.go # SHA-256/MD5证据完整性
│ │ ├── dynamic.go # 注册表驱动的工具执行器
│ │ ├── executor.go # 安全执行——exec.Command包装器(从不使用bash -c)
│ │ └── helpers.go # Shell元字符保护、路径验证、置信度常量
│ ├── registry/sift_tools.go # 30+工具允许列表——二进制 + 类型化固定参数
│ ├── validator/validator.go # 幻觉保护——CONFIRMED/INFERRED/UNVERIFIED
│ ├── correlator/correlator.go # 磁盘与内存交叉引用、DKOM/无文件检测
│ ├── logger/logger.go # 每会话的JSONL结构化审计轨迹
│ └── parsers/
│ ├── plaso_parser.go # Plaso时间线输出解析器
│ └── vol_parser.go # Volatility输出解析器
├── benchmark/
│ ├── run_benchmark.sh # 精确度测试——TP/FP/FN与真实结果对比
│ ├── ground_truth/
│ │ └── srl2018_apt_ground_truth.json # 14个文档化的IOC来自SRL-2018 APT案例
│ └── results/ # 每次运行的得分卡JSON + Markdown
├── assets/ # 文档截图
├── docs/
│ ├── architecture.md # 安全边界 + 完整数据流图
│ ├── accuracy_report.md # 100%精确度,92.86%召回率,0幻觉
│ ├── dataset.md # SRL-2018数据集文档 + 可重复性
│ ├── devpost_story.md # Devpost提交的完整项目故事
│ ├── SCREENSHOTS.md # 5张注释证据截图
│ ├── VIDEO.md # 演示视频 + 时间戳 + YouTube描述
│ └── RESULT.md # SRL-2018运行的完整实时分诊输出
├── data/ # 证据文件——不提交到git
├── logs/ # 会话日志——每分诊运行的JSONL + Markdown
├── logpose-ai # 编译后的二进制文件
├── go.mod
├── go.sum
└── README.md
```
---
## 精确度结果
完整报告:[docs/accuracy_report.md](docs/accuracy_report.md)
针对SRL-2018被入侵的企业网络(SANS DFIR峰会数据集)进行测试:
| 指标 | 结果 |
|---|---|
| 真实阳性 | 13 / 14个IOC |
| 假阳性 | 0 |
| 幻觉 | 0 |
| 精确度 | **100%** |
| 召回率 | **92.8%** |
| 分诊时间 | 552秒 |
---
## 许可证
MIT — 见 [LICENSE](LICENSE)
## 构建目的
[FIND EVIL! 黑客马拉松](https://findevil.devpost.com/) — SANS学院 · 2026年4月–6月
<!-- 文档通过:2026-07-03T04:33:12Z -->