开发者生态
morning
回顾对 Cloudflare Workers 的远程 Spectre 攻击
2026-08-20
1 阅读
约6分钟阅读
albertpedersen
字号:
2021 年,我们评估了针对 Cloudflare Workers 的远程 Spectre 攻击。根据结果,我们提供了一种称为动态进程隔离 (DyPrIs) 的生产防御,它可以识别恶意脚本并将它们隔离到单独的进程中。从那时起,稳定 Spectre 攻击领域的更新技术被发现。为了了解这些技术是否对我们的 Workers 生产环境构成威胁,我们决定在内部重新评估远程 Spectre 攻击。在生产环境上构建更新的概念验证使我们能够凭经验评估生产工作负载下 Spectre 攻击的风险。为了在生产环境中成功发起侧信道攻击,外部攻击者必须克服额外的障碍,例如共享硬件资源上的活动、中断、上下文切换和粗粒度定时器。我们的研究发现了 DyPrIs 实施的局限性,并且我们成功地证明了远程 Spectre 攻击在 Cloudflare Workers 的生产环境中可靠地泄漏了高达 12 位/秒的数据,准确率高达 99%。作为这项研究的结果,我们改进了 DyPrIs,集成了 V8 沙箱和进程内隔离机制,以进一步降低内存泄露攻击的风险。今天,我们发表了一篇论文,描述了我们的发现,该论文由 Albert Pedersen、Hao Cheng Shaw、Sam Ainsworth、Nigel Topham 和 Martin Schwarzl 共同撰写。本文涵盖了 2024 年和 2025 年初完成的研究。请注意,由于 Cloudflare Workers Runtime 团队采取了对策,所提出的攻击已经在生产系统中得到缓解。在过去三年中,我们没有发现任何积极利用的迹象。 Cloudflare Workers 安全模型 Cloudflare Workers 在边缘运行不受信任的 JavaScript。利用 V8 隔离形式的语言级隔离,数以万计的租户可以共享相同的操作系统进程。每个 Worker 都有自己独立的 JavaScript 堆。与完全进程隔离相比,这种设计可以保持较低的启动延迟,并让我们能够非常高效地运行许多租户。在运行时,我们有多层防御,例如自动 V8 补丁管道、由 Linux 命名空间和 seccomp 过滤器组成的两层沙箱、Cap’n Proto RPC,以及在单独的进程沙箱中调度某些脚本的可能性。尽管如此,工作进程中的单个任意读取漏洞仍可能导致跨租户泄漏。一个很难缓解的漏洞利用了推测执行的本质,即进程内 Spectre。幽灵 你可以把投机执行想象成徒步旅行。在某个时刻,您到达一家分行,必须预测要去哪里。如果预测正确,您就可以节省一些时间,并可以在山间小屋享受阳光和清凉饮料。但是,如果推测方向错误,就必须回头。这条小路看起来没有被破坏,但你的脚步仍然留在泥里。 CPU 中的推测执行的工作原理类似。分支预测提前对分支结果进行有根据的猜测,并且 CPU 推测性地执行它。如果预测正确,推测执行可以节省一些时间。然而,如果预测不正确,CPU 必须丢弃结果,回滚并执行另一个分支。由于这些推测执行的指令仅暂时存在于 CPU 管道中,并且永远不会永久退出或提交,因此文献将它们称为瞬态指令,并将该概念概括为瞬态执行。然而,由于瞬时执行,微架构状态中仍然留下一些痕迹,例如CPU缓存中。因此,攻击者可以使用 Spectre 瞬时越界访问内存,将单个信息位编码到缓存状态中,并利用重新访问数据的延迟来推断该位是否已设置。为了减轻进程内 Spectre 攻击,Cloudflare Workers 冻结本地计时器,禁止多线程和共享内存,并主动检测、定期洗牌内存并将恶意脚本隔离到单独的进程中。攻击原语 远程 Spectre 攻击的高级概述。攻击者需要一个远程计时器来测量探测瞬时泄漏位是“0”还是“1”所需的时间。 Cloudflare Workers 平台故意限制计时器。在仅 CPU 执行期间,时间被有效冻结。 Date.now() 和 Performance.now() 不提供持续前进的高分辨率时钟。没有共享内存,也没有多线程,因此通过 SharedArrayBuffer 的经典计数器线程计时器不可用。为了成功发动攻击,必须解决几个挑战。首先,Workers 的运行时间是有限的,并且必须保证攻击者和受害者之间的共处一地。其次,必须找到一个可靠的、理想的共处一地的远程计时器,它允许
这篇文章对您有帮助吗?
订阅66必读
每日精选科技资讯,直达你的邮箱