CRIME、BREACH、TIME、Lucky -13などの発見以降、長さをベースとするサイドチャネル攻撃は実用性があると考えられてきました。パケットは暗号化されていましたが、パケット長やタイミング情報などのメタデータを分析することによって、その基礎となるプレーンテキストに関する情報を推測し、攻撃することが可能でした。
先般、Cloudflareは、「What Was Your Prompt? A Remote Keylogging Attack on AI Assistants」の著者であるベングリオン大学の研究者グループから連絡を受けました。その論文では、「Web上でAIアシスタントからの暗号化された応答を読み取るために使用できる新しいサイドチャネル」について説明されています。
Workers AI/AI Gatewayチームは、パブリックバグバウンティプログラムを通じてこれらのセキュリティ研究者グループと緊密に協力し、LLMプロバイダーに影響を及ぼす脆弱性を発見し、完全にパッチを適用しました。詳細な調査報告はこちらからご覧いただけます。
この脆弱性について通知を受けて以降、CloudflareはWorkers AI/AI Gatewayのすべてのお客様を保護するために、対策を実装しました。当社が評価した限り、Workers AI/AI Gatewayのお客様への顕著なリスクはありませんでした。
サイドチャネル攻撃のメカニズム
そのホワイトペーパーでは、筆者らは、LLMプロバイダーとのチャットセッションのストリームの傍受、ネットワークパケットヘッダーを使用した各トークン長の推測、そのシーケンスを抽出したセグメント化、さらに、独自の専用LLMを使って応答を推測する方法について述べています。
攻撃を成功させるための2つの主な要件は、ストリーミングモードで実行するAIチャットクライアントと、攻撃者がクライアントとAIチャットサービス間のネットワークトラフィックをキャプチャできる状態であることです。ストリーミングモードでは、LLMトークンが順次送信され、トークン長のサイドチャネルが発生します。攻撃者は、パブリックネットワークやインターネットサービスプロバイダー(ISP)を介してパケットを傍受する可能性があります。
サイドチャネル攻撃に対して脆弱なリクエストの例は次のようなものです。
Wiresharkを使って、ストリーミング中のLLMチャットセッションでネットワークパケットを検査してみましょう。
curl -X POST \
https://api.cloudflare.com/client/v4/accounts/<account-id>/ai/run/@cf/meta/llama-2-7b-chat-int8 \
-H "Authorization: Bearer <Token>" \
-d '{"stream":true,"prompt":"tell me something about portugal"}'
最初のパケットの長さは95で、長さ4のトークン「ポート」に対応しています。 2番目のパケットの長さは93で、長さが2のトークン「ug」に対応するというようになります。 ネットワークのパケット長からトークンのエンベロープを取り除くと、暗号化されたネットワークデータをスニッフィングするだけで、送信された送信数、そのシーケンスと個々の長さを簡単に推測することができます。
攻撃者には個々のトークン長のシーケンスが必要なので、この脆弱性はストリーミングを使用したテキスト生成モデルにのみ影響します。 つまり、Workers AIのように、LLMとのやり取りに最も一般的な方法であるストリーミングを使用するAI推論プロバイダーが脆弱である可能性があるということです。
この方法では、攻撃者が同じネットワーク上にいるか、通信トラフィックを傍受できる位置にある必要があり、その精度はターゲットLLMの記述スタイルを知ることに依存します。 研究者グループによれば、理想的な状態下では、攻撃者のシステムは「AIアシスタントの応答の29%を再構築し、その55%からトピックを推測できる」といいます。また、他のサイドチャネル攻撃とは異なり、この場合、攻撃者には自分の予測を事実に照らして評価する方法がないことにも留意する必要があります。 つまり、完璧に近い精度のセンテンスが得られる可能性もあれば、接続詞しか一致しないセンテンスが得られる可能性もあるということです。
LLMサイドチャネル攻撃の軽減
このタイプの攻撃は、パケットから推測できるトークン長に依存しているため、トークンのサイズを隠蔽することによって簡単に軽減することができます。 研究者グループは、これらのサイドチャネル攻撃を軽減するために、いくつかの戦略を提案しました。その1つは最もシンプルで、トークン応答をランダムな長さのノイズでかさ上げし、パケットから応答が推測できないようにトークン長を隠蔽することです。 私たちはすぐに、自社の推論サービスであるWorkers AIに対策のための機能を追加しましたが、それをAI Gatewayに追加して、お客様がどこでLLMを実行していても、LLMを保護できるようにしたいと考えました。
現在、Workers AI/AI Gatewayのすべてのユーザーは、このサイドチャネル攻撃から自動的に保護されています。
Cloudflareが行ったこと
この調査結果と、この技術を悪用するとCloudflareのAIサービスに影響を与えることができるという話を聞き、私たちはこのような状況下で通常行うことを実行しました。すなわち、システムエンジニア、セキュリティエンジニア、プロダクトマネージャーのチームを集め、リスクについて、そして戦略と次のステップについて議論を行ったのです。 研究者グループとも連絡を取り合いました。彼らは積極的に参加し、彼らの結論を提示し、Cloudflareチームの質問に答えてくれました。
研究者チームは、攻撃の結果の検証に使用できるテストノートブックを提供してくれました。 私たちはノートブックのサンプルの結果を再現することができましたが、さまざまなプロンプト応答と異なるLLMを使用したテストでは、精度に大きなばらつきがあることがわかりました。それでも、論文には有効性があり、リスクは無視できません。
私たちは、論文で提示された最初の対策を実装することにしました。すなわち、各メッセージにランダムなかさ上げを加えることで、ストリーム中のトークンの実際の長さを隠蔽し、ネットワークパケットサイズのみに基づいて情報を推測しようとする試みを難しくするものです。
Cloudflareの推論サービス、Workers AIの保護
Cloudflareの「inference-as-a-service(サービスとしての推論)」サービスを使用すれば、誰でもWorkers AIプラットフォームを使用し、サポートされているAIモデルにAPI呼び出しを行うことができます。これは、モデル間で行われる推論リクエストを監視することを意味します。そのため、Cloudflareはサービスの安全性を確保し、潜在的な脆弱性から保護する責任を負っています。Cloudflareは、調査結果の通知を受けた後、すぐに修正プログラムをロールアウトしました。現在、 Workers AIのすべてのお客様は、このサイドチャネル攻撃から自動的に保護されています。研究者による倫理的テスト以外に、この脆弱性を悪用した悪意のある攻撃は確認されていません。
CloudflareのWorkers AIに対するソリューションは、論文で示唆された軽減策を修正したものです。 未加工のトークンではなく、JSONオブジェクトをストリーミングし、トークンを空白文字でかさ上げする代わりに、ランダムな長さの文字列値を持つ新しいプロパティ「p」(かさ上げ用)を追加しました。
SSEシンタックスを使用したストリーミングレスポンスのサンプル
これには、SDKやクライアントコードの変更が不要で、エンドユーザーには変更が見えず、お客様からの操作が不要という利点があります。 JSONオブジェクトにランダムな変数の長さを追加することで、同じネットワークレベルの変動性が導入され、攻撃者は本質的に、(攻撃に)必要な入力シグナルを失うことになります。お客様は、この機能で保護されながら、今までどおりWorkers AIを使い続けることができます。
data: {"response":"portugal","p":"abcdefghijklmnopqrstuvwxyz0123456789a"}
data: {"response":" is","p":"abcdefghij"}
data: {"response":" a","p":"abcdefghijklmnopqrstuvwxyz012"}
data: {"response":" southern","p":"ab"}
data: {"response":" European","p":"abcdefgh"}
data: {"response":" country","p":"abcdefghijklmno"}
data: {"response":" located","p":"abcdefghijklmnopqrstuvwxyz012345678"}
さらなるステップ:AI Gatewayはあらゆる推論プロバイダーのユーザーを保護
CloudflareはAI推論サービスに保護を追加しましたが、あらゆるプロバイダーへのリクエストをプロキシするサービス、AI Gatewayも存在します。AI Gatewayは、ユーザーとサポートされた推論プロバイダーとの間のプロキシとして機能し、開発者はAIアプリの制御、パフォーマンス、可観測性を得ることができます。より良いインターネットの構築を支援するというCloudflareの使命に沿って、利用しているプロバイダーやそのプロバイダーにこの攻撃を防止するための対策があるかどうかにかかわらず、テキスト生成AIを使用するすべてのお客様を支援できる修正を迅速にロールアウトしたいと考えました。そのために、AI Gatewayを経由してプロキシされたすべてのストリーミング応答を可変長のランダムノイズでかさ上げする同様のソリューションを実装しました。
現在、CloudflareのAI Gatewayのお客様は、アップストリームの推論プロバイダーがまだ脆弱性への対策を行っていない場合でも、このサイドチャネル攻撃から自動的に保護されます。 推論プロバイダーがこの脆弱性に対策をしているかどうかが不明な場合は、AI Gatewayを使用してリクエストをプロキシし、保護を確実にしてください。
まとめ
Cloudflareの使命は、より良いインターネットの構築を支援することです。これは、私たちが、皆様の技術スタックがどのようなものであっても、インターネット上のすべての人々を大切にしているという意味です。私たちは、透明性を保ちながら、お客様からの操作を必要としない方法でAIサービスのセキュリティを向上させる取り組みを続けています。
この脆弱性を発見し、Cloudflareが問題の領域を把握するために非常な協力してくれた研究者の皆さんに感謝します。Cloudflare製品の安全性向上に関心をお持ちのセキュリティ研究者の皆様には、Cloudflareのバグバウンティプログラム hackerone.com/cloudflareをご検討いただければ幸いです。