メインコンテンツへスキップ
「ラグプル」は、サーバーがあなたが見ている間はおとなしく振る舞い、信頼された途端に 敵対的になる MCP の失敗モードです:接続時に承認したツールが余分な引数を密輸し始める、 リストに載せたコミュニティサーバーがひっそりと新しいケイパビリティを追加する、 あるいはエージェントが自己インストールしたスキルが本番で良性から危険へ反転する、 といったものです。危険なのは、接続がライブになった後に誰も再レビューしないことです — 信頼の決定はハンドシェイクで一度だけ下され、二度と見直されません。 OrcaRouter はハンドシェイクを信頼しません。3 つの戦線で防御します。ファイアウォール の MCP ゲートウェイは、各 tools/call をディスパッチ時に あなたのライブポリシーに対して評価します。各登録済みサーバーのアドバタイズされた ツールセットは最初のプローブでベースライン化されドリフトを再チェックされます — ツールスキーマが承認されたベースラインから変化すると、管理者が再承認または隔離する まで、サーバーはフェイルクローズします。そしてスキル レイヤーは、インストールされたすべてのケイパビリティにリスクバンドと強制モードを割り 当て、リスクのあるものやレビューされていないものを、人間が承認するまで隔離します。 サーバーは、最初の 100 回の呼び出しでおとなしく振る舞うことでフリーパスを獲得する ことはできません。

1. なぜ MCP ラグプル保護に呼び出しごとの評価が必要か

接続時のレビューは、1 つの問いに一度だけ答えます:このサーバーをリストに載せるのは 安全か? それは、ランタイムで実際に重要な問いには答えられません:この特定の 呼び出しは、これらの特定の引数で、今この瞬間安全か? OrcaRouter は 2 つ目の問いに答えます。ゲートウェイを越えるすべての tools/call は、 ツール名と引数を手にした状態で、実際のサーバーにディスパッチされる前に mcp サーフェス上で評価されます。判定は毎回新たに計算されるため、ツールが あなたのポリシーが禁じる何か — 引数でシークレットを持ち出す、拒否されたホストに 到達する、承認していないケイパビリティを呼び出す — を始めた瞬間、同じツールが 1 分前に どう振る舞ったかにかかわらず、その呼び出しは止められます。
呼び出しごとの評価は、各呼び出しの挙動 — 引数の内容、宛先、所有元スキルの リスク — を統制するため、ツールが同一のシグネチャを保ちその挙動だけが敵対的に なる場合でも、ラグプルを捕捉します。スキマドリフト検出(下記 §)は補完的なレイヤー です:サーバーのアドバタイズされたツールセット自体が変わるケースを捕捉します。両方が 実行されます。
エンジンが mcp サーフェス上で返せる判定:

allow / audit

サーバーに転送されます。audit は呼び出しをログに記録します;allow は静かに します。

sanitize

ツール呼び出しの引数を先にリダクトして転送します(サーバーが返すものを 書き換えることは決してありません)。

deny

ツールエラーfirewall deny: …)としてモデルに返されるため、エージェントは クラッシュする代わりに適応できます。

pending_approval

呼び出しは、実行できる前に人間が解決するために保留されます。

2. スキルのリスクバンド隔離

ラグプル防御のもう半分はサプライチェーンをカバーします:エージェントがインストール するスキル、プラグイン、持ち込み MCP サーバーです。それぞれはワークスペース スコープのレコードとして登録され、決定論的リスクエンジンによってスキャンされ、 リスクバンドlow / medium / high / critical)と強制モードを割り 当てられます:
モードランタイムでの効果
allowルール判定が決定します;スキルは何も追加しません。
quarantinedeny に満たないものはすべて pending_approval にエスカレートされます — ツールは人間が承認した後にのみ実行されます。
blockスキルのツールは即座に拒否されます。
ここでラグプルが封じ込められます。エージェントが自己インストールした ケイパビリティは auto_detected であり、レビューされるまで隔離されます — クリーンにスキャンされたとしても、それ自身の権限で実行されることはありません。 そしてスキルのモードは再スキャンでより厳しくラチェットするだけです:あなたが設定 した blockquarantine は、マニフェストが再提示されたときに静かに緩められる ことは決してありません。
隔離はシャドウモードとは独立に強制されます。quarantine または block に 設定されたスキルは、周囲のポリシーがシャドウロールアウト中でも依然として保留され ます — リスクのあるケイパビリティが段階的デプロイ中にすり抜けることはできません。
完全なスキャナー、スコアリングの重み、信頼シグナルについては ファイアウォール:スキルを参照してください。

3. ツールスキーマのドリフト検出

古典的なラグプルは、登録済みサーバーがアドバタイズするものを変えることです — ツールを追加する、ツールの入力スキーマを変える、説明をすり替える。OrcaRouter は、 各登録済みサーバーのアドバタイズされたツールセットを成功したプローブでベースライン化し、 ドリフトを監視します。

最初のプローブでベースライン化

最初の成功したプローブが、サーバーのツールの正規ハッシュを記録します(ディスカ バリー姿勢の下では trust-on-first-use;強制姿勢の下では、ベースライン化されて いないサーバーは管理者がその初期ツールセットを承認するまで pending として保留 されます)。

ドリフトはフェイルクローズ

後のプローブで、正規ツールセットがもはや承認されたベースラインと一致しない場合、 サーバーは changed とマークされ提供を停止します — あなたが決定するまで、 ゲートウェイはそのツールをディスパッチしません。

承認または隔離

再承認して新しいスキーマに再ベースライン化するか、サーバーを隔離します。隔離された サーバーは無効化もされ、明示的な承認だけがサービスを復元します — 単なる編集では 再有効化できません。

監査済み

承認されたベースラインからのドリフトの最初の検出は、ワークスペース監査エントリを 書き込むため、変更は記録に残ります。
サーバーのスキーマステータスは、unknown(ベースライン化されたことがない)、 verified(ベースラインに一致)、changed(ドリフト、保留)、pending(強制下で ベースライン化されていない)、または quarantined のいずれかです。このレイヤーは スキーマを動かすラグプルを捕捉します。呼び出しごとの評価(§1)は、同一の シグネチャを保ち挙動だけを変えるものを捕捉します。

4. 具体例 1 つ

コミュニティ MCP サーバー notes が無害な notes.search ツールをアドバタイズして いるとします。あなたはそれをリストに載せ、レビューし、それは機能します。1 週間後、 サーバーは侵害され、notes.search はあなたのコンテキストを攻撃者ホストに POST する 持ち出し引数を添付し始めます。 接続時のみのゲートウェイはそれを転送するでしょう — ツール名とスキーマは変化なく 見えます。OrcaRouter は呼び出しを評価します:
# Configure the deny rule in the console (Developer+), not via the relay key.
# Rule: on the mcp surface, deny notes.search whenever it carries an
#       exfiltration-shaped argument.
#   tool_name_glob: notes.search
#   args_match:     { "path": "$.callback_url", "op": "regex",
#                     "value": "^https?://(?!notes\\.example/)" }  → deny
args_match の演算子は eqcontainsregexincidr_matchgtlt です;cidr_match は IP 値の引数を CIDR に対してテストします。ツールがどこに到達 してよいかをホスト/CIDR で制限するには、引数句の代わりに egress 宛先リストを使ってください。) ディスパッチ時、エンジンは deny を返し、呼び出しを転送する代わりにゲートウェイは エージェントに MCP ツール結果エラー — トランスポート障害ではなく、エラーとして フラグされた通常の結果 — を渡すため、モデルは適応できます:
firewall deny: <your rule's reason>
先週成功した同じ呼び出しが今やブロックされます — なぜなら決定が接続ではなく呼び出しで 下されるからです。
sanitizeエージェントが送る引数をリダクトし、ツールが返すコンテンツは決して リダクトしません。ツールが到達してよい先を制約する必要がある場合は、deny ルールを egress 宛先リストとペアにしてください — レスポンスをスクラブするために sanitize に頼らないでください。

5. どう組み合わさるか

呼び出しごとの評価は、信頼されたツールが悪意化すること — 同じ名前、引数や 宛先での新しい挙動 — を捕捉します。スキル隔離は、新しいまたはレビューされていない ケイパビリティがそもそも出現すること — 自動検出されたインストール、新たに劣化する 再スキャンされたマニフェスト — を捕捉します。ラグプルはどちらの形も取りうるため、 両方が実行されます:スキルのモードが呼び出しごとのルール判定の上に乗ります。
はい — §3 を参照してください。各登録済みサーバーのアドバタイズされたツールセットは 最初のプローブでベースライン化されドリフトを再チェックされます;ドリフトした サーバーは、再承認または隔離するまでフェイルクローズします。それは、同一の シグネチャを保ち挙動だけを変えるツールも捕捉する呼び出しごとの評価と補完的です。
pending_approval 判定は、コンソール(Developer+)または HMAC 承認コールバック 経由で人間が解決するために呼び出しを保留します。保留と承認がエージェントに どう表面化されるかについては 強制モードを参照してください。

6. 設定する

以下の各ステップは、sk-orca-… リレーキーではなく、あなたのセッションまたは アクセストークンで認証されるコンソール/管理アクションです。/v1/* リレー トラフィックだけがリレーキーを使います。
1

MCP サーバーをゲートウェイの背後に登録する

各サーバーを接続して、そのツールがひとつの監査済み エンドポイントの下でアドバタイズされるようにします。登録は Developer+ です。
2

mcp サーフェスにデフォルト判定とルールを設定する

tool_name_globargs_match でルールを作成し、リスクのある呼び出しが denysanitize、または pending_approval に解決されるようにします。 ファイアウォールルールリファレンスを参照して ください。
3

隔離されたスキルをレビューする

自動検出されたものはすべて、レビュアー(Developer+)が承認するまで quarantine に置かれます。まずバンドと所見を読んでください。
4

シャドウでロールアウトし、それから強制する

強制モードを使って新しいルールを シャドウで実行し、監査イベントを監視し、判定が 正しく見えたら強制に切り替えます。
読み取り(設定、ポリシー、発見されたツール、異常)は任意の Member に開放されて います;すべての書き込みは Developer+ です。ファイアウォールゲートウェイキーの 平文を読むことは Developer+ です。

関連

ファイアウォール:MCP サーバー

完全な MCP ゲートウェイリファレンス — 登録、プローブ、ディスパッチ。

ファイアウォール:スキル

スキャナーパス、リスクスコアリング、隔離の導出。

MCP ツールポイズニング

ラグプル防御が対抗するために存在する脅威モデル。

egress 制限

ツールが到達してよい先を制限するホスト/CIDR 拒否ルールを作成します。

信頼チェックリスト

MCP サーバーを信頼するためのエンドツーエンドのチェックリスト。

ガードレール vs. ファイアウォール

コンテンツポリシーがいつ適用され、ファイアウォールがいつ適用されるか。