将 MCP 信任边界拆分为传输层、工具层、数据路径、Agent 循环四层;核心建议是禁用 stdio 服务器的持久凭证、以低权限身份运行每个服务器。
仅供教育与道德安全研究使用 — 本文仅以教育与道德网络安全研究为目的提供。所述技术仅可用于您拥有或已获得明确测试授权的系统。
Model Context Protocol(MCP)已成为 AI 应用连接工具与数据的默认方式——而在大多数部署中,它也是栈中审计最少的信任边界。本指南映射了 MCP 的真实攻击面,并给出每一层的实用加固清单:传输层、服务器层、工具层以及 Agent 自身。
快速结论:MCP 不是单一信任边界——它有四个:传输层(主机 ↔ 服务器)、工具表面(模型 ↔ 能力)、数据路径(工具输出 ↔ 模型上下文)以及 Agent 循环(规划器 ↔ 副作用)。单次影响最大的修复是清除 stdio 服务器上的环境凭证:每个服务器以专用的低权限身份运行,使用范围受限的短期令牌。其他一切——构建时工具白名单、将工具描述视为生产代码、标记不可信的工具输出、在不可逆操作上设置人工关卡——都源于一个认知:MCP 服务器是一个具有社会工程兼容输入通道的特权 RPC 端点。
MCP 标准化了 AI 主机(IDE、聊天客户端、Agent 运行时)发现和调用外部能力(即"工具")的方式,这些工具由 MCP 服务器暴露。服务器可以封装任何东西:数据库客户端、Kubernetes API、浏览器、文件系统。主机向模型公示工具;模型决定何时调用它们。最后这句话就是整个安全问题所在。
威胁模型:四个边界,而非一个
1. 传输边界(主机 ↔ 服务器)
本地 stdio 服务器继承用户的 OS 权限——一个具有完整用户上下文来封装文件的服务器,就是一个等待混乱模型触发的数据外泄管道。远程 HTTP/SSE 服务器增加了经典 Web 风险:令牌窃取、重放、通过服务器 URL 的 SSRF,以及——2026 年的经典——毒化客户端自动信任的发现端点。
2. 工具边界(模型 ↔ 能力)
工具是模型可以调用的代码。风险包括:工具范围过宽(一个 Agent 根本不需要的"admin_update"工具)、本身就是注入向量的工具描述(来自第三方服务器的毒化描述引导模型)、参数注入(工具输出未经净化就流入 shell 命令或 SQL)。
3. 数据边界(检索 ↔ 上下文)
工具返回的任何内容以与您指令相同的显式权威进入模型上下文。返回攻击者控制内容的 Web 搜索工具是针对您 Agent 的间接提示注入传递机制。
4. Agent 边界(规划器 ↔ 副作用)
将工具链式组合的自主循环(读邮件 → 总结 → 发送回复)将无害的单独权限转化为复合风险。危险不在于任何单一工具;而在于可达的组合——这正是真实 Agent 劫持攻击所展示的链式逻辑。
按层加固清单
20 分钟自检
大多数完成此练习的组织会发现至少有一个 stdio 服务器以开发者级别的云凭证运行——通常是在黑客松中加入的,此后从未重新审视。
MCP 安全的发展方向
预计 2026–2027 年将带来标准化工具签名(第三方服务器溯源)、每个工具集的按能力范围 OAuth 流程,以及带发布者验证的正式注册表——这是包注册表走过的成熟之路。在此之前,假设每个 MCP 服务器是一个具有社会工程兼容输入通道的特权 RPC 端点,并相应地限制其范围。
MCP 是否本质上不安全?
不——但它将对概率组件(模型)的特权委托标准化了。协议本身没问题;赋予它环境权限的部署才有问题。
单次影响最大的修复是什么?
清除 stdio 服务器上的环境凭证。专用运行时身份配合一次性范围令牌可以一次性消除大多数灾难性后果。
我需要 MCP 特定的测试工具吗?
您现有的 Web/API 审查已覆盖传输层;MCP 特定的缺口是工具描述审查、通过工具输出的间接注入,以及链式效应分析。这些是方法论问题,而非产品问题。
工具描述投毒与提示注入有何不同?
提示注入通过模型读取的数据到达;描述投毒则存活在工具元数据本身——即主机馈送给模型以决定何时及如何调用工具的"文档"。毒化描述不需要攻击者内容流经您的上下文;它已经坐在您客户端信任的工具列表中。这就是为什么描述必须像代码一样审查,而不是当作文档处理。
原文载于 hmmnm.com(这是跨平台发布)
Model Context Protocol 规范 — 传输、生命周期、工具发现
OWASP LLM 应用 Top 10 — 注入、过度代理、供应链
NIST SP 800-207(零信任架构)— 应用于 Agent 身份的每次调用验证
相关阅读:AutoJack:AI Agent 劫持到代码执行 · Agent 身份与最小权限 · AI 系统零信任架构