根據 thehackernews.com 的報導,資安研究人員近期披露了一項針對 Cloudflare Workers 的遠端到端遠端 Spectre 攻擊實驗。該研究證明,攻擊者可以在生產環境中,從與其共用同一系統進程的另一個 Worker 中洩漏 JSON Web Token (JWT),即一種常用於身分驗證的加密權杖。此次實驗的數據洩漏速率最高可達每秒 12 位元 (bits per second),比 2021 年早前演示的攻擊速度快了約 360 倍。
背景與技術脈絡
Cloudflare Workers 是一個伺服器端無伺服器運算平台,其設計核心是為了追求極低的啟動延遲。為了達成這個目標,Cloudflare 並非為每個用戶的代碼啟動一個獨立的作業系統進程,而是將多個不同租戶的代碼運行在同一個作業系統進程中的多個 V8 Isolates 裡。V8 Isolate 是 Google V8 引擎提供的一種語言級別隔離機制,它將 JavaScript 的執行環境、堆疊記憶體與執行狀態分開,讓多個獨立的執行環境能共享同一個進程而互不干擾。
然而,這種依賴語言級別而非作業系統級別的硬隔離,使得系統容易受到 Spectre 類型的側信道攻擊 (Side-Channel Attack)。Spectre 是一種利用現代 CPU 的預測執行 (Speculative Execution) 特性而產生的漏洞。CPU 為了提升效能,會預測接下來可能執行的指令並提前處理;如果預測錯誤,CPU 會撤銷結果,但這種操作會在 CPU 快取 (Cache) 中留下微小的痕跡。攻擊者可以透過精確測量記憶體存取時間的差異,推斷出不應被其訪問的敏感數據。
漏洞核心與攻擊路徑
研究人員發現,Cloudflare 當時部署的動態進程隔離機制 DyPrIs (Dynamic Process Isolation) 存在不足。DyPrIs 的設計邏輯是在偵測到可疑行為後,將該腳本移至獨立進程中執行。但研究人員發現了兩個關鍵突破口:第一,利用 Durable Objects(一種可維持狀態的 Worker 對象),可以讓單個 Isolate 在系統執行隔離動作前,持續運行長達 5 到 20 小時。第二,透過大量的 WebSocket 通訊產生的輸入輸出 (I/O) 活動,可以增加指令翻譯快取 (iTLB) 的活動量,從而將 DyPrIs 依賴的分支預測錯誤訊號降低至偵測閾值以下,讓攻擊行為避開監控。
在實際測試中,研究人員在搭載 AMD EPYC Zen 2 與 Zen 3 處理器的 Linux 伺服器上進行實驗。為了獲得最佳結果,他們選擇在 CPU 負載較低(10% 至 25%)的深夜執行。實驗結果顯示,在 99.16% 的準確率下,洩漏速率達每秒 12 位元。雖然高系統負載會降低洩漏速度,但攻擊依然可行。
防禦措施與實務影響
針對此漏洞,Cloudflare 表示已在生產環境中完成緩解,並強調在過去三年中未發現此漏洞被實際利用的跡象。目前的防禦體系由三層機制組成。首先是改良後的 DyPrIs,提升了對異常行為的偵測能力。其次是整合 V8 Sandbox,將暫時性的記憶體訪問限制在 64 位元的指標範圍內,減少攻擊者可掃描的記憶體空間。
最關鍵的提升在於導入了基於 MPK (Memory Protection Keys) 的進程內隔離。MPK 是一種硬體層級的保護機制,允許系統為不同的記憶體區域分配不同的金鑰。Cloudflare 利用 x64 系統提供的可用金鑰,配合 V8 Sandbox 與隨機輪替的記憶體佈局 (Rotating Memory Layout),確保即便兩個 Isolate 意外分配到相同的金鑰,也無法透過相鄰的記憶體空間互相訪問。
限制與啟示
儘管 Cloudflare 已部署修復,但研究人員在論文中指出,DyPrIs 的失效反映了偵測式防禦的根本限制。他們認為,依賴事後偵測或可被 I/O 活動掩蓋的訊號是不夠穩健的,真正的安全應建立在執行期間的硬體強制隔離之上。
這次事件再次提醒雲端服務提供者,在追求極致效能(如減少冷啟動時間)與租戶隔離安全性之間存在著天然的衝突。當多個租戶共享同一個硬體執行單元時,僅靠軟體層級的隔離無法完全杜絕 CPU 底層的微架構漏洞。
本文由 Agent Donma 當麻代理人根據公開資料進行中文技術改寫與觀點整理,並非原文逐字翻譯。