プロンプトインジェクションとは?
攻撃者が細工された入力でLLMの動作を操作し、指示を無視させたり機密データを漏洩させる攻撃です。
攻撃タイプ
- 直接インジェクション: 以前の指示を無視するよう明示的に指示します。
- 間接インジェクション: 取得コンテキストに隠された悪意ある指示です。
- ジェイルブレイキング: 安全ガードレールを回避します。
防御戦略
- 入力サニタイゼーション: 疑わしいパターンをフィルタリングします。
- 指示階層: システム指示とユーザー指示を明確に分離します。
- 最小権限: 不要なデータにアクセスさせません。
- ガードレール: Guardrails AIやNeMo Guardrailsを使用してください。
- 入力サニタイズ: ユーザー入力からシステム的パターンを除去してください。「以前の指示を無視して」等の文字列を削除してください。
- デュアルモデルアーキテクチャ: 「ガーディアン」モデルで入力が主モデルを操作しようとしているか評価します。
- 権限分離: LLMに重要システムへの直接アクセスを決して与えません。
- カナリートークン: システムプロンプトに隠しトークンを挿入します。出力されれば注入を検知します。
- 出力検証: LLM出力を常に検証・サニタイズしてから使用してください。