redasgard/urd
GitHub: redasgard/urd
针对 MCP 部署的组合信任分析工具,通过对比声明边界与实际消息流,检测多服务器组合产生的隐式权限越界路径。
Stars: 0 | Forks: 0
# Urd
**针对模型上下文协议 (MCP) 部署的组合信任分析。**
Urd 能够检测出存在于实际运行中,但未在任何单一服务器清单中声明的权限路径——即低权限工具的输出在未经过审查边界的情况下,影响高权限工具执行的环节。
## 为什么
单服务器审查只能告诉你每个 MCP 服务器在隔离状态下是安全的。它无法告诉你由多个服务器组合而成的整体部署是否安全。当宿主 agent 连接到具有不同权限级别的多个服务器时,工具的输出会悄无声息地跨越信任级别。来自一个服务器结果进入另一个服务器参数构建过程的边界极少被声明,极少被审查,而且协议也从未强制要求在审批边界处将其暴露出来。
Urd 正是我们在审计此类部署时梦寐以求的工具。
## 它的功能
Urd 会为给定的部署生成单份**差异报告**:
- **已声明的边界** — 解析自 MCP 服务器清单和宿主 agent 配置。
- **已观察的边界** — 根据实际消息流的 JSONL 跟踪记录重建,包含将工具输出链接到后续工具参数的来源标记。
- **差异发现** — 与任何已声明能力不对应的已观察边界,特别是那些跨越了权限边界的边界。
Urd 不会检测新型的零日漏洞。它检测的是协议未强制运维人员去关注的结构性模式。
## 复现该发现
`lab/` 目录包含一个最小化部署,能够端到端地复现该核心失效模式:
- `lab/servers/weather.py` — 低权限只读数据服务器(服务器 A)。
- `lab/servers/admin.py` — 基于 SQLite 的较高权限服务器,暴露了 `delete_records`(服务器 B)。
- `lab/untrusted_source.py` — 模拟的外部数据源,将唯一可识别的标记 token 注入到服务器 A 的输出中。
- `lab/host.py` — 确定性的宿主 agent,将服务器 A 的输出组合进服务器 B 的参数中。
- `lab/scenarios/baseline.py` — 对照组,正常流程。
- `lab/scenarios/compositional.py` — 核心验证演示。
### 运行
```
# 从 repo root
python -m lab.scenarios.baseline
python -m lab.scenarios.compositional
# 分析生成的 trace
python -m urd.cli analyze \
--manifests lab/manifests/ \
--trace traces/compositional.jsonl \
--output traces/compositional.divergence.json
```
在组合场景中,会产生一条跟踪记录,其中由不受信任来源生成的标记 token 逐字出现在了服务器 B 的 `delete_records` 参数中。审批提示显示了这些参数,但并未暴露该标记源自服务器 A 的来源。Urd 的差异报告识别出了这一边界。
## 范围与局限
Urd 能够检测的内容:
- 低权限工具的输出影响了高权限工具的参数构建
- 在已声明的能力集中缺失的已观察信任边界
- 审批界面遗漏了所获取参数的上游来源信息
Urd 无法检测的内容:
- 完全存在于单一服务器内部的攻击
- 针对模型本身的攻击(提示注入、越狱)
- 针对服务器实现代码的供应链攻击
- 从未经过 Urd 检测工具记录的运行时行为
## 许可证
Apache 2.0。
## 作者
Red Asgard。研究由 Yevhen "valh4x" Pervushyn 主导。
标签:AI基础设施安全, CSV导出, LLM Agent安全, MCP Server, MCP安全, Python安全工具, Web报告查看器, 云安全监控, 人工智能安全, 信任边界, 协议分析, 合规性, 大模型安全审计, 威胁建模, 安全审计工具, 攻击面分析, 时序数据库, 权限提升, 模型上下文协议, 组合信任分析, 网络安全, 越权检测, 逆向工具, 隐私保护, 静态分析