外来客网

INTEL处理器爆致命设计缺陷

最近两天,英特尔(INTEL)处理器被曝存在极大的安全隐患,波及INTEL过去20年几乎所有的产品。这个称为Meltdown(熔断) 的攻击使普通用户程序能够阅读全部系统内存的信息,包括操作系统核心的信息。即使用户程序是在虚拟机(VM)下运行,利用 INTEL CPU的这个漏洞,它能跨越所有安全防护,阅读其他虚拟系统的内存。如果一个用户在云服务上租用一个 VM ,利用这个漏洞就可以读取其他客户虚拟机的任何信息。相关的演示程序表明,Meltdown 攻击程序每秒钟通过 INTEL的漏洞可以读取100K内存,几乎能够实时截获密码等信息,而且不留任何痕迹。

文章配图

由于这个缺陷是在 INTEL 芯片指令执行的固定逻辑部分,无法通过更新microcode 等方式解决,而更新操作系统将导致10%-35%的性能损失。整个美国IT业界发生大震荡。

现代CPU与操作系统在理论上能够防止一个程序读取另一个程序的内存信息,尤其是能够防止用户程序读取操作系统的内存信息。当用户程序试图进行非法内存读取的时候,处理器硬件会制止这种操作的发生,并中断用户程序。但INTEL的指令执行引擎允许猜测性执行(speculative execution)未经检测的指令,事后才进行读取合法性检查,如果发现读取非法,则将结果清零。这样做的目的是加快运行速度,而且最终的结果也没有问题。在友善的环境下,访问都是合法的,INTEL的这一设计似乎是聪颖的技巧。不幸的是,在残酷的现实中,这一幼稚的捷径产生了一个极大的漏洞。

Meltdown 攻击的工作原理是,用一个指令读取目标物理内存的字节,并在下一个指令访问基于这个字节数据的地址。由于这一非法指令的猜测性执行导致 处理器高速缓存 Cache 的变化,虽然这个指令的结果最终被清除,但是其运行改变了相关数据的读取速度。根据读取速度变化的蛛丝马迹,可以推导出目标内存的内容。这一系列操作看似复杂,但写成代码只是一个很小的程序。

注意上述攻击不是基于任何软件漏洞,而是INTEL处理器最核心的执行机制。为防堵这个漏洞,LINUX操作系统不得不对系统内核进行大规模改动,将操作系统的虚拟内存空间与用户内存完全分开。但这一称为 KPTI (内核页表隔离)的修补使系统调用变得非常昂贵,导致可能高达 35%的性能损失。而英特尔的官方声明似乎在推卸责任,LINUX创始人 Linus Torvalds 因此极为震怒。

INTEL的竞争对手AMD 宣布 “Zero AMD vulnerability due to AMD architecture differences.” AMD的处理器在执行前事先进行合法性检测,不允许类似的非法猜想执行,因此AMD处理器不受 Meltdown 攻击的影响。AMD开发人员 Tom Lendacky 在 LINUX的内核中插入了下列代码:

+if (c->x86_vendor != X86_VENDOR_AMD)

+setup_force_cpu_bug(X86_BUG_CPU_INSECURE);

也就是说,如果处理器厂商不是AMD,才启用漏洞修补机制。这一代码已经被审核接受。

另据报道,INTEL首席执行官 Krzanich 在数日前抛售了其所持几乎全部 INTEL股票。

由于Meltdown 属于可以避免的设计缺陷(design defect),根据美国法律,INTEL可能对由此造成的损失负有严格责任 (strict liability)。

评论 (0)