跳转到主要内容

面向 Agent 间通信的 MCP:将传输层视为攻击面

Agent 间协议继承了其所扩展的工具调用层的信任假设,因此消息真实性和能力范围必须在传输层中设计,而不是事后附加到 agent 上。

U.S. Air Force Senior Airman Andrew Cranley, 423d Security Forces Squadron Base Defense Operations Controller, monitors base operations at R

协议即边界

MCP 风格的传输层是为单一可信调用方调用工具而构建的。在该模型中,传输层是一根管道:它在客户端和服务器之间传递 JSON-RPC 帧,而真正重要的安全决策发生在它之上,即工具实现中。当同一传输层被用于具有不同主体的对等 agent 时,这根管道就变成了边界。每一次重新序列化请求的跳转,都是来源信息被丢弃的地方。一条最初是用户请求、被规划 agent 改写、又被检索 agent 转发的消息,到达工具服务器时,已经没有任何可靠信息表明是谁请求了什么。

能力发现与能力授权的混同使情况更糟。发现回答的是“这个端点能做什么?”授权回答的是“这个主体是否被允许为该任务调用该能力?”MCP 风格的注册表通常暴露前者,而把后者留给调用方。在单一调用方模型中,这是站得住脚的。在对等 agent 模型中,这意味着任何能访问注册表的 agent 都能枚举完整的能力面并尝试调用,而接收方 agent 在传输层没有任何依据来拒绝。注册表变成了一张攻击面地图,被交到每个参与者手中。

这不是 MCP 作为工具协议的缺陷。把工具协议扩展到对等消息传递而不重新审视其信任模型,是一种范畴错误。相关的问题不是帧是否格式良好,而是传输层能否证明是谁发送了它们、代表谁、以及在什么约束下。

共享命名空间的 agent 之间的冒充

当 agent 由消息字段中的字符串而非密码学主体来标识时,任何 agent 都可以声称任何身份。在一个规划 agent 按名称寻址工作 agent 的 swarm 中,一个被攻陷或仅仅有缺陷的工作 agent 可以发送看似来自规划 agent 的消息。下游 agent 无法区分真实指令和伪造指令,因为传输层不携带签名,也没有通道绑定。这种失败是静默的:伪造的消息格式良好,能力存在,调用成功。

混淆代理流

U.S. Air Force Staff Sgt. Andrew Foster, 332nd Expeditionary Security Forces Squadron small unmanned aircraft systems mid-shift lead operato

一个低权限 agent 转发一个高权限调用。只要传输层授权的是连接而不是消息,这种情况就会发生。一个为其自身合法工作持有宽泛凭证的 agent,可以被诱导代表一个本不应拥有该凭证的调用方使用该凭证。代理并非恶意;它只是在做协议允许的事。经典缓解措施——检查调用方身份——会失败,因为调用方就是代理,而代理是被授权的。缺失的是原始主体与具体调用之间的绑定。

长时程运行中的消息重放

长时程 agent 运行会检查点状态并恢复。如果传输层不携带能在检查点后存活的 nonce,那么在一个步骤捕获的消息就可以在另一个步骤重放。重放可能在语义上有效:能力仍然存在,参数仍然能解析,接收方 agent 也不记得曾见过该消息。在跨越数小时和许多 agent 的运行中,重放窗口很宽,而缺少持久 nonce 意味着传输层无法区分重试和攻击。

将每条消息绑定到主体和任务标识符

会话标识符不够。会话会被重用、池化,有时还会跨任务共享。每条消息都应携带明确的主体(谁在行动)和任务标识符(该动作属于什么),并且两者都应被消息签名覆盖。主体是原始请求者,而不是直接发送者。任务标识符让接收方能够应用针对工作而非连接范围的政策。

一个具体机制:对消息信封的规范序列化进行签名,包括主体、任务标识符、能力名称和单调递增的序列号,使用发送方 agent 持有的密钥。接收方根据绑定到主体的密钥验证签名,对照该任务上次见到的序

将能力范围限定到消息,而不是连接

A soldier belonging to the African Union Mission in Somalia monitors traffic along a street during an operation aimed at improving security

连接级授权是混淆代理流的根源。一个被授权调用某能力的连接可以出于任何原因调用它。相比之下,消息级能力授予会指明能力、任务、主体和过期时间。接收方检查授予,而不是连接。这意味着代理无法提权:它只能出示发给它的、用于所给任务的授予。

权衡是真实存在的。消息级授予为每次调用增加一个 token,需要一个签发者,并引入撤销问题。在高吞吐的内部 swarm 中,开销在延迟和签发者复杂性上都是可测量的。替代方案——信任连接——更便宜,并且会失败开放。设计选择在于传输层是否应在来源上失败关闭。对于跨信任边界的 agent 间通信,它应该失败关闭。

让传输层日志成为权威记录

agent 侧日志仅供参考。一个 agent 可能被攻陷、被重启,或者只是对自己做了什么记错了。如果一条消息的唯一记录存在于发送或接收它的 agent 中,那么该记录就不是证据。传输层应记录每个已签名信封及其验证结果,并且该日志应成为审计和重放检测的权威记录。这也提供了一个跨检查点强制 nonce 唯一性的地方:是传输层,而不是 agent,记住已经见过什么。

诚实的权衡

这些规则中的每一条都把工作从 agent 转移到传输层。这正是重点,也是代价。验证签名、跟踪序列号、签发和撤销消息范围授予、维护持久日志的传输层,比搬运字节的管道更复杂。它们需要密钥管理、签发者和能在重启后存活的日志。它们增加延迟和故障模式。在单一调用方工具调用中,这种复杂性并不合理。在主体分化且长时程运行会检查点和恢复的对等 agent swarm 中,这种复杂性就是安全属性。问题不是是否要付出它,而是在哪里付出:在传输层中,一次;还是在每个 agent 中,反复且不一致地付出。

下一步该做什么

将传输层视为攻击面,并像审计攻击面一样审计它。枚举请求被重新序列化的跳转,并追问哪些来源信息得以保留。将能力发现与能力授权分离,并在调用时要求授予。将消息绑定到主体和任务,而不是会话。让传输层日志成为权威,并用它进行重放检测。这些都不需要放弃 MCP 风格的传输层;它需要的是用对等通信所需的信任原语来扩展它们。关于 agent 协议安全的相关工作,见这份分析。

分享XLinkedIn永久链接5 分钟阅读

相关阅读

这能回答的问题

Why is MCP-style transport insufficient for peer agents?

MCP-style transports were designed for a single trusted caller invoking tools. They do not bind messages to principals or tasks, so provenance is lost at every re-serialisation hop, and capability discovery is conflated with authorisation.

What is a confused-deputy flow in agent-to-agent communication?

It occurs when a low-privilege agent relays a high-privilege call because the transport authorises the connection rather than the message. The deputy is authorised, so identity checks pass, but the original principal should not have had the capability.

How can replay attacks be prevented in long-horizon agent runs?

Bind a nonce or monotonically increasing sequence number to each message and have the transport, not the agent, track seen values across checkpoints. Agent-side memory is insufficient because it does not survive restarts reliably.

Should capability grants be per-connection or per-message?

Per-message. Connection-level grants enable confused-deputy escalation. Message-level grants name the capability, task, principal, and expiry, so a deputy can only present grants issued to it. The trade-off is added token overhead and a revocation problem.