美国计算机安全应急响应中心(以下简称“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列出的受影响厂商名单,提醒用户及时关注厂商动态,及时修复。
(责任编辑:安博涛)