View a markdown version of this page

プロンプトインジェクション攻撃を回避するためのベストプラクティス - AWS 規範ガイダンス

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

プロンプトインジェクション攻撃を回避するためのベストプラクティス

以下のガードレールとベストプラクティスは、実証モデルとして Anthropic Claude を搭載した RAG アプリケーションでテストされました。この提案は Claude ファミリーのモデルに非常に適用可能ですが、モデル固有の変更 (XML タグの削除や異なるダイアログ属性タグの使用など) を保留中の、他の Claude 以外の LLMs にも転送できます。

< thinking> タグと <answer> タグを使用する

基本的な RAG テンプレートに便利な追加は、 <thinking>および <answer> タグです。 <thinking> タグを使用すると、モデルは作業を表示し、関連する抜粋を表示できます。 <answer> タグには、ユーザーに返されるレスポンスが含まれます。経験的に、これらの 2 つのタグを使用すると、モデルが複数の情報源をつなぎ合わせる必要がある複雑で微妙な質問に答えるときの精度が向上します。

ガードレールを使用する

LLM 搭載のアプリケーションを保護するには、前述の一般的な攻撃を認識し、防御するのに役立つ特定のガードレールが必要です。このガイドでセキュリティガードレールを設計したときのアプローチは、テンプレートに導入されたトークンの数を最小限に抑えて最大の利点を生み出すことでした。モデルベンダーの大部分は入力トークンで課金するため、トークンが少ないガードレールはコスト効率に優れています。さらに、過剰に設計されたテンプレートは精度を低下させることが示されています。

ソルトシーケンスタグの 1 つのペアで指示をラップする

一部の LLMs は、会話履歴や取得されたドキュメントなどの特定のリソースに LLM をガイドするのに役立つように、情報が XML タグでラップされるテンプレート構造に従います。タグスプーフィング攻撃は、悪意のある指示を一般的なタグにラップし、その指示が元のテンプレートの一部であるとモデルを確信させることで、この構造を利用しようとします。ソルテッドタグは、セッション固有の英数字シーケンスを 形式の各 XML タグに追加することで、タグのなりすましを停止します<tagname-abcde12345>。追加の命令は、これらのタグ内にある命令のみを考慮するように LLM にコマンドします。

このアプローチの 1 つの問題は、モデルが予期的または予期せず回答にタグを使用する場合、ソルトされたシーケンスも返されたタグに追加されることです。これで、ユーザーはこのセッション固有のシーケンスを知っているので、タグスプーフィングを実行できます。これは、LLM にソルトタグ付き命令を考慮するように指示する命令であるため、おそらく高い有効性で実現できます。このリスクを回避するには、すべての手順をテンプレートの 1 つのタグ付きセクションにラップし、ソルトされたシーケンスのみで構成されるタグを使用します (例: <abcde12345>)。その後、このタグ付けされたセッションの指示のみを考慮するようにモデルに指示できます。このアプローチにより、モデルがソルトシーケンスを公開できなくなり、テンプレートの指示を導入または強化しようとするタグスプーフィングやその他の攻撃に対する防御に役立ったことがわかりました。

特定の指示を提供して攻撃を検出するように LLM に教える

また、一般的な攻撃パターンを説明する一連の手順を含めて、攻撃を検出する方法を LLM に教えます。手順では、ユーザー入力クエリに焦点を当てます。キー攻撃パターンの存在を特定し、パターンを検出した場合は「Prompt Attack Detected」を返すように LLM に指示します。これらの手順により、一般的な攻撃に対処するためのショートカットを LLM に付与できます。このショートカットは、テンプレートが <thinking>および <answer> タグを使用する場合に関連しています。通常、LLM は悪意のある指示を反復的かつ過度に詳細に解析するため、最終的にコンプライアンスにつながる可能性があります (次のセクションの比較で示すとおり)。