Cloudflare Workersの本番環境でSpectre攻撃、従来比360倍の情報漏洩を実証―多層防御で対策済み

2026年8月21日 12:28

印刷

記事提供元:Tech Times

(Cloudflare.com)

(Cloudflare.com)[写真拡大]

Cloudflareは2026年8月19日、Cloudflare Workersの本番環境で、同一プロセスに配置された別のWorkerからJSON Web Token(JWT)を読み出すリモートSpectre攻撃の研究結果を公表した。研究チームが管理する攻撃側と被害側のWorkerを用いた実験では、最大毎秒12ビット、99%を超える精度で情報を読み出した。従来の実証実験と比べて最大360倍の速度に相当する。

Cloudflareによると、研究で使われた攻撃経路はすでに本番環境で対策されている。同社は過去3年間の監視データを調査し、実際の攻撃に利用された兆候は確認していないとしている。実験で第三者の顧客データにアクセスした事実もない。

■本番環境でJWTの読み出しを実証

Cloudflare Workersは、利用者が用意したJavaScriptなどのコードをCloudflareのエッジ基盤で実行するサービスだ。起動時間やリソース消費を抑えるため、複数の利用者のコードを、同じOSプロセス内にある個別のV8 Isolateで分離して実行する場合がある。

研究チームは、攻撃側と被害側のWorkerをCloudflare Workersの本番環境に配置し、被害側のメモリにあらかじめ格納したJWTを別のIsolateから読み出した。攻撃側と被害側はいずれも研究チームが管理しており、実験のために用意された環境だった。

論文で報告された最大速度は毎秒12ビット、精度は99.16%だった。2021年に報告された攻撃の読み出し速度は毎分2ビット、すなわち毎時120ビットであり、今回の最大値はその360倍に当たる。実際の所要時間はトークンの長さや測定条件によって変わるものの、セッション認証に使われる情報を現実的な時間内に読み出せる性能が本番環境で確認されたことになる。

JWTは、Webアプリケーションなどで認証や権限に関する情報を受け渡すために使われる形式だ。署名付きJWTが漏洩し、なお有効な状態であれば、構成や検証方法によってはセッションの不正利用につながる可能性がある。

■投機的実行の痕跡から情報を推測

Spectreは、現代のCPUが高速化のために行う投機的実行と、キャッシュなどに残るマイクロアーキテクチャ上の状態変化を利用する攻撃の総称だ。

CPUは条件分岐の結果が確定する前に、可能性が高いと予測した処理を先行して実行することがある。予測が外れた場合、通常のプログラムから見える処理結果は破棄されるが、アクセスしたデータに応じたキャッシュ状態などの変化が残る場合がある。攻撃者は、その後のメモリアクセスにかかる時間を繰り返し測定し、投機的に参照された情報を推測する。

Cloudflare Workersは、こうした攻撃に必要な高精度タイマーの構築を難しくするため、CPU処理中の時刻取得を制限し、Workerから共有メモリやマルチスレッドを利用できない設計を採用してきた。また、2021年には、ハードウェア性能カウンターを使って疑わしいコードを検知し、別のOSプロセスへ隔離するDynamic Process Isolation(DyPrIs)を導入した。

今回の研究は、キャッシュ上の小さな時間差を増幅する手法と、ネットワーク越しのタイマーを組み合わせることで、こうした制約下でも情報を読み出せることを示した。

■型付き配列と投機的型混乱を利用

攻撃の起点には、V8 Sandboxの導入前に型付き配列のデータ領域を参照するために使われていた64ビットポインタと、投機的な型混乱を引き起こすコードが利用された。

研究チームは、攻撃対象となるポインタと、オブジェクトの型を判定するための情報を異なるCPUキャッシュラインに配置した。型情報をキャッシュから追い出す一方でポインタをキャッシュに残すことにより、型の確認が終わる前にCPUが誤った予測に基づく処理を進める時間を作り出した。

この投機的実行中にメモリを参照させ、読み取ったビットに応じてプローブ用配列のキャッシュ状態を変化させる。その後、キャッシュヒットとキャッシュミスの時間差を測ることで、対象データを1ビットずつ推測した。

これは通常のプログラム実行による任意メモリ読み取りではなく、CPU内部に一時的に残る状態変化を観測して情報を復元するサイドチャネルである。攻撃の成立には、攻撃側と被害側が同じ物理サーバーの同一Workerプロセス内に配置されることも必要だった。

■PLRUによる増幅とリモートタイマー

キャッシュヒットとキャッシュミスが生む時間差は極めて小さく、通信遅延が変動するネットワーク越しの測定では通常、ノイズに埋もれてしまう。

研究チームは、CPUキャッシュの置換動作に使われるPseudo Least Recently Used(PLRU)の性質を利用する増幅手法を採用した。特定の順番でメモリへアクセスすることで、測定対象のキャッシュラインが最初に存在していたかどうかに応じ、後続処理でキャッシュヒットまたはキャッシュミスが繰り返される状態を作った。

これにより、1回では数ナノ秒規模にとどまる違いを、ネットワーク越しでも統計的に分類できる時間差へ拡大した。外部サーバーとはWebSocketで通信し、外部から返されるタイムスタンプをリモートタイマーとして使った。論文では、少数の測定でも中央値ベースでミリ秒未満の時間分解能を得られたとしている。

■Durable Objectsを使って長時間の実行を維持

従来のDyPrIsには、Workerの1回の呼び出しが終了した後に実行時の挙動を評価し、疑わしいWorkerを別プロセスに隔離する仕組みが含まれていた。

研究チームは、WebSocket接続などの状態を維持できるCloudflare Durable Objectsを使用し、処理を長時間継続させた。実験では、定期的なWebSocket通信によって単一のIsolateを5時間から20時間以上維持できた。呼び出しが終了しない間は、終了後に行われるDyPrIsの隔離処理が始まらないため、その前に情報の読み出しを進められた。

WebSocketを多用する処理は、DyPrIsが判定に使っていた別の指標にも影響した。DyPrIsは、正規のI/O負荷が高いWorkerを誤検知しないよう、分岐予測ミスの回数を命令TLB(iTLB)の活動量で正規化していた。大量のWebSocket通信によってiTLBの活動量が増えると、正規化後の分岐予測ミス率が低下し、検知しきい値を下回る場合があった。

長時間の呼び出しとI/O活動という、それぞれは正当な利用方法として存在する挙動が組み合わさり、従来の検知方式を回避できる条件が生じていた。

■同一プロセスへの配置も攻撃条件

攻撃を成立させるには、攻撃側と被害側のWorkerが同じ物理サーバー上の同一OSプロセスに、別々のV8 Isolateとして配置される必要がある。

研究チームは、攻撃側のWorkerから被害側のWorkerへサブリクエストを送る方法などを用いて、同一プロセスに配置される条件を調べた。また、サーバー負荷が比較的低い時間帯や拠点では、共有ハードウェア上のノイズが減り、測定精度が高まることも確認した。

この攻撃は、V8のサンドボックスを通常の実行として突破したり、Cloudflareの基盤に管理者権限で侵入したりするものではない。攻撃者が自身のWorker内で有効なコードを実行し、同一プロセスに配置された別のIsolateとの間に生じるCPU内部の状態変化を観測する構成だった。

■Cloudflareが導入した多層防御

Cloudflareは研究結果を受け、V8 Sandbox、Memory Protection Keys(MPK)を利用したプロセス内分離、DyPrIsの改善を組み合わせて対策した。Cloudflareによると、論文で示された攻撃は現在の本番環境では緩和されている。

V8 Sandboxは、JavaScriptヒープ内から直接参照できる64ビットポインタを減らし、サンドボックス内の基準位置からのオフセットなどに置き換える。これにより、今回の投機的型混乱で使われたポインタを起点に、任意のアドレスを読み取る攻撃プリミティブを構築する経路が制限された。

MPKは、同じプロセス内にあるメモリ領域ごとにハードウェア保護キーを割り当て、スレッドがアクセスできる領域を制御するCPU機能だ。Cloudflareは各Workerのヒープを異なる保護キーで分離する仕組みを導入し、別のIsolateに属するメモリへ境界を越えてアクセスしようとした場合に、ハードウェア側で遮断できるようにした。

DyPrIsも、長時間継続する呼び出しやI/O負荷の高いWorkerを実行中に監視できるよう改善された。これにより、Workerの終了を待ってから評価する従来方式の弱点を補う。Cloudflareは、計算処理とWebSocket通信を反復するリモートタイマー特有の挙動を、新たな検知材料として利用する方法も検討している。

これらは、攻撃に使われたメモリ参照経路、Isolate間の境界、実行時の振る舞いという異なる層を対象にした防御である。一つの検知方式だけに依存せず、複数の仕組みを重ねる構成となっている。

■研究が示したエッジ基盤の課題

今回の研究は、共有プロセス内で複数のテナントを軽量に分離する設計について、ソフトウェア上の境界だけでなく、CPUの投機的実行やキャッシュを通じた情報漏洩も考慮する必要があることを示している。

2021年の実証では毎分2ビットだった読み出し速度が、CPUに新たな脆弱性を見つけることなく、増幅方法や時間測定、実行維持などの改善によって最大毎秒12ビットへ高まった。過去に観測された攻撃パターンだけを基準にする振る舞い検知は、新しい増幅手法や正規機能の組み合わせによって回避される可能性がある。

一方、論文が実証したのはCloudflare Workersの特定の構成と、研究当時の実装を対象とした攻撃である。同じV8を使うサービスであっても、プロセスの分離方法、V8 Sandboxの適用状況、ハードウェアによるメモリ保護、タイマーや共有メモリの制限は異なる。ほかのサービスへの影響は、各事業者の実装と対策状況に基づいて個別に評価する必要がある。

■注目ポイントQ&A

●今回の研究で顧客データは流出しましたか?

第三者の顧客データは読み出されていません。実験には研究チームが管理する攻撃側と被害側のWorkerが使われ、被害側のメモリには実験用のJWTが配置されました。Cloudflareは、過去3年間の監視データから実際の悪用を示す兆候は確認していないと説明しています。

●読み出し速度が従来比360倍とはどういう意味ですか?

2021年の実証では毎分2ビット、すなわち毎時120ビットでした。今回報告された最大値は毎秒12ビットであり、両者を同じ単位に換算すると360倍になります。これは論文で報告された最大値の比較であり、実際の速度はサーバー負荷やネットワークノイズなどの条件で変化します。

●Spectreはソフトウェア更新だけでは対処できないのですか?

SpectreはCPUの投機的実行と、キャッシュなどに残る状態変化を利用する攻撃の総称です。このため、単一のソフトウェア修正だけであらゆる手法をなくすのではなく、利用できるタイマーの制限、メモリの分離、危険なポインタの排除、実行時の振る舞い検知などを組み合わせてリスクを下げます。

●Cloudflareが導入した主な対策は何ですか?

攻撃に使われた64ビットポインタへのアクセスを制限するV8 Sandbox、各Workerのヒープをハードウェア保護キーで分けるMPKベースのプロセス内分離、長時間実行されるWorkerも継続的に監視するよう改善したDyPrIsです。Cloudflareによると、研究で示された攻撃はこれらの対策によって本番環境で緩和されています。

●ほかのサーバーレスサービスにも同じ攻撃が通用しますか?

この研究だけから、ほかのサービスに同じ攻撃が成立するとは判断できません。共有プロセス内で複数のテナントを実行する環境では共通する検討課題がありますが、実際の影響は、ランタイム、プロセス分離、V8 Sandbox、ハードウェア保護、タイマー制限などの実装によって異なります。

元記事: Cloudflare Workers Spectre Exploit Stole Auth Tokens 360× Faster Than Prior Attack

※この記事はTech Timesから提供を受けた記事を日本向けに翻訳・編集したものです。

関連キーワード

関連記事