Re Reference AI

技術

プロンプトハイジャック(ゴールハイジャッキング)とは

Prompt Hijacking / ゴールハイジャッキング / Goal Hijacking

信頼できるシステムプロンプトと信頼できない外部入力を結合するアプリケーションに対し、モデルの出力を攻撃者の意図した内容へ乗っ取る攻撃

セキュリティLLM

ひとことで言うと

LLMを組み込んだアプリに対し、本来の指示を無視させて攻撃者の望む答えを出力させる攻撃。

概要

プロンプトハイジャックは、LLMを組み込んだアプリケーションにおいて、開発者が設定した信頼できる指示(システムプロンプトなど)とユーザーや外部データから渡される信頼できない入力とが結合される仕組みを悪用し、モデルの出力を攻撃者の意図した内容へ乗っ取る攻撃。プロンプトインジェクションは、LLMへの入力に悪意ある指示を紛れ込ませる攻撃全般を指す広い総称として使われる。プロンプトハイジャックはその中でも、ユーザーの本来の要求や開発者の意図した処理を無視させ、攻撃者が指定した出力を生成させることに主眼を置いた攻撃として位置づけられることが多い。プロンプトインジェクション攻撃の目的は、モデルに開発者が意図しない特定の出力をさせる「ゴールハイジャッキング」と、システムプロンプトの内容自体を漏洩させる「プロンプトリーキング」に大別されており、プロンプトハイジャックはこのうちゴールハイジャッキングに近い概念として扱われる。ジェイルブレイクがLLM自体に学習済みの安全対策を無視させることに主眼を置くのに対し、プロンプトハイジャックはLLMを組み込んだアプリケーション側の挙動を乗っ取ることに主眼を置く点で区別されることがある。

背景

LLMを組み込んだアプリケーションの多くは、開発者が用意したシステムプロンプトとユーザー入力や外部データを1つのプロンプトとして結合し、モデルへまとめて渡す。LLMはこれらの由来が異なるテキストを構造的に区別する仕組みを本質的には持たないため、信頼できない入力の中に巧妙な指示を混ぜることで、開発者が意図した処理の流れそのものを乗っ取られてしまう課題が指摘されてきた。

歴史

2022年: PerezとRibeiroが論文Ignore Previous Prompt: Attack Techniques For Language Modelsを発表。プロンプトの目的を攻撃者の指定したフレーズの出力へすり替える「ゴールハイジャッキング」と、システムプロンプト自体を漏洩させる「プロンプトリーキング」を、プロンプトインジェクション攻撃の主要な類型として整理した。

アーキテクチャ

攻撃者は、ユーザー入力欄やLLMが参照する外部データ(Webページ、文書、ツールの実行結果など)の中に、モデルの出力先を書き換えるための指示を埋め込む。LLMはシステムプロンプトと外部由来のテキストを同じ文脈として処理するため、埋め込まれた指示が開発者の意図した処理より優先されてしまうと、モデルは攻撃者の指定した内容を出力してしまう。攻撃はユーザー自身が直接入力する形でも、ユーザーの知らないうちに外部データ経由で行われる形でも成立しうる。

ワークフロー

攻撃者が、ユーザー入力または外部データの中にモデルの出力先を書き換える指示を埋め込む。 LLMがシステムプロンプトと埋め込まれた指示を含む入力全体を処理する。 LLMが開発者の意図した処理を無視し、攻撃者が指定した内容を出力する。 アプリケーションが、乗っ取られた出力をそのままユーザーや下流の処理へ渡してしまう。

欠点

  • LLMを組み込んだアプリケーションが、開発者の意図しない出力をそのままユーザーへ返してしまうリスクがある
  • 外部データ経由の間接的な攻撃も成立しうるため、ユーザー自身が悪意を持っていなくても被害が発生しうる
  • システムプロンプトとユーザー入力を構造的に区別する根本的な仕組みがLLMにはなく、対策が完全ではない

比較

  • プロンプトインジェクションプロンプトハイジャックは、プロンプトインジェクション攻撃のうちモデルの出力先を攻撃者の意図した目標へすり替える「ゴールハイジャッキング」に相当する下位概念として位置づけられる
  • ジェイルブレイクジェイルブレイクがLLM自体に学習済みの安全対策を無視させることに主眼を置くのに対し、プロンプトハイジャックはLLMを組み込んだアプリケーションの出力を乗っ取ることに主眼を置く点が異なる
  • ガードレールガードレールは、プロンプトハイジャックのようにアプリケーションの出力が乗っ取られることを防ぐための対策の1つとして使われる

関連用語

プロンプトインジェクションジェイルブレイクガードレールシステムプロンプト

よくある質問

プロンプトハイジャックとプロンプトインジェクションの違いは?

プロンプトインジェクションはLLMへの入力に悪意ある指示を紛れ込ませる攻撃全般を指す広い総称で、プロンプトハイジャックはその中でもモデルの出力先を攻撃者の意図した内容へすり替えることに主眼を置く下位概念として扱われることが多い。

プロンプトハイジャックへの対策は?

出力フィルタリングによる生成内容の検査、システムプロンプトとユーザー入力の分離を強化するプロンプト設計、ガードレールによる監視などを組み合わせた多層防御が使われる。

参考文献