Intel CPU 曝致命漏洞:全球云计算厂商遭殃?_java

导读:TPU称,亚马逊、微软和谷歌是三个受影响最深的云计算厂商,如果漏洞被利用,那么在同一物理空间的虚拟用户A可以任意访问到另一个虚拟用户B的数据,包括受保护的密码、应用程序密匙等。


英特尔处理器芯片的一个基本设计缺陷已经迫使Linux和Windows内核进行重大重新设计,以解决芯片级安全漏洞。


内核开发者正在争先恐后地检查开源Linux内核的虚拟内存系统,与此同时,微软预计在即将到来的周二补丁日,公开发布Windows操作系统的必要变更:这些变化是在11月份和12月份发布的Windows内部版本的beta测试。


至关重要的是,对Linux和Windows的这些更新将会对英特尔产品造成冲击。结果仍然在基准测试中,估计使用英特尔处理器的系统性能将会出现 5%- 30% 的下降,具体取决于任务和处理器型号。最近的英特尔芯片具有PCID等功能,可以降低性能,你的花费可能也会改变。

Intel CPU 曝致命漏洞:全球云计算厂商遭殃?_java_02



类似的操作系统,如苹果公司的64位macOS,也将需要更新,这个缺陷是在Intel x86-64架构硬件上,并且看起来更新微码无法解决它。必须在操作系统级别的软件中进行修复,或者购买新的没有设计错误的处理器


英特尔芯片内部的漏洞细节处于封闭状态:对这些细节的禁令将在本月初上线,或许是微软下周二的补丁。实际上,Linux内核的修补程序可供所有人查看,但源代码中的注释已被编辑以混淆该问题。


然而,这个缺陷的一些细节已经出现,所以这就是我们所知道的。


影响范围


据了解,该错误出现在过去十年中生产的现代英特尔处理器中。它允许普通的用户程序(从数据库应用程序到Web浏览器中的JavaScript)在一定程度上辨别受保护的内核内存区域的布局或内容。


解决方法是使用所谓的内核页面表隔离(KPTI)将内核的内存与用户进程完全分开。有一次,Linux内核团队仔细研究了强制取消内核中断(又名FUCKWIT),你可以了解下这多么另开发人员烦恼。


只要正在运行的程序需要执行任何有用的操作(如写入文件或打开网络连接),就必须暂时将处理器的控制权交给内核来执行。为了尽可能快速高效地从用户模式转换到内核模式并回到用户模式,内核存在于所有进程的虚拟内存地址空间中,尽管这些程序是不可见的。当需要内核时,程序进行系统调用,处理器切换到内核模式并进入内核。完成后,告知CPU切换回用户模式,并重新进入该过程。在用户模式下,内核的代码和数据保持不见,但出现在进程的页表中。


把内核想象成坐在云上的上帝,俯视地球。它在那里,没有正常的生物可以看到它,但他们可以祈祷。


这些KPTI补丁将内核移入一个完全独立的地址空间,所以它不仅对运行的进程是不可见的,甚至根本就不存在。实际上,这不应该是需要的,但显然英特尔芯片中存在一个缺陷,允许内核访问保护以某种方式被绕过。


这种分离的不利之处在于,在每个系统调用的每个系统调用和每个来自硬件的中断之间,在两个单独的地址空间之间切换是相对昂贵且时间明智的。这些上下文切换不会立即发生,而是强制处理器转储缓存数据并从内存中重新加载信息。这增加了内核的开销,并减慢了计算机的速度。


末的英特尔驱动的机器将因此运行速度较慢。


这个安全漏洞怎么会被滥用?


最好的情况下,恶意软件和黑客可以利用这个漏洞更容易地利用其他安全漏洞。


最糟糕的是,程序和登录用户可能会滥用这个漏洞来读取内核内存的内容。可以这么说,这不是很好。内核的内存空间对用户进程和程序是隐藏的,因为它可能包含各种各样的秘密,比如密码,登录密钥,从磁盘缓存的文件等等。想象一下,在浏览器中运行的一段JavaScript,或者在共享的公共云服务器上运行的恶意软件,能够嗅探受敏感内核保护的数据。


具体而言,就最好的情况而言,这个bug可能会被滥用来打败KASLR:内核地址空间布局随机化。这是各种操作系统使用的防御机制,将内核组件放置在随机位置的虚拟内存中。这种机制可以阻止在内核中滥用其他错误的尝试:通常,利用代码(尤其是面向返回的编程漏洞)依赖于在存储器中的已知位置重用计算机指令。


如果你将内核的代码随机放置在内存中,攻击者就无法找到他们所需的内部小工具来完全破坏系统。处理器漏洞可能会被利用来找出内存中内核定位其数据和代码的位置,从而导致软件修补乱七八糟。


但是,在圣诞节的一封Linux内核邮件列表中(https://lkml.org/lkml/2017/12/27/2),英特尔芯片中的漏洞可能比上述的缓解旁路更糟糕。AMD表示,它不会受到影响。但是,这个信息的措辞让我们相当清楚地看到底层的诡计是什么:


AMD处理器不受内核页表隔离功能所抵御的攻击类型的限制,AMD微架构不允许包括推测引用在内的内存引用在访问会导致页面错误时以较低特权模式访问较高特权数据。


这里的关键词是“投机”。现代处理器,如英特尔,执行投机性执行。为了保持内部管道的指令符合要求,CPU内核会尽力猜测接下来要运行的代码,取出并执行它。


从AMD软件工程师Tom Lendacky在上面提出的建议看来,Intel的CPU可能在没有执行安全检查的情况下推测性地执行代码。似乎有可能以处理器开始执行通常被阻塞的指令(例如从用户模式读取内核存储器)开始执行软件,并且在特权级别检查发生之前完成该指令。

这将允许ring-3级用户代码读取ring-0级内核数据。


那不好。这个漏洞的细节还没有得到证实,关于它的严重性的这个讨论已经足够了,但是可以这样认为:Linux和Windows的变化是显着的,正在被高速推出。这表明它比KASLR旁路更严重。


此外,在Linux上分离内核和用户地址空间的更新是基于一组修补程序,这些修补程序是由奥地利格拉茨技术大学(Graz University of Technology)的eggheads创建的KAISER修补程序。这些发现的PDF文件可以通过在CPU的虚拟内存系统的旁路攻击中从内核中提取内存布局信息来击败KASLR。该团队提出了分裂内核和用户空间以防止这种信息泄漏,他们的研究激发了这一轮的修补。


他们的工作由安德斯·福格(Anders Fogh)在7月份撰写了这篇有趣的博客文章(https://cyber.wtf/2017/07/28/negative-result-reading-kernel-memory-from-user-mode/)。那篇文章描述了他试图通过滥用投机执行从用户模式读取内核内存。虽然弗格无法提出任何有效的概念验证码,但他指出:


我的结果表明,推测执行确实继续,尽管违反了内核模式和用户模式之间的隔离。


看起来KAISER的工作与Fogh的研究有关,而且也正在开发一种通过滥用虚拟内存布局来打破KASLR的实际手段,这个团队可能会以某种方式证明Fogh是正确的 - 在Intel x86芯片上的投机性执行可以被利用来访问内核记忆。


共享系统


该软件开发人员在周一发表的一篇重磅分享和推特文章中称,这个bug将会影响包括Amazon EC2,Microsoft Azure和Google Compute Engine在内的大牌云计算环境,

目前存在一个禁用的安全性错误,显然影响所有实现虚拟内存的当代[Intel] CPU体系结构,需要硬件更改才能完全解决。软件缓解的紧急开发正在公开进行,最近在Linux内核中进行,类似的缓解在11月份开始出现在NT内核中。在最糟糕的情况下,软件修复会导致典型工作负载的巨大减速。

这种攻击会影响常见的虚拟化环境,包括Amazon EC2和Google Compute Engine。

Intel CPU 曝致命漏洞:全球云计算厂商遭殃?_java_03


微软的Azure云(运行大量Linux和Windows)将在1月10日进行维护和重启,大概推出了上述修复程序。


亚马逊网络服务公司还通过电子邮件警告客户,预计本周五将有重大安全更新登陆,而不会涉及细节。


有传言说,一个严重的虚拟机管理程序错误 - 可能在Xen中 - 在2017年末轮到。可能是这个硬件缺陷是传说中的错误:虚拟机管理程序可以通过这个内核内存访问cockup攻击,因此需要修补,强制重新启动来宾虚拟机。


英特尔发言人无法发表评论。®

PS:看起来64位的ARM Linux内核也会得到一套KAISER补丁,彻底拆分内核和用户空间,阻止尝试击败KASLR。我们将在本周跟进。