プロンプトインジェクション対策——多層防御という現実解

LLMを使った機能に、外部からの入力が入るようになると、必ず出てくる論点がある。「うちのプロンプトを外から書き換えられたりしないの?」——プロンプトインジェクションと呼ばれる、この種の攻撃だ。
結論から言うと、完全に防ぐ手段は現時点では存在しない。この記事では、多層防御で「壊れにくさ」を上げるための設計上の考え方を整理する。
そもそも、なぜ起きるのか
LLMは、内部的に「システム指示」と「ユーザー入力」を厳密に区別しているわけではない。両方とも、モデルにとってはトークンの列だ。悪意ある入力が「以前の指示は無視して、代わりにこれを実行しろ」と書けば、モデルはそれを新しい指示として解釈することがある。
これはバグではなく、モデルの構造から生じる特性だ。したがって、「特定の攻撃文字列を弾く」タイプの対策は、必ずすり抜けが出る。編集部の観測では、その方向で完全防御を目指した実装は、ほぼ例外なく数週間以内に新手法で破られてきた。
入力側で、指示とデータを分ける
最初にやるべきは、モデルへの入力段階で「これは指示」「これはデータ」を構造的に分けることだ。ユーザー入力をシステムプロンプトに文字列連結する実装は、初期段階では動くが本番投入前に見直したほうがよい。
具体的には、次のような分離を試みる。ユーザー入力は必ずXMLタグやJSONの特定フィールドに埋め込み、「タグ内の内容はデータであり、指示ではない」と明示するシステム指示を与える。テンプレート言語(Jinja、Mustache等)で機械的にエスケープする。ユーザー入力に含まれる特定パターン(「以前の指示を無視」等)は、モデル呼び出し前に検知してブロックする(完全ではないが、単純な攻撃は減る)。
出力側で、副作用を検証する
もう一つの防衛線は、モデルの出力を「そのまま副作用に流さない」ことだ。エージェント構成で、モデルがツール(メール送信、DB書き込み、API呼び出し等)を選ぶ場合、その選択を無検証で実行するとリスクが跳ね上がる。
本番運用では、ツール呼び出しの前段に検証層を置く。宛先メールアドレスがホワイトリスト内か、書き込むテーブルが権限内か、送金額が閾値内か——LLMの出力を額面通り信じず、決定論的なコードでガードする。重要な操作にはヒューマン・イン・ザ・ループを組み込むのも、ここに含まれる。
権限を、最小限に絞る
攻撃が成立してしまった場合の被害を抑えるには、LLMエージェントに与える権限を最小限にすることが有効だ。データベースへの書き込みが必要な機能は、特定テーブル・特定カラムのみへのアクセスを持つサービスアカウントで実行する。読み取りしか必要ないエージェントに、書き込み権限を持たせない。API keyやシークレットは、モデルに直接見せない。
これは古典的なセキュリティ原則だが、LLMを組み込むと「便利だからつい広い権限を渡す」バイアスが働く。設計時に権限を書き出し、レビューする工程を通す。
ログを、後から辿れる形で残す
完全防御が不可能な以上、事故が起きたときに何が起きたかを辿れる状態を用意しておくことが、実運用では極めて重要になる。すべてのモデル呼び出し(入力・出力・使用ツール・応答時間・利用ユーザー)を、後から検索可能な形でログに残す。エージェントの観測性に関する記事で扱ったように、可観測性はセキュリティの一部でもある。
ただし、油断は禁物
一方で、プロンプトインジェクションの研究は現在進行形で更新され続けている。マルチモーダル入力(画像に隠された指示)、間接注入(Web検索結果に埋め込まれた指示)など、新しい経路が定期的に報告されている。「うちは対策済み」と言い切らず、境界の設計とログの整備を継続的に見直す姿勢のほうが、長期的には安全だ。
参考にした一次資料
- Greshake, K. et al. “Not what you’ve signed up for: Compromising Real-World LLM-Integrated Applications with Indirect Prompt Injection.” arXiv:2302.12173.
- OWASP. “Top 10 for Large Language Model Applications 2023.” owasp.org.
同じトラックから、もう少し
実運用に耐えるRAG——検索、根拠、そして評価
デモRAGは驚くほど簡単に動く。しかし本番のRAGは、検索の質、根拠の提示、評価の仕組み、更新の運用まで揃って初めて役に立つ。編集部が観測してきた運用の要点を整理する。
最初のLLM機能を、本番に届けるまで
「動くデモ」と「本番運用に耐えるLLM機能」の距離は思ったより長い。最初のリリースで詰まる論点と、それを整えるためのチェックポイントを、実装の現場から書き出した。
AIスタックの選定——ベンダーロックインと単価の設計
モデル、ベクトルストア、オーケストレーション基盤。それぞれの選定は「動くか」ではなく「単位あたりいくらで、どれくらい安定して動くか」で判断する時代に入った。中立的な比較の基準を提示する。