AppliedIR/sift-mcp
GitHub: AppliedIR/sift-mcp
运行在SIFT工作站上的MCP服务器,为AI驱动的数字取证和事件响应提供工具执行、知识增强、案件管理和审计追踪的一体化平台。
Stars: 0 | Forks: 0
# SIFT MCP
[](https://github.com/AppliedIR/sift-mcp/actions/workflows/ci.yml)
[](https://github.com/AppliedIR/sift-mcp/blob/main/LICENSE)
包含所有 SIFT 端 AIIR 组件的 Monorepo。包含 11 个软件包:forensic-mcp(12 个工具 + 14 个资源)、case-mcp(14 个工具)、report-mcp(6 个工具)、sift-mcp(6 个工具)、sift-gateway、forensic-knowledge、forensic-rag、windows-triage、opencti、sift-common 和 case-dashboard。[AIIR](https://github.com/AppliedIR/aiir) 平台的一部分。
**[文档](https://appliedir.github.io/aiir/)** ·
[快速入门](https://appliedir.github.io/aiir/getting-started/) ·
[CLI 参考](https://appliedir.github.io/aiir/cli-reference/) ·
[MCP 参考](https://appliedir.github.io/aiir/mcp-reference/)
## AIIR Lite — 分钟级快速上手
AIIR Lite 最简单的形式是为 Claude Code 提供取证知识以及关于如何执行取证严谨性、展示发现供人工审查以及审计所采取行动的指令。MCP 服务器通过提供权威信息(一个取证知识 RAG 和一个 Windows_triage 数据库)以及可选的 OpenCTI 威胁情报和 REMnux 恶意软件分析来提高准确性。
```
git clone https://github.com/AppliedIR/sift-mcp.git && cd sift-mcp
./quickstart-lite.sh
```
安装程序会下载取证数据库(约 1.1 GB 压缩包)并基于 22,000+ 条取证知识记录构建 RAG 索引。此一次性设置根据网络速度和 CPU 大约需要 15-30 分钟。后续运行将重用现有的数据库和索引。
```
claude
/welcome
```
### 您将获得
- **取证规范** — CLAUDE.md + FORENSIC_DISCIPLINE.md + 参考文档
- **Prompt 强化** — 在每次提示时注入取证规则
- **审计追踪** — 针对每个 Bash 命令和 MCP 查询的带有 SHA-256 哈希的 JSONL 日志
- **RAG 搜索** — 23K+ 条取证记录(Sigma, MITRE ATT&CK, LOLBAS, Atomic Red Team 等)
- **Windows 基线验证** — 针对 known_good.db 的离线文件/进程验证
- **案件管理** — `/case init`, `/case open`, `/case status`, `/case list`, `/case close`
- **安装后验证** — `/welcome` 验证设置并为您指引方向
- **可选插件** — OpenCTI, REMnux, Microsoft Learn, Zeltser IR Writing
无网关,无沙箱,无拒绝规则。Claude 通过 Bash 直接运行取证工具。取证规范通过 prompt 钩子和参考文档进行建议和强化,但 Claude Code 可以选择忽略它们。
### 可选插件
```
./quickstart-lite.sh --opencti # Live threat intelligence
./quickstart-lite.sh --remnux=HOST:PORT # Automated malware analysis
./quickstart-lite.sh --mslearn # Microsoft documentation search
./quickstart-lite.sh --zeltser # IR writing guidelines
```
## Full AIIR — 结构化执行
对于需要更明确的人工介入审批的使用场景,可以部署完整的 AIIR 套件,以通过加密签名、PIN 门控审批和多层控制来确保问责制并强制执行对发现的人工审查。
Full AIIR **与 LLM 客户端无关** — 任何兼容 MCP 的客户端都可通过网关连接。支持的客户端包括 Claude Code、Claude Desktop、Cursor、LibreChat、ChatGPT 以及任何可与本地 MCP 通信的客户端。取证规范在网关和 MCP 层以结构化方式提供,而不是通过特定于客户端的 prompt 工程,因此无论使用哪种 AI 模型或客户端驱动调查,都适用相同的严谨性。
### Full AIIR 新增内容
- 与 LLM 客户端无关(Claude Code, Desktop, Cursor, LibreChat, ChatGPT, 任何 MCP 客户端)
- 具有身份验证 + 生命周期管理的网关(跨 7 个后端的 64 个工具)
- 具有完整性验证的结构化 JSON 案件文件
- 正式报告生成(6 个配置文件)
当 Claude Code 作为客户端时,会部署额外的控制措施:
- Bubblewrap 沙箱 — 内核级文件系统隔离,Bash 仅限于项目目录
- 21 条权限拒绝规则 — 阻止对案件数据文件的 Edit/Write(findings.json, timeline.json, approvals.jsonl 等)
- PreToolUse 保护钩子 — 阻止 Bash 重定向(>, >>, tee)到受保护的案件文件
- HMAC 签名的发现 — 通过 PBKDF2 派生的加密签名进行 PIN 门控审批
- 来源溯源执行 — 拒绝缺乏审计日志中证据追踪的发现
- PostToolUse 审计钩子 — 每个 Bash 命令都记录到带有 SHA-256 哈希的 JSONL 中
- Prompt 钩子 — 在每次提示时注入取证规范提醒
### AIIR 安装
需要 Python 3.11+ 和 sudo 权限。安装程序会处理一切:MCP 服务器、网关、aiir CLI、HMAC 验证账本、审查员身份和 LLM 客户端配置。当您选择 Claude Code 时,上述取证控制措施将自动部署。
**快速** — 仅核心平台,无数据库(约 70 MB):
```
curl -fsSL https://raw.githubusercontent.com/AppliedIR/sift-mcp/main/quickstart.sh -o /tmp/aiir-quickstart.sh && bash /tmp/aiir-quickstart.sh
```
**推荐** — 添加 RAG 知识库(来自 23 个安全来源的 22,000+ 条记录)和 Windows_triage 数据库(260 万条基线记录),作为预构建快照下载。需要约 14 GB 磁盘空间:
- ~7 GB — RAG 嵌入模型所需的 ML 依赖项
- ~6 GB — Windows_triage 基线数据库(260 万行,解压后)
- ~1 GB — RAG 索引、源代码及其他所有内容
```
curl -fsSL https://raw.githubusercontent.com/AppliedIR/sift-mcp/main/quickstart.sh -o /tmp/aiir-quickstart.sh && bash /tmp/aiir-quickstart.sh --recommended
```
**自定义** — 单独选择软件包、OpenCTI 集成或使用 TLS 进行远程访问:
```
git clone https://github.com/AppliedIR/sift-mcp.git && cd sift-mcp
./setup-sift.sh
```
## 架构
这是一个包含所有 SIFT 端 AIIR 组件的 monorepo:forensic-mcp, case-mcp, report-mcp, sift-mcp 工具, sift-gateway, forensic-knowledge, forensic-rag, windows-triage, opencti 和 sift-common。每个 MCP 作为 sift-gateway 的 stdio 子进程运行。LLM 客户端和 aiir CLI 是两个面向人类的工具。aiir CLI 始终在 SIFT 工作站上运行 — 它需要直接访问案件目录的文件系统。当 LLM 客户端在单独的机器上运行时,审查员必须拥有对 SIFT 的 SSH 访问权限以进行所有 CLI 操作。LLM 客户端通过 Streamable HTTP 连接到网关。它从不直接与 MCP 后端通信。
```
graph LR
subgraph analyst ["Analyst Machine (if remote)"]
CC["LLM Client
(human interface)"] SSH["SSH Session
(human interface)"] end subgraph sift ["SIFT Workstation"] CLI["aiir CLI
(human interface)"] GW["sift-gateway
:4508"] FM["forensic-mcp"] CM["case-mcp"] RM["report-mcp"] SM["sift-mcp"] RAG["forensic-rag"] WT["windows-triage"] OC["opencti"] FK["forensic-knowledge"] CASE["Case Directory"] GW -->|stdio| FM GW -->|stdio| CM GW -->|stdio| RM GW -->|stdio| SM GW -->|stdio| RAG GW -->|stdio| WT GW -->|stdio| OC FM --> CASE CM --> CASE RM --> CASE CLI --> CASE end CC -->|"streamable-http"| GW SSH -.->|"SSH"| CLI style SSH fill:#e0e0e0,stroke:#999,color:#333 ``` 在并置部署中,LLM 客户端也在 SIFT 上运行,不需要 SSH。在生产环境中,LLM 客户端通常在单独的机器上运行,并通过 TLS 和 bearer token 身份验证通过网络连接到网关。审查员必须拥有对 SIFT 的 SSH 访问权限才能进行 CLI 操作(approve, review, report 等)。 网关将每个后端作为单独的 MCP 端点公开。客户端可以连接到聚合端点或单个后端: ``` http://localhost:4508/mcp # Aggregate (all tools) http://localhost:4508/mcp/forensic-mcp http://localhost:4508/mcp/case-mcp http://localhost:4508/mcp/report-mcp http://localhost:4508/mcp/sift-mcp http://localhost:4508/mcp/windows-triage-mcp http://localhost:4508/mcp/forensic-rag-mcp http://localhost:4508/mcp/opencti-mcp ``` 当 LLM 客户端在不同的机器上运行时,使用 `--remote` 安装以生成 TLS 证书和 bearer token。网关绑定到所有接口,并要求每个请求都有 `Authorization: Bearer`。
### 执行流水线
每个工具调用都遵循相同的流水线:拒绝列表检查、安全执行、输出解析、知识丰富(针对已编录工具)、审计日志记录。
```
graph LR
REQ["MCP tool call"] --> DENY{"Denylist
Check"} DENY -->|"denied"| REJECT["Rejected"] DENY -->|"allowed"| EXEC["subprocess.run()
shell=False"] EXEC --> PARSE["Parse Output"] PARSE --> CAT{"In Catalog?"} CAT -->|"yes"| ENRICH["FK Enrichment"] CAT -->|"no"| BASIC["Basic Envelope"] ENRICH --> RESP["Response Envelope"] BASIC --> RESP RESP --> AUDIT["Audit Entry"] ``` ## 从 Lite 升级到 Full 两种模式共享相同的知识库、MCP 和审计格式。升级会增加网关、沙箱、执行层和结构化案件管理。注意:lite 案件数据(markdown 文件)不会自动迁移到 full 案件数据(结构化 JSON)。请重新开始或手动转移发现。 ## MCP 工具 6 个核心工具:5 个发现 + 1 个通用执行。 ### 发现 | 工具 | 描述 | |------|-------------| | `list_available_tools` | 列出已编录工具(已丰富)— 未编录工具也可以执行 | | `list_missing_tools` | 列出未安装的工具,附带安装指导和替代方案 | | `get_tool_help` | 工具的使用信息、标志、注意事项和 FK 知识 | | `check_tools` | 检查已安装和可用的工具 | | `suggest_tools` | 给定工件类型,建议相关工具及确证指导 | ### 通用执行 | 工具 | 描述 | |------|-------------| | `run_command` | 执行任何取证工具(被拒绝的二进制文件会被阻止) | 所有 30 多个针对特定工具的包装器(Zimmerman 套件、Sleuth Kit、Volatility 等)都合并到了 `run_command` 中。一个小的拒绝列表会阻止破坏系统的二进制文件。编录中列出的工具会获得带有 forensic-knowledge 数据的丰富响应。未编录的工具使用基本响应信封执行。 ## 您可以问什么? ``` "Parse the Amcache hive at /cases/evidence/Amcache.hve" "Run Prefetch analysis on all .pf files in /cases/evidence/prefetch/" "What tools should I use to investigate lateral movement artifacts?" "Analyze this memory dump with Volatility -- list processes and network connections" "Run hayabusa against the evtx logs and show critical/high alerts" "Extract the $MFT and build a filesystem timeline" "Check which forensic tools are installed on this workstation" ``` ## 响应信封 每个工具响应都包装在一个由 forensic-knowledge(位于 `packages/forensic-knowledge/`)丰富的结构化信封中。这确保 LLM 始终在工具输出旁边收到工件注意事项、确证建议和规范提醒。 ``` { "success": true, "tool": "run_command", "data": {"output": {"rows": ["..."], "total_rows": 42}}, "data_provenance": "tool_output_may_contain_untrusted_evidence", "evidence_id": "sift-steve-20260220-001", "examiner": "steve", "caveats": [ "Amcache entries indicate file presence, not execution" ], "advisories": [ "This artifact does NOT prove: Program was executed by the user", "Amcache proves installation -- Prefetch is needed to confirm execution" ], "corroboration": { "for_execution": ["Prefetch", "UserAssist"], "for_timeline": ["$MFT timestamps", "USN Journal"] }, "discipline_reminder": "Evidence is sovereign -- if results conflict with your hypothesis, revise the hypothesis, never reinterpret evidence to fit" } ``` | 字段 | 描述 | |-------|-------------| | `evidence_id` | 用于在发现中引用的唯一 ID(`sift-{examiner}-YYYYMMDD-NNN`) | | `caveats` | 来自 FK 的特定工具限制 | | `advisories` | 工件不能证明什么,常见的误解 | | `corroboration` | 按目的分组的建议交叉引用 | | `field_notes` | 时间戳字段的含义和解释指导 | | `discipline_reminder` | 轮换的取证方法提醒 | ## 执行安全 拒绝列表会阻止破坏性的系统命令(mkfs, dd, fdisk, shutdown 等)。当 Claude Code 是 LLM 客户端时,额外的拒绝规则会阻止对案件数据文件(findings.json, timeline.json, approvals.jsonl 等)的 Edit/Write,PreToolUse 钩子防止 Bash 重定向到受保护文件,并且 findings.json 和 timeline.json 在每次写入后设置为 chmod 444。所有其他二进制文件都可以执行。这遵循 REMnux MCP 理念:VM/容器隔离是安全边界,而不是带内命令过滤。 额外的保护措施: - `subprocess.run(shell=False)` — 无 shell,无任意命令链 - 参数清理 — 阻止 shell 元字符 - 路径验证 — 阻止输入的内核接口 - `rm` 保护 — 案件目录受保护免遭删除 - 输出截断 — 限制大输出 - 审计追踪 — 每次执行都记录有证据 ID ## 取证编录(丰富) YAML 编录文件中列出的工具会获得带有 forensic-knowledge 数据的丰富响应(注意事项、确证建议、字段含义、规范提醒)。未编录的工具使用基本响应信封执行(evidence_id, audit, discipline_reminder)。 | 文件 | 工具 | |------|-------| | `zimmerman.yaml` | AmcacheParser, PECmd, AppCompatCacheParser, RECmd, MFTECmd, EvtxECmd, JLECmd, LECmd, SBECmd, RBCmd, SrumECmd, SQLECmd, bstrings | | `volatility.yaml` | vol3 | | `timeline.yaml` | hayabusa, log2timeline, mactime, psort | | `sleuthkit.yaml` | fls, icat, mmls, blkls | | `malware.yaml` | yara, strings, ssdeep, binwalk | | `analysis.yaml` | grep, awk, sed, cut, sort, uniq, wc, head, tail, tr, diff, jq, zcat, zgrep, tar, unzip, file, stat, find, ls, md5sum, sha1sum, sha256sum, xxd, hexdump, readelf, objdump | | `network.yaml` | tshark, zeek | | `file_analysis.yaml` | bulk_extractor | | `misc.yaml` | exiftool, regripper, hashdeep, 7z, dc3dd, ewfacquire, ewfmount, vshadowinfo, vshadowmount | 一些分析工具具有由 `security.py` 强制执行的标志限制:`find` 阻止 `-exec`/`-execdir`/`-delete`;`sed` 阻止 `-i`/`--in-place`;`tar` 阻止提取/创建和代码执行标志(仅列出);`unzip` 阻止覆盖模式;`awk` 程序文本会扫描 `system()`, `getline`, 管道操作符和输出重定向。 ## 前置条件 - SIFT Workstation(基于 Ubuntu)— 用于 full AIIR - 任何 Linux/macOS 机器 — 用于 AIIR Lite - Python 3.11+ - sudo 访问权限(full AIIR 的 HMAC 验证本位于 `/var/lib/aiir/verification/` 所需) - 通过 SIFT 软件包或手动安装的取证工具 ### 外部依赖 - **Zeltser IR Writing MCP** (https://website-mcp.zeltser.com/mcp) — 报告生成所需。`aiir setup client` 向导会自动配置此项。HTTPS,无需身份验证。 - **MS Learn MCP** (https://learn.microsoft.com/api/mcp) — 可选。提供 Microsoft 文档搜索。 ## 配置 | 变量 | 默认值 | 描述 | |----------|---------|-------------| | `SIFT_TIMEOUT` | `600` | 默认命令超时(秒) | | `SIFT_TOOL_PATHS` | (无) | 额外的二进制搜索路径(冒号分隔) | | `SIFT_HAYABUSA_DIR` | `/opt/hayabusa` | Hayabusa 安装位置 | | `AIIR_CASE_DIR` | (无) | 活动案件目录 — 启用审计追踪。如果未设置,则回退到 `~/.aiir/active_case`。 | | `AIIR_CASES_DIR` | (无) | 包含所有案件的根目录 | | `AIIR_EXAMINER` | (无) | 用于证据 ID 和审计的审查员身份 | ### 远程访问(TLS + Auth) 使用 `--remote` 安装时,`setup-sift.sh` 会在 `~/.aiir/tls/` 生成一个本地 CA 和网关证书。网关绑定到 `0.0.0.0:4508` 并启用 TLS。一个 bearer token(`aiir_gw_` 前缀)被生成并写入 `gateway.yaml`。 远程客户端通过特定平台的设置脚本加入。安装程序会打印带有加入代码的各操作系统命令。有关详细信息,请参阅 [部署指南](https://appliedir.github.io/aiir/deployment/)。 如果没有 `--remote`,网关仅监听 `127.0.0.1`。Auth token 仍会生成,但对于 localhost 是可选的。 ## 安全注意事项 假设所有 AIIR 组件都运行在私有的取证网络上,受防火墙保护,并且不暴露于来自 Internet 或潜在敌对系统的传入连接。该设计假设全程使用专用的、隔离的系统。 加载到系统或其组件 VM、计算机或实例中的任何数据都面临着暴露给底层 AI 的风险。仅将您愿意发送给 AI 提供商的数据放置在这些系统上。 生成报告需要传出的 Internet 连接,并可选用于威胁情报 和文档。不应允许来自外部系统的传入连接。 AIIR 的设计使得 AI 交互流经 MCP 工具,从而实现安全控制和审计追踪。具有直接 shell 访问权限的客户端(如 Claude Code)也可以在 MCP 之外运行,但 `aiir setup client` 会为 Claude Code 部署取证控制:内核级沙箱限制 Bash 写入,拒绝规则阻止对案件数据文件的 Edit/Write,PreToolUse 钩子防止 Bash 重定向到受保护文件,PostToolUse 钩子将每个 Bash 命令捕获到审计追踪中,来源溯源执行确保发现可追溯到证据,HMAC 验证账本提供经批准的发现未被篡改的加密证明。AIIR 并非旨在防御恶意 AI 或约束您部署的 AI 客户端。 ## 审计追踪与来源溯源 每个 MCP 工具调用都记录在案件 `audit/` 目录下的每个后端 JSONL 文件中,具有唯一的证据 ID(`{backend}-{examiner}-{date}-{seq}`)。当 Claude Code 是客户端时,PostToolUse 钩子还会将每个 Bash 命令捕获到 `audit/claude-code.jsonl`。 通过 `record_finding()` 记录的发现根据审计追踪按来源层级分类: | 层级 | 来源 | 含义 | |------|--------|---------| | MCP | MCP 审计日志 | 通过 MCP 工具收集的证据(系统见证) | | HOOK | Claude Code 钩子日志 | 通过带有钩子捕获的 Bash 收集的证据(框架见证) | | SHELL | `supporting_commands` 参数 | 来自直接 shell 命令的证据(自我报告) | | NONE | 无审计记录 | 无证据追踪 — 发现被硬门控拒绝 | 具有 NONE 来源且无支持命令的发现会被拒绝。这确保每个发现都可追溯到证据。 内容完整性受 SHA-256 哈希保护,该哈希在暂存时计算并在批准时验证。跨文件验证比较存储在 `findings.json` 中的哈希与 `approvals.jsonl` 中的哈希,以检测批准后的篡改。 ## 报告生成 报告生成使用 report-mcp 软件包(6 个工具)及数据驱动的配置文件: | 配置文件 | 用途 | |---------|---------| | `full` | 包含所有已批准数据的综合 IR 报告 | | `executive` | 管理简报(1-2 页,非技术性) | | `timeline` | 按时间顺序的事件叙述 | | `ioc` | 结构化 IOC 导出,附带 MITRE 映射 | | `findings` | 详细的已批准发现 | | `status` | 用于站会的快速状态 | `generate_report()` 生成结构化 JSON,包含案件数据、IOC 聚合、MITRE ATT&CK 映射和 Zeltser IR Writing 指导。LLM 使用 Zeltser 的 IR 模板渲染叙述部分。报告仅包含 APPROVED 发现 — 来源溯源、置信度和其他内部工作笔记会被剥离。 ## 证据处理 切勿将原始证据放置在任何 AIIR 系统上。仅使用已验证原件或备份存在的工作副本。AIIR 工作站通过 AI 连接的工具处理证据,加载到这些系统中的任何数据都可能传输到配置的 AI 提供商。将所有 AIIR 系统视为分析环境,而非证据存储。 证据完整性通过注册时记录的 SHA-256 哈希进行验证。审查员可以选择通过 `aiir evidence lock` 将证据锁定为只读。适当的证据完整性取决于在此平台之外存在的已验证哈希、写保护器和监管链程序。 案件目录可以位于外部或可移动媒体上。ext4 是首选以获得完整的权限支持。NTFS 和 exFAT 是可接受的,但文件权限控制(只读保护)将无声地失效。由于 4 GB 文件大小限制,不建议使用 FAT32。 ## 负责任的使用 本项目展示了 AI 辅助事件响应的能力。虽然已采取措施强制执行人工介入控制,但最终每位审查员都有责任确保其发现准确且完整。最终责任在于人类。AI 就像十六进制编辑器一样,是供受过适当培训的事件响应专业人员使用的工具。用户有责任确保其使用符合适用法律、法规和组织政策。 ## 致谢 架构和方向由 Steve Anson 负责。由 Claude Code (Anthropic) 实现。设计灵感来自 Lenny Zeltser 的 [REMnux MCP](https://github.com/REMnux/remnux-mcp-server)。 ## 许可证 MIT License - 详见 [LICENSE](LICENSE)
(human interface)"] SSH["SSH Session
(human interface)"] end subgraph sift ["SIFT Workstation"] CLI["aiir CLI
(human interface)"] GW["sift-gateway
:4508"] FM["forensic-mcp"] CM["case-mcp"] RM["report-mcp"] SM["sift-mcp"] RAG["forensic-rag"] WT["windows-triage"] OC["opencti"] FK["forensic-knowledge"] CASE["Case Directory"] GW -->|stdio| FM GW -->|stdio| CM GW -->|stdio| RM GW -->|stdio| SM GW -->|stdio| RAG GW -->|stdio| WT GW -->|stdio| OC FM --> CASE CM --> CASE RM --> CASE CLI --> CASE end CC -->|"streamable-http"| GW SSH -.->|"SSH"| CLI style SSH fill:#e0e0e0,stroke:#999,color:#333 ``` 在并置部署中,LLM 客户端也在 SIFT 上运行,不需要 SSH。在生产环境中,LLM 客户端通常在单独的机器上运行,并通过 TLS 和 bearer token 身份验证通过网络连接到网关。审查员必须拥有对 SIFT 的 SSH 访问权限才能进行 CLI 操作(approve, review, report 等)。 网关将每个后端作为单独的 MCP 端点公开。客户端可以连接到聚合端点或单个后端: ``` http://localhost:4508/mcp # Aggregate (all tools) http://localhost:4508/mcp/forensic-mcp http://localhost:4508/mcp/case-mcp http://localhost:4508/mcp/report-mcp http://localhost:4508/mcp/sift-mcp http://localhost:4508/mcp/windows-triage-mcp http://localhost:4508/mcp/forensic-rag-mcp http://localhost:4508/mcp/opencti-mcp ``` 当 LLM 客户端在不同的机器上运行时,使用 `--remote` 安装以生成 TLS 证书和 bearer token。网关绑定到所有接口,并要求每个请求都有 `Authorization: Bearer
Check"} DENY -->|"denied"| REJECT["Rejected"] DENY -->|"allowed"| EXEC["subprocess.run()
shell=False"] EXEC --> PARSE["Parse Output"] PARSE --> CAT{"In Catalog?"} CAT -->|"yes"| ENRICH["FK Enrichment"] CAT -->|"no"| BASIC["Basic Envelope"] ENRICH --> RESP["Response Envelope"] BASIC --> RESP RESP --> AUDIT["Audit Entry"] ``` ## 从 Lite 升级到 Full 两种模式共享相同的知识库、MCP 和审计格式。升级会增加网关、沙箱、执行层和结构化案件管理。注意:lite 案件数据(markdown 文件)不会自动迁移到 full 案件数据(结构化 JSON)。请重新开始或手动转移发现。 ## MCP 工具 6 个核心工具:5 个发现 + 1 个通用执行。 ### 发现 | 工具 | 描述 | |------|-------------| | `list_available_tools` | 列出已编录工具(已丰富)— 未编录工具也可以执行 | | `list_missing_tools` | 列出未安装的工具,附带安装指导和替代方案 | | `get_tool_help` | 工具的使用信息、标志、注意事项和 FK 知识 | | `check_tools` | 检查已安装和可用的工具 | | `suggest_tools` | 给定工件类型,建议相关工具及确证指导 | ### 通用执行 | 工具 | 描述 | |------|-------------| | `run_command` | 执行任何取证工具(被拒绝的二进制文件会被阻止) | 所有 30 多个针对特定工具的包装器(Zimmerman 套件、Sleuth Kit、Volatility 等)都合并到了 `run_command` 中。一个小的拒绝列表会阻止破坏系统的二进制文件。编录中列出的工具会获得带有 forensic-knowledge 数据的丰富响应。未编录的工具使用基本响应信封执行。 ## 您可以问什么? ``` "Parse the Amcache hive at /cases/evidence/Amcache.hve" "Run Prefetch analysis on all .pf files in /cases/evidence/prefetch/" "What tools should I use to investigate lateral movement artifacts?" "Analyze this memory dump with Volatility -- list processes and network connections" "Run hayabusa against the evtx logs and show critical/high alerts" "Extract the $MFT and build a filesystem timeline" "Check which forensic tools are installed on this workstation" ``` ## 响应信封 每个工具响应都包装在一个由 forensic-knowledge(位于 `packages/forensic-knowledge/`)丰富的结构化信封中。这确保 LLM 始终在工具输出旁边收到工件注意事项、确证建议和规范提醒。 ``` { "success": true, "tool": "run_command", "data": {"output": {"rows": ["..."], "total_rows": 42}}, "data_provenance": "tool_output_may_contain_untrusted_evidence", "evidence_id": "sift-steve-20260220-001", "examiner": "steve", "caveats": [ "Amcache entries indicate file presence, not execution" ], "advisories": [ "This artifact does NOT prove: Program was executed by the user", "Amcache proves installation -- Prefetch is needed to confirm execution" ], "corroboration": { "for_execution": ["Prefetch", "UserAssist"], "for_timeline": ["$MFT timestamps", "USN Journal"] }, "discipline_reminder": "Evidence is sovereign -- if results conflict with your hypothesis, revise the hypothesis, never reinterpret evidence to fit" } ``` | 字段 | 描述 | |-------|-------------| | `evidence_id` | 用于在发现中引用的唯一 ID(`sift-{examiner}-YYYYMMDD-NNN`) | | `caveats` | 来自 FK 的特定工具限制 | | `advisories` | 工件不能证明什么,常见的误解 | | `corroboration` | 按目的分组的建议交叉引用 | | `field_notes` | 时间戳字段的含义和解释指导 | | `discipline_reminder` | 轮换的取证方法提醒 | ## 执行安全 拒绝列表会阻止破坏性的系统命令(mkfs, dd, fdisk, shutdown 等)。当 Claude Code 是 LLM 客户端时,额外的拒绝规则会阻止对案件数据文件(findings.json, timeline.json, approvals.jsonl 等)的 Edit/Write,PreToolUse 钩子防止 Bash 重定向到受保护文件,并且 findings.json 和 timeline.json 在每次写入后设置为 chmod 444。所有其他二进制文件都可以执行。这遵循 REMnux MCP 理念:VM/容器隔离是安全边界,而不是带内命令过滤。 额外的保护措施: - `subprocess.run(shell=False)` — 无 shell,无任意命令链 - 参数清理 — 阻止 shell 元字符 - 路径验证 — 阻止输入的内核接口 - `rm` 保护 — 案件目录受保护免遭删除 - 输出截断 — 限制大输出 - 审计追踪 — 每次执行都记录有证据 ID ## 取证编录(丰富) YAML 编录文件中列出的工具会获得带有 forensic-knowledge 数据的丰富响应(注意事项、确证建议、字段含义、规范提醒)。未编录的工具使用基本响应信封执行(evidence_id, audit, discipline_reminder)。 | 文件 | 工具 | |------|-------| | `zimmerman.yaml` | AmcacheParser, PECmd, AppCompatCacheParser, RECmd, MFTECmd, EvtxECmd, JLECmd, LECmd, SBECmd, RBCmd, SrumECmd, SQLECmd, bstrings | | `volatility.yaml` | vol3 | | `timeline.yaml` | hayabusa, log2timeline, mactime, psort | | `sleuthkit.yaml` | fls, icat, mmls, blkls | | `malware.yaml` | yara, strings, ssdeep, binwalk | | `analysis.yaml` | grep, awk, sed, cut, sort, uniq, wc, head, tail, tr, diff, jq, zcat, zgrep, tar, unzip, file, stat, find, ls, md5sum, sha1sum, sha256sum, xxd, hexdump, readelf, objdump | | `network.yaml` | tshark, zeek | | `file_analysis.yaml` | bulk_extractor | | `misc.yaml` | exiftool, regripper, hashdeep, 7z, dc3dd, ewfacquire, ewfmount, vshadowinfo, vshadowmount | 一些分析工具具有由 `security.py` 强制执行的标志限制:`find` 阻止 `-exec`/`-execdir`/`-delete`;`sed` 阻止 `-i`/`--in-place`;`tar` 阻止提取/创建和代码执行标志(仅列出);`unzip` 阻止覆盖模式;`awk` 程序文本会扫描 `system()`, `getline`, 管道操作符和输出重定向。 ## 前置条件 - SIFT Workstation(基于 Ubuntu)— 用于 full AIIR - 任何 Linux/macOS 机器 — 用于 AIIR Lite - Python 3.11+ - sudo 访问权限(full AIIR 的 HMAC 验证本位于 `/var/lib/aiir/verification/` 所需) - 通过 SIFT 软件包或手动安装的取证工具 ### 外部依赖 - **Zeltser IR Writing MCP** (https://website-mcp.zeltser.com/mcp) — 报告生成所需。`aiir setup client` 向导会自动配置此项。HTTPS,无需身份验证。 - **MS Learn MCP** (https://learn.microsoft.com/api/mcp) — 可选。提供 Microsoft 文档搜索。 ## 配置 | 变量 | 默认值 | 描述 | |----------|---------|-------------| | `SIFT_TIMEOUT` | `600` | 默认命令超时(秒) | | `SIFT_TOOL_PATHS` | (无) | 额外的二进制搜索路径(冒号分隔) | | `SIFT_HAYABUSA_DIR` | `/opt/hayabusa` | Hayabusa 安装位置 | | `AIIR_CASE_DIR` | (无) | 活动案件目录 — 启用审计追踪。如果未设置,则回退到 `~/.aiir/active_case`。 | | `AIIR_CASES_DIR` | (无) | 包含所有案件的根目录 | | `AIIR_EXAMINER` | (无) | 用于证据 ID 和审计的审查员身份 | ### 远程访问(TLS + Auth) 使用 `--remote` 安装时,`setup-sift.sh` 会在 `~/.aiir/tls/` 生成一个本地 CA 和网关证书。网关绑定到 `0.0.0.0:4508` 并启用 TLS。一个 bearer token(`aiir_gw_` 前缀)被生成并写入 `gateway.yaml`。 远程客户端通过特定平台的设置脚本加入。安装程序会打印带有加入代码的各操作系统命令。有关详细信息,请参阅 [部署指南](https://appliedir.github.io/aiir/deployment/)。 如果没有 `--remote`,网关仅监听 `127.0.0.1`。Auth token 仍会生成,但对于 localhost 是可选的。 ## 安全注意事项 假设所有 AIIR 组件都运行在私有的取证网络上,受防火墙保护,并且不暴露于来自 Internet 或潜在敌对系统的传入连接。该设计假设全程使用专用的、隔离的系统。 加载到系统或其组件 VM、计算机或实例中的任何数据都面临着暴露给底层 AI 的风险。仅将您愿意发送给 AI 提供商的数据放置在这些系统上。 生成报告需要传出的 Internet 连接,并可选用于威胁情报 和文档。不应允许来自外部系统的传入连接。 AIIR 的设计使得 AI 交互流经 MCP 工具,从而实现安全控制和审计追踪。具有直接 shell 访问权限的客户端(如 Claude Code)也可以在 MCP 之外运行,但 `aiir setup client` 会为 Claude Code 部署取证控制:内核级沙箱限制 Bash 写入,拒绝规则阻止对案件数据文件的 Edit/Write,PreToolUse 钩子防止 Bash 重定向到受保护文件,PostToolUse 钩子将每个 Bash 命令捕获到审计追踪中,来源溯源执行确保发现可追溯到证据,HMAC 验证账本提供经批准的发现未被篡改的加密证明。AIIR 并非旨在防御恶意 AI 或约束您部署的 AI 客户端。 ## 审计追踪与来源溯源 每个 MCP 工具调用都记录在案件 `audit/` 目录下的每个后端 JSONL 文件中,具有唯一的证据 ID(`{backend}-{examiner}-{date}-{seq}`)。当 Claude Code 是客户端时,PostToolUse 钩子还会将每个 Bash 命令捕获到 `audit/claude-code.jsonl`。 通过 `record_finding()` 记录的发现根据审计追踪按来源层级分类: | 层级 | 来源 | 含义 | |------|--------|---------| | MCP | MCP 审计日志 | 通过 MCP 工具收集的证据(系统见证) | | HOOK | Claude Code 钩子日志 | 通过带有钩子捕获的 Bash 收集的证据(框架见证) | | SHELL | `supporting_commands` 参数 | 来自直接 shell 命令的证据(自我报告) | | NONE | 无审计记录 | 无证据追踪 — 发现被硬门控拒绝 | 具有 NONE 来源且无支持命令的发现会被拒绝。这确保每个发现都可追溯到证据。 内容完整性受 SHA-256 哈希保护,该哈希在暂存时计算并在批准时验证。跨文件验证比较存储在 `findings.json` 中的哈希与 `approvals.jsonl` 中的哈希,以检测批准后的篡改。 ## 报告生成 报告生成使用 report-mcp 软件包(6 个工具)及数据驱动的配置文件: | 配置文件 | 用途 | |---------|---------| | `full` | 包含所有已批准数据的综合 IR 报告 | | `executive` | 管理简报(1-2 页,非技术性) | | `timeline` | 按时间顺序的事件叙述 | | `ioc` | 结构化 IOC 导出,附带 MITRE 映射 | | `findings` | 详细的已批准发现 | | `status` | 用于站会的快速状态 | `generate_report()` 生成结构化 JSON,包含案件数据、IOC 聚合、MITRE ATT&CK 映射和 Zeltser IR Writing 指导。LLM 使用 Zeltser 的 IR 模板渲染叙述部分。报告仅包含 APPROVED 发现 — 来源溯源、置信度和其他内部工作笔记会被剥离。 ## 证据处理 切勿将原始证据放置在任何 AIIR 系统上。仅使用已验证原件或备份存在的工作副本。AIIR 工作站通过 AI 连接的工具处理证据,加载到这些系统中的任何数据都可能传输到配置的 AI 提供商。将所有 AIIR 系统视为分析环境,而非证据存储。 证据完整性通过注册时记录的 SHA-256 哈希进行验证。审查员可以选择通过 `aiir evidence lock` 将证据锁定为只读。适当的证据完整性取决于在此平台之外存在的已验证哈希、写保护器和监管链程序。 案件目录可以位于外部或可移动媒体上。ext4 是首选以获得完整的权限支持。NTFS 和 exFAT 是可接受的,但文件权限控制(只读保护)将无声地失效。由于 4 GB 文件大小限制,不建议使用 FAT32。 ## 负责任的使用 本项目展示了 AI 辅助事件响应的能力。虽然已采取措施强制执行人工介入控制,但最终每位审查员都有责任确保其发现准确且完整。最终责任在于人类。AI 就像十六进制编辑器一样,是供受过适当培训的事件响应专业人员使用的工具。用户有责任确保其使用符合适用法律、法规和组织政策。 ## 致谢 架构和方向由 Steve Anson 负责。由 Claude Code (Anthropic) 实现。设计灵感来自 Lenny Zeltser 的 [REMnux MCP](https://github.com/REMnux/remnux-mcp-server)。 ## 许可证 MIT License - 详见 [LICENSE](LICENSE)
标签:AI安全, Chat Copilot, Claude桌面, DAST, DLL 劫持, FTP漏洞扫描, HTTPS请求, LLM集成, MCP服务器, OpenCTI, Python, RAG, Ruby, SIFT工作站, Windows取证, 人工智能辅助, 取证工具链, 大语言模型, 威胁情报, 安全编排, 审计日志, 库, 应急响应, 底层编程, 开发者工具, 恶意软件分析, 数字取证, 无后门, 时序数据库, 检索增强生成, 知识库, 自动化取证, 自动化脚本, 逆向工具