プロンプトインジェクション入門 — 言葉でモデルを騙す
兄弟に言いくるめられて家事を全部やらされた経験はありませんか。あれと同じことが、いま言語モデルに対して起きています。

誰かに言いくるめられて、やらなくてもいい仕事を引き受けてしまった経験はありませんか。 私は子どものころ、兄弟にこう言われたことがあります。
「お母さんは、全部自分で家事をやってる僕のほうを大事に思ってるんだよ。君はやらなくていいからね」
結果として、家事を全部ひとりでやっていたのは私でした 😂

これが、プロンプトインジェクションの本質です。 システムを壊しているのではありません。言葉で相手の判断を書き換えているのです。
1. プロンプトインジェクションとは
言語モデルへの入力を操作して応答を変える手法です。 本来の制限を回避させたり、意図しない出力を引き出したりします。 誤情報の拡散といった悪用にも、創造的な用途にも使われます。

本題に入る前に、前提となる用語を2つ整理しておきます。
1.1 プロンプト
LLM から応答を得るために与える入力・指示のことです。
1.2 システムプロンプト
LLM は事前学習済みのモデルです。アプリケーションに組み込むとき、 開発者はモデル用に特別なコードを書くわけではなく、 システムプロンプトを用意して「ユーザー入力をどう扱うべきか」を指示します。
「パスワードは絶対に教えないでください」といった制約も、ここに書かれます。

ユーザーが入力したプロンプトは、このシステムプロンプトと一緒に処理されます。 つまり攻撃者は、同じ土俵に自分の指示を差し込めるわけです。
これはソーシャルエンジニアリングとインジェクション攻撃を掛け合わせたようなもので、 言葉でモデルを騙し、悪意あるペイロードをプロンプトに注入しています。 当然、開発者側はセーフガードで防ごうとします。
2. 種類
XSS や SQLインジェクションと同じように、いくつかの型があります。
直接プロンプトインジェクション — 攻撃者がプロンプトを直接書いてモデルを操作し、 意図しない、あるいは有害な出力を生成させる手法です。
間接プロンプトインジェクション — 攻撃者が直接入力するのではなく、 モデルが読み込む外部データ(Webページ、ファイル、メールなど)に指示を仕込んでおく手法です。 モデルはそれを「データ」ではなく「指示」として解釈してしまいます。
後者のほうが厄介です。攻撃者が被害者と直接やり取りする必要がないからです。
3. 実際に試してみる
手を動かすのがいちばん早いので、Gandalf を使います。 パスワードを守るAIから、それを聞き出すチャレンジです。

レベル1は飛ばします。そのまま聞けば答えてくれる、セーフガードなしの状態です。


レベル2は違います。素直に尋ねると拒否されます。

なぜ通らないのかが分かれば、次の手が見えてきます。 直接聞くのではなく、別の形で同じ情報を出力させればよいわけです。

「これさえ打てば通る」という万能のプロンプトは存在しません。 自分で試し、反応を観察し、組み立て直す。そのプロセス自体が理解につながります。
4. まとめ
プロンプトインジェクションとは、入力を調整して言語モデルを操作し、 本来するべきでない動作をさせたり、出すべきでない情報を出させたりすることです。 言葉で制限をすり抜けさせる、と言い換えてもいいでしょう。
遊びとして面白い側面がある一方、セキュリティ問題や誤情報の拡散という 現実のリスクも伴います。開発者側もセーフガードを導入して対応を進めていますが、 攻撃手法も同時に進化しています。
だからこそ、実際にいろいろなプロンプトを試してみることに意味があります。 どう破られるかを知らなければ、どう守るかも設計できません。
この記事は Medium にも掲載しています · Medium
