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

攻撃者が細工された入力でLLMの動作を操作し、指示を無視させたり機密データを漏洩させる攻撃です。

攻撃タイプ

  • 直接インジェクション: 以前の指示を無視するよう明示的に指示します。
  • 間接インジェクション: 取得コンテキストに隠された悪意ある指示です。
  • ジェイルブレイキング: 安全ガードレールを回避します。

防御戦略

  • 入力サニタイゼーション: 疑わしいパターンをフィルタリングします。
  • 指示階層: システム指示とユーザー指示を明確に分離します。
  • 最小権限: 不要なデータにアクセスさせません。
  • ガードレール: Guardrails AIやNeMo Guardrailsを使用してください。
  • 入力サニタイズ: ユーザー入力からシステム的パターンを除去してください。「以前の指示を無視して」等の文字列を削除してください。
  • デュアルモデルアーキテクチャ: 「ガーディアン」モデルで入力が主モデルを操作しようとしているか評価します。
  • 権限分離: LLMに重要システムへの直接アクセスを決して与えません。
  • カナリートークン: システムプロンプトに隠しトークンを挿入します。出力されれば注入を検知します。
  • 出力検証: LLM出力を常に検証・サニタイズしてから使用してください。