Shadow MCP: 誰も予算を立てなかった企業の問題
従業員が無許可の MCP サーバーを Claude と Cursor に接続しています。 1 つのゲートウェイ ルール、1 つのインベントリ クエリ、およびその先を行く 1 つのポリシー テンプレート。
シャドー IT とは、マーケティング マネージャーが Dropbox に費用をかけることを意味していました。 Shadow SaaS とは製品チームを意味します 個人のクレジット カードで Figma にサインアップします。 両方とも含まれていました。ツールはブラウザで実行されました タブに移動すると、ユーザーがすでに表示できるデータに触れましたが、タブの境界を越えてアクセスすることはできませんでした。 シャドウMCP その封じ込めを破ります。 従業員がコミュニティ MCP サーバーを Cursor または Claude に切り替えます デスクトップ、およびエージェントが SSH キーを読み取り、シェル コマンドを実行し、本番環境と通信できるようになりました。 ユーザーのアンビエント資格情報を介してデータベースにアクセスします。
Cloudflare Gateway は、2026 年 4 月に MCP 対応ルールを出荷しました。Zscaler と Netskope も 2026 年 4 月に続きました。 週。 企業のセキュリティ チームが要望を出し始めたため、ツールが追いつきました。 この投稿の内容は、 この四半期に行うべき 4 つのこと: 脅威モデルを理解する、検出を構築する、 インベントリ スクリプトを作成し、ホワイトリストを作成し、3 ページのポリシーを公開します。
Shadow MCP が Shadow SaaS よりも劣る理由
ブラウザーの不正な SaaS タブはサンドボックスで実行されます。 ユーザーの SSH 秘密キーを読み取ることはできません。 それ シェルを生成できません。 実稼働 Postgres への TCP 接続を開くことはできません。 ブラウザの 同一生成元ポリシーと OS サンドボックスによって封じ込めが行われます。
MCP サーバーはブラウザの外部で実行されます。 Claude Desktop と Cursor は stdio サーバーを子として生成します ユーザーの権限を使用してユーザーのマシン上でプロセスを実行します。 HTTP MCP サーバーは次のように接続します。 ユーザーが貼り付けた認証情報。その後、エージェントはそのサーバーからツールを呼び出します。 通常のループです。 オペレーティング システムの観点から見ると、ツール呼び出しはユーザーが ファイルを実行するか、コマンドを実行します。
具体的な違い: コミュニティ GitHub MCP サーバーがランダムな npm パッケージから取得され、
~/.cursor/mcp.json 中にあるものを何でも抜き出すことができる ~/.ssh/、 毎
.env ホーム ディレクトリ下のファイル、およびユーザーのリポジトリの内容全体
チェックアウトしました。 ユーザーは一度承認しました。 エージェントは二度と質問しません。 ブラウザベースの不正行為
ツールではそのようなことはできません。
さらに問題が 1 つ追加されます。それは、ユーザーの VPN です。 エージェントの実行時にラップトップが企業 VPN 上にある場合、 MCP サーバーはそのネットワーク位置を継承します。 内部サービス、ステージング データベース、 メタデータ エンドポイントはすべて到達可能になります。 サーバーは誰かをフィッシングする必要はありませんでした。 ただ待っただけだ VPN が接続できるようにします。
ネットワーク上でシャドウ MCP を見つける
検出は、エンドポイント、出力ゲートウェイ、DNS の 3 つの層で機能します。 信号が欲しい それぞれが異なる故障モードを検出するため、3 つすべてから結果が得られます。
エンドポイントで、Claude Desktop または Cursor が生成する子プロセスを監視します。 どちらのクライアントも
既知の親プロセス名を持つサブプロセスとして stdio サーバーを呼び出します。 あなたの EDR (CrowdStrike、
SentinelOne、Defender for Endpoint) は、ルートとなるプロセス ツリーに対してアラートを送信できます。
Claude.app、 Cursor.app、 または claude-code。 フィルタリングして、
あなたが承認したもの。 他のすべてにフラグを立てます。
出力時に、HTTP トラフィックをフィルタリングします。 MCP over Streamable HTTP には独特のヘッダーが付属します
(mcp-protocol-version) と特徴的なコンテンツ タイプ
(application/json-rpc-2)。 Cloudflare Gateway、Zscaler、Netskope はすべて一致します
両方。 これは、承認されていない MCP をブロックしながら、
承認されたホスト:
DNS では、リゾルバーは HTTPS 接続の前にコミュニティ MCP サーバー ホストのルックアップを確認します。 が開きます。 承認されたホワイトリストを DNS フィルターにフィードします (Cisco Umbrella、NextDNS、Cloudflare) ゲートウェイ DNS) のみが許可される MCP 宛先として使用されます。 既知の検索に一致する 1 つおきの検索 MCP レジストリ フィードはブロックとチケットを取得します。
npm でインストールされた stdio サーバーの場合、エンドポイント DLP エージェントは一致するパッケージを監視できます。
*-mcp-*、 @modelcontextprotocol/*、またはを宣言する任意のパッケージ
mcp その中のエントリ package.json bin 分野。 それは、
ユーザーがサーバーを Cursor に接続する前に、インストール イベントを実行します。
午後 1 日で MCP インベントリを作成する
検出により、新しいサーバーがいつ表示されるかがわかります。 インベントリは、何がすでにインストールされているかを示します。 スクリプトを送信し、MDM (Jamf、Intune、Kandji) を通じて実行し、結果をレポートに投稿します。 エンドポイント。 午後に仕事をすると、どのマシンにどのサーバーが搭載されているかがわかります。
このスクリプトは、すべての主要クライアントが使用する 2 つの構成ファイルを読み取ります。 Claude Desktop は設定を保持します
で ~/Library/Application Support/Claude/claude_desktop_config.json macOS 上と
%APPDATA%\Claude/claude_desktop_config.json Windows 上で。 カーソルはその設定を維持します
~/.cursor/mcp.json。 どちらのファイルもプレーンな JSON です。 mcpServers
サーバー名をコマンド、引数、URL、および環境変数にマッピングするオブジェクト。
ハッシュは重要です。 ユーザーがサーバーを追加したり、キーをローテーションしたり、キーをプルダウンしたりすると、構成ファイルが変更されます。
チームテンプレート。 ファイル全体の SHA-256 を保存し、プッシュしなかった変更について警告します。 の
env var 名 (値ではない) もレポートに含まれます。 見る GITHUB_PERSONAL_ACCESS_TOKEN
コミュニティ サーバーの下にリストされているのは、独自のシグナルです。
スクリプトを毎日実行します。 出力を既存の資産インベントリ (Snipe-IT、ServiceNow、 またはPostgresテーブル)。 今週の新しいサーバー、以上のサーバーを表示するダッシュボードを構築します。 N 台のマシンとサーバーの構成ハッシュが変更されました。 これら 3 つのビューで、これから行うことのほとんどがカバーされます 後で尋ねる必要があります。
信頼できるサーバーを許可リストに登録する
インベントリには、何がインストールされているかが表示されます。 ホワイトリストには何が許可されているかが記載されています。 デフォルトの拒否、毎回 サーバーがレビューされ、すべての承認が期限切れになります。 Git 内のファイルにバージョンを付けて、承認履歴を保存します。 監査可能。
この許可リストが役立つ理由は 3 つあります。 まず、すべてのエントリにはレビュー チケットと有効期限があります。
承認は永遠に続くわけではありません。 次に、stdio サーバーには許可された引数が含まれているため、
postgres-mcp バイナリが承認されました --readonly で再実行することはできません
新しいレビューなしの書き込みアクセス。 第三に、スコープには名前が付けられており、明示的です。 後の制御層
それらを強制することができます。
新しいサーバーを許可リストに登録するには、人間によるレビューの前に 2 つの自動チェックが必要です。 まず、サーバーのホストの TLS ポスチャを確認します。 プレーンテキスト HTTP 経由で MCP を提供するサーバー、または 証明書の有効期限が 10 日以内であるか、HSTS が欠落している場合は、候補にはなりません。
次に、応答ヘッダーを検査します。 最長有効期間が長く、賢明な HSTS が必要です。
content-type、そして mcp-protocol-version 内容と一致するヘッダー
サーバーはマニフェストでサポートしていると述べています。 ヘッダーとマニフェストの間の差異は危険信号です。
両方のチェックをインテーク チケットの一部として実行します。 どちらかが失敗した場合、チケットは自動的にクローズされます。 失敗の理由。 レビュー担当者は、基本事項に合格したサーバーのみを参照します。
すべての企業が必要とする 3 ページの MCP ポリシー
ポリシーは長くする必要はありません。 何を承認するか、誰が承認するかという 5 つの質問に答える必要があります。 新しいサーバーを承認します。各役割で何ができるか、どのように監視するか、いつ何が起こるか 何かがうまくいかない。 短い表は、誰も読まない 30 ページの文書よりも多くの作業を実行します。
| エリア | ポリシー | コントロール |
|---|---|---|
| 承認されたサーバー | ホワイトリスト YAML 内のサーバーのみが企業デバイス上で実行できる、または企業データにアクセスできる。 | DNS + 下りブロック、EDR プロセス ルール、MDM プッシュの許可リスト ファイル、6 か月の承認有効期限。 |
| レビュープロセス | Security Platform は、すべての新しいサーバー リクエストをレビューします。 データ プラットフォームは、データベース アクセスを持つサーバーに共同署名します。 規制されたデータを処理するサーバーは法的に承認されます。 | チケット テンプレート、自動化された TLS およびヘッダー チェック、5 営業日の公開された SLA を確認します。 |
| 範囲の制限 | エンジニアはデフォルトで読み取り専用のデータ サーバーを取得します。 書き込みアクセスには 2 番目の承認者が必要です。 本番環境の資格情報は禁止されています。 ステージングまたはスコープ付きトークンを使用します。 | MDM 経由でプッシュされるロールごとのホワイトリスト バンドル、短い TTL のスコープ指定された API キー、スコープを適用する認証ゲートウェイ。 |
| 監視 | 承認されたサーバーを介したすべてのツール呼び出しは監査ログに記録されます。 未承認のサーバーが試行されると、15 分以内にアラートがトリガーされます。 | Kafka および SIEM へのゲートウェイ監査シンク、毎日のインベントリの差分、構成ファイルのハッシュ ドリフト アラート。 |
| インシデント対応 | 侵害された MCP サーバーは、侵害された API 統合として扱われます。 サーバーのキーを取り消し、影響を受けるエンドポイントを隔離し、暴露期間の監査ログを確認します。 | 文書化されたランブック、オンコールローテーション、MCP シナリオを含む四半期ごとのテーブルトップ。 |
| 例外 | 一時的な例外には、CISO の承認、30 日間の有効期限、および書面によるフォローアップ計画が必要です。 | 例外チケット テンプレート、自動期限切れの許可リスト エントリ、毎週の例外レビュー。 |
| オフボーディング | 従業員が退職すると、その MCP 構成は他の企業状態とともに消去されます。 彼らが保持していたキーは 24 時間以内にローテーションされます。 | MDM ワイプ アクション、キー ローテーション Runbook、キーごとの最終アクセスの監査ログ。 |
重要なポイント
- MCP の機能は SaaS の機能を超えています。 コミュニティ MCP サーバーが SSH を読み取る キーを取得し、シェル コマンドを実行し、VPN の位置を継承します。 特権的なもののように扱う ブラウザのタブのような統合ではありません。
-
検出には 3 つの層が必要です。 EDR プロセス ルール、ゲートウェイ HTTP フィルター
mcp-protocol-version、および DNS ホワイトリストは、さまざまな障害モードをカバーします。 - ある日の午後に棚卸し。 60 行の Python スクリプトは 2 つの構成を読み取ります。 すべての主要なクライアントが使用するファイルをハッシュし、レポート エンドポイントに投稿します。 毎日実行する MDM経由。
-
デフォルトの拒否許可リスト、有効期限が短い。 すべてのサーバーにはレビュー チケットがあり、
6か月の有効期限。 使用
/v1/ssl/checkそして/v1/headers/inspectとして 自動吸気ゲート。 - 表は 30 ページのポリシーを上回ります。 承認されたサーバー、レビュープロセス、範囲 制限、モニタリング、インシデント対応、例外、オフボーディング。 7 行、1 ページ、投稿済み エンジニアリング Wiki にあります。
Botoi 独自の MCP サーバー: api.botoi.com/mcp サーバーの外観の例です
ホワイトリストの準備が整ったら、TLS 1.3、HSTS、スコープ付き API キー、キーごとのレート制限、および 49
注釈付きの厳選されたツール。 上記の 2 つのカールで姿勢を自分で確認できます
追加する前に、または MCP設定ページ
そして APIドキュメント
完全なツールのリストについては、
FAQ
- インベントリの目的で MCP サーバーとしてカウントされるものは何ですか?
- 標準入出力サーバーと HTTP サーバーの両方がカウントされます。 stdio サーバーは、Claude Desktop または Cursor が構成ファイル エントリから生成される子プロセスです。 エージェントが開始するまでネットワーク フットプリントはありませんが、同じ機能面があります。 HTTP サーバーは、クライアントが Streamable HTTP または SSE 経由で接続する URL に存在します。 インベントリは両方をカバーする必要があります。つまり、エンドポイントで構成ファイルを読み取り、MCP トラフィック署名の出力を監視します。
- 承認されたエージェントを破ることなく、企業ネットワーク上で MCP を完全にブロックできますか?
- はい。 デフォルトでは出口ゲートウェイですべてをブロックし、承認された MCP サーバーが存在する特定のホスト名を許可リストに登録します。 承認された stdio サーバーはネットワークにまったく接続しません (既に制御されている通常の HTTPS 経由でバッキング API と通信します)。 企業デバイス上でのコミュニティ MCP 実験が失われます。これが重要です。 開発者は引き続き、VPN の外部にある個人のマシンを探索のために使用できます。
- Shadow MCP はプロンプト インジェクション リスクとどのように異なりますか?
- プロンプト インジェクションとは、攻撃者がモデルを騙して、オペレーターが望まないことを実行させることです。 Shadow MCP は、オペレータ自身が未レビューの機能に配線します。 異なる脅威アクター、異なる制御。 ツールの存在が想定されていない場合、プロンプト インジェクション防御 (ツールの確認、サンドボックス化、出力フィルタリング) は役に立ちません。 モデルレベルの防御に加えて、インベントリとホワイトリストが必要です。
- ブロックするには次世代ファイアウォールのアップグレードが必要ですか?
- いいえ、DNS フィルタリングと HTTP 層の出力検査でほとんどのことがカバーされます。 Cloudflare Gateway、Zscaler、Netskope はすべて、2026 年 4 月時点で MCP 対応ルールを出荷しています。オンプレミスの場合は、任意の L7 プロキシを使用して MCP-Protocol-Version ヘッダーまたは application/json-rpc-2 コンテンツ タイプでフィルタリングできます。 Squid、Envoy、および HAProxy はすべてこれを処理します。 難しいのはフィルターではありません。 ホワイトリストを維持しているのです。
- MCP はすぐにどのような監査証跡を提供しますか?
- ほとんどありません。 このプロトコルはツールの呼び出しと応答を定義しますが、サーバーまたはクライアントがそれらをログに記録する必要はありません。 Claude Desktop はいくつかのローカル ログを保持します。 カーソルはそれほどではありません。 多くの場合、コミュニティ サーバーは何も記録しません。 インシデントのレビュー後に残る監査証跡が必要な場合は、サーバー側で自分で監査証跡を計測するか、構造化されたログを書き込むゲートウェイを前に置きます。 証拠の保持をクライアントに依存しないでください。
botoiで開発を始めよう
150以上のAPIエンドポイント。検索、テキスト処理、画像生成、開発者ユーティリティに対応。無料プラン、クレジットカード不要。