美国计算机安全应急响应中心(以下简称“CERT”)日前发布公告称,Windows、macOS、Red Hat、Ubuntu、SUSE Linux、FreeBSD、VMware 和 Xen 等系统都可能受到一个重大安全漏洞( CVE-2018-8897)的影响,这个漏洞是由于操作系统开发者曲解了英特尔和AMD两大芯片厂商的调试文档所致。
不过,这个漏洞的利用需要一定的条件,攻击者需要使用已经感染带有恶意软件的计算机,或者必须使用已经登录的帐户才能运行利用此漏洞的恶意代码。如果顺利入侵,攻击者可以将其代码的访问权限提升到内核级别,然后使用此访问权限执行其他操作。通俗来说,攻击者可以利用操作系统的 API 获取敏感内存信息,或控制低级操作系统功能。
根据 CERT/CC 的报告,这个漏洞出现的详细原因如下:
这个漏洞主要与操作系统供应商为 Intel x86-64 体系结构部署的硬件调试机制有关,核心原因是 MOV SS 和 POP SS 指令。该指令从正在运行的程序堆栈中获取一个用于选择堆栈段的值,并将这个值存入 CPU 的堆栈选择器与寄存器。这与很多现代操作系统所忽视的内存分割有关。POP SS 指令由 CPU 专门处理,以确保在执行中断时,堆栈不会陷入不一致的状态。
应用程序可以通过 POP SS 为堆栈选择器所在的内存位置设置调试断点。也就是说,当应用程序使用 POP SS 时,如果处理器触及 RAM 的特定部分以获取堆栈选择器,将会生成特殊的异常问题。如果紧接在 POP SS 指令之后的指令是 INT 指令,就能利用这种异常情况来触发中断。这些软件触发的中断有时被用户程序用于激活内核,因此它可以执行打开文件等运行程序所需的操作。在运行 Intel 或 AMD 的计算机中,软件生成的中断指令紧跟在 POS SS 指令之后,立刻让处理器进入内核的中断处理程序。随后,由于 POP SS 导致异常被延迟,会触发调试异常。
由于英特尔的 x86-64 手册关于 POP SS 指令及其与中断门语义相互作用的注意事项不清楚甚至不完整,让操作系统开发者和供应商误以为处理程序在不可中断的状态下启动。但事实上,调试异常需要在处理程序中断的早期进行处理,否则用户应用程序可以利用开发者的这种误解,在运行 Intel 的计算机中利用 POP SS 和 INT 指令,控制中断处理程序中的特殊指针 GSBASE。而在运行 AMD 的计算机中,用户应用程序可以控制 GSBASE 和堆栈指针,导致内核崩溃,通过访问未映射的内存,提取部分受保护的内核内存,或者调整其内部结构导致系统崩溃或者操纵系统运行。
专家认为,上述任何尝试都可能导致内核崩溃,不过不会造成更严重的危害。但是,这也应当引起系统供应商注意。
目前,各大厂商都已知晓这个漏洞,并积极应对。Red Hat、Ubuntu 和苹果 MacOS 都已经着手推出补丁。而早在 2018 年 3 月,Linux 内核已经解决了这个问题,4.15.14、4.14.31、4.9.91、4.4.125 以及更早的 4.1、3.16 和 3.2版本都有相应的补丁。
微软也做出了回应,其 Windows 7 到 Windows 10 以及 Windows Server 2008 到 1803 版本都推出了补丁。Xen 4.6 到 4.10 版本也推出了修补程序。VMware 的虚拟机管理程序没有风险, vCenter Server 有对应的解决方案,vSphere 集成容器正在等待修复,但专家认为,二者都“可能受到影响”。
以下是美国 CERT/CC 列出的受影响厂商名单,提醒用户及时关注厂商动态,及时修复。