MCPサーバー共通セキュリティ仕様
文書バージョン:1.0 Draft
制定日:2026年10月9日
準拠基準:MCP Specification 2026-07-28
適用対象:公開MCP、商用MCP、ChatGPTプラグイン、共通バックエンドAPI
管理主体:AI Orchestration
1. 基本方針
本仕様は、MCPサーバーをAIエージェントが利用することを前提として、情報資産の機密性・完全性・可用性および知的財産の保護を図るための共通要件を定める。
MCPクライアントおよびAIモデルは信頼境界の外側に位置するものとし、モデルが正しい判断を行うことをセキュリティ上の前提としない。
基本原則
- ゼロトラスト:AIモデルの判断を認証・認可の根拠にしない。
- 最小権限:ツール単位で許される操作を限定する。
- 最小情報:目的に必要な情報だけを入出力する。
- 多層防御:エッジ、認証、ツール、データの各層で防御する。
- 検証可能性:セキュリティ機能は試験で有効性を確認する。
- 正確性:防御を理由に計算結果や公的情報を改ざんしない。
2. 想定する脅威
| 脅威 | 内容 | 主な対策 |
|---|---|---|
| 不正アクセス | 他人・他社の情報取得 | OAuth、リソース単位認可 |
| DoS・リソース枯渇 | 大量のツール実行 | レート制限、実行予算 |
| 敵対的蒸留・機能模倣 | 大量照会による知識・ロジック再構築 | 取得量・取得範囲の制御 |
| プロンプトインジェクション | AIを誘導して不適切なツール操作を行わせる | 信頼境界の分離、入力検証 |
| ツール悪用 | AIが過剰な権限で操作する | 権限分離、操作確認 |
| データ持ち出し | 機密情報を外部に送信 | 出力制限、送信先制限 |
| ツール・依存ライブラリ改ざん | ツールの説明や動作を悪意あるものに変更 | 変更管理、署名・依存関係検査 |
| SSRF・認証悪用 | 内部ネットワークや認証基盤を不正利用 | URL検証、送信先制限 |
※ 独自AIモデルを持たないMCPでは、厳密なモデル蒸留より、データ抽出・機能模倣が中心となる。
3. 必須セキュリティ要件
以下のP0は適用対象における公開前必須要件とする。P1は保護価値・利用規模に応じて追加する。
SEC-01 通信・プロトコル保護P0
- 本番環境の通信はHTTPSを必須とする。
- MCP Streamable HTTPを採用する。
- 対応するMCPプロトコル版を明示し、互換性を検証する。
- ゲートウェイでリクエストサイズ、実行時間、接続数を制限する。
- 2026-07-28版のMcp-Method/Mcp-Nameヘッダーをルーティング・監視に活用する場合、リクエスト本文との整合性を検証する。
- 外部から内部APIやデータベースへ直接アクセスさせない。
SEC-02 認証・認可P0
- 公開情報を読み出すだけのツールには匿名利用を許容する。
- 非公開情報・契約情報・更新操作には原則OAuth 2.1ベースの認証を要求する。
- PKCEを使用する。
- アクセストークンの署名、有効期限、issuer、audience、scopeを検証する。
- 他サービス向けに発行されたトークンを受け入れない。
- 他サービスへのアクセストークンの単純転送を禁止する。
- すべてのツール実行時に、ユーザー・組織・対象リソースのアクセス権を再評価する。
- リクエストの引数に含まれるユーザーIDや組織IDだけを信頼しない。
- 複数回の呼び出しで用いる状態ハンドルは、認証済み主体に紐付け、有効期限を設ける。
SEC-03 ツール権限管理P0
- ツールは単一の明確な業務目的に対応させる。
- 参照ツールと更新ツールを分離する。
- Input SchemaとOutput Schemaを定義する。
- 文字数、配列件数、取得件数、数値範囲などを制限する。
- 原則として、外部から任意のSQL・OSコマンド・スクリプトを実行できる汎用ツールを公開しない。
- readOnlyHint、destructiveHint、openWorldHintなどの属性を実際の動作と一致させる。
- ツール属性をセキュリティ制御の代用とせず、サーバー側で権限を強制する。
SEC-04 プロンプトインジェクション対策P0
- AIが生成したツール引数は、信頼済み入力とみなさない。
- MCPに渡された自然言語を、管理命令や認証済み操作の証明として解釈しない。
- 外部文書・検索結果・データベースの文章に含まれる命令を、システム権限へ昇格させない。
- 外部データには出典と信頼区分を付ける。
- 検証可能な構造化データを優先し、不要な自然言語指示をツール結果に混在させない。
- 機密情報の開示可否はプロンプトではなく、サーバー側ポリシーで判定する。
SEC-05 危険操作の保護P0
削除、外部送信、課金、契約変更、制御機器への命令などは高リスク操作として管理する。
- 実行前に対象・変更内容・影響を確認する。
- 高リスク操作には独立した承認処理を設ける。
- 承認情報をユーザー、操作対象、パラメータ、有効期限に紐付ける。
- モデルが送信した confirmed=true などの自己申告だけで承認済みと判断しない。
- 再試行による二重実行を防ぐため、冪等性キーを使用する。
- 操作履歴を監査可能な形で保存する。
SEC-06 データ保護P0
情報を以下の4分類で扱う。
| 区分 | 例 | 公開方針 |
|---|---|---|
| Public | 公的補助金・公表料金 | 匿名公開可能 |
| Customer | 顧客の見積・設定情報 | 認証必須 |
| Confidential | 独自設計モデル・原価情報 | 契約・役割別に制限 |
| Secret | APIキー・秘密鍵・認証情報 | 原則出力禁止 |
- ツールごとに取得可能な情報区分を定義する。
- 内部の計算過程、秘密情報、不要な生データを返さない。
- システムプロンプトに機密情報を保管しない。
- ChatGPT側の会話全体を取得・復元しようとしない。
- 個人情報の保存期間と削除手順を定める。
- 内部ログに認証トークンや不要な生のプロンプトを保存しない。
SEC-07 DoS・リソース消費対策P0
- IP、認証主体、組織、ツールの各単位でレート制限を設ける。
- 短時間の集中利用と長期間の累積利用の両方を監視する。
- 実行時間、同時実行数、データ取得件数に上限を設ける。
- AIの繰り返しツール呼び出しに対し、リクエスト単位・業務単位の予算を設ける。
- 上限超過時は適切なエラーと再試行条件を返す。
- 不正利用の疑いがある場合は、制限強化、追加認証、一時停止を段階的に適用する。
- IPだけを利用者識別の根拠にしない。
SEC-08 敵対的蒸留・情報抽出対策P1
商用データ・独自ロジックを提供するMCPで必須とする。
- 1回の問い合わせで取得できる情報を業務上必要な範囲に限定する。
- 大量ページング、全件ダウンロード、任意条件の網羅照会を無制限に公開しない。
- 一定期間に取得されたユニークなレコード数を記録する。
- 入力条件を系統的に変化させる大量照会を検知する。
- API呼び出し回数とは別に、取得情報量・照会範囲の予算を管理する。
- 高価値なデータ取得は認証済み契約主体に紐付ける。
- 異常検知は警告、速度制限、調査、一時停止を段階的に行う。
- 正確性が求められる計算結果に、盗用防止目的のノイズや偽情報を混入させない。
目的は模倣の完全防止ではなく、情報資産の大量再構築を困難にし、早期に検知できる状態を作ることとする。
SEC-09 外部送信・SSRF対策P0
- HTTPリクエストの送信先は原則許可リストで制限する。
- ローカルアドレス、プライベートIP、クラウドメタデータなどへの不正アクセスを防ぐ。
- DNS再解決、リダイレクト、IPv6を考慮したURL検証を行う。
- ユーザー入力を利用した無制限の外部送信機能を提供しない。
- データ取得機能と外部送信機能の権限を分離する。
- 外部システムに送信する情報は、必要最小限とする。
SEC-10 ログ・異常検知P0
以下の情報を、必要最小限の範囲で記録する。
- リクエスト日時と内部追跡ID
- 認証済み主体・組織
- ツール名・実行結果
- 処理時間・負荷
- 取得情報量
- 認可失敗・レート制限の発生
- 不審な問い合わせパターン
ログにはアクセス制限・保存期間・削除方針を設ける。ログの公開や、MCPクライアントへの不要な返却は禁止する。
SEC-11 開発・供給網セキュリティP0
- 公式MCP SDKなど、保守されているライブラリを使用する。
- 依存関係を固定し、脆弱性検査を実施する。
- ソースコード・依存パッケージ・コンテナの脆弱性を確認する。
- 秘密情報の混入検査をCI/CDに組み込む。
- ツール定義・説明文の変更をソース管理し、レビュー対象とする。
- デプロイしたコードとツール定義の対応を追跡可能にする。
- セキュリティ更新に応じて計画的に依存関係を更新する。
SEC-12 プラグインUI・利用者保護P0
- 必要な権限とデータ送信先を利用者に明示する。
- 認証を要求するツールを明確にする。
- MCP AppsのUIではCSPと接続先制限を適用する。
- クライアントに秘密鍵・認証トークンを不用意に返さない。
- プライバシーポリシー、問い合わせ先、データ削除方針を公開する。
- ツールの名称・説明・実際の動作を一致させる。
4. 適用セキュリティレベル
| レベル | 対象 | 必須要件 |
|---|---|---|
| A:公開情報型 | 公的データ検索、無料情報API | SEC-01〜07、09〜12 |
| B:契約データ型 | 顧客専用データ、業務API | A+強制認証、厳格な組織分離 |
| C:知財保護型 | 独自AIモデル、電力インテリジェンス | B+SEC-08 |
| D:ローカル機密処理型 | ソースコード検査、機密文書解析 | B/C相当+下記のローカル保護要件 |
レベルDでは追加で以下を適用する。
- ソースコード全体の外部転送を初期設定で禁止する。
- ローカルで必要な検査を実行する。
- 外部送信する場合は、ユーザーの明示的な承認を求める。
- 結果の要約、ハッシュ値、検査証跡などだけを送信する構成を優先する。
- 通信経路と実際のデータ送信内容を検証可能にする。
- ローカル実行コンポーネントには最小権限と実行環境の分離を適用する。
5. リリース前セキュリティ試験
以下を必須試験とする。
| 試験 | 合格条件 |
|---|---|
| 不正トークン | 対象外・期限切れトークンでアクセス不可 |
| 組織間アクセス | 他組織のデータを参照・更新できない |
| 権限逸脱 | 参照権限から更新操作を実行できない |
| プロンプトインジェクション | 外部データ内の命令で権限を突破できない |
| 危険操作 | 未承認で高リスク操作が実行されない |
| SSRF | 許可されない内部・外部宛通信が遮断される |
| DoS | 設定した負荷上限が機能する |
| データ出力 | 機密項目・トークンの不要な露出がない |
| ログ | 機密情報の不要な記録がない |
| 敵対的蒸留(レベルC) | 網羅的な照会が監視・制限される |
| ローカル送信(レベルD) | 非承認の機密データ外部送信が発生しない |
セキュリティ対策の合格判定は、実装の有無だけではなく、これらの試験結果によって行う。
6. 運用・見直し
- セキュリティ要件を変更した場合はバージョンを更新する。
- 重大な脆弱性を検知した場合に特定ツールを停止できるようにする。
- インシデント時のアクセス遮断、トークン失効、ログ保全、利用者への連絡手順を定める。
- MCP仕様・SDK・ChatGPTプラグイン審査要件の変更を定期的に確認する。
- 重要な権限変更、ツール追加、外部連携追加時には再評価する。
最終原則
MCPサーバーは、AIに対して企業資産を公開する境界である。
AIが正しく判断することに依存せず、AIが誤解・誤作動・悪用された場合でも、サーバー自身が権限と情報の流出を制御できる設計を基本とする。