tools/call。每個已註冊伺服器
所公告的工具集會在首次探測時建立基準並重新檢查漂移
——如果工具 schema 從核准的基準變更,該伺服器會
fail closed,直到一位 admin 重新核准或隔離它。而
技能層會為每個已安裝能力指派
一個風險等級與一個強制執行模式——隔離任何有風險或
未審查的東西,直到一個人簽核。一個伺服器無法靠在前
一百次呼叫規矩來贏得免費通行證。
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 | 該技能的工具直接被拒絕。 |
auto_detected 並被隔離直到審查——
即使它掃描乾淨,它也不會憑自己的權限執行。而一個技能的
模式在重新掃描時只會更緊:你設定的一個 block 或 quarantine
在一個 manifest 被重新呈現時永不會被悄悄放鬆。
關於完整的掃描器、評分權重與信任訊號,請見
防火牆:技能。
3. 工具 schema 漂移偵測
經典的 rug pull 是一個變更它所公告內容的已註冊 伺服器——加上一個工具、改變一個工具的輸入 schema、替換一個 描述。OrcaRouter 會在一次成功探測時為每個已註冊伺服器的所公告工具 集建立基準,並監看它的漂移。首次探測時建立基準
第一次成功的探測會記錄該伺服器工具的一個正規
雜湊(在發現姿態下 trust-on-first-use;在一個
強制執行姿態下,一個未建立基準的伺服器會被保留為
pending,直到一位
admin 核准它的初始工具集)。漂移 fail closed
在之後一次探測時,如果正規工具集不再匹配
核准的基準,該伺服器會被標記為
changed 且停止被
服務——閘道在你決定之前不會派發它的工具。核准或隔離
重新核准以重新建立至新 schema 的基準,或隔離該伺服器。
一個被隔離的伺服器也會被停用,且只有一次明確的核准才會
恢復服務——一次單純的編輯無法重新啟用它。
已稽核
對一個核准基準的漂移的第一次偵測會寫入一筆
工作區稽核項目,所以該變更會被記錄在案。
unknown(從未建立基準)、
verified(匹配基準)、changed(已漂移、被保留)、pending
(在強制執行下未建立基準)或 quarantined 之一。這一層抓住
移動 schema 的 rug pull;
每次呼叫的評估(§1)抓住那種保持完全相同簽章
而只變更行為的。
4. 一個具體範例
假設一個社群 MCP 伺服器notes 公告一個無害的
notes.search 工具。你列出它、審查它,且它運作。一週後該
伺服器被入侵,而 notes.search 開始附加一個外洩
引數,把你的脈絡 POST 到一個攻擊者主機。
一個只在連接時的閘道會轉送它——工具名稱與 schema
看起來沒變。OrcaRouter 評估該呼叫:
args_match 運算子有 eq、contains、regex、in、cidr_match、
gt、lt;cidr_match 會對照一個 CIDR 測試一個 IP 值引數。要
依 host/CIDR 約束一個工具可以觸及何處,請使用
egress 目的地清單而非一個
引數子句。)
在派發時引擎回傳 deny,而閘道不轉送該呼叫,
反而交給代理一個 MCP 工具結果錯誤——一個被標記為錯誤的
正常結果,而非一次傳輸失敗——所以模型能適應:
5. 它如何組合在一起
每次呼叫的評估 vs. 技能隔離——各抓住什麼?
每次呼叫的評估 vs. 技能隔離——各抓住什麼?
每次呼叫的評估抓住一個信任的工具變得惡意——
相同名稱、引數或目的地中的新行為。技能
隔離抓住一個新的或未審查的能力根本出現了
——一次自動偵測的安裝、一個新降級的重新掃描 manifest。
一個 rug pull 可以採取任一種形狀,所以兩者都會執行:技能的模式
凌駕於每次呼叫的規則裁決之上。
這會為伺服器的 schema 建立基準嗎?
這會為伺服器的 schema 建立基準嗎?
會——見 §3。每個已註冊伺服器所公告的工具集會在
首次探測時建立基準並重新檢查漂移;一個漂移的伺服器會
fail closed,直到你重新核准或隔離它。那與
每次呼叫的評估互補,後者也抓住一個保持完全相同簽章
而只變更其行為的工具。
被保留的呼叫去哪裡?
被保留的呼叫去哪裡?
一個
pending_approval 裁決會把該呼叫保留,待一個人在
主控台(Developer+)中或透過一個 HMAC 核准回呼解決。請見
強制執行模式了解保留
與核准如何浮現給一個代理。6. 設定它
下面的每一步都是一個以你的工作階段或存取權杖驗證的 主控台/管理動作——而非sk-orca-… 轉送金鑰。只有 /v1/*
轉送流量使用轉送金鑰。
在閘道後方註冊你的 MCP 伺服器
連接每個伺服器,使它的工具在
一個受稽核的端點下被公告。註冊是 Developer+。
在 mcp 表面上設定一個預設裁決與規則
用
tool_name_glob 與 args_match 撰寫規則,讓有風險的呼叫
解析為 deny、sanitize 或 pending_approval。請見
防火牆規則參考。讀取(設定、政策、探索到的工具、異常)對任何
Member 開放;每一次寫入都是 Developer+。讀取一個防火牆閘道
金鑰的明文是 Developer+。
相關
防火牆:MCP 伺服器
完整的 MCP 閘道參考——註冊、探測、派發。
防火牆:技能
掃描器階段、風險評分與隔離推導。
MCP 工具下毒
rug-pull 防禦存在以對抗的威脅模型。
Egress 限制
撰寫 host/CIDR deny 規則以約束工具可以觸及何處。
信任檢查清單
信任一個 MCP 伺服器的端到端檢查清單。
防護欄 vs. 防火牆
內容政策何時適用,以及防火牆何時適用。
