Cloudflare Workers上远程Spectre攻击的再探讨
内容提要
2026年,Cloudflare研究人员重新评估了远程Spectre攻击对Workers平台的影响。他们利用PLRU缓存放大和WebSocket远程计时器,在真实生产环境中成功实现了高达12比特/秒、准确率99%的数据泄露,并发现DyPrIs检测机制的局限。为此,Cloudflare部署了V8沙箱、内存保护密钥(MPK)硬件隔离,并改进了DyPrIs检测,以降低此类攻击风险。
延伸解读
攻击为何能绕过DyPrIs检测
DyPrIs原本通过硬件性能计数器识别疑似Spectre攻击的脚本,并在其执行结束后隔离。但攻击者利用Durable Objects的WebSocket长连接,使单个调用持续数小时甚至一天,远超检测周期。同时,远程计时器的大量I/O操作抬高了iTLB访问次数,使分支预测错误率被归一化后低于阈值,从而让攻击看起来像普通的I/O密集型Worker,成功规避了检测。
MPK隔离的局限与意义
Cloudflare部署的内存保护密钥(MPK)为每个isolate堆提供硬件强制访问边界,阻止了跨isolate的直接堆读取,从而封堵了本文展示的攻击路径。但MPK并非万能:硬件域数量有限,且需谨慎管理密钥状态。它只是缩小了Spectre的泄露面,其他变体或gadget仍可能被利用,因此不能视为完全缓解措施。
远程计时器与PLRU放大技术
攻击者利用WebSocket连接外部服务器获取高分辨率时间戳,作为远程计时器,即使网络抖动也能通过中位数统计达到亚毫秒级精度。结合PLRU缓存替换策略,单次缓存命中或未命中可被放大为大量L1命中或未命中,从而在噪声环境中清晰区分0和1。这种放大技术是攻击在真实生产环境中达到12比特/秒、99%准确率的关键。
Q&A
Cloudflare Workers上的远程Spectre攻击是什么?
远程Spectre攻击是一种利用CPU推测执行漏洞的攻击方式,攻击者通过诱导CPU在错误预测分支时执行瞬态指令,从而在缓存中留下痕迹,再通过测量缓存访问时间差异来窃取内存中的敏感数据。在Cloudflare Workers环境中,攻击者可以利用WebSocket远程计时器来测量时间,实现跨租户的数据泄露。
Cloudflare Workers如何防御Spectre攻击?
Cloudflare Workers采取了多层防御措施:包括冻结本地计时器、禁止多线程和共享内存、使用V8沙箱、内存保护密钥(MPK)硬件隔离,以及改进的动态进程隔离(DyPrIs)检测机制。这些措施旨在减少推测执行带来的信息泄露风险。
DyPrIs检测机制有什么局限性?
DyPrIs的局限性在于它只在脚本执行完成后才进行隔离,而攻击者可以通过Durable Objects和WebSocket保持长连接,使脚本持续运行数小时,从而在隔离生效前完成数据泄露。此外,DyPrIs通过iTLB访问次数来归一化分支预测错误,而攻击者的远程计时器会产生大量I/O操作,导致iTLB活动增加,使归一化比率低于检测阈值,从而逃避检测。
攻击者如何实现远程计时?
攻击者使用WebSocket连接到外部服务器,该服务器提供高分辨率时间戳。通过发送请求并计算响应时间差,攻击者可以获得亚毫秒级的时间测量,用于区分缓存命中与未命中。
攻击者如何确保与受害者在同一进程?
攻击者通过fetch请求调用受害者脚本,由于Cloudflare Workers的设计,这通常会导致受害者在同一进程中被调度。攻击者还可以通过Durable Objects保持长连接,并利用WebSocket消息重置CPU时间限制,从而维持攻击环境。
攻击的泄露速率和准确率是多少?
在Cloudflare Workers生产环境中,攻击者实现了高达12比特/秒的泄露速率,准确率超过99%。
Cloudflare采取了哪些改进措施来应对此类攻击?
Cloudflare部署了V8沙箱,移除JavaScript堆中的原始64位指针,使特定类型的推测类型混淆漏洞更难利用;部署了基于内存保护密钥(MPK)的硬件辅助进程内隔离,为每个隔离堆提供硬件强制访问边界;并改进了DyPrIs,使其能够处理长时间运行的脚本和I/O密集型工作负载,同时考虑将远程计时行为作为检测信号。
攻击者如何绕过CPU时间限制?
攻击者利用Durable Objects,通过WebSocket消息重置CPU时间限制。每次WebSocket消息都被视为新的调用,重置30秒的CPU时间限制,从而允许攻击者长时间运行攻击。