過剰なエージェンシーは、大規模言語モデル(LLM)に他のシステムとやり取りするための不必要または過度に寛容な権限が付与された場合に発生する脆弱性です。LLM が外部ツール、プラグイン、関数(「エージェンシー」)を呼び出すことができる場合、この脆弱性により、意図しない、不正な、潜在的に有害なアクションを実行する可能性があります。攻撃者は、プロンプト インジェクションやその他の操作手法を使用して LLM を騙し、付与されたエージェンシーを悪意のある目的で使用することで、この脆弱性を悪用できます。根本的な問題は、LLM がアクションを実行できることだけでなく、アクションの範囲が広すぎ、制御が不十分であることです。
Android デベロッパーが配慮すべき理由
Android アプリケーション内で LLM に過剰なエージェンシーを付与すると、重大なセキュリティ インシデントにつながる可能性があります。
- システムへの不正アクセス: モデルに権限と対応する Android 権限がある場合、攻撃者は LLM にコマンドを送信して、ローカルの Android 搭載デバイス上のファイル(ユーザー ドキュメント、アプリデータなど)や接続されたネットワーク リソースにアクセスしたり、それらを変更または削除したりする可能性があります。
- データ漏洩: LLM が、ローカル アプリのデータベース(Room など)、SharedPreferences、内部 API から機密データを読み取り、その情報を外部ソースに漏洩するよう騙される可能性があります(API 呼び出しやメール機能を使用して送信するなど)。また、モデルがトレーニング フェーズで吸収した機密情報や、ユーザーがプロンプトで提供した機密情報が漏洩する可能性もあります。
- 他の機能/システムの侵害: LLM が他の機能(SMS の送信、通話の発信、暗黙的インテントを使用したソーシャル メディアへの投稿、システム設定の変更、アプリ内購入など)を制御している場合、攻撃者はこれらの機能を乗っ取ってスパムを送信したり、誤った情報を拡散したり、不正な取引を行ったりする可能性があります。これにより、直接的な金銭的損失やユーザーへの危害が生じる可能性があります。
- サービス拒否: LLM に、アプリ内またはバックエンド サービスに対して、リソースを大量に消費するアクションを繰り返し実行するよう指示する可能性があります。たとえば、複雑なデータベース クエリの実行や、ループでの API の呼び出しなどです。これにより、アプリの応答なし、バッテリーの消耗、データ使用量の過剰、バックエンド システムのサービス拒否につながる可能性があります。
Android アプリ デベロッパー向けの緩和策
Android アプリにおける過剰なエージェンシーの緩和は、LLM がアクセスまたはトリガーできるすべてのツールと関数に最小権限の原則を適用することに重点を置いています。
AI のツールボックスを制限する(粒度の細かい関数とオープン エンドの関数)。
- 最小限のツールを提供する: LLM は、アプリ内でタスクを実行するために絶対に必要となる特定のツール(関数、API、インテント)にのみアクセスできるようにする必要があります。ウェブの閲覧やメールの送信が必要ない場合は、それらの機能を公開しないでください。
- 単一目的のシンプルなツールを使用する: LLM には、何でもできる強力なオープンエンドのツール(「任意のシェル コマンドを実行する」など)ではなく、特定の処理(「特定の種類のユーザー設定を読み取る」など)のみを実行できるツールを与える方が適切です。
AI の機能を制限する
- Android のきめ細かい権限: LLM によってトリガーされた関数が Android システム リソースや他のアプリとやり取りする場合、アプリがリクエストして保持している Android 権限が、必要最小限のものだけであることを確認します。
- ユーザーごとの権限: LLM がユーザーに代わってアクションを実行する場合、より広範な、管理アプリレベルのアカウントではなく、そのユーザー固有の権限とコンテキストを使用して実行する必要があります。これにより、LLM がユーザー自身が許可されていない操作を実行できないことを確認します。
人間が責任を負う(重要なアクションに対するユーザーの同意)
- ユーザーの承認を必須にする: LLM が提案または実行しようとする重要なアクションやリスクの高いアクション(データの削除、アプリ内購入、メッセージの送信、重要な設定の変更など)については、常に UI の確認ダイアログを使用して、人間による明示的な承認を必須にします。重要な決定にはマネージャーの承認が必要な場合を考えてみてください。
信頼するが検証する(入出力の検証と堅牢なバックエンド)
- バックエンド セキュリティ: アクションが許可されるかどうかを LLM に判断させるだけでなく、LLM によってトリガーされる関数が接続するバックエンド サービスまたは API には、すべてのリクエストを二重チェックし、正当で想定されるパラメータ内であることを確認するための、独自の堅牢な認証、認可、入力検証が必要です。
- データをクリーンアップする: 他の脆弱性と同様に、LLM に入力される入力と、関数呼び出しのために LLM によって生成されるパラメータの両方をサニタイズして検証し、アクションが実行される前に悪意のある命令や予期しない出力をキャッチすることが重要です。
概要
過剰なエージェンシーは、LLM が他のシステムや関数とやり取りするための権限を過度に広範囲に持っている重大な脆弱性です。この脆弱性により、LLM が有害なアクションを実行するように騙される可能性があります。これにより、Android アプリケーションで不正なデータアクセス、システム侵害、金銭的損失、ユーザーへの危害が発生する可能性があります。緩和策は最小権限の原則に大きく依存しています。LLM で利用できるツールと Android 権限を厳しく制限し、各ツールに最小限の特定の機能があることを確認し、影響の大きいすべてのオペレーションに人間の承認を必要とします。