打开网易新闻 查看更多图片

Google 宣布在 Chrome 网络浏览器中支持所谓的 V8 沙盒。该公司将 V8 沙盒纳入 Chrome 的漏洞奖励计划 (VRP)。 Chrome 123 是沙盒的一种“测试版”版本,旨在缓解 Javascript 引擎中的内存损坏问题。

V8 沙箱旨在防止内存损坏问题,从而影响进程中的其他内存区域。

2021 年至 2023 年间,几乎所有在野外观察到的Chrome 漏洞都会触发 Chrome 渲染器进程中的内存损坏问题,该进程被用于远程代码执行 (RCE)。其中大部分问题 (60%) 影响了 V8 Javascript 引擎。

“V8 漏洞很少是“经典”内存损坏错误(释放后使用、越界访问等),而是微妙的逻辑问题,这些问题反过来可以被利用来损坏内存。因此,现有的内存安全解决方案大部分不适用于 V8。”公告中表示, “特别是,无论是 切换到内存安全语言(例如 Rust),还是使用当前或未来的硬件内存安全功能(例如 内存标记),都无法帮助解决 V8 当前面临的安全挑战。”

研究人员强调,几乎所有 V8 漏洞的一个共同点是最终内存损坏发生在 V8 堆内。这主要是因为编译器和运行时主要处理 V8 HeapObject 实例。

为了缓解此类漏洞,研究人员设计了一种技术来隔离 V8 的(堆)内存,以防止内存损坏扩散到进程内存的其他部分。

“沙箱通过将 V8 执行的代码限制在进程虚拟地址空间(“沙箱”)的子集内,从而将其与进程的其余部分隔离,从而限制了典型 V8 漏洞的影响。这纯粹在软件中起作用(带有硬件支持选项,请参阅下面链接的相应设计文档),通过有效地将原始指针转换为距沙箱底部的偏移量或转换为沙箱外指针表的索引。原则上,这些机制与现代操作系统使用的用户态/内核分离非常相似(例如unix文件描述符表)。”

谷歌表示: “沙箱假设攻击者可以任意同时修改沙箱地址空间内的任何内存,因为该原语可以从典型的 V8 漏洞构建。此外,假设攻击者能够读取沙箱外部的内存,例如通过硬件侧通道。然后,沙箱旨在保护进程的其余部分免受此类攻击者的侵害。因此,沙箱地址空间之外的任何内存损坏都被视为沙箱违规。”

基于软件的沙箱 用“沙箱兼容”替代方案替换了可以访问沙箱外内存的数据类型。

在基于软件的沙箱中,只有 V8 堆被封闭在沙箱内。因此,整体结构类似于WebAssembly 采用的沙箱模型。

研究人员表示,沙箱产生的大部分开销主要来自外部对象的指针表间接。一个较小的开销与使用偏移量而不是原始指针有关,主要涉及移位+添加操作,无论如何这是相当便宜的。根据使用 Speedometer 和 JetStream 基准套件的测量结果确定,沙箱的开销约为标准工作负载的 1% 或更少。因此,V8 Sandbox 可以在兼容平台上默认激活。

“必须在构建时使用构建标志启用/禁用 V8 沙箱 v8_enable_sandbox 。(由于技术原因)不可能在运行时启用/禁用沙箱。 V8 Sandbox 需要 64 位系统,因为它需要预留大量虚拟地址空间,目前为 1 TB。”公告总结道。

“大约在过去两年里,V8 沙盒已经在 Android、ChromeOS、Linux、macOS 和 Windows 上的 64 位(特别是 x64 和 arm64)版本的 Chrome 上默认启用。”

2024.04.09

2024.04.08

2024.04.07

注:本文由E安全编译报道,转载请联系授权并注明来源。