DEV Community 日本語
フォロー
プロンプトインジェクションはモデルの問題ではなく、権限の問題である
LLMにおけるプロンプトインジェクションの緩和は、入力検証の問題ではなく、権限の問題です。なぜなら、LLMは本質的に指示とデータの境界を曖昧にするからです。モデルが常に正しく動作することを前提とした「より良い指示」やフィルタリングメカニズムに依存することは不十分です。なぜなら、それは保証されないからです。攻撃者はフィルタリングのバイパスに一度成功すればよく、これは様々なエンコーディングトリックや、画像やドキュメントにコンテンツを埋め込むことによって回避される可能性があります。根本的な問題は、LLMが指示とデータの両方に単一のチャネルを持っていることであり、プロトコルレベルでそれらを確実に区別することが不可能であることです。したがって、実際に有効な制御は、悪意のある指示が実行されると仮定し、そのような実行を「つまらない」ものにするようにシステムを設計することです。これにはいくつかの構造的な変更が必要です。
まず、エージェントを2つのコンポーネントに分割します。1つはツールや認証情報なしで信頼できないコンテンツを読み取り、もう1つは最初のコンポーネントによって返された構造化データに基づいて行動し、信頼できないテキストを直接見ることはありません。次に、モデルにアクションを呼び出させるのではなく、厳格な許可リストとスキーマに対して検証されるインテントを提案させます。第三に、ホストごとにアウトバウンドネットワークリクエストを許可し、レンダリングされたモデル出力からリモート参照を削除またはプロキシ化してデータ漏洩を防ぐことにより、情報漏洩パスを遮断します。第四に、すべての取り消し不能なアクションに対して人間をループに入れ、モデルにドラフトを作成させることはできますが、重要なステップには人間の確認を要求します。最後に、すべての認証情報を、エージェントごとのキー、有効期限、使用上限、レート制限、および拒否を記録する外部の追記専用ログでバインドします。個々に無害な機能が危険な構成を作成する方法を考慮して、権限セットを水平方向に監査します。この機能ベースのアプローチにより、悪意のある指示が実行されたとしても、到達したり行動したりする価値のあるものは何もなくなります。