為什麼現在重新看 Spectre?
Cloudflare 在 2021 年評估過 Workers 的遠端 Spectre 攻擊,並推出 Dynamic Process Isolation(DyPrIs)作為生產防禦。DyPrIs 會辨識可疑腳本,把它們隔離到獨立程序。但這幾年 Spectre 攻擊的穩定化技術持續演進,Cloudflare 決定在 2024 到 2025 年初重新做一次內部評估,確認這些新技術是否威脅 Workers 的生產環境。
根據 Cloudflare Blog 在 2026 年 8 月 19 日發布的文章,研究團隊發現 DyPrIs 的實作有一個限制,並在 Workers 生產環境中成功展示遠端 Spectre 攻擊,能以 99% 準確度、最高 12 bit/s 的速度洩漏記憶體。好消息是,這個攻擊在論文發表前已經被修補,而且過去三年沒有發現任何實際利用的跡象。
Workers 的隔離模型與 Spectre 的關係
Cloudflare Workers 在邊緣執行不受信任的 JavaScript,靠 V8 isolate 做到語言層級的隔離,讓數以萬計的租戶共用同一個作業系統程序。每個 Worker 有自己的 JavaScript heap,啟動延遲低,也比完整程序隔離更有效率。
但這種設計有個代價:只要 Worker 程序內出現一個任意讀取漏洞,就可能造成跨租戶資料外洩。Spectre 就是這類漏洞中最難處理的一種,因為它利用 CPU 的推測執行(speculative execution)本質。
Cloudflare 用登山來比喻推測執行:你走到岔路,先猜一條路走。猜對了省時間;猜錯了得回頭,但泥地上已經留下腳印。CPU 也一樣,分支預測錯誤時會丟棄結果,但快取狀態已經被改變。攻擊者可以利用這個殘留,把記憶體內容編碼成快取延遲的差異。
Workers 平台原本就限制了計時器、多執行緒和共享記憶體,讓傳統 Spectre 攻擊更難進行。但研究團隊找到了繞過這些限制的方法。
攻擊怎麼在生產環境中穩定運作?
要在 Workers 上成功發動攻擊,必須解決四個問題:確保攻擊者和受害者 isolate 被排程到同一台邊緣伺服器的同一個程序、找到可靠的遠端計時器、在生產雜訊下穩定放大訊號,以及可靠地驅逐快取。
研究團隊使用兩種 Spectre gadget。第一種洩漏壓縮後的 heap 指標,例如 isolate 的 heap 基底位址。第二種利用推測型別混淆(speculative type confusion),從攻擊者控制的 64 位元指標任意讀取記憶體。當時 Cloudflare Workers 還沒導入 V8 Sandbox,TypedArray 仍儲存原始的 64 位元 backing store 指標,正好成為攻擊目標。
訊號放大是關鍵。快取命中與未命中的差異只有幾奈秒,但遠端計時器雜訊可能到微秒甚至毫秒等級。研究團隊引用 Stephen Röttger 和 Artur Janc 發現的方法,利用 L1 快取的 tree-based PLRU 替換策略,把單一快取事件的時間差異放大到足以用遠端計時器分辨。
遠端計時器方面,一個 WebSocket 連到外部伺服器就夠了。論文評估了多種計時器設定,即使跨較大的拓撲距離,也能在中位數上達到次毫秒解析度。
重複測量時,傳統做法是建立 eviction set 來驅逐特定快取行,但這需要大量精確的計時測量,在遠端計時器下很昂貴。Dougall Johnson 提出更優雅的方法:分配遠大於快取容量的記憶體,每次隨機挑選新的位置,利用鴿籠原理讓目標幾乎一定已經被驅逐。研究團隊在 JavaScript 中分配超過 last-level cache 的物件池,每次測量選一對新的 attacker 和 victim 物件。
防禦改進與產品啟示
這項研究的直接成果是 Cloudflare 改進了 DyPrIs,並整合 V8 Sandbox 和一個 in-process 隔離機制,進一步降低記憶體洩漏風險。論文由 Albert Pedersen、Haocheng Xiao、Sam Ainsworth、Nigel Topham 和 Martin Schwarzl 共同撰寫。
對產品建構者來說,有幾個值得注意的點。第一,共享執行環境的效率優勢,往往伴隨著隔離邊界的複雜度。Workers 用 V8 isolate 換取低延遲和高密度,但 Spectre 這類微架構攻擊會持續挑戰這個假設。第二,防禦機制需要定期重新評估。DyPrIs 在 2021 年有效,但攻擊技術會進步,實作細節也可能有盲點。第三,生產環境中的攻擊展示比理論分析更有說服力。Cloudflare 選擇在真實 Workers 環境中建構 proof-of-concept,才能準確評估風險並驗證修補效果。
如果你正在設計多租戶的 AI 或 serverless 服務,這份研究提醒我們:安全模型不能只依賴單一層防禦。語言層級隔離、程序隔離、沙箱和持續的攻擊模擬,需要互相搭配。而且,當你為了效能而讓租戶共享資源時,必須清楚知道最壞情況下的資料外洩風險有多大。
Cloudflare 的結論是攻擊已經被緩解,且沒有發現實際利用。但這不表示可以鬆懈。Spectre 類攻擊的研究還在持續,下一次重新評估可能又會發現新的缺口。
參考來源
本文由 AI 協助自上述來源整理,經人工審核後發布。
