跳转到主要内容
第三方 MCP 服务器或安装的技能是供应链依赖。两种失效模式 尤为突出:
  • 投毒——服务器从一开始就是恶意的。它的清单看起来良性; 危险行为在工具实现中,而不是声明的范围中。
  • Rug-pull——你信任了它,然后它改变了。出现了服务器运营者 悄悄添加的新工具,或者社区注册表条目被劫持并更新为回调。
两种威胁共享一个根本原因:在你说”我信任这个服务器”之后,你的 智能体继续调用它的工具——即使是新的或修改过的——无需进一步审查。

1. MCP 工具投毒如何到达你的智能体

你的智能体发出的每一次 tools/call 都通过 MCP 服务器声明的工具集 传输。中毒或 rug-pull 的服务器以几种方式利用这种信任:
载体发生什么
未声明的工具服务器的清单从未声明的新工具出现在 tools/list 中。你的智能体找到它并调用它。
劫持的注册表条目社区注册表列表被接管;端点现在指向攻击者控制的服务器。
凭证收割服务器的工具实现将收集的输入发送到外部主机。
通过工具结果的提示注入工具返回攻击者控制的文本,重定向智能体的下一个动作。

2. OrcaRouter 的防御措施

2.1 每次 tools/call 在运行之前都经过防火墙评估

MCP 服务器通过 /api/v1/firewall/mcp 上的防火墙 MCP 网关连接到 你的智能体。网关在防火墙引擎对照你的策略 评估工具调用之前,不会转发它。 这意味着你的允许列表是真相来源——而不是服务器的工具清单。如果 rug-pull 添加了 shell.exec 而你的策略没有允许它的规则,判定就是 deny,调用永远不会离开网关。模型收到工具错误(firewall deny: …) 并可以做出反应;攻击者添加的工具从一开始就无效。 引擎可以返回的判定:
判定效果
allow / audit调用被转发;audit 额外记录参数。
sanitize参数在转发前被改写。
deny调用被拦截;模型收到工具错误。
pending_approval调用被挂起;人工必须在继续之前批准。
cap_cost成本上限被执行;如果会超过上限,调用被拦截。

2.2 自动检测的能力被隔离直到审查

当智能体自安装能力——或 rug-pull 添加了你注册服务器时不存在的 新工具——时,防火墙在热路径之外自动检测 新能力,综合清单,扫描它,并分配风险带和执行模式。关键地, 自动检测的能力总是被隔离,无论扫描结果如何:它们被置于 pending_approval 中,直到人工审查它们。 这就是 rug-pull 被遏制的方式。运营者无法悄悄添加新工具并让你的 智能体开始使用它——这些调用会被挂起,直到你检查并批准新能力。

2.3 技能扫描分配风险带和执行模式

每一个可安装的能力——无论是你注册的还是防火墙自动检测的——都 通过技能扫描器传递。 扫描器对清单和声明的范围运行确定性检查:
  • prompt_injection——试图劫持指令的清单文本。
  • tool_creep——清单使用但从未声明的工具。
  • network_egress——批准网络范围之外的 HTTP(S) 主机。
  • fs_write_unsafe——/tmp 之外的写入模式文件系统访问。
发现结果汇总到风险带low / medium / high / critical) 和执行模式
模式运行时发生什么
allow技能不强加任何自己的东西;你的策略规则决定。
quarantine任何非拒绝判定都升级为 pending_approval。人工必须批准每次工具调用。
block无论策略规则如何,对此技能所有工具强制 deny
high 带技能自动被隔离;critical 被拦截。单个 error 发现 (例如未声明的 shell.exectool_creep)即使其数字分数看起来 很低,也足以拦截技能。模式只会向更严格的方向收紧——批准技能 永远不会放宽新鲜扫描设置的拦截。

2.4 凭证加密存储

服务器认证密钥使用工作区密钥加密静态存储,在派发时由网关注入。 它们永远不会到达模型、智能体或调用参数。被攻破的服务器无法通过 读取自己的 auth_json 来外泄你的 API 密钥。
第三方 MCP 服务器审查清单在注册外部 MCP 服务器之前:
  • 验证发布者的身份——谁控制端点 URL?
  • 阅读源代码或变更日志;查找初始发布后添加的新工具。
  • 检查技能扫描在注册时是否返回任何 tool_creepprompt_injection 发现。
  • 将带 tool_name_glob: <server>.* 的防火墙规则限定到 auditpending_approval,直到你有调用历史。
  • 审查 network_egress 发现:清单声明它只需要一个域,但 工具描述提到了其他域吗?
  • 在任何上游版本升级后重新探测服务器(POST /api/workspace/firewall/mcp_servers/:id/probe)以显示新工具。

3. 怀疑 rug-pull 后该怎么做

  1. 立即禁用服务器——禁用的服务器从运行时注册表中删除, 其凭证永远不会被解密。使用带 "enabled": falsePUT /api/workspace/firewall/mcp_servers
  2. 重新探测以显示变更——POST /api/workspace/firewall/mcp_servers/:id/probe 运行 tools/list 并返回自你上次探测以来出现的任何新工具。
  3. 重新扫描技能记录——POST /api/workspace/firewall/skills/:id/rescan 对更新后的清单重新运行扫描器。如果判定降级为 flaggedblocked,防火墙会在你的信息流中发出事件。
  4. 审查 pending_approval 队列——自 rug-pull 以来被挂起的任何 调用都在队列中。检查并拒绝它们,而不是批量批准。
  5. 审计调用日志——在你检测到变更之前,检查防火墙事件追踪, 查看已经通过的调用。

4. 将技能扫描与防火墙规则配对

技能扫描和防火墙规则是互补的,并可以组合:
  • tool_name_glob: community.* 设置为 pending_approval 的规则 确保你审查来自社区来源服务器的每次调用,无论风险带如何。
  • 被隔离的技能会覆盖 allow 规则——即使你的策略广泛允许 http.fetch,拥有它的被隔离技能仍然挂起调用。
  • 在规则中使用 skill_name_glob 将更严格的策略限定到不受信任的服务器,而不影响你的第一方集成。
参见防火墙:MCP 服务器了解完整的网关模型, 以及防火墙:技能了解扫描器和执行模式参考。

5. 相关威胁

  • 危险工具调用——无论来源如何, 拦截破坏性或不可逆工具动作的规则。
  • 数据外泄——限制工具调用可以 发送数据到哪里的出站规则。
  • 威胁模型——OrcaRouter 旨在防御的 完整攻击面。

防火墙:MCP 服务器

在网关后注册 MCP 服务器,探测它们的工具,并在任何调用 到达真实服务器之前应用每次调用的判定。

防火墙:技能

扫描每个可安装能力并为其评分风险。在其工具运行之前 隔离或拦截危险技能。