利用 Chrome 中 Spectre 漏洞的新技术

来自美国、澳大利亚和以色列大学的一组研究人员提出了一种新的侧通道攻击技术,用于利用基于 Chromium 引擎的浏览器中的 Spectre 级漏洞。 该攻击代号为Spook.js,允许您通过运行JavaScript代码来绕过站点隔离机制,并读取当前进程的整个地址空间的内容,即访问在其他选项卡中运行但在同一进程中处理的页面的数据。

由于 Chrome 在不同的进程中运行不同的站点,因此进行实际攻击的能力仅限于允许不同用户托管其页面的服务。 该方法允许从攻击者有机会嵌入其 JavaScript 代码的页面确定用户从同一站点打开的其他页面是否存在,并从中提取机密信息,例如,替换的凭据或银行详细信息通过网络表单中的自动填充字段系统。 作为演示,它展示了如果 Tumblr 服务的所有者在另一个选项卡中打开同一服务上托管的攻击者博客,您可以如何攻击 Tumblr 服务上的其他人的博客。

使用该方法的另一种选择是对浏览器加载项进行攻击,当安装由攻击者控制的加载项时,它允许从其他加载项中提取数据。 作为示例,我们展示了如何通过安装恶意插件来从 LastPass 密码管理器中提取机密信息。

研究人员发布了一个漏洞原型,该漏洞可在配备 CPUIntel i89-7K 和 i6700-7U 的系统上的 Chrome 7600 中运行。 在创建漏洞时,Google 之前发布的 JavaScript 代码原型被用来执行 Spectre 级攻击。 值得注意的是,研究人员能够为基于英特尔和苹果 M1 处理器的系统准备工作漏洞,从而能够以每秒 500 字节的速度组织内存读取,准确率达到 96%。 假设该方法也适用于 AMD 处理器,但不可能准备出功能齐全的漏洞利用程序。

该攻击适用于任何基于 Chromium 引擎的浏览器,包括 Google Chrome、Microsoft Edge 和 Brave。 研究人员还认为,该方法可以适用于 Firefox,但由于 Firefox 引擎与 Chrome 非常不同,因此创建此类漏洞的工作留待将来进行。

为了防止与指令推测执行相关的基于浏览器的攻击,Chrome 实现了地址空间分段 - 沙箱隔离允许 JavaScript 仅使用 32 位指针,并在不相交的 4GB 堆中共享处理程序的内存。 为了提供对整个进程地址空间的访问并绕过 32 位限制,研究人员使用了一种称为类型混淆的技术,该技术强制 JavaScript 引擎处理类型不正确的对象,从而可以形成 64 位基于两个 32 位值的组合的指针。

该攻击的本质是,当在 JavaScript 引擎中处理专门设计的恶意对象时,会创建导致推测性执行访问数组的指令的条件。 选择对象的方式是将攻击者控制的字段放置在使用 64 位指针的区域中。 由于恶意对象的类型与正在处理的数组的类型不匹配,因此在正常情况下,Chrome 中的一种用于访问数组的代码去优化的机制会阻止此类操作。 为了解决这个问题,类型混淆攻击的代码被放置在条件“if”块中,该块在正常情况下不会激活,而是在处理器错误地预测进一步分支时以推测模式执行。

因此,处理器会推测性地访问生成的 64 位指针,并在确定预测失败后回滚状态,但执行痕迹仍保留在共享缓存中,并且可以使用旁通道缓存检测方法来恢复,该方法分析缓存和未缓存数据的访问时间。 为了在JavaScript中可用的定时器精度不够的情况下分析缓存的内容,使用了Google提出的一种方法,该方法欺骗了处理器中使用的Tree-PLRU缓存驱逐策略,并允许通过增加周期数来分析缓存的内容。显着增加缓存中存在和不存在值时的时间差异。

来源: opennet.ru

添加评论