【ITニュース解説】How to Deal with MCP “Tool Poisoning”
2025年09月16日に「Dev.to」が公開したITニュース「How to Deal with MCP “Tool Poisoning”」について初心者にもわかりやすく解説しています。
ITニュース概要
AIと外部ツール連携を標準化する「MCP」に、AIがツールの隠れた悪意ある指示を読み込み、ユーザーの機密情報窃取や不正操作を行う「ツールポイズニング」攻撃の脆弱性が判明した。この攻撃はクライアント・サーバー両方にリスクをもたらす。対策として、AIモデルのセキュリティ評価とリアルタイム監視の重要性が指摘されている。
ITニュース解説
AI技術は、ただ質問に答えるだけでなく、自律的に判断して行動する「エージェント」へと進化している。この進化に伴い、AIにさまざまな機能を追加する「プラグイン」が普及したが、異なるプラットフォーム間でプラグインの互換性が低いという課題があった。これにより、同じような機能を何度も開発し直す非効率が生じていた。この問題を解決するため、2024年11月にAnthropic社が「Model Control Protocol(MCP)」というオープンソースのフレームワークを発表した。MCPは、AIシステムが外部のツールと連携するための共通のルールを確立し、開発の標準化と効率化を目指すものだ。
MCPの普及とともに、新たなセキュリティリスクも表面化している。最近、セキュリティ研究機関Invariantが「ツールポイズニング攻撃」と呼ばれる深刻な脆弱性を指摘した。これは、AIモデルが利用するツールの説明文の中に、ユーザーには見えないがAIモデルだけが認識できる悪意ある指示を密かに埋め込む攻撃手法だ。攻撃者は、AIモデルがツールの説明を解析する際に、隠された指示(例えば、特別なタグでマークされた部分)を読み込ませ、AIモデルに意図しない不正な操作を実行させようとする。これにより、AIがシステムの機密ファイル(SSHキーや設定ファイルなど)に不正にアクセスする可能性が生じる。
この攻撃の原理を、足し算を行う「add」というMCPサーバーのツールを例に説明する。攻撃者は、このaddツールが数学計算を行うツールであると偽装し、そのツールの説明文の中に悪意あるコードを密かに挿入する。この悪意ある指示は、例えば「<IMPORTANT>」のような特別なタグで囲まれて埋め込まれる。AIシステムがこのツールの説明を解析する際、この特別なタグでマークされた内容を優先的に処理することがある。これにより、以下のような攻撃の流れが実現する。
まず、大規模言語モデル(LLM)は、ツールの説明文に隠された指示に従い、AIシステムが動作するコンピュータ(ホスト)に対して、ファイル読み取りツールを使ってSSH秘密鍵ファイル(~/.ssh/id_rsa)を読み込むように指示する。次に、ホストはこの指示を受けて、ローカルのツールで秘密鍵ファイルを実際に読み込む。読み取った秘密鍵の内容は、クライアントを通じてaddツールの「sidenote」というパラメータとしてサーバーに送信される。最終的に、攻撃を受けたサーバーは、このパラメータとして渡された秘密鍵のコンテンツを取得し、ホストの鍵を盗むという重大な情報漏洩攻撃が成立する。
このツールポイズニング攻撃を再現するため、MCPのクライアントとサーバーのコードを準備した。クライアントはユーザーのリクエストを処理しサーバーAに、ポイズニングされたaddツールを提供するサーバーはサーバーBにそれぞれ配置する。クライアントが大規模言語モデル(LLM)と連携し、ユーザーからの指示(例:「4と5を足して」)を処理する過程で攻撃を試みた。
初期の試みでは、Qwen APIのLLMの機能呼び出しを利用したが、ポイズニングされたaddツールの説明を与えても、モデルは敏感なファイル操作を拒否したり、鍵情報を正しく渡さなかったりしたため、攻撃は成功しなかった。
そこで、Cursor IDEという開発環境を分析した結果、攻撃再現に必要な二つの重要な要素が判明した。一つは、Cursorがモデルの役割やツール呼び出しのルールを詳細に指示するシステムプロンプトを使っていること。もう一つは、read_fileのような基本的なファイル操作ツールを事前に組み込み、LLMに利用可能なツールとして渡していることだ。
これらの知見に基づき、クライアントコードのシステムプロンプトをCursorのものに準拠させ、さらにローカルのファイル読み取り機能(read_file)をシステムツールとして追加した。このread_file関数は、実際にはcatコマンドを使って指定されたファイルを読み取るシンプルなものだ。
修正後のデモでは、ユーザーが「add 4,5」と入力すると、まずLLMはクライアントに対しローカルの秘密鍵ファイルを読み取るよう指示する。クライアントが鍵ファイルを読み込むと、LLMは次にaddツールを呼び出し、読み取った鍵の内容をsidenoteパラメータとして渡す。サーバー側の起動ログには、このsidenoteパラメータを通じてクライアントの秘密鍵コンテンツが取得されていることが記録され、ツールポイズニング攻撃の再現に成功した。
MCPシステムにおけるセキュリティリスクは、クライアント側とサーバー側の両方で考慮する必要がある。クライアント側では、悪意あるツール呼び出しを誘導されてローカルの機密データが漏洩するリスクがある。サーバー側では、悪意あるコードの実行やリモートからの不正アクセスといったリスクが潜んでいる。
クライアント側のリスクとして、「ツールシャドーイング」がある。これは、悪意あるMCPサーバーがツールの説明を改ざんし、他の信頼されたサーバーからデータを盗んだり、認証情報を乗っ取ったりする攻撃だ。MCPシステムがツールの説明に対する権限をすべての接続サーバーに開放している場合、悪意あるサーバーがシステム全体に不正なロジックを注入し、複数のサーバーをまたがる攻撃を引き起こす可能性がある。例えば、メール送信ツールが、ユーザーが指定した受信者ではなく攻撃者のアドレスにメールを送るように書き換えられることがある。
また、「ラグプル」攻撃では、攻撃者はまず無害に見えるツールでユーザーを誘導してインストールさせ、信頼を得る。その後、ツールのアップデートを通じて、リモートから悪意あるコードを密かに埋め込み、ツールの機能を変更してしまう。ユーザーが安全だと思って使っていたツールが、ある日突然、APIキーなどを攻撃者に転送するように変わってしまうといった事態が起こり得る。
サーバー側のリスクとしては、「コマンドインジェクション」がある。これは、攻撃者が不正な入力パラメータを組み立てることで、MCPサーバーの実行プロセスに任意のシステムコマンドを注入する攻撃だ。サーバーがユーザー入力の特殊文字を適切に処理せずにシェルコマンドを構築する場合に発生し、攻撃者はシステムファイルを削除したり、機密データを盗んだりするコマンドを実行できてしまう。
さらに、「悪意あるコードの実行」もリスクだ。攻撃者はedit_fileやwrite_fileといったファイル操作機能を利用して、重要なファイルに不正なコードやバックドアを埋め込み、不正アクセスや権限昇格を狙う。例えば、サーバーログイン時に自動的に読み込まれる設定ファイルに、攻撃者のサーバーに接続するリバースシェルスクリプトを書き込むことで、サーバーの遠隔操作が可能になる。
「リモートアクセス制御」攻撃では、攻撃者は自身のSSH公開鍵をターゲットユーザーの認証ファイルに注入する。これにより、パスワードなしで不正にリモートログインできるようになり、システムへのアクセス権限を奪取することが可能となる。
MCPのセキュリティは、AIエージェントの乗っ取りやデータ漏洩といった重大なリスクに直結するため、その監視は極めて重要だ。Alibaba Cloudのオブザーバビリティチームは、MCPのセキュリティ監視のための二つのソリューションを開発している。
一つは、「大規模モデルのオブザーバビリティ:インテリジェント評価」だ。これは、大規模モデルアプリケーションとそのサービスに対し、性能、安定性、コスト、セキュリティの包括的な監視を提供するプラットフォームだ。この評価システムは、モデルアプリケーション内の潜在的なセキュリティリスクを特定・評価する。20以上の評価テンプレートが内蔵されており、コンテンツの検閲だけでなく、MCPツールチェーンのセキュリティのような大規模モデルの基盤となるセキュリティもカバーしている。評価プロセスでは、Pythonプローブがモデルとの対話における要求と応答、MCPツールの情報(名前、パラメータ、説明)を収集する。その後、内蔵の評価テンプレートが、MCPツールが敏感なデータの読み取り、疑わしいコードの実行、危険なシステム操作の誘導、データアップロードなどを示唆したり明示したりしていないかを検出する。システムは定期的に評価プロンプトを生成し、評価モデルに送信。モデルは疑わしい動作を検出した場合、リスクスコアと詳細な説明を生成する。これにより、ツールポイズニング攻撃の可能性を自動で検知できる。
もう一つは、「LoongCollector + eBPF:機密操作のリアルタイム監視」だ。LoongCollectorは、Alibaba Cloudがオープンソース化したツールで、データの収集、ローカルでの計算、サービス検出を統合している。eBPF技術と連携することで、システムに影響を与えずにシステムプロセス、ネットワーク、ファイルイベントを収集できるようになった。
LoongCollectorとログサービス(SLS)のアラート・クエリ機能を活用することで、MCPセキュリティ監視システムを構築できる。このシステムは、アラート、セキュリティダッシュボード、クエリ機能による「調査・分析」、システム操作、ネットワークリスク、機密ファイルをカバーする「監視ルール」、そしてプロセス、ネットワークアクセス、ファイル操作の詳細な記録を提供する「ランタイムログ」の3つのモジュールで構成される。例えば、先のツールポイズニング攻撃のデモで、クライアントが鍵ファイルを読み取った際のcat ~/.ssh/id_rsaのような操作はLoongCollectorによってログとして収集される。SLSのアラート機能は、これらのランタイムログ内の機密操作をリアルタイムで監視し、MCP関連サービスがホストの鍵ファイルを読み取るといった特定のアラート条件を満たした場合、自動的にアラートをトリガーする。
MCPのセキュリティ監視には、インテリジェント評価モデルとLoongCollectorによるリアルタイム収集・監視という、互いに補完し合う二つの戦略が有効だ。評価モデルは、インテリジェントな分析を通じて脅威を自動的に検出し、LoongCollectorとeBPFの組み合わせは、システム動作の詳細な監視を通じて包括的なセキュリティ視点を提供する。これらの手法を組み合わせることで、システムの監視能力が向上し、複雑で多様なセキュリティ課題への効果的な対応が可能となる。