导语:Intel处理器芯片的设计缺陷导致Linux和Windows需要重新设计内核来应对这个芯片级的安全bug。
简介
Intel处理器芯片的设计缺陷导致Linux和Windows需要重新设计内核来应对这个芯片级的安全bug。
该漏洞公布后,程序员们开始检查开源Linux内核中的虚拟内存系统是否存在该漏洞。同时,Microsoft会在下周二的补丁中对Windows操作系统进行必要的改变来预防该漏洞。该漏洞会影响Intel产品的Linux和Windows系统的性能,目前数据显示,性能会有5~30%的一个下降。最新的Intel芯片引入了PCID这样的特点来减小对系统性能的影响。
APPLE的64位macOS操作系统同样需要更新,因为好像一点代码的更新不能解决这个Intel x86-64硬件的漏洞。比如要在OS级别的软件中进行修复,或者可以买一个新的不同设计原理的处理器。
目前漏洞的具体细节尚未公布,公布后,我们会进行更新。
影响
该漏洞存在于十年前生产的Intel处理器中,该漏洞允许普通用户权限的程序去读取受保护的kernel内存区的数据。目前的修复补丁是通过KPTI(Kernel Page Table Isolation,kernel页面隔离)的方式来完全隔离用户进程和kernel内存的。
当运行的程序要进行写文件或打开网络连接这种有用的操作时,系统要临时将处理器的控制权移交到kernel来完成该工作。要从用户模式转变到kernel模式,然后尽快又高效地转回到用户模式,所以kernel存在于所有进程的虚拟内存地址空间中的,但是这对这些程序是不可见的。当需要kernel时,程序会请求系统调用,然后处理器就转到kernel模式进入kernel。当工作完成后,CPU会被告知转回到用户模式,并进入原进程智能。在用户模式下,kernel的代码和数据仍然对程序是不可见的,但是物理存在于进程的页表中。
KPTI补丁将kernel移到一个完全隔离的地址空间中,这样所有运行的进程和未运行的进程都看不到kernel的代码和数据了。虽然这不是必需的,但是这是Intel芯片的一个设计漏洞,攻击者人员可以一定程度上绕过这种kernel访问的保护读取kernel的数据和代码。
这种隔离的成本是很高的,也很费时,所以系统的性能会下降很多。
漏洞利用
Intel芯片的机器的运行速度会变慢。那么该安全漏洞如何被滥用呢?
在最好的场景下,恶意软件和黑客利用该漏洞可以更容易地利用其他的安全bug。同时,最坏的场景是程序和登录的用户可以利用该漏洞读取kernel内存中的内容。其实,kernel内存空间对用户进程和程序是隐藏的,因为kernel的内存可能会含有一些机密信息,比如password,登录密钥、从硬盘缓存的文件等。也就是说利用该漏洞,浏览器中运行的JS代码或运行在公有云服务器上的恶意软件都可以窃取kernel级保护的敏感数据。
在最好的场景下,攻击者可以用该bug来攻击KASLR(kernel address space layout randomization内核地址空间布局随机化),KASLR是参与保护缓冲区溢出问题的一个安全机制。即许多操作系统将kernel的组件放置在虚拟内存的随机位置。 这种机制可以攻击在内核中利用其他bug,尤其是那些利用内存中已知的漏洞进行攻击的利用代码。
如果将kernel的代码随机分部在内存中,那么攻击者就找不到完全入侵系统的内部工具。攻击者利用Intel芯片的漏洞可以找出内存中kernel代码和数据的位置,因此引发了一系列的软件补丁问题。
然而,Intel芯片漏洞的影响可能比上面描述的更加复杂和严重。在圣诞节发给Linux kernel的邮件列表中,AMD声称并未受到影响。但是邮件的内容可能有别的寓意:
AMD处理器不受kernel页表隔离特征保护的攻击的影响,AMD架构是不允许内存引用的,包括推测引用。即在低权限的模式下访问高权限的数据会导致页面错误。
邮件内容的关键词为“speculative(推测)”,而像Intel这样的现代处理器都是执行speculative execution(推测执行)。为了确保遵守内部管道中的指令,CPU内核会尽最大可能去猜测下一步要运行的代码,然后取出并执行。
根据AMD软件工程师的说法,Intel的CPU在执行推测执行代码时并没有执行安全检查。也就是说,处理器在权限检查开始前就完成了那些正常情况下会执行会被拦截的指令,比如在用户模式下读取kernel内存,以这种方式时去制作恶意软件是可能的。也就是ring 3级别的用户代码可以读取ring 0级别的kernel数据,这是很不安全的。
目前该漏洞的分类还没有经过确认,但是该漏洞对Linux和Windows系统的影响是巨大的,这意味着该漏洞要比KASLR绕过漏洞要严重的多。
关于Linux系统中隔离kernel和用户地址空间的更新是基于一系列叫做KAISER补丁的,该补丁是Graz技术大学的研究人员开发的。研究人员发现针对CPU虚拟内存系统的侧信道攻击中,通过从内存中提取内存布局信息可以对KASLR进行攻击。研究人员同时提出分割kernel和用户空间来预防信息泄露,这也是本轮分发补丁的基础。
另外一名研究人员Anders Fogh在博客中描述了如果利用推测执行(speculative execution)在用户模式下读取kernel内存。虽然Fogh没有提供POC代码,但是博客中提到:
结果证明了推测执行依然有效,虽然违反了kernel模式和用户模式的隔离。
共享云平台系统
一名软件开发工程师在博客中说,该漏洞会影响Amazon EC2, Microsoft Azure, Google Compute Engine这样的共享云计算平台。该bug影响所有的运用虚拟内存的Intel CPU架构,解决的办法就是对硬件进行修改。Linux内核中已经进行了软件的紧急修复,Windows NT内核也于11月进行了类似的修复。最坏的情况是,软件补丁会导致系统变慢,而且是不是一丁点的慢。
Microsoft Azure云发布公告说要进行维护,将于1月10日重启,这也说明了运行Linux和Windows系统的云平台受到该攻击的影响。Amazon web服务也向用户发邮件说本周五会进行安全更新。