MCP開発時のセキュリティ考慮
MCPサーバーの開発・運用におけるセキュリティリスクと対策を整理する。
このドキュメントについて
MCPサーバーは外部APIやデータベースに接続するため、適切なセキュリティ対策なしには重大なリスクを招く可能性がある。LINEヤフーの調査によれば、多くのMCPが静的APIキーに依存しており、セキュリティ面では発展途上にある。
このドキュメントでは、MCPサーバーの開発・運用における主要なリスクカテゴリを整理し、それぞれの対策を具体的に示す。また、OWASP MCP Top 10(2025) を「ブレない参照先」として活用し、開発時に使えるチェックリストを提供する。
参照先:OWASP MCP Top 10
概要
MCPサーバー開発時のセキュリティガイドラインとして、OWASP MCP Top 10 (2025) を参照する。
| 項目 | 内容 |
|---|---|
| URL | https://owasp.org/www-project-mcp-top-10/ |
| ステータス | Phase 3 - Beta Release and Pilot Testing |
| ライセンス | CC BY-NC-SA 4.0 |
| リーダー | Vandana Verma Sehgal, Liran Tal |
注意: これは従来の「OWASP Top 10(Webアプリケーション脆弱性)」とは別のプロジェクトであり、MCPサーバー開発に特化したセキュリティガイドラインである。
OWASP Top 10 との違い
| 項目 | OWASP Top 10(従来) | OWASP MCP Top 10(2025) |
|---|---|---|
| 対象 | Webアプリケーション | MCPサーバー開発 |
| 脆弱性例 | SQLi, XSS, CSRF | Token Mismanagement, Tool Poisoning |
| 用途 | Webセキュリティ監査 | MCP開発時の設計指針 |
OWASP MCP Top 10 一覧
OWASP MCP Top 10の10項目を以下のマインドマップで俯瞰し、続く表で詳細を示す。
| ID | 名称 | 概要 |
|---|---|---|
| MCP01 | Token Mismanagement & Secret Exposure | 認証情報のハードコード、長期間有効なトークン、ログへの漏洩 |
| MCP02 | Privilege Escalation via Scope Creep | 緩い権限定義による権限昇格、スコープの拡大 |
| MCP03 | Tool Poisoning | 悪意あるツール/プラグインによるコンテキスト注入(rug pull、schema poisoning、tool shadowing) |
| MCP04 | Supply Chain Attacks & Dependency Tampering | 依存パッケージの改ざん、エージェント動作の変更 |
| MCP05 | Command Injection & Execution | 未検証の入力によるシステムコマンド実行 |
| MCP06 | Prompt Injection via Contextual Payloads | テキストベースのインジェクション攻撃、モデルを標的とした攻撃 |
| MCP07 | Insufficient Authentication & Authorization | マルチエージェント環境での弱いID検証 |
| MCP08 | Lack of Audit and Telemetry | ログ・監視の不足によるインシデント対応の困難 |
| MCP09 | Shadow MCP Servers | セキュリティガバナンス外の未承認MCPデプロイ(Shadow ITのMCP版) |
| MCP10 | Context Injection & Over-Sharing | 共有コンテキストウィンドウでの機密情報漏洩 |
各脆弱性の詳細と対策
MCP01: Token Mismanagement & Secret Exposure
リスク: 認証情報がソースコード、ログ、モデルのメモリに残る
// ❌ 悪い例:ハードコード
const API_KEY = 'sk-1234567890abcdef';
// ✅ 良い例:環境変数から取得
const API_KEY = process.env.DEEPL_API_KEY;対策:
- 認証情報は環境変数またはシークレット管理サービスから取得
- ログに認証情報を出力しない
- 短命なトークン(Short-lived tokens)を使用
- トークンのローテーションを実装
MCP02: Privilege Escalation via Scope Creep
リスク: 最初は限定的だった権限が時間とともに拡大
対策:
- 最小権限の原則を厳守
- 権限の定期レビュー
- ツールごとに必要な権限を明示的に定義
MCP03: Tool Poisoning
リスク: 悪意あるMCPサーバーがコンテキストに有害な情報を注入
攻撃パターン:
├── Rug Pull: 信頼を得た後に悪意ある動作に変更
├── Schema Poisoning: スキーマ定義に悪意あるコードを埋め込み
└── Tool Shadowing: 正規ツールを偽装して置き換え対策:
- 信頼できるソースからのみMCPを導入
- ソースコードレビューの実施
- 利用許可リストでの管理
MCP04: Supply Chain Attacks & Dependency Tampering
リスク: 依存パッケージが改ざんされ、エージェントの動作が変更される
対策:
# 定期的な脆弱性チェック
npm audit
pip-audit
# ロックファイルの使用
package-lock.json
poetry.lockMCP05: Command Injection & Execution
リスク: 未検証の入力がシステムコマンドとして実行される
// ❌ 悪い例:直接コマンド実行
exec(`ls ${userInput}`);
// ✅ 良い例:入力検証 + エスケープ
const sanitizedInput = sanitize(userInput);
execFile('ls', [sanitizedInput]);対策:
- すべての入力を検証
- パラメータ化されたコマンド実行
- サンドボックス環境での実行
MCP06: Prompt Injection via Contextual Payloads
リスク: テキストに埋め込まれた悪意ある指示がモデルの動作を変更
対策:
- 入力のサニタイズ
- コンテキストの分離
- 出力の検証
MCP07: Insufficient Authentication & Authorization
リスク: マルチエージェント環境での弱いID検証
対策:
- 強力な認証メカニズム(OAuth 2.0推奨)
- エージェント間の相互認証
- 最小権限の原則
MCP08: Lack of Audit and Telemetry
リスク: ログ・監視の不足によりインシデント検知・対応が困難
対策:
- 構造化ログの実装
- 監視・アラートの設定
- 監査証跡の保持
MCP09: Shadow MCP Servers
リスク: 未承認のMCPサーバーがセキュリティガバナンス外で運用される
対策:
- MCPサーバー利用許可リストの運用
- 定期的な棚卸し
- セキュリティポリシーの周知
MCP10: Context Injection & Over-Sharing
リスク: 共有コンテキストウィンドウで機密情報が意図せず公開される
対策:
- コンテキストへの情報投入を最小限に
- 機密情報のマスキング
- コンテキスト分離の検討
OWASP LLM Top 10 との関連
MCPはLLMと密接に連携するため、OWASP LLM Top 10(2025)も重要な参照先となる。
参照: https://owasp.org/www-project-top-10-for-large-language-model-applications/
重複・関連する脆弱性
OWASP MCP Top 10とOWASP LLM Top 10の間には、以下のような重複・関連がある。
| MCP Top 10 | LLM Top 10 | 関連性 |
|---|---|---|
| MCP06: Prompt Injection | LLM01: Prompt Injection | 完全重複 - 同一の脅威 |
| MCP04: Supply Chain | LLM05: Supply Chain Vulnerabilities | 完全重複 - 依存関係の脆弱性 |
| MCP10: Context Over-Sharing | LLM06: Sensitive Information Disclosure | 高関連 - 機密情報の漏洩経路 |
| MCP03: Tool Poisoning | LLM07: Insecure Plugin Design | 高関連 - プラグイン/ツールの安全性 |
| MCP02: Privilege Escalation | LLM08: Excessive Agency | 関連 - 過剰な権限・自律性 |
LLM Top 10 の全体像
参考として、OWASP LLM Top 10の全項目を以下に示す。
| ID | 脆弱性 | 概要 | MCP関連 |
|---|---|---|---|
| LLM01 | Prompt Injection | 悪意ある入力によるモデル動作の操作 | MCP06 |
| LLM02 | Insecure Output Handling | 出力の不適切な処理 | ツール出力処理 |
| LLM03 | Training Data Poisoning | 学習データの汚染 | - |
| LLM04 | Model Denial of Service | リソース枯渇攻撃 | コンテキスト枯渇 |
| LLM05 | Supply Chain Vulnerabilities | サプライチェーン攻撃 | MCP04 |
| LLM06 | Sensitive Information Disclosure | 機密情報の漏洩 | MCP10 |
| LLM07 | Insecure Plugin Design | プラグインの脆弱な設計 | MCP03 |
| LLM08 | Excessive Agency | 過剰な自律性・権限 | MCP02 |
| LLM09 | Overreliance | LLM出力への過度な依存 | - |
| LLM10 | Model Theft | モデルの窃取 | - |
両方を参照すべき理由
MCPサーバーを開発する際には、MCP Top 10とLLM Top 10の両方の視点が必要である。
MCPサーバー開発では両方の視点が必要:
OWASP MCP Top 10
└── MCPサーバー「自体」のセキュリティ
├── ツール定義の安全性
├── 認証情報の管理
└── サプライチェーン
OWASP LLM Top 10
└── MCPを「使う」LLMアプリのセキュリティ
├── プロンプトインジェクション対策
├── 出力の検証
└── 権限の制限MCPセキュリティの現状
LINEヤフーの調査結果
LINEヤフーがMCPエコシステムを調査した結果
| 項目 | 割合 | リスク |
|---|---|---|
| 何らかの認証が必要 | 88% | 認証情報の管理が必要 |
| 静的APIキー/PATに依存 | 53% | 長期有効なトークンの漏洩リスク |
| OAuth等の安全な方式 | 8.5% | ほとんどが旧来の方式 |
結論: MCPサーバーの認証は発展途上であり、慎重な管理が必要。
リスクカテゴリ(従来の整理)
OWASP MCP Top 10に加え、従来のリスク分類の視点でも整理しておく。
リスク1: 認証・認可
問題
- 静的APIキーの長期使用 - 漏洩時の影響が大きい
- 過剰な権限 - 必要以上のスコープを要求
- 認証情報のハードコード - ソースコードに直接記載
対策
1. 認証情報の安全な管理
# ❌ 悪い例:ハードコード
export API_KEY="sk-1234567890abcdef"
# ✅ 良い例:環境変数(.envファイルは.gitignoreに)
# .env
DEEPL_API_KEY=${DEEPL_API_KEY}
# さらに良い例:シークレット管理サービス
# AWS Secrets Manager, HashiCorp Vault等2. 最小権限の原則
## MCPツール設計時の権限確認
- [ ] 本当にその権限が必要か?
- [ ] 読み取りのみで済む場合は書き込み権限を要求しない
- [ ] スコープを最小限に絞る3. トークンのローテーション
リスク2: データセキュリティ
問題
- 機密情報のMCP経由送信 - 意図しないデータ露出
- 入力検証の不足 - インジェクション攻撃
- ログへの機密情報漏洩 - デバッグログに認証情報
対策
1. 入力検証
// MCPツール実装時の入力検証例
export const getRfcRequirements = {
name: 'get_requirements',
description: 'RFC要件を取得',
inputSchema: {
type: 'object',
properties: {
rfc: {
type: 'number',
minimum: 1,
maximum: 99999, // 妥当な範囲を設定
description: 'RFC番号',
},
level: {
type: 'string',
enum: ['MUST', 'SHOULD', 'MAY'], // 許可値を限定
description: '要件レベル',
},
},
required: ['rfc'],
},
};2. ログのサニタイズ
// ❌ 悪い例
console.log(`API呼び出し: key=${apiKey}, query=${query}`);
// ✅ 良い例
console.log(`API呼び出し: key=*****, query=${query}`);3. 機密データの分類
## データ分類
### 送信してはいけないデータ
- 認証情報(APIキー、パスワード)
- 個人情報(PII)
- 社内機密情報
### 送信可能なデータ
- 公開仕様書の参照
- 一般的な技術情報
- 匿名化されたデータリスク3: サプライチェーン
問題
- 悪意あるMCPサーバー - マルウェア混入
- 依存パッケージの脆弱性 - npm/pipの依存関係
- 更新の信頼性 - 乗っ取られたパッケージ
対策
1. MCP利用許可リスト
LINEヤフーのアプローチを参考に
## 承認済みMCPサーバー一覧
### 公式・信頼できるソース
- @modelcontextprotocol/\* (Anthropic公式)
- DeepL公式MCP
### 自作(内部監査済み)
- @shuji-bonji/rfcxml-mcp
- @shuji-bonji/xcomet-mcp-server
### 承認待ち
- (セキュリティレビュー中)
### 禁止
- 出所不明のMCP
- 認証情報を外部送信するMCP2. 依存関係の監査
# npm audit で脆弱性チェック
npm audit
# 定期的な更新
npm update
# 重大な脆弱性は即座に対応
npm audit fix3. ソースコードレビュー
## MCPサーバー導入前チェックリスト
- [ ] ソースコードが公開されているか
- [ ] 認証情報の扱いは適切か
- [ ] 外部への不審な通信はないか
- [ ] 依存パッケージは信頼できるか
- [ ] メンテナンスは継続されているかリスク4: 運用セキュリティ
問題
- 設定ミス - 本番環境での誤設定
- 監視不足 - 異常の検知遅れ
- インシデント対応 - 対応手順の不備
対策
1. 環境分離
2. ログ・監視
## 監視すべき項目
- [ ] API呼び出し回数の異常増加
- [ ] エラー率の上昇
- [ ] 認証失敗の頻発
- [ ] 想定外のエンドポイントへのアクセス3. インシデント対応手順
## MCPセキュリティインシデント対応
### 1. 検知
- 監視アラート
- ユーザー報告
- 外部通報
### 2. 初動対応
- 該当MCPの即時無効化
- APIキー/トークンの失効
- 影響範囲の特定
### 3. 調査
- ログ分析
- 侵入経路の特定
- 漏洩データの特定
### 4. 復旧
- 新しい認証情報の発行
- 設定の修正
- MCPの再有効化
### 5. 再発防止
- 原因分析
- 対策の実施
- 手順の更新MCP開発時のセキュリティチェックリスト
設計フェーズ
設計段階で確認すべきセキュリティ項目は以下の通りである。
- [ ] 最小権限の原則を適用しているか
- [ ] 認証方式は適切か(OAuth推奨)
- [ ] 機密データの扱いを定義しているか
- [ ] OWASP MCP Top 10を確認したか実装フェーズ
実装段階で確認すべきセキュリティ項目は以下の通りである。
- [ ] 入力検証を実装しているか(MCP05対策)
- [ ] 認証情報をハードコードしていないか(MCP01対策)
- [ ] ログに機密情報を出力していないか(MCP01対策)
- [ ] エラーメッセージに内部情報を含めていないか
- [ ] 依存パッケージを監査したか(MCP04対策)テストフェーズ
テスト段階で確認すべきセキュリティ項目は以下の通りである。
- [ ] セキュリティテストを実施したか
- [ ] 依存パッケージの脆弱性をチェックしたか
- [ ] 異常入力に対する動作を確認したか
- [ ] プロンプトインジェクションの耐性を確認したか(MCP06対策)運用フェーズ
運用段階で確認すべきセキュリティ項目は以下の通りである。
- [ ] 認証情報のローテーション計画があるか
- [ ] 監視・アラートを設定しているか(MCP08対策)
- [ ] インシデント対応手順があるか
- [ ] 定期的なセキュリティレビューを行っているか
- [ ] MCPサーバー利用許可リストを管理しているか(MCP09対策)CLAUDE.md でのセキュリティポリシー記載例
# セキュリティポリシー
## 参照先
- OWASP MCP Top 10: https://owasp.org/www-project-mcp-top-10/
## 使用禁止MCP
- 出所不明のMCPサーバー
- 認証情報を外部送信するMCP
## 認証情報の扱い
- APIキーは環境変数から取得
- ログに認証情報を出力しない
- コードに認証情報をハードコードしない
## データの扱い
- 個人情報をMCP経由で送信しない
- 社内機密情報は匿名化してから処理まとめ
重要な原則
MCPセキュリティにおける重要な原則を以下にまとめる。
- OWASP MCP Top 10を参照 - MCPサーバー開発の「ブレない参照先」
- 信頼できるMCPのみ使用 - 利用許可リストで管理
- 最小権限 - 必要な権限のみ付与
- 認証情報の安全な管理 - ハードコード禁止、ローテーション
- 入力検証 - すべての入力を検証
- 監視とログ - 異常検知、ただし機密情報は除外
- インシデント対応 - 手順を事前に準備
MCPセキュリティの成熟度
MCPセキュリティの成熟度は段階的に進化する。以下に4段階のモデルを示す。
現在はレベル2(リスト管理) を目指すのが現実的。
参考リンク
OWASP関連
OWASPが提供する関連プロジェクトへのリンクを以下に示す。
- OWASP MCP Top 10 - MCPサーバー開発セキュリティ
- OWASP LLM Top 10 - LLMアプリケーションセキュリティ
- OWASP API Security Top 10 - APIセキュリティ
- OWASP Top 10 - Webアプリケーションセキュリティ
その他の参照先
OWASP以外のセキュリティ関連参照先を以下に示す。
- NIST AI Risk Management Framework - AIリスク管理フレームワーク
- MITRE ATLAS - AI脅威マトリクス
- LINEヤフーのMCP活用事例 - エンタープライズでのMCP運用