JasonTofte/sanctum-mcp

GitHub: JasonTofte/sanctum-mcp

Sanctum 是一个架构级强化的 Windows 取证 MCP 服务器,通过证据完整性保护和提示注入防御机制,让 AI agent 安全可靠地进行自主事件响应分析。

Stars: 0 | Forks: 0

# Sanctum — 面向 AI agent 的强化版取证服务器 **状态:** 0.4.1。快速入门可以端到端运行。六个解析器以真实模式发布(Amcache、ShimCache、BAM、UserAssist、Prefetch、Sysmon)。`claim_finding` 门控已上线。 **专为构建:** SANS `FIND EVIL!` 黑客松(截止日期 2026-06-15)。 **范围:** 仅限 Windows 执行证据 — 证明*运行了哪些程序*。网络、浏览器、云、电子邮件和内存工件在设计上不在此范围内。专注于一项工作的深度胜过对多项工作的浅层覆盖。 ## 这是什么 Sanctum 允许 AI agent 搜索 Windows 机器以寻找入侵者的迹象。它阻止 agent 被证据欺骗或破坏证据。Sanctum 是一个 Model Context Protocol (MCP) 服务器:它向 agent 提供一小部分固定的取证工具,除此之外别无其他。 AI agent 以两种方式在这项工作上失败。Sanctum 阻止了这两种情况。 **1. 它们自信地陈述错误的发现。** 证据是由攻击者编写的。恶意软件名称、日志行和注册表值可以隐藏劫持 AI 读取它们的文本。2025 年 8 月,Sygnia 展示了攻击者如何让 AI 将 Mimikatz 凭据盗窃报告为*“计划内的维护任务”*。Sanctum 将每个工具结果包装为不受信任的,首先剔除已知的注入文本,并通过一个类型化的函数 `claim_finding` 路由发现。该函数拒绝无法追溯到真实证据的声明,并将单源发现标记为草稿,而不是已确认的结果。在机器速度下,一个自信的错误答案比诚实的“尚未证实”更糟糕。 **2. 它们销毁证据。** Sanctum 无法运行破坏性命令,因为其中不存在这样的工具。没有 shell。证据在操作系统级别以只读方式挂载。每次工具调用都会被哈希处理并写入仅追加的日志中。即使 agent 被劫持,它也无法更改其旨在调查的案件。 ## 为什么这是内置的,而不是提示词 2025 年 11 月,Anthropic 报告称攻击者通过角色扮演越狱击败了基于提示词的安全规则,自动化率高达 90% ([GTG-1002](https://www.anthropic.com/news/disrupting-AI-espionage))。黑客松提出了一个正确的问题:*护栏是内置于系统中的,还是仅仅写在提示词中?* 提示词中编写的规则在越狱告诉模型忽略它的那一刻就失败了。由*不存在的函数*强制执行的规则是无法通过言语绕过的。Sanctum 的保证存在于服务器中,而不是提示词中。 ## 门控如何工作 一项发现需要一个以上的来源。要声明“程序 X 已运行”,agent 必须引用**至少两个独立的证据族**。Windows 在五个位置记录程序执行,每个位置由系统的不同部分拥有: | 族 | 它存在的位置 | 所有者 | |---|---|---| | AppCompat | ShimCache, Amcache | Application Experience 服务 | | Explorer | UserAssist | `explorer.exe` + 用户注册表 | | Background service | BAM | `bam.sys` 驱动程序 | | Kernel ETW | Sysmon / Event 4688 | 事件日志 + Sysmon | | SysMain | Prefetch | SysMain 服务 | 因为每个族由 Windows 的不同部分编写,所以伪造一个会保持其余部分完好无损。篡改表现为不一致。`claim_finding` 计算声明背后不同的族并对其进行评级: - **DRAFT** — 一个族。一个假设,尚未成为证据。 - **CORROBORATED** — 两个或更多族一致。 - **FINAL** — 三个或更多族一致。 - **DRAFT_TAMPER_SUSPECTED** — 存在反取证痕迹,因此无论有多少族一致,门控都拒绝显得自信。 共享注册表配置单元的两个族(BAM 和 AppCompat)被标记为较弱。时间戳伪造检查可以在族对程序运行*时间*存在分歧时降低层级。数学原理和威胁模型详见 [`docs/THREAT_MODEL_TRIANGULATION.md`](docs/THREAT_MODEL_TRIANGULATION.md)。 门控是服务器边界处的一个普通函数([`src/sanctum/finding.py`](src/sanctum/finding.py))。无论模型相信什么或被告知得出什么结论,它的运行方式都是一样的。任何提示词都无法将其关闭。 ## 架构 参考客户端是带有 Opus 4.7 的 Claude Code,但保证是在服务器中强制执行的,并且适用于任何标准 MCP 客户端(Cline、Claude Desktop、OpenAI MCP shim)。请参阅 [`docs/LLM_AGNOSTIC.md`](docs/LLM_AGNOSTIC.md)。 ``` ┌──────────────────────────────────────────────┐ │ AI agent (reference client: Claude Code) │ │ reaches Sanctum over MCP stdio. No shell. │ └───────────────────────┬───────────────────────┘ ▼ ┌──────────────────────────────────────────────┐ │ sanctum-mcp (this repo) │ │ │ │ Typed tools only. No shell passthrough. │ │ Every result is stripped of injection text │ │ and wrapped as . │ │ │ │ Execution-evidence tools (6, real mode): │ │ get_amcache get_userassist │ │ get_shimcache get_bam │ │ get_prefetch get_sysmon_4688 │ │ │ │ Finding gate: │ │ claim_finding(hypothesis, audit_ids[]) │ │ needs >= 2 independent families │ │ │ │ Audit log: │ │ append-only JSONL, HMAC-SHA-256 chained │ │ every tool call -> audit_id │ │ optional RFC 3161 timestamp │ └───────────────────────┬───────────────────────┘ ▼ ┌──────────────────────────────────────────────┐ │ Evidence, mounted read-only │ │ /cases//evidence (OS-level ro) │ └──────────────────────────────────────────────┘ ``` 基于内存的工具(进程列表、网络连接、代码注入标记)计划在 v2 中推出。它们目前还没有证据族,因此无法为门控提供数据。 有关信任边界流、模块映射、三层门控以及每层的威胁模型,请参阅 [`docs/ARCHITECTURE.md`](docs/ARCHITECTURE.md)。 ## 它如何满足评审标准 | 标准 | Sanctum 如何应对 | |---|---| | **约束实现** | 内置于服务器中:不存在 shell 工具,证据是只读的,所有输入和输出都经过哈希处理和记录。Prompt hook 是额外的,不是保证。绕过测试:[`tests/test_bypass.py`](tests/test_bypass.py)。 | | **IR 准确性** | 在相同问题上,准确率为 99.2%,而纯模型为 16.3%([`docs/ACCURACY.md`](docs/ACCURACY.md)),加上上面独立的 NIST 检查。发现已评级;单源声明保持为 DRAFT。 | | **审计追踪** | 每个发现都引用了必须解析为真实日志条目的 `audit_ids`。HMAC 链阻止任何人事后编辑日志。 | | **自主执行** | 门控是 agent 的外部检查。单源声明返回 DRAFT,这会推动 agent 在确认之前寻找第二个族。 | | **广度和深度** | 全部五个 Windows 执行证据族,且具有深度。内存工件将在 v2 中提供。 | | **可用性和文档** | 一条命令快速入门,锁定的依赖项,Docker 路径。 | ## 它不能做什么 这些是 v1 的限制,在此明确说明,以便评审和操作员判断其适用性。 - **模型仍然可能会误读正确的证据。** Sanctum 控制 agent 看到的证据以及发现的引用方式。它不控制模型如何读取正确的结果。这取决于模型(Opus 4.7),并已在 [`docs/ACCURACY.md`](docs/ACCURACY.md) 中单独测量。 - **注入过滤器是已知模式的列表。** 它能捕获 Sygnia 2025 集和常见的 Unicode 技巧。它无法捕获没人见过的模式。这是深度防御,而不是保证。请参阅 [`docs/THREAT_MODEL_SANITIZATION.md`](docs/THREAT_MODEL_SANITIZATION.md)。 - **准确性基准是团队从 DFIR-Metric 编写的一个子集。** 外部问题集会更有说服力。解析器层现在已根据独立的 NIST 证据(见结果)进行了检查,这弥补了部分差距。 - **实时证据覆盖范围有限。** NIST 检查是在 Windows 7 映像上运行的,其中只有五个族中的三个存在(BAM 和 Sysmon 在更高版本的 Windows 中才出现)。完整的五族运行需要配备 Sysmon 的现代主机。 - **同时伪造多个族的内核 rootkit 在设计上会破坏计数。** v1 在此层级依赖于篡改检测层和签名日志。请参阅 [`docs/THREAT_MODEL_TRIANGULATION.md`](docs/THREAT_MODEL_TRIANGULATION.md#scope-and-threat-model-boundary)。 ## 5 分钟内试用 查看门控触发,无需 SIFT VM 或下载的磁盘映像: ``` python3 -m venv .venv source .venv/bin/activate pip install -e '.[dev]' python3 scripts/quickstart.py ``` 快速入门会启动 MCP 服务器,列出类型化工具(表明不存在 shell 工具),调用 `get_amcache`,然后使用该单一来源调用 `claim_finding`。预期结果是 **DRAFT** — 门控拒绝确认单族声明。如果安装正常,它将以 `PASS — gate fired correctly.` 结束。不需要 LLM。 有关 DRAFT → CORROBORATED 的完整多族运行以及显示门控拒绝虚假引用的内容,请参阅 [`scripts/dfir_investigation.py`](scripts/dfir_investigation.py)。 ## 安装与开发 ``` # Python 3.10+ python3 -m venv .venv source .venv/bin/activate pip install -e '.[dev]' python -m sanctum.server # run the MCP server (stdio) pytest # run the tests ``` 在设置 `SANCTUM_CASES_ROOT`、`SANCTUM_OUTPUT_ROOT`、`SANCTUM_LEDGER_PATH` 和 `SANCTUM_LEDGER_HMAC_KEY` 之前,服务器**拒绝启动**(对于未挂载的测试目录,添加 `SANCTUM_SKIP_MOUNT_CHECK=1`)。`scripts/quickstart.py` 会为您设置这些;对于真实的 MCP 客户端,请参阅 [`docs/CLAUDE_SETTINGS_REFERENCE.md`](docs/CLAUDE_SETTINGS_REFERENCE.md) 和 [`docs/LLM_AGNOSTIC.md`](docs/LLM_AGNOSTIC.md)。 操作员使用哈希锁定的 wheel 包进行安装:`pip install -r requirements.txt --require-hashes`。包括 SIFT VM 在内的完整设置位于 [`docs/REPRODUCTION.md`](docs/REPRODUCTION.md) 中。 ## 数据集 仅使用或重新分发具有许可证安全的数据:**NIST CFReDS**(公共领域)作为主要基准事实,以及 **DFRWS** 挑战。引用了 M57-Patents、Ali Hadi 和 CyberDefenders 案例,但未重新分发。 ## 先前工作 - **Valhuntir** (Steve Anson / AppliedIR) — 最接近的同类产品,也是简报中的参考。其 README 警告说,告诉它“find evil”将“极有可能产生幻觉”。Sanctum 是架构上的答案:门控的正确性是类型化函数的属性,而不是模型的属性。Sanctum 提供了一个更窄、更深的切片,包含 Valhuntir 的 README 未声称的三个原语 — 双族印证门控、哈希锁定安装,以及捕获插入、删除和重新排序的 HMAC 链式日志。 - **Protocol SIFT** (teamdfir) — 此概念验证在此基础上进行了扩展,其本身没有服务器边界。 - **Sygnia, "When Your Logs Lie to You"** (2025 年 8 月) — Sanctum 的过滤器旨在防御的注入攻击。 - 支持该设计的研究:Greshake 等人(间接注入)、Huang 等人 ICLR 2024(模型无法可靠地从内省中进行自我纠正),以及 Kamoi 等人 TACL 2024(门控使用的外部信号纠正)。完整列表见 [`docs/ACCURACY.md`](docs/ACCURACY.md) 和威胁模型文档。 ## 许可证 MIT — 详见 [`LICENSE`](LICENSE)。
标签:AI代理, HTTPS请求, MCP服务器, Windows取证, 库, 应急响应, 提示注入防御, 数字取证, 时序数据库, 源代码安全, 自动化脚本, 请求拦截, 逆向工具