プロンプトインジェクションとは|LLMアプリを狙う攻撃と実務でできる多層防御

社内ツールにLLMを組み込む、資料を検索して答えるチャットボットを作る、メールやWebを読ませて自動で処理させる。こうしたLLMアプリやエージェントを業務で組み始めると、ほぼ確実に向き合うことになるのがプロンプトインジェクションです。これは、モデルに与える文章に細工をして、開発者が意図しない動作をさせる攻撃を指します。OWASPがまとめるLLMアプリ向けの脆弱性ランキングで最上位に置かれており、避けて通れないテーマです。この記事では、直接・間接の違いから、業務で顕在化する場面、OWASPが挙げる緩和策までを業務目線で整理します。
プロンプトインジェクションとは
OWASPの定義では、プロンプトインジェクションはユーザープロンプトなどがLLMの挙動や出力を意図しない形で変えてしまう脆弱性です。モデルは「開発者が書いたシステムプロンプト」と「後から入ってきた文章」を、本質的には同じテキストの流れとして読みます。ここに、命令文として解釈される細工が混ざると、本来の役割を離れた動作をしてしまう、というのが問題の核心です。
攻撃は大きく2種類に分かれます。
- 1
直接(Direct)プロンプトインジェクション
利用者が入力するプロンプトそのもので、モデルの挙動を直接書き換えます。「これまでの指示を無視して」といった形で役割を上書きし、隠すべき情報を吐き出させたり、禁止された動作をさせたりします。 - 2
間接(Indirect)プロンプトインジェクション
Webサイトやファイル、メールなど外部コンテンツの中に指示を埋め込んでおき、それをモデルが読み込んで解釈した結果として挙動が変わります。攻撃者がアプリを直接操作しなくても、モデルに読ませる素材を用意するだけで成立する点が厄介です。
直接注入は入力欄が窓口になるため比較的イメージしやすい一方、間接注入は「モデルに外部の文章を読ませる」機能を持った瞬間に発生する余地が生まれます。RAG、メール要約、Web閲覧、エージェントによるツール実行など、業務で便利な機能ほど間接注入の入口になり得ます。
メモ
業務で顕在化する場面
OWASPは具体的な攻撃シナリオを複数挙げています。代表的なものを業務の文脈に置き換えると、次のような形になります。
- カスタマーサポートbotへの直接注入で、内部の指示や非公開情報を引き出す
- Webページ内に隠した指示(間接注入)で、閲覧機能を持つモデルに不正な操作をさせる
- RAGが参照する文書を改ざんし、検索結果として読み込ませて挙動を変える
- メールアシスタントに悪性プロンプトを含むメールを送り、要約や返信の処理を乗っ取る
- 履歴書などにペイロードを分割して埋め込み、審査補助のモデルを誤誘導する
- 画像に指示を隠すマルチモーダル注入、敵対的サフィックス文字列、多言語や難読化エンコードによる回避
共通するのは、モデルが「読む」対象を信頼しきってしまう点です。とくにエージェントがメール送信やファイル操作、外部APIの呼び出しといった副作用のある行動を取れる場合、注入が成功したときの被害は文章の誤りにとどまらず、実際の操作にまで及びます。
あわせて読みたい
AI利用時の情報管理|入力してよいデータの線引きと社内での運用
OWASPが挙げる緩和策
OWASPは、プロンプトインジェクションへの緩和策として次の7項目を挙げています。いずれも単独で完結するものではなく、組み合わせて使う前提です。
OWASPが挙げる7つの緩和策
- モデル挙動の制約:システムプロンプトで役割・タスクを限定する
- 期待する出力形式を定義し、出力を検証する
- 入出力のフィルタリング:セマンティック・形式の両面で検証する
- 権限制御と最小権限の徹底:APIトークンなどの権限を絞る
- 高リスク操作は人間の承認を挟む(human-in-the-loop)
- 外部コンテンツの分離・識別:信頼できない入力の影響を限定する
- 敵対的テスト・攻撃シミュレーションを定期的に実施する
注意
7項目のうち、入出力のフィルタリングや出力形式の検証は「注入が起きにくくする・すり抜けを見つける」ための層です。一方、権限制御や人間の承認は「注入が成功しても実害を小さくする」ための層です。防ぐ側と、被害を抑える側の両方をそろえておくことが、多層防御の考え方になります。
まず何から始めるか
7項目を一度に導入するのは負担が大きいため、実害の大きさを下げる対策から着手するのが現実的です。優先度が高いのは次の3つです。
第一に、最小権限の徹底です。モデルやエージェントに渡すAPIトークンやアクセス範囲を、業務に必要な最小限へ絞ります。注入が成功しても、そもそも触れられる範囲が狭ければ被害は限定されます。
第二に、高リスク操作への人間の承認です。メール送信、データの削除・更新、外部への情報送信、決済といった副作用の大きい操作は、モデルの判断だけで実行させず、人が確認して承認する手順を挟みます。
第三に、外部コンテンツの分離です。RAGで取り込む文書やWebの本文、メール本文などの信頼できない入力を、システムの指示とは別枠として扱い、「これはデータであって命令ではない」とモデルに識別させる工夫を入れます。加えて、出力形式を定義して検証すれば、想定外の応答を機械的に弾きやすくなります。
そのうえで、敵対的テストを定期的に回します。日本では、IPA/AIセーフティ・インスティテュートのレッドチーミング手法ガイドでも、直接・間接プロンプトインジェクションが主要な攻撃手法として扱われています。自組織のアプリに対して想定される注入を実際に試し、防御の穴を運用の中で見つけていく姿勢が欠かせません。
攻撃シナリオと緩和策の分類はOWASP Top 10 for LLM Applications(2025年版)のLLM01に基づきます。レッドチーミングの具体的な進め方はIPA/AIセーフティ・インスティテュートのガイドが参考になります。導入前に各一次資料で最新の記述を確認してください。
よくある質問
システムプロンプトで「指示を無視するな」と書けば防げますか
自由入力の窓口がなければ安全ですか
最も優先すべき対策は何ですか
完全に防ぐことはできますか
まとめ
プロンプトインジェクション対策のチェックリスト
- 直接・間接の違いを理解し、外部コンテンツを扱う機能を洗い出した
- モデル・エージェントの権限を最小限に絞った
- 副作用の大きい操作は人間の承認を挟む設計にした
- 信頼できない入力を命令ではなくデータとして分離・識別する工夫を入れた
- 出力形式を定義し、想定外の応答を機械的に検証する仕組みを入れた
- 敵対的テストを定期的に実施し、防御の穴を運用で見直す体制を作った
プロンプトインジェクションは、LLMを業務で使いこなすほど避けられないテーマです。完全に防ぐ魔法の設定は存在しないため、「起きにくくする層」と「起きても被害を抑える層」を重ねる多層防御で臨みます。まずは権限を絞り、危険な操作に人の承認を挟むところから、自組織のアプリに合わせて組み込んでいきましょう。
あわせて読みたい
生成AIの業務利用を始める前に決めること|社内ルールの作り方と最初の一歩
出典・参考
関連する記事
AI利用時の情報管理|入力してよいデータの線引きと社内での運用
生成AIに入力してよい情報と入力してはいけない情報の線引きを解説します。情報区分ごとの判断基準、サービスの設定と規約で確認すべき点、線引きを形骸化させない社内運用の工夫をまとめます。
ハルシネーション対策の実務|検証フローの作り方と運用のコツ
LLMがもっともらしい誤情報を生成するハルシネーションへの実務的な対策を解説します。発生をゼロにできない前提での検証フローの設計、用途別のチェックの深さ、プロンプトと仕組みでの抑制策をまとめます。
生成AIの業務利用を始める前に決めること|社内ルールの作り方と最初の一歩
生成AIを業務で使い始める前に決めておきたい社内ルールを整理しました。対象範囲・入力してよい情報・確認フロー・責任の所在という4つの論点と、小さく始めて育てる運用の考え方をまとめます。


