近日,有两个利用 CPU 预测执行缺陷的新漏洞被披露。这两个漏洞的名称是Spectre 1.1 和1.2,它们都是原 Spectre (Spectre-v1)漏洞的变种,利用预测存储造成预测缓冲区溢出,这样就可以避开 Spectre-v1 缓解措施。
可以执行任意预测写的能力带来了重大的安全风险,包括任意预测执行。遗憾的是,这让本地和远程攻击成为可能,即使不存在 Spectre 1.0 代码片段。另外,它还使攻击者可以绕过针对之前的预测执行攻击而提出的软件缓解建议。
安全研究人员 Vladimir Kiriansky 和 Carl Waldspurger 披露了新漏洞,下面的代码提供了 Spectre 1.1 的验证攻击:
<pre data-anchor-id="oaw7">
if (y < lenc)
c[y] = z;
上述代码的问题在于,在预测分支执行时,CPU 可能会忽视边界检查,这样,就给攻击者留下了任意覆写内存的可能。这种机制使得临时覆写的数据存在被后续 Spectre-v1 攻击使用的可能。
Spectre 1.2 漏洞则是延迟执行用户 / 超级用户页表条目(PTE)防护检查。这样,预测数据攻击就可以覆写只读数据,包括代码指针、虚函数表和控制流缓解元数据。
研究人员介绍了软件和硬件缓解措施,包括使用预测防护,完全阻止预测执行;还有屏蔽,这种方法尝试限定索引值,在使用之前把它们屏蔽,这样,后续访问数组的那个位置时就不会越界访问内存;还有其他的方法。研究人员还指出,针对新攻击的软件防御最终变成了防御经典的缓冲区溢出的技术。因此,
预防攻击的第一步最好是强化栈溢出、堆溢出、整数溢出等已有的检查。
虽然 Kiriansky 和 Waldspurger 向英特尔、ARM、AMD 谷歌、IBM 和微软报告了这两个新的 Spectre 变种,但现在还没有补丁可用。
评论