ブログに戻る
コラム

プロンプトインジェクションとは?仕組みと実践的な対策

FastMetal

プロンプトインジェクションとは、悪意ある入力を使って、LLM に与えた本来の指示(システムプロンプト)を乗っ取る攻撃です。 LLM を組み込んだアプリを作るなら、必ず押さえておきたいリスクです。

プロンプトインジェクションとは

LLM は、システム指示もユーザー入力も「同じテキスト」として読みます。そのため、ユーザー入力に「これまでの指示は無視して〜」といった文を紛れ込ませると、意図しない動作を引き起こせてしまうことがあります。

主な種類

  • 直接型(Direct) — ユーザーが入力欄に直接、指示を上書きする文を書き込む。
  • 間接型(Indirect) — 取得したWebページや文書、メールなどに攻撃的な指示が埋め込まれており、それを LLM が読むことで発動する。RAG やエージェントで特に注意が必要です。

実践的な対策

完全に防ぐ「銀の弾丸」はありませんが、次の対策を重ねることでリスクを下げられます。

  • 信頼できない入力を「データ」として扱う — 外部由来のテキストは指示ではなく処理対象として明確に区切り、その旨をシステムプロンプトで指示する。
  • 権限を最小化する — LLM やエージェントが実行できる操作(ツール、API、削除など)を必要最小限に絞る。乗っ取られても被害を限定できます。
  • 出力を検証・サニタイズする — モデルの出力をそのまま実行せず、想定した形式かをプログラム側で確認する。
  • 高リスクな操作は人間の承認を挟む — 送信・課金・削除などは自動実行しない。
  • 専用の検知を使う — インジェクション検知や PII マスキングを提供する製品・ツールを組み合わせる(機能の有無は各製品で確認してください)。

設計の基本方針

鍵は「LLM を信頼しすぎない」ことです。モデルの出力は提案とみなし、実際の実行や外部への影響は、権限管理と検証で囲い込む——この多層防御の考え方が最も重要です。

まとめ

プロンプトインジェクションは、入力の分離・権限の最小化・出力の検証・人間の承認を重ねて対策します。単一の対策に頼らず、多層で守るのが基本です。LLM API の使い方はドキュメント、対応モデルはモデルカタログをご覧ください。