Google通过浏览器中的JavaScript演示了对Spectre漏洞的利用

谷歌最近发布了几个原型漏洞利用程序,演示了在浏览器中执行 JavaScript 代码来利用Spectre 类漏洞的可能性,而无需经过之前添加的安全措施。

利用漏洞可以获取正在处理当前标签页网页内容的进程的内存访问权限。为了测试该漏洞的功能,我们启动了泄露页面的网站,并将描述该操作逻辑的代码发布到了 GitHub 上。

所提出的原型旨在攻击在 Linux 和 Chrome 88 环境下使用 Intel Core i7-6500U 处理器的系统,但这并不排除修改以在其他环境中使用该漏洞的可能性。

该攻击方法并非仅限于英特尔处理器:经过适当调整后,已证实该漏洞也适用于其他厂商的CPU系统,包括基于ARM架构的苹果M1处理器。稍作调整后,该漏洞也适用于其他操作系统和基于Chromium内核的浏览器。

在基于标准Chrome 88和Intel Skylake处理器的环境中,我们从负责在当前Chrome选项卡中渲染Web内容的过程(渲染过程)以每秒1 KB的速度实现了数据泄漏。 此外,还开发了替代原型,例如,一种利用漏洞的漏洞,其使用Performance.now()计时器时,以降低稳定性的代价将泄漏率提高到8kB / s,精度为5微秒(0.005毫秒)。 )。 还开发了一种变体,该变体以60毫秒的计时器精度运行,可用于以每秒约XNUMX字节的速率组织对另一个进程的内存的访问。

已发布的演示代码包括三个部分:

  • 第一部分 校准计时器以估计运行时间 由于推测执行CPU指令而检索保留在处理器高速缓存中的数据所需的操作中的一部分。
  • 第二部分 定义分配JavaScript数组时使用的内存布局。
  • 第三部分 直接利用Spectre漏洞确定内存内容 为某些操作的推测执行创造了条件,从而确定了当前进程的状态,在确定了失败的预测后,处理器将结果的结果丢弃,但是执行跟踪将被保存在共享缓存中,并且可以使用以下命令恢复使用第三方渠道确定缓存内容的方法,这些渠道分析了对缓存和非缓存数据的访问时间的变化。

所提出的利用技术无需使用performance.now() API 提供的高精度计时器,也无需支持 SharedArrayBuffer 类型,从而可以在共享内存中创建数组。

该漏洞利用包括Spectre设备和侧边通道泄漏分析器,Spectre设备导致受控的推测代码执行,侧面泄漏分析器确定在推测执行期间已缓存了哪些数据。

该小工具使用 JavaScript 数组实现,其中尝试访问缓冲区边界之外的区域,这会影响分支预测块的状态,因为编译器添加了缓冲区大小检查(处理器推测性地执行提前访问,但在检查后还原状态)。

为了在定时器精度不足的情况下分析缓存的内容,提出了一种方法,该方法欺骗了处理器中使用的Tree-PLRU缓存数据逐出策略,并允许通过增加周期数来显着增加当值取值时的时间差。从缓存中返回,并且在缓存中没有值的情况下返回。

谷歌发布了该漏洞利用程序的原型,以证明利用 Spectre 类漏洞进行攻击的可行性,并鼓励 Web 开发人员使用能够最大限度降低此类攻击风险的技术。

同时,谷歌认为,如果不对拟议的原型进行重大修改,就不可能创造出既可用于演示又可广泛使用的通用漏洞利用程序。

来源:https ://security.googleblog.com


在 Google 中将其添加为首选来源