Damn Vulnerable Model Context Protocol (DVMCP) について
Damn Vulnerable Model Context Protocol(DVMCP)は、教育目的で意図的に脆弱性を含めた MCP の実装です。難易度の異なる 10 個の課題を含み、セキュリティ研究者、開発者、AI 安全性の専門家を対象としています。
主な機能
- 01難易度が段階的に上がる 10 個の課題
- 02プロンプトインジェクション、ツールポイズニングなどを扱う
- 03課題の説明と解答ガイド
- 04Docker ベースの実行環境
- 05MIT ライセンス
活用シーン
- 01MCP 実装に見られる代表的なセキュリティ問題の学習
- 02セキュリティ研修での攻撃手法のデモンストレーション
- 03自作の MCP サーバーの緩和策を理解し改善
MCP 対応
DVMCP 自体が意図的に脆弱性を含む MCP サーバーであり、MCP クライアントにツール、リソース、プロンプトを公開して攻撃を実演します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
Damn Vulnerable Model Context Protocol (DVMCP)
教育目的で意図的に脆弱性を持たせた Model Context Protocol(MCP)の実装です。
概要
Damn Vulnerable Model Context Protocol(DVMCP)は、MCP 実装におけるセキュリティの脆弱性を実証するために設計された教育プロジェクトです。難易度が段階的に上がる10個のチャレンジが含まれており、さまざまな種類の脆弱性と攻撃ベクトルを紹介します。
このプロジェクトは、セキュリティ研究者、開発者、AI 安全性の専門家が、MCP 実装で発生する可能性のあるセキュリティ上の問題と、その緩和方法について学ぶことを目的としています。
MCP とは?
Model Context Protocol(MCP)は、アプリケーションが大規模言語モデル(LLM)に構造化された方法でコンテキストを提供できるようにする標準化されたプロトコルです。コンテキストの提供と実際の LLM とのやり取りを分離し、アプリケーションがリソース、ツール、プロンプトを LLM に公開できるようにします。
推奨 MCP クライアント
CLINE - VSCode 拡張機能
Cline を MCP サーバーに接続する方法については、リモートサーバーへの接続 - Clineを参照してください。
クイックスタート
リポジトリをクローンしたら、次のコマンドを実行してください。
docker build -t dvmcp .
docker run -p 9001-9010:9001-9010 dvmcp
免責事項
Windows 環境では安定して動作しません。Docker を使用しない場合は、Linux 環境を使用してください。 LAB の実行には Docker をおすすめします。Docker 環境では問題なく動作することを100%確信しています。
セキュリティリスク
MCP には多くの利点がありますが、新たなセキュリティ上の考慮事項も生じます。このプロジェクトでは、MCP 実装で発生する可能性のあるさまざまな脆弱性を紹介します。
- プロンプトインジェクション:悪意のある入力を通じて LLM の動作を操作する
- ツールポイズニング:ツールの説明に悪意のある指示を隠す
- 過剰な権限:過度に許可されたツールアクセスを悪用する
- ラグプル攻撃:ツール定義の変更を悪用する
- ツールシャドーイング:正規のツールを悪意のあるツールで上書きする
- 間接的なプロンプトインジェクション:データソースを通じて指示を注入する
- トークン窃取:安全でないトークン保存を悪用する
- 悪意のあるコード実行:脆弱なツールを通じて任意のコードを実行する
- リモートアクセス制御:不正にシステムへアクセスする
- 複数ベクトル攻撃:複数の脆弱性を組み合わせる
プロジェクト構成
damn-vulnerable-MCP-server/
├── README.md # Project overview
├── requirements.txt # Python dependencies
├── challenges/ # Challenge implementations
│ ├── easy/ # Easy difficulty challenges (1-3)
│ │ ├── challenge1/ # Basic Prompt Injection
│ │ ├── challenge2/ # Tool Poisoning
│ │ └── challenge3/ # Excessive Permission Scope
│ ├── medium/ # Medium difficulty challenges (4-7)
│ │ ├── challenge4/ # Rug Pull Attack
│ │ ├── challenge5/ # Tool Shadowing
│ │ ├── challenge6/ # Indirect Prompt Injection
│ │ └── challenge7/ # Token Theft
│ └── hard/ # Hard difficulty challenges (8-10)
│ ├── challenge8/ # Malicious Code Execution
│ ├── challenge9/ # Remote Access Control
│ └── challenge10/ # Multi-Vector Attack
├── docs/ # Documentation
│ ├── setup.md # Setup instructions
│ ├── challenges.md # Challenge descriptions
│ └── mcp_overview.md # MCP protocol overview
├── solutions/ # Solution guides
└── common/ # Shared code and utilities
はじめに
チャレンジのインストールと実行方法の詳細については、セットアップガイドを参照してください。
チャレンジ
このプロジェクトには、3段階の難易度に分かれた10個のチャレンジが含まれています。
初級チャレンジ
- 基本的なプロンプトインジェクション:サニタイズされていないユーザー入力を悪用して、LLM の動作を操作する
- ツールポイズニング:ツールの説明に隠された指示を悪用する
- 過剰な権限スコープ:過度に許可されたツールを悪用して、許可されていないリソースにアクセスする
中級チャレンジ
- ラグプル攻撃:インストール後に動作が変わるツールを悪用する
- ツールシャドーイング:ツール名の競合を悪用して、正規のツールを上書きする
- 間接的なプロンプトインジェクション:データソースを通じて悪意のある指示を注入する
- トークン窃取:安全でない保存場所から認証トークンを抽出する
上級チャレンジ
- 悪意のあるコード実行:脆弱なツールを通じて任意のコードを実行する
- リモートアクセス制御:コマンドインジェクションを通じてシステムへのリモートアクセスを取得する
- 複数ベクトル攻撃:複数の脆弱性を連鎖させて、巧妙な攻撃を仕掛ける
各チャレンジの詳細については、チャレンジガイドを参照してください。
解答
解答ガイドは教育目的で提供されています。解答を参照する前に、まず自力でチャレンジに挑戦することをおすすめします。
各チャレンジの詳しい解答については、解答ガイドを参照してください。
免責事項
このプロジェクトは教育目的のみを対象としています。このプロジェクトで実証されている脆弱性を、本番システムに実装してはなりません。MCP サーバーを実装する際は、常にセキュリティのベストプラクティスに従ってください。
ライセンス
このプロジェクトは MIT License のもとでライセンスされています。詳細は LICENSE ファイルをご覧ください。
作成者
このプロジェクトは、cursor IDE と Manus AI を使用して Harish Santhanalakshmi Ganesan が作成しました。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。