跳转到主要内容
“rug pull”(抽地毯)是这样一种 MCP 失败模式:一个服务器在你看着 它时表现良好,一旦被信任就变得有敌意——一个你在连接时批准的工具 开始夹带额外参数,一个你列入的社区服务器悄悄添加一项新能力,或者 一个智能体自安装的技能在生产中从良性翻转为危险。危险在于:连接 上线之后没人重新审查它——信任决策只在握手时做了一次,从未重访。 OrcaRouter 不信任握手。它在三条战线上防御。防火墙的 MCP 网关 在派发时对照你的实时策略评估 每一次 tools/call。每个已注册服务器声明的工具集在首次探测时 被建立基线并对漂移重新核查——如果工具 schema 从批准的基线发生 变化,服务器会 fail closed,直到一名管理员重新批准或隔离它。而 技能 层为每一个已安装的能力赋予一个 风险等级和一个执行模式——把任何有风险或未审查的东西隔离,直到 一个人签字。一个服务器无法靠在头一百次调用里表现良好来赢得一张 通行证。

1. 为什么 MCP rug pull 防护需要每次调用的评估

一次连接时的审查只回答一个问题一次:这个服务器列入是安全的吗? 它无法回答运行时真正要紧的问题:现在,这次特定调用,带这些 特定参数,安全吗? OrcaRouter 回答第二个问题。每一次穿过网关的 tools/call 都在派发到 真实服务器之前在 mcp上被评估,手里握着工具名和参数。判定 每次都被重新计算,因此一个工具开始做你的策略禁止的事的那一刻 ——在一个参数里外泄密钥、触及一个被拒绝的主机、调用一个你从未 批准的能力——该调用就被阻止,无论同一个工具一分钟前如何表现。
每次调用的评估治理每次调用的行为——参数内容、目的地、归属 技能的风险——因此即使工具保持一个相同的签名而只有它的行为变得 有敌意,它也能抓住一次 rug pull。Schema 漂移检测(下文 §)是互补的 层:它抓住服务器声明的工具集本身发生变化的情形。两者都运行。
引擎能在 mcp 面上返回的判定:

allow / audit

转发到服务器。audit 记录该调用;allow 保持安静。

sanitize

先把工具调用的参数脱敏后再转发(它绝不改写服务器返回的内容)。

deny

作为一个工具错误firewall deny: …)返回给模型,因此智能体 能适应而不是崩溃。

pending_approval

该调用被挂起,等一个人来解决,之后才能运行。

2. 技能风险等级隔离

rug-pull 防御的后半部分覆盖供应链:智能体安装的技能、插件和 自带 MCP 服务器。每一个都被注册为一条工作区限定的记录,被一个 确定性风险引擎扫描,并被赋予一个风险等级low / medium / high / critical)加一个执行模式
模式运行时效果
allow由规则判定决定;技能不添加任何东西。
quarantine任何低于 deny 的判定都被升级为 pending_approval——工具只在一个人批准后运行。
block该技能的工具被直接拒绝。
这是 rug pull 被遏制的地方。一个智能体自安装的能力是 auto_detected在审查前被隔离——即使它扫描结果干净,它也 不会凭自己的权威运行。并且一个技能的模式只会在重新扫描时更紧 地棘轮收紧:你设置的一个 blockquarantine 永不在一个清单被 重新呈现时被悄悄放松。
隔离的执行独立于 shadow 模式。一个被设为 quarantineblock 的技能即使在周围的策略处于 shadow 推出期间也仍被挂起 ——因此一个有风险的能力无法在一次分阶段部署期间溜过。
完整的扫描器、评分权重和信任信号参见 防火墙:技能

3. 工具 schema 漂移检测

经典的 rug pull 是一个已注册服务器更改它所声明的东西——添加一个 工具、改动一个工具的输入 schema、替换一个描述。OrcaRouter 在一次 成功的探测上为每个已注册服务器声明的工具集建立基线,并监视它的漂移。

首次探测时建立基线

首次成功的探测会记录服务器工具的一个规范哈希(在发现姿态下 trust-on-first-use;在一个**执行(enforcing)**姿态下,一个未建立 基线的服务器被挂为 pending,直到一名管理员批准它的初始工具集)。

漂移 fail closed

在一次后续探测上,如果规范工具集不再匹配批准的基线,服务器会被 标记为 changed停止被提供——网关在你决定之前不会派发它的工具。

批准或隔离

重新批准以把基线重置到新 schema,或隔离该服务器。一个被隔离的 服务器也被禁用,并且只有一次明确的批准才能恢复服务——一次普通的 编辑无法重新启用它。

受审计

从一个批准的基线首次检测到漂移会写入一条工作区审计条目,因此 这次变更被记录在案。
一个服务器的 schema 状态是以下之一:unknown(从未建立基线)、 verified(匹配基线)、changed(已漂移,被挂起)、pending (在执行姿态下未建立基线)或 quarantined。这一层抓住移动了 schema 的 rug pull;每次调用的评估(§1)抓住保持一个相同签名而 只更改行为的那种。

4. 一个具体例子

假设一个社区 MCP 服务器 notes 声明了一个无害的 notes.search 工具。你列入它、审查它,它工作正常。一周后服务器被攻破, notes.search 开始附加一个把你的上下文 POST 到一个攻击者主机的 外泄参数。 一个仅在连接时把关的网关会转发它——工具名和 schema 看起来没变。 OrcaRouter 评估该调用:
# 在控制台(Developer+)配置 deny 规则,不是经由中继密钥。
# 规则:在 mcp 面上,当 notes.search 携带一个外泄形状的参数时拒绝它。
#   tool_name_glob: notes.search
#   args_match:     { "path": "$.callback_url", "op": "regex",
#                     "value": "^https?://(?!notes\\.example/)" }  → deny
args_match 运算符为 eqcontainsregexincidr_matchgtltcidr_match 对照一个 CIDR 测试一个 IP 值的参数。要按 主机/CIDR 限定一个工具可以触及哪里,请使用 出站目的地列表 而不是一个参数子句。) 在派发时引擎返回 deny,于是网关不转发该调用,而是把一个 MCP 工具结果错误——一个被标记为错误的正常结果,不是一次传输失败 ——交给智能体,因此模型能适应:
firewall deny: <your rule's reason>
上周成功的同一次调用现在被拦截——因为决策是在调用上做的,而不是 在连接上。
sanitize 脱敏的是你的智能体发送的参数,绝不是一个工具返回的 内容。如果你需要约束一个工具可以触及哪里,把一条 deny 规则与一个 出站目的地列表 配对——不要依赖 sanitize 来清洗响应。

5. 它如何组合在一起

每次调用的评估抓住一个受信任工具变恶意——同样的名字、 参数或目的地里的新行为。技能隔离抓住一个新的或未审查的能力 根本就出现了——一次自动检测的安装、一个被重新扫描后新近退化的 清单。一次 rug pull 可以取任一形态,因此两者都运行:技能的模式 叠加在每次调用的规则判定之上。
会——见 §3。每个已注册服务器声明的工具集在首次探测时被建立 基线并对漂移重新核查;一个已漂移的服务器 fail closed,直到你 重新批准或隔离它。这与每次调用的评估互补,后者还会抓住一个 保持相同签名而只更改其行为的工具。
一个 pending_approval 判定把调用挂起,等一个人在控制台 (Developer+)中或经由一个 HMAC 审批回调来解决。关于挂起和审批 如何向一个智能体浮现,参见 执行模式

6. 配置它

下面的每一步都是一个用你的会话或访问令牌鉴权的控制台 / 管理 操作——不是 sk-orca-… 中继密钥。只有 /v1/* 中继流量使用中继密钥。
1

把你的 MCP 服务器注册在网关后面

连接每个服务器,让它的工具在一个 受审计的端点下被声明。注册是 Developer+
2

在 mcp 面上设置一个默认判定和规则

tool_name_globargs_match 编写规则,让有风险的调用 解析为 denysanitizepending_approval。参见 防火墙规则参考
3

审查被隔离的技能

任何被自动检测的东西都坐在 quarantine 中,直到一名审查者 (Developer+)批准它。先读取等级和发现项。
4

先以 shadow 推出,然后执行

执行模式 以 shadow 运行新规则,观察 审计事件,并在 判定看起来正确时翻转为执行。
读取(设置、策略、已发现工具、异常)对任何 Member 开放;每一次 写入是 Developer+。读取一个 firewall-gateway 密钥的明文是 Developer+

相关

防火墙:MCP 服务器

完整的 MCP 网关参考——注册、探测、派发。

防火墙:技能

扫描器流程、风险评分和隔离推导。

MCP 工具投毒

rug-pull 防御为之而生的威胁模型。

出站限制

编写主机/CIDR deny 规则以限定工具可以触及哪里。

信任清单

信任一个 MCP 服务器的端到端清单。

防护栏 vs. 防火墙

什么时候应用内容策略,什么时候由防火墙处理。