熔毁(英语:Meltdown),也译熔断、崩溃,CVE-2017-5754,正式名称为“Rogue Data Cache Load”,常译作“恶意数据缓存加载”是一个存在于英特尔大部分的x86/x86-64微处理器、部分IBM POWER架构处理器以及部分ARM架构处理器中关于推测运行机制的硬件设计缺陷及安全漏洞,这种缺陷使得低权限的进程无论是否获取特权均可以获取具备高权限保护的内存空间的数据,漏洞利用是基于时间的旁路攻击。
概述熔毁缺陷是基于设计不良的数字电路设计中出现的竞争条件,再结合许多现代微处理器的非依序运行及推测运行特性而产生。1
在具备非依序运行及推测运行特性的处理器上,处理器会检测指令的相依性,对无相依性的指令会进行预先运行,或者当处理器运行某一指令出现异常而面临停顿时,处理器会先运行与异常指令无相依性的指令以跳过停顿,这两类指令运行方式的运行结果都会保存到CPU缓存上一段时间以备使用(超过时间即抛弃结果),这些预测运行的动作包括分支预测,预读取,推测性内存访问,缓存缺失的重叠/乱序处理(MSHR)等等。
某进程的某条指令需要其指定某个存储器地址的数据进行运算,基于CPU缓存的机制,该笔数据会先加载至CPU缓存上,而这个过程对于指令而言是透明的,因此其它进程是无法直接从CPU缓存上得知该笔数据的内容,而又因数据未加载至CPU寄存器上,需要该数据的指令仍无法得知数据内容,在这里,基于分级保护域机制,CPU将数据从CPU缓存加载至CPU的寄存器前是需要经过数据权限检查和存储器地址合法性检查,只有这些数据的访问权限被确认等于或低于该进程的权限、存储器地址空间的访问权限匹配该进程的权限时,方能被相应进程的指令访问,否则将数据丢弃并对该指令进行异常处理。但是,而从存储器加载数据到CPU缓存时,CPU是既没有对这些数据进行权限检查也没有进行存储器地址的合法性检查的,而没有被命中的CPU缓存的数据也不会马上被清空。如果CPU缓存的数据内容无法被得知,那么这种机制的处理逻辑并不会有问题,然而如果有方法可以从其它途径“偷看”CPU缓存的数据内容的话,那么这种处理逻辑便存在缺陷。
要利用熔毁缺陷,在指令处理期间,用异常的指令使得CPU进入对异常指令的异常处理当中,同时令CPU的推测运行去先运行一些非法指令,内存访问和权限检查或存储器地址合法性检查两种操作在这里发生竞争冒险,因为受影响的处理器中的指令流水线意味着在推测执行期间,来自未经授权地址的数据几乎总是被临时加载到CPU的缓存中,即使原始读取指令由于特权检查而最终失败并且从不产生可读结果,这个时候再利用旁道攻击,利用访问CPU缓存及访问存储器的时间差,重建目标数据。这样未经授权的进程就可从映射到当前进程的内存空间的任何地址读取数据。
由于许多操作系统将物理内存、内核进程和其他正在运行的用户空间进程映射到每个进程的地址空间,并依靠特权检查来防止未经授权的访问,因此,熔毁缺陷有效地允许运行在用户空间的恶意进程在不需要权限提升的情况下,读取任何物理内核或其他进程的映射的内存,不管它是否应该能够这样做。防范这个缺陷造成的崩溃,将需要避免使用内存映射方式或是内存分页隔离(均基于软件的解决方案,后者用于将用户空间的内存地址和内核空间的内存地址隔离,但这样做将会增加内核态和用户态的上下文交换开销),或避免潜在的竞争条件(修改CPU的微代码和/或执行路径)。
恶意程序利用熔毁缺陷进行攻击活动时也无法被侦测感知,是该信息安全漏洞的一大危险之处。
受影响硬件最初发现熔毁缺陷主要在英特尔的微处理器产品上出现,但后来发现一些ARM架构的处理器也有该缺陷并被ARM确认,随后IBM的POWER架构的处理器也被发现有此缺陷也得到了IBM的确认。同为x86架构的AMD处理器则没有被发现有熔毁缺陷。而英特尔在处理器缺陷被发现公布数天后,才发表声明确认,除了使用依序运行的产品以外全系列的英特尔微处理器都有熔毁缺陷,并且在声明中指所有非依序运行的x86微处理器都有该缺陷以暗示竞争对手也受熔毁缺陷影响,不过另一家主要的x86微处理器供应商AMD则表示其处理器产品没有熔毁缺陷,并指出“我们之所以认为AMD的处理器不受缺陷影响,是因为我们的标签页架构有特权级保护”。2
同时期的另一个硬件缺陷——幽灵,受影响的处理器产品遍及当今所有采用分支预测技术的处理器(包括英特尔、AMD、ARM、IBM POWER等等),虽然相比熔毁缺陷更难利用(视不同CPU的微架构有所不同)
更为具体的,有缺陷的CPU型号数量非常多,Google的Project Zero报告指出,除了安腾以及2013年前的Atom系列,英特尔自1995年发表基于P6微架构的Pentium Pro开始所有具备非依序运行的CPU产品都有熔毁缺陷,P6微架构是英特尔首款具备预测执行的x86(IA-32)微架构,首发产品便是Pentium Pro,而后续的英特尔x86微架构除Netburst(Pentuim 4)外都是以P6为蓝本。
而ARM表示它们的主要处理器IP核不受影响,具体受影响的IP核型号已经公布。ARM Cortex-A75除了有熔毁缺陷以外还受幽灵漏洞的影响,而其它型号则没有熔毁缺陷。带预测运行技术的Cortex-R7、Cortex-R8、Cortex-A8、Cortex-A9、Cortex-A15、Cortex-A17、Cortex-A57、Cortex-A72及Cortex-A73IP核只受幽灵的影响。ARM是在英特尔之后第二个被发现有熔毁缺陷的产品的,但与英特尔的不同,ARM唯一有熔毁缺陷的IP核产品Cortex-A75尚未有实现商用。另外,不使用预测运行技术的ARM架构处理器,也是当前使用数量最多的ARM产品,不受任何影响,也没有熔毁缺陷,这部分包括了大量使用在Android移动设备上的Cortex-A53IP核,以及即将有商用实现案的Cortex-A55。仅使用Cortex-A53、Cortex-A55的处理器产品包括高通的骁龙630、626/625、400系列等、联发科的MT6795等、树莓派单板电脑使用的博通SoC等等。
IBM的POWER架构是第三个被发现有熔毁缺陷、受幽灵的处理器微架构,红帽公司在2018年1月3日公布了受这些缺陷影响的处理器型号,涵盖Z架构、POWER架构(包括最新的POWER8及POWER9)的产品,并发表了适用于这些指令集架构编译版本的RHEL之修复程序;IBM也立即公布了受影响型号清单并发布了相关的固件修复程序和AIX、z/OS修复程序。
甲骨文公司表示SPARCV9的系统(T5、M5、M6、S7、M7、M8、M10、M12处理器)没有熔毁缺陷,但并未说明更老的、不再进行技术支持的处理器产品是否受这两大硬件缺陷的冲击。
漏洞修复2018年初,微软发布了新的Windows系统的安全补丁以修复漏洞。英特尔公司多次表示修复漏洞并不会过多影响芯片性能,但微软的测试表明在安装了漏洞补丁的Windows 7与Windows 8环境下,2015年及以前生产的英特尔芯片会有明显可感的性能下降,有消息说下降幅度甚至可以达到30%,较旧的Haswell架构与之前的芯片性能下降尤为明显。但在使用Skylake、Kaby Lake等较新架构的英特尔芯片的Windows 10系统上,性能下降则并不明显。
参见幽灵 (安全漏洞)(Spectre)
内核页表隔离
Row hammer
奔腾浮点除错误
本词条内容贡献者为:
吴晨涛 - 副研究员 - 上海交通大学