MCP(Model Context Protocol)を安全活用するための知見と対策
先日、お客様から「MCP(Model Context Protocol)利用にあたっての認証の推奨事項やインシデント事例、着目すべき脆弱性を教えてほしい」というご相談をいただきました。
その際の回答を、ナレッジ共有として公開いたします。
AI技術は非常に速い速度で進化しており、セキュリティ対策の標準化も未だ途上にあります。
そのため、公的機関の情報だけでなく、オープンソースの最新情報も含めて構成しています。
※注意
本記事で挙げる参考ツールの安全性検証は個別に行っていないため、実際の利用時には十分ご注意ください。
閲覧時点で情報が古くなっている可能性があります。実際の運用にあたっては、必ず最新情報をご確認ください。
1. MCP利用に当たり考慮すべき事項
2. MCPに関係したインシデント事例・検証例
2-1. プライベートリポジトリの漏洩リスク
2-2. 悪意のあるMCPサーバーの存在
3. 着目すべき脆弱性・攻撃手法
3-1. 対策の考え方
4. AIエージェント/MCP特有の防御アプローチ
4-1. A. 信頼できない情報を「信頼できる情報」に近づける
4-2. B. 悪意のある処理が行われても問題ない状態にする
5. ガイドライン・認可について
5-1. 認可(Authorization)の推奨事項
6. まとめ
1. MCP利用に当たり考慮すべき事項
MCPの本質は、「LLMの出力結果を基に、外部リソースの取得やリモートサービスの操作を行う」点にあります。
ここで重要になるのがゼロトラストの観点です。
・情報の不確実性
LLMの出力結果や外部から取得した情報は、すべて「信頼できない」とみなすべきです。
Webアプリ同様、悪意のある攻撃文字列が含まれている可能性があります。
・機密情報の混在
MCPはSlackのチャットやGitHubのソースコードなど、内部リソースと連携するため、機密情報が含まれるリスクが常に付きまといます。
・構造上の問題
Webアプリでは「エスケープ」で対策可能でしたが、MCPは自然言語を扱うため、機密情報の有無などを機械的に判定するのが困難です。
これがMCP特有のセキュリティリスクとなります。
2. MCPに関係したインシデント事例・検証例
プライベートリポジトリの漏洩リスク
「GitHub MCP integration」において、プライベートリポジトリの内容を漏洩させる攻撃手法が既に報告されています。
・Detecting Toxic Agent Flows (Invariant Labs)
https://invariantlabs.ai/blog/mcp-github-vulnerability#detecting-toxic-agent-flows
悪意のあるMCPサーバーの存在
GitHub上に存在する約1.7万のリポジトリを調査した結果、悪意のあるMCPサーバーについての検証結果も公開されています。
・What 17,845 GitHub repos taught us about MCP (VirusTotal)
https://blog.virustotal.com/2025/06/what-17845-github-repos-taught-us-about.html
3. 着目すべき脆弱性・攻撃手法
根本的な問題は、「信頼できない情報を基に、LLMによって自動的に処理が進んでしまう点」にあります。具体的には以下の脆弱性に注意が必要です。
・Tool Poisoning Attacks
・MCP Rug Pulls
・コマンドインジェクション
・Shadowing Tool Descriptions
・トークン窃取とアカウント乗っ取り
対策の考え方
悪意のある(あるいは脆弱な)MCPサーバーへの対策は、Webアプリ同様に「非公式サーバーの利用制限」や「スキャン(脆弱性診断)」が有効です。
スキャナー例:
・mcp-scan (Invariant Labs) https://github.com/invariantlabs-ai/mcp-scan
・mcp-shield https://github.com/riseandignite/mcp-shield
4. AIエージェント/MCP特有の防御アプローチ
「信頼できない情報を基に処理が行われる」という特性に対し、以下の2つのアプローチで対策を講じます。
A. 信頼できない情報を「信頼できる情報」に近づける
ガードレールを用いて制限を加えます。プログラムでの記述のほか、サニタイズ専用のAIを追加する手法もあります。
参考:
・Invariant Guardrails https://explorer.invariantlabs.ai/docs/guardrails/
・Invariant (GitHub) https://github.com/invariantlabs-ai/invariant
B. 悪意のある処理が行われても問題ない状態にする
MCPが動作する環境そのものを隔離します。
・container-use: エージェントごとにコンテナ環境を割り当て分離。
dagger/container-use https://github.com/dagger/container-use
・microsandbox: コンテナよりもさらに強力な分離を実現。
microsandbox/microsandbox https://github.com/zerocore-ai/microsandbox
5. ガイドライン・認可について
利用・開発にあたっては、以下の公式ドキュメントおよびコミュニティのフレームワークを網羅的に確認することを推奨します。
・MCP公式Concepts (Security Considerations)
Architecture – Model Context Protocol https://modelcontextprotocol.io/docs/learn/architecture
セキュリティフレームワーク・チェックリスト:
・MCP for Beginners (日本語版) https://github.com/microsoft/mcp-for-beginners/blob/main/translations/ja/README.md
・GUARDRAIL https://github.com/nshkrdotcom/GUARDRAIL
・MCP-Security-Checklist (SlowMist) https://github.com/slowmist/MCP-Security-Checklist
5-1. 認可(Authorization)の推奨事項
HTTPベースで通信を行う場合は、OAuthによる認可の実装が強く推奨されています。
・MCP Authorization Specification https://modelcontextprotocol.io/specification/2025-03-26/basic/authorization
・Security Best Practices https://modelcontextprotocol.io/docs/tutorials/security/security_best_practices
6. まとめ
MCP(Model Context Protocol)を活用する上で、最も意識すべきは「信頼できない情報を基に、AIによって自動的に処理が進んでしまう」という構造上のリスクです。
この特性に対し、以下の二段構えの防壁を築くことが実務上の要諦となります。
・情報の信頼性を高める ⇒ ガードレールによる入出力の制限・サニタイズ
・実行環境を隔離する ⇒ コンテナやmicrosandboxによる環境の分離
AI技術の進化に合わせ、公式のセキュリティベストプラクティスや最新のスキャンツールを継続的に取り入れ、安全なエージェント活用を推進していくことが重要です。