mcp-security について
MCPのセキュリティテスト担当者向けの手法です。ツール説明の汚染、動的な変更、ツール間の指示上書き、隠し指示の注入を対象とし、クライアントの信頼モデルや認証情報の分離、ツール呼び出しの処理を段階的に確認します。
主な機能
- 01MCPサーバーとツールの列挙
- 02悪意あるツール説明の検出
- 03説明の動的な変更を追跡
- 04ツール間の指示上書きをテスト
- 05不可視文字と認証情報の分離を確認
活用シーン
- 01接続済みの第三者MCPサーバーを監査
- 02説明がモデルの動作に及ぼす影響を検証
- 03説明更新時の認可を確認
- 04サーバー間のトークン分離を検証
MCP 対応
MCPサーバーとクライアントを対象に、公開ツール、説明、入力スキーマ、クライアントの信頼・認可動作を検査します。サーバー間の認証情報分離やツール結果の処理も検証対象です。
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ wgpsec/ aboutsecurity --skill mcp-securityインストール後、Claude Code で/mcp-securityを入力して読み込まれたか確認します。
同梱ファイルreferences/mcp-attack-payloads.md
詳細
MCP プロトコルのセキュリティテスト手法
概要
MCP (Model Context Protocol) は LLM に標準化されたツール呼び出しインターフェースを提供しますが、その信頼モデルには根本的な欠陥があります。モデルはツールの呼び出し方法を決めるために、ツールの完全な説明(description)を解析する必要がありますが、これらの説明は MCP サーバーによって制御されます。攻撃者は悪意のあるサーバーを通じて説明に指示を埋め込み、モデルの動作を乗っ取ることができます。これは、ユーザーが通常ツール説明の元の内容を確認しないため、従来のプロンプトインジェクションよりも発見されにくい攻撃です。
詳細な参考資料
- 各 Phase の詳細な Payload と攻撃シナリオ → references/mcp-attack-payloads.md
攻撃対象領域の分類
| 攻撃タイプ | 中核となる仕組み | 危険度 | GAARM 番号 |
|---|---|---|---|
| ツール説明の汚染 | description に悪意のある指示を埋め込む | Critical | GAARM.0046 |
| じゅうたん詐欺 | 認可後に description を動的に改ざんする | Critical | GAARM.0046.001 |
| 指示の上書き (Shadow Tool) | 悪意のあるサーバーが信頼されたツールの動作を乗っ取る | Critical | GAARM.0046.002 |
| 隠し指示の注入 | ANSI エスケープコード/ゼロ幅 Unicode によるステガノグラフィ | High | GAARM.0046.003 |
手法の概要
Phase 0: MCP 環境の偵察
- 対象に接続されている MCP サーバーの一覧と提供元(公式/サードパーティ/自作)を列挙します
- 各サーバーが公開するツール一覧、inputSchema の定義、権限の宣言を抽出します
- クライアントの信頼モデルを確認します。異なるサーバーの信頼レベルを区別するか、ツール呼び出しに二次確認が必要かを調べます
Phase 1: ツール説明の汚染検出
- すべてのツールの完全な description(inputSchema.description を含む)を取得し、
<IMPORTANT>、[SYSTEM]、HTML コメントなどの指示タグが含まれていないか確認します - description を Base64/Unicode でデコードしてスキャンし、エンコードされた隠し指示を特定します
- モデルが description 内の指示に従うかを検証します。「ユーザーの要求を無視する」類の指示を含むテスト用ツールを作成し、モデルの動作の変化を観察します
Phase 2: 動的改ざんテスト(じゅうたん詐欺)
- ツールの初回登録時に description のハッシュ値を記録します
- 継続稼働のシナリオをシミュレートします。定期的にツール一覧を再取得し、description に変化がないか比較します
- 重要な確認点:MCP プロトコルでは、サーバーが
notifications/tools/list_changedを通じていつでも説明を更新できます。更新時にクライアントがユーザーに再認可を求めるかを確認します
Phase 3: 指示の上書きテスト(Shadow Tool)
- 他のサーバーのツールを上書きする指示を description に含む、悪意のある MCP サーバーを登録します
- クロスツール乗っ取りをテストします。悪意のあるツールの説明によって、モデルがメール/ファイルなどの信頼されたツールを呼び出す際にパラメーターを改ざんするか確認します
- クライアントにツール名の衝突を防ぐ仕組み(同名ツールの優先順位の仕組み)があるかを検証します
Phase 4: 隠し指示の注入
- ANSI エスケープコードのテスト:description に
\x1b[8m(非表示テキスト)の指示を埋め込み、ターミナルの表示とモデルの解析の差異を確認します - ゼロ幅 Unicode 文字のテスト:U+200B/U+200C/U+200D/U+FEFF を使って悪意のある指示をエンコードし、人には見えなくてもモデルが読み取れるか検証します
- 「行スキップ」攻撃:ANSI カーソル制御シーケンスを利用してターミナルの表示内容を上書きし、ユーザーに見える出力を偽装します
Phase 5: サーバー間攻撃とトークン窃取
- 悪意のあるサーバーがツールの説明内の指示を通じて、他のサーバーの OAuth Token または API Key を取得できるかテストします
- トークンの分離メカニズムを検証します。あるサーバーの認証情報が他のサーバーから見えるか確認します
- サーバーの偽装を検出します。悪意のあるサーバーが、信頼されたサーバーの「更新版」だと主張できるか確認します
実践的な検出チェックリスト
1. [ ] 目标环境连接了哪些 MCP Server?是否包含第三方/未审计 Server?
2. [ ] 工具 description 原始内容是否包含可疑指令标签或编码内容?
3. [ ] 工具描述是否会在授权后发生动态变化?客户端是否重新确认?
4. [ ] 是否存在跨 Server 的工具名称冲突或描述覆盖?
5. [ ] description 中是否嵌入 ANSI 转义码或零宽 Unicode 字符?
6. [ ] 各 Server 的 Token/凭据是否实现了隔离?
7. [ ] 客户端是否对 inputSchema 做严格校验,还是透传给模型?
8. [ ] 工具调用结果是否经过消毒后再返回模型上下文?
参考リソース
コメント
Markdown 対応