基于 Zen+ 和 Zen 2 微架构的 AMD 处理器中发现了 Meltdown 类漏洞

德累斯顿工业大学的一组研究人员在基于 Zen+ 和 Zen 2020 微架构的 AMD 处理器中发现了一个漏洞 (CVE-12965-2),该漏洞允许 Meltdown 类攻击。 最初假设 AMD Zen+ 和 Zen 2 处理器不易受到 Meltdown 漏洞的影响,但研究人员发现了一个功能,该功能会导致在使用非规范虚拟地址时对受保护内存区域进行推测性访问。

AMD64架构仅使用虚拟地址的前48位,忽略其余16位。 指定位 48 至 63 必须始终复制位 47(符号位扩展)的值。 如果违反此条件并尝试访问具有任意高位值的地址,则处理器会生成异常。 重复填充高位会导致可用地址空间被分为两个块 - 低位块(从 0 到 00007FFFFFFFFFFFFF),其中高位被设置为 800000000000,以及高位块(从 FFFF1 到 FFFFFFFFFFFFFFFF),其中高位被设置为 XNUMX。所有高位均设置为 XNUMX。

落在指定块内的地址称为规范地址,具有任意高位内容的不正确地址称为非规范地址。 规范地址的较低范围通常分配给进程数据,较高范围用于内核数据(从用户空间对这些地址的访问在权限分离级别被阻止)。

经典的 Meltdown 漏洞基于以下事实:在指令的推测执行期间,处理器可以访问私有数据区域,然后丢弃结果,因为设置的权限禁止用户进程进行此类访问。 在程序中,推测执行的块通过条件分支与主代码分开,该条件分支在实际情况下总是触发,但由于条件语句使用处理器在抢占执行期间不知道的计算值代码中,所有分支选项都是推测性地进行的。

由于与正常执行的指令相同的高速缓存用于推测执行的操作,因此在推测执行期间可以在高速缓存中设置反映私有内存区域中各个位的内容的标记,然后在正常执行的代码中确定它们的值通过时间分析,访问缓存和非缓存数据。

影响 AMD Zen+ 和 Zen 2 处理器的新漏洞的一个特点是,CPU 允许推测性读写操作,使用无效的非规范地址访问内存,而忽略高 16 位。 因此,在推测代码执行期间,处理器始终仅使用低 48 位,并单独检查地址的有效性。 如果在关联转换缓冲区 (TLB) 中将非规范虚拟地址转换为物理地址时,在地址的规范部分检测到匹配,则推测加载操作将返回该值,而不考虑内容高 16 位的值,允许绕过线程之间的内存共享。 随后,该操作将被视为无效并被丢弃,但内存访问将完成并且数据将最终进入缓存。

在实验过程中,利用确定FLUSH+RELOAD缓存内容的技术,研究人员能够组织一个通道,以每秒125字节的速度进行隐藏数据传输。 除了 AMD 芯片外,该问题还影响所有 Intel 处理器,这些处理器容易受到经典 Meltdown 漏洞的影响。 可以使用有助于阻止 Meltdown 攻击的相同技术(例如使用 LFENCE 指令)来防范这种新型攻击。 例如,如果英特尔处理器包含针对 Meltdown 的硬件保护或系统启用了软件保护,则此类配置不易受到新攻击变体的影响。

同时,研究人员指出,与英特尔处理器相比,AMD处理器的架构限制了进行真正攻击的可能性,但不排除使用新方法与其他微架构攻击相结合来提高其有效性。 特别是,所提出的攻击不允许确定内核和其他进程的内存区域的内容,但仅限于访问在同一虚拟内存空间中运行的同一程序的其他线程的能力。

由于没有漏洞的程序能够访问其线程,因此从实际角度来看,该方法对于绕过沙箱隔离并组织对允许执行第三方的程序中其他线程工作的干扰很有意义。代码,例如网络浏览器和 JIT 引擎。 研究人员检查了SpiderMonkey JavaScript引擎和Linux内核的易受攻击的漏洞,但没有发现可用于实施攻击的易受攻击的代码序列。 除了攻击应用程序之外,该方法还可用于在处理器的微架构元素之间强制执行不可接受的数据流,同时利用其他微架构漏洞。

来源: opennet.ru

添加评论