プロンプトインジェクションとは?
プロンプトインジェクションとは、言語モデルへの入力に隠された悪意のある指示によってモデルの挙動が乗っ取られ、ルールを無視させられたり、データを漏洩させられたり、ツールを悪用させられたりする攻撃です。これはLLMアプリケーションにおけるOWASP Top 10の第1位に挙げられています。根本的な原因は、モデルが信頼できる指示と信頼できないコンテンツを確実に分離できないことにあります。そのため、エージェントが読み取るあらゆるテキスト(Webページ、ドキュメント、ツールの実行結果など)が攻撃を媒介する可能性があります。
定義
プロンプトインジェクションとは、信頼できない入力に埋め込まれた敵対的な指示によって、言語モデルが意図された挙動から逸脱したり、安全対策をバイパスしたり、意図しないアクションを実行したりするセキュリティ攻撃です。
主な要点
- モデルが読み取る信頼できないテキストには、隠された指示が含まれている可能性があります。
- LLMアプリケーションにおけるOWASP Top 10の第1位のリスクです。
- 間接的インジェクションは、ドキュメント、Webページ、またはツールの出力にペイロードを隠します。
- ツールへのアクセス権限が増えるほどリスクが高まります。インジェクションによって実際のアクションが引き起こされる可能性があります。
- 単一の解決策はありません。防御は多層的(最小権限、隔離、人間による承認)に行う必要があります。
コンテキスト
モデルは自然言語の指示に従うため、信頼できるシステム指示と、信頼できないユーザーやドキュメントのコンテンツを確実に区別することができません。攻撃者はこの弱点を突き、モデルが読み取る場所に「これまでの指示を無視して…」といった指示を仕込みます。
直接的インジェクションはユーザーから行われます。間接的(かつより危険な)インジェクションは、エージェントが取得するコンテンツ(Webページ、メール、ファイル、MCPツールの実行結果など)に隠されています。エージェントがツールへのアクセス権限を持つようになると、インジェクションの成功によってデータが外部に送信されたり、有害なアクションが実行されたりする可能性があります。
アーキテクチャ
防御は単一の制御ではなく、多層的に行います。ツールの最小権限、信頼できないコンテンツの隔離と明確な境界設定、出力とアクションの検証、機密性の高い操作の許可リスト(アローリスト)、影響の大きいアクションに対する人間による承認(Human-in-the-loop)などです。
すべてのツールおよび検索の出力を、信頼できない入力として扱います。インジェクションの試みを検出できるようにエージェントのアクションを監視およびログ記録(オブザーバビリティ)し、定期的にシステムのレッドチーム演習を実施します。
コンポーネント
リスク
- 機密性の高いコンテキストや資格情報のデータ漏洩。
- 接続されたシステムにおける不正なツールアクション。
- 安全ポリシーやガードレールのバイパス。
- ドキュメント、Webページ、またはツールの実行結果を介した間接的な攻撃。
ツールとテクノロジー
例
- エージェントが読み取るWebページに、個人データをメールで送信するよう指示する隠しテキストが含まれている。
- 要約ツールに対し、ルールを無視して悪意のあるリンクを出力するよう指示するドキュメント。
- ツールの実行結果が、エージェントに呼び出すべきではない別のツールを呼び出させようとする。
FAQ
- なぜモデルはインジェクションされた指示を単に無視できないのですか?
- 信頼できる指示と信頼できないコンテンツを確実に区別できないためです。どちらも同じテキストとして入力されます。この曖昧さが根本的な脆弱性です。
- 間接的プロンプトインジェクションとは何ですか?
- ユーザーが直接入力するのではなく、モデルが取得する外部コンテンツ(Webページ、ファイル、メール、ツールの出力など)に悪意のある指示が隠されている場合を指します。多くの場合、こちらの方がより危険です。
- プロンプトインジェクションは完全に防ぐことができますか?
- 現在のところ、単一の対策で完全に防ぐことはできません。最小権限、コンテンツの隔離、検証、監視、機密性の高いアクションに対する人間による承認など、多層的な防御によってリスクを軽減します。
- ツールの使用によって、なぜリスク(影響)が高まるのですか?
- ツールがない場合、インジェクションの影響は主に不適切なテキストの生成にとどまります。ツールを使用する場合、インジェクションされた指示によって、データの送信や変更といった実際のアクションが実行される可能性があるため、権限管理と承認がより重要になります。