𝗟𝗟𝗠 𝗩𝘂𝗹𝗻𝗲𝗿𝗮𝗯𝗶𝗹𝗶𝘁𝗶𝗲𝘀 𝟭𝟬𝟭
LLMのセキュリティ上の欠陥の多くは、巧妙なものではありません。それらは、モデルの仕組みに関する2つの退屈な事実に起因しています。これらを理解すれば、恐ろしい攻撃リストの正体が明らかになります。
事実1:モデルは、あなたの指示とユーザーのテキストを区別しません。モデルはそれらを一つのデータストリームとして捉えます。どの部分を信頼すべきかを確実に判断することはできません。
事実2:ツールが状況を一変させます。モデルにメール、検索、またはデータベースへのアクセス権を与えると、信頼できないテキストが入り込む新たな経路が増えます。また、単に「話す」ことができるモデルが、「行動する」ことができるモデルへと変わるのです。
モデルとの議論に勝とうとするのはやめましょう。モデルに許可される「行動」を変え始めるのです。
主な脆弱性:
- ダイレクト・インジェクション: ユーザーが「これまでの指示を無視して」と入力し、ルールを上書きします。システムプロンプトはセキュリティ境界ではありません。
- ジェイルブレイク: アプリそのものではなく、安全性のトレーニングを標的にします。攻撃者はロールプレイやフィクションを用いてフィルターを回避します。
- システムプロンプトの漏洩: 攻撃者がモデルを騙して、自身の指示を出力させます。プロンプトにAPIキーや機密情報を決して入れないでください。
- 間接インジェクション: 真の脅威です。悪意のある指示がメール、PDF、またはウェブページの中に隠されています。モデルはそれらをコマンドとして読み取ります。
- RAGポイズニング: 攻撃者がナレッジベースに不正なデータを追加します。モデルはそのコンテンツを検索し、隠されたコマンドに従ってしまいます。
- マルチモーダル攻撃: 指示が画像や音声ファイルの中に隠されています。テキストフィルターではこれらを見抜くことができません。
- ツールの悪用: インジェクションが成功すると、メールの送信やコードの実行といった実動作につながります。これは「混乱した代理人(confused deputy)」問題です。
- 致命的な三要素: 最も危険な状態です。エージェントがプライベートデータにアクセスでき、信頼できないコンテンツを目にし、かつ外部の世界と通信する手段を持っている状態です。
- メモリ・ポイズニング: 攻撃者がモデルの長期記憶に悪意のある指示を書き込み、将来のセッションで攻撃を誘発させます。
- マルチエージェントへの拡散: あるエージェントの出力が、別のエージェントへの指示となります。攻撃はシステム全体を飛び火する可能性があります。
- MCPポイズニング: 悪意のあるツールの説明によって、モデルが認証情報を渡してしまうよう騙されます。
解決策は、より優れたモデルを作ることではありません。より優れたアーキテクチャを構築することです。
- 最小権限の原則(least privilege)を使用する。
- 重要なアクションには、人間が介在する仕組み(human-in-the-loop)を導入する。
- プライベートデータ、信頼できない入力、そして外部への出口が、一つの経路に同時に存在しないようにする。
エージェントは、すでに侵害されているものとして設計してください。単に「何を言えるか」ではなく、「何ができるか」を制限するのです。
Source: https://dev.to/weboko/llm-vulnerabilities-101-3pcj
Optional learning community: https://t.me/GyaanSetuAi