事实证明,之前披露的几种针对现代处理器的投机性执行攻击(如Meltdown和Fo)背后的根本原因。
事实证明,之前披露的几种针对现代处理器的投机性执行攻击(如Meltdown和Prehadow)背后的根本原因被错误地归因于“预取效应”,导致硬件供应商发布了不完整的缓解和对策。
格拉茨理工大学(Graz University Of Technology)和CISPA Helmholtz信息安全中心(CISPA Helmholtz Center For Information Security)的一组学者与黑客新闻分享了他们的发现,最终揭示了内核地址最初被缓存的确切原因,并提出了几种利用之前未知的潜在问题的新攻击,使攻击者能够嗅探出敏感数据。
这项新的研究解释说,微体系结构攻击实际上是由内核中用户空间寄存器的投机性取消引用引起的,这不仅影响了采用最新硬件缓解的最新Intel CPU,还影响了ARM、IBM和AMD的几个现代处理器-以前被认为不会受到影响。
研究人员告诉“黑客新闻”:“我们发现,过去4年里,几篇学术论文中报道的影响没有被正确理解,导致了对对策的错误假设。”
“这种预取效应实际上与软件预取指令或由于内存访问造成的硬件预取效应无关,而是由内核中用户空间寄存器的推测性取消引用引起的。”
除了分析预取效应的实际根本原因外,研究的其他一些重要发现包括:
发现几个利用根本原因的新攻击,包括更受限上下文中的地址转换攻击、特定方案中寄存器值的直接泄漏以及针对非L1数据的端到端前瞻利用。
一种新的跨核心隐蔽通道攻击,在某些情况下,可以让攻击者在不依赖共享内存的情况下观察存储在寄存器中的地址(或值)的缓存。
SPECTE“预取”小工具可直接泄漏实际数据,这不仅使ZombieLoad攻击在英特尔CPU上高效地从内部缓冲区或内存中泄漏敏感数据,而且还会影响非英特尔CPU。
投机性的取消引用问题-在某些攻击中,如Rowhammer、缓存攻击和戏剧性攻击-可能会让攻击者恢复JavaScript变量的物理地址,并通过Web浏览器远程瞬时执行来泄露信息。
此外,研究人员还证明,即使启用了建议的缓解措施,也可以利用英特尔CPU上的前兆漏洞。这是因为攻击可以安装在包含“预取”小工具的内核版本上未驻留在一级缓存中的数据上。
这背后的想法是直截了当的。系统软件依靠CPU的地址转换机制实现不同进程之间的隔离。每个进程都有自己的虚拟内存空间,不能访问其外部的任意物理内存地址。
因此,地址转换充当将由程序使用的虚拟地址空间映射到物理地址到物理地址的中间层。
虚拟地址空间还包括一个内核地址空间来容纳Linux内核线程,从而使得底层硬件可以轻松地在内核模式下处理来自用户线程的特权指令。
虽然可以通过一种名为内核页表隔离(KPTI或Kaiser)的技术保护操作系统内核免受预取侧通道攻击,但研究人员发现,它不能保证完全防止地址转换攻击,即攻击者试图检查两个不同的虚拟地址是否映射到相同的物理地址。KPTI或Kaiser实施严格的内核和用户空间隔离,以便硬件在用户模式下运行时不会持有任何有关内核地址的信息。
换句话说,“地址转换攻击允许非特权应用程序将任意内核地址提取到缓存中,从而在64位Linux系统上将虚拟地址解析为物理地址。”
虽然最初的思路是这样的攻击与预取指令有关,但新的发现证明了事实并非如此,从而验证了Kaiser不是针对内核隔离的微体系结构侧通道攻击的足够对策。
取而代之的是,它利用Spectre-BTB-SA-IP(分支目标缓冲区,相同地址,就地)小工具导致信息泄漏,从而导致投机性执行,并通过绕过当前的L1TF缓解进一步执行熔断和预兆(L1终端故障)攻击。
SPECTE-BTB-SA-IP是Spectre漏洞的变体,它利用分支目标缓冲区-CPU中用于分支预测的类似高速缓存的组件-在相同的地址空间和相同的分支位置内执行攻击。
研究人员说:“同样的预取效应也可以用来进行预取。”“如果L3缓存中存在机密,并且直接物理映射地址在虚拟机管理程序内核中已解除限制,则可以将数据提取到L1中。如果禁用了不相关的Spectre-BTB缓解,则即使启用了前影缓解,也会重新启用前影。“。
“结果是,如果只禁用Spectre-v2缓解,我们就可以在启用所有缓解的情况下对针对前兆打补丁的较旧内核进行前兆攻击,并对完全打补丁的内核进行前兆攻击。”
为了突出侧通道攻击的影响,研究人员建立了一个基于缓存的隐蔽通道,该通道将运行在Intel Core i7-6500U CPU上的一个进程的数据渗透到另一个隐蔽进程,实现了10位/秒的传输速率,将总计128字节的数据从发送方转发到接收方进程。此外,研究人员还透露,使用推测性地解除引用的寄存器(称为“取消引用陷阱”),可以在15分钟内从Intel CPU的SGX飞地泄漏寄存器内容,从而恢复存储在64位寄存器中的32位值。
最后,现在可以在Web浏览器中使用JavaScript远程安装“某些攻击”,并“使用WebAssembly在JavaScript中使用攻击者控制的值填充64位寄存器”。
为了缓解这些攻击,建议当前的CPU启用Spectre-BTB缓解,包括retpoline(“return trampoline”的缩写),它旨在通过将间接分支与投机性执行隔离来防止分支目标注入。