新的推测执行漏洞袭击了AMD,ARM和Intel

微软安全响应中心Google Project Zero

独立发现了一个新的攻击,它使用处理器的推测执行功能泄漏数据,名为Speculative Store Bypass(SSB)。英特尔和AMD的处理器,以及一些使用ARM设计的处理器都受到影响。

自从今年早些时候宣布崩溃和幽灵瑕疵以来,现代微处理器的推测和预测能力得到了仔细检查,揭示了几起新的攻击。

所有的袭击都遵循一套共同的原则。每个处理器都有一个架构行为(记录的行为描述指令如何工作,程序员依赖于编写他们的程序)以及微架构行为(架构的实际实现方式)。这些可以以微妙的方式发散。

例如,在架构上,从内存中的特定地址加载值的程序将在尝试执行加载之前等待地址已知。然而,在微架构上,处理器可能试图猜测地址,以便即使在它绝对确定应该使用哪个地址之前,它可以开始从内存加载该值(这很慢)。

新的推测执行漏洞袭击了AMD,ARM和Intel

如果处理器猜测错误,它将忽略猜测值并再次执行加载,这次使用正确的地址。架构定义的行为因此得以保留。但是这种错误的猜测会干扰处理器的其他部分 - 特别是缓存的内容。这些微架构干扰可以被检测和测量,从而允许恶意程序对存储器中存储的值进行推断。

熔毁和幽灵攻击都利用了这种差异。SSB也是如此。从微软撰写的问题来看,有问题的事件顺序如下:

  1. 将值缓慢地存储在内存位置。

  2. 将该值快速加载到相同的内存位置。

  3. 使用刚刚读取的值以可检测的方式干扰缓存。

在这里,“缓慢”和“快速”是指处理器能够以多快的速度确定要从中读取和写入的存储器位置。诀窍是让第一步,商店,取决于先前指示的结果; 这意味着处理器在知道存储值的位置之前必须等待。第二步,负载,相反,是这样构建的,即地址可以快速确定,而无需等待。

在这种情况下,处理器的推测性执行将“忽略”或“绕过”存储器(因为它尚不知道存储器的实际存储位置),并假设当前存储在存储器位置的数据是有效的。这给攻击命名:商店被推测绕过,

最终处理器会发现存储器和负载使用相同的存储器地址,因此负载拾取了错误的值。推测执行被丢弃,并使用正确的值执行正确的计算。因此,架构行为得到妥善保存。但此时处理器的微架构状态已经发生了变化。可以检测到这些更改,并且攻击者可以使用这些更改来确定读取了哪个值。

新的推测执行漏洞袭击了AMD,ARM和Intel

好消息和坏消息

与Spectre和Meltdown一样,SSB要求攻击者能够在受害者系统上运行代码。这使得云服务提供商(恶意方可能试图攻击虚拟机并脱离其虚拟机)以及浏览器JavaScript引擎(恶意脚本可能试图摆脱他们的沙盒)时尤其受到关注,但相反,这意味着在这些情况之外,范围是有限的。

通常,首先能够运行任意攻击代码的需要意味着一个或多个其他缺陷必须已经存在。同样,这种攻击只允许读取数据。虽然有时候这些数据本身很有用(例如密码或加密密钥),但更多的时候它只是提供附加信息(例如内核内存布局的细节)来帮助执行使用其他缺陷的另一次攻击。

就风险和可利用性而言,这种攻击类似于第一个Specter变种。第一个Specter变体,即数组边界旁路,依次使用了两个操作的类似模式(对于SSB,一个存储然后是一个负载;对于Specter v1,一个分支然后是一个负载),其中第一个操作从体系结构上改变负载,但推测执行,就好像它没有。

这种结构相似性意味着,解决Specter v1相同的应用程序级修改也可解决SSB问题。特别是,有风险的应用程序应该在第一个操作和加载操作之间插入额外的指令,以防止负载被推测性地执行。这不一定是使应用程序安全的唯一方法,但它是一个一致且相对容易应用的方法。

新的推测执行漏洞袭击了AMD,ARM和Intel

我们也将看到一系列操作系统,微代码和固件更新,就像我们为第二个Specter变体所做的一样。最近的AMD处理器包含一项禁用特定类型推测执行的功能,而微软将发布允许使用此功能的Windows补丁。英特尔正在发布微代码更新,为其处理器提供类似的功能来禁用这种推测。这些最终将作为固件和操作系统更新进行分发。

然而,在这两种情况下,这些公司都建议用户不要打开这个系统范围的选项。性能影响可能相当高 - 英特尔表示SYSmark和SPECint等基准测试降低了两到八个百分点,因此修改风险应用程序是更好的解决方案。如果不可能的话,整个系统的变化是一个回退。

更多详情敬请关注:绮风科技


分享到:


相關文章: