英特尔芯片漏洞的大新闻

这次安全业界搞了个大新闻。

去年英特尔被爆出在每一个 CPU 中都植入了 Minix 子系统,昨天听到 Podcast 里提到说 Intel 爆出了硬件漏洞,就在 FreeBuf 上搜索到了一篇文章,说 Intel Management Engine 出了问题,具体的漏洞编号是 SA-00086 。不过事情好像并不是很严重,在网上也没搜到更多相关的报导。直到今天早上又听到 Podcast 里提到,我就再次去看了看,发现确实有新货,而且一来就来两个。

这回爆出来的漏洞影响十分巨大,原因是一种被使用了十多二十年的技术出了问题,但是却被使用在了今天几乎所有的电子设备的微处理器上。Intel,AMD 和 ARM ,无一幸免。现在就来看一下到底是什么东西出了问题。

前置知识

首先明确一个概念:在计算机的眼里,程序和数据是一个东西。程序只不过是可以执行的数据,而且在程序被放入内存形成一个进程的时候,他们都存在于内存里。在以前的 CPU 上,确实是这样,但是这导致了一个问题:如果有人把精心构造的程序放在了数据区,然后通过漏洞控制 CPU 执行指令的顺序,让它把数据区域的数据当作了程序来执行,会出现什么状况?这就是一种入侵的方法,黑客通过缓冲区溢出一类的攻击手法获取 CPU 执行指令顺序的控制权之后,将 CPU 执行的目标代码引向自己在数据区放置的恶意代码来达到入侵的目的。

所以在后来的 CPU 和操作系统,在设计的时候就引入了一些保护机制,例如区分内存的属性,让程序无法被改写,让数据无法被当作指令执行,例如将进程隔离,使得进程间只能通过操作系统提供的 IPC (Inter-Process Communication , 进程间通信) 来交流,而不能随意地去读取或者修改其他进程的程序和数据。

另一方面,为了提供更快的处理速度,现代的处理器基本都会使用一些黑科技。其中有一种叫作预测执行技术。这个技术简单说来就是在处理器里加入了一个叫作“分支预测器”的东西,它通过某些很黑的黑科技来预测程序接下来的执行步骤,然后基于当前是否还有空闲的计算资源来决定是否预先执行这些分支代码。现在的处理器使用了一种“流水线”架构,它把指令拆分成更小的小操作,然后并行地把这些小操作交给对应的不同处理单元去处理,就如同工厂里的流水线上,将一个大的产品的各个部件分配给各个负责处理不同部件的工人,最后得到一个完整的产品。执行了这些分支之后,处理器会在真正进入分支时确定已经执行的分支是不是真正要执行的分支,如果不是,那么就清除刚才的所有操作,就像是在版本控制软件里回退一样。

这个漏洞能干什么?

在这样的背景条件下,问题出现了。在预测执行的时候,执行的代码可以无视所有的权限设置以及进程隔离机制,想干嘛就干嘛。说得夸张点,就是回到了 DOS 的时代,病毒横行霸道,因为根本没有任何的隔离机制。有人可能会问,这个漏洞的影响是什么?这个漏洞很可怕,它可以使得攻击者能够读取内存中的任意区域的数据。

举个例子,一个密码存在硬盘里,攻击者是无法读取的。但是程序运行的时候,它可能会被加载到内存里,程序会使用它进行一些计算。一般说来,别人是无法访问这块保存了你的密码的这块内存的,但是通过利用这个漏洞,没什么是不能读取的,于是攻击者就大摇大摆拿走了你的密码,然后通过网络发送到了自己的服务器上,你的账号就被黑了。

再举个例子,因为可以读取任意的内存,那么虚拟机和各种容器技术将变得不再可靠。过去,安全工程师常常会在虚拟机里运行恶意软件来分析它们的行为。运行在虚拟机里的软件无法读取实体机上的数据,因为它们被隔离了。但是通过这个漏洞,没有什么不可能。另外,在云计算厂商的数据中心里,一般都跑着很多虚拟机,它们用的虚拟化技术造成了隔离,使得同一台实体机上的不同虚拟机无法访问彼此。但是通过这个漏洞,你只要买下一个 VPS ,就可以读取这个节点上其他人的 VPS 里的数据!在服务器上的数据一般都是很敏感的,所以这个漏洞的影响也是十分可怕的。另外,许多服务器都使用了 Docker 这个虚拟化技术,它的原理也是基于 Linux 操作系统提供的进程分组隔离技术,所以自然也会受到影响。

许多浏览器使用了沙箱一类的技术,使得不同的网页之间无法互相读取对方的数据。夸张点说,有了这个漏洞,一行 JS 获取密码将不是梦。现在 Google Chrome 已经发布了更新来修复这个问题,但是也无法确保不会有更多的利用方法被爆出来。

各方的说法

现在在网上公示的有三个洞,分别是 CVE-2017-5753CVE-2017-5715CVE-2017-5754 。它们对应了两种攻击方法: Meltdown 和 Spectre 。这两种攻击方法都给出了 POC 和论文。

  • Google 说所有的处理器都受到了 Spectre 的影响,而 Meltdown 主要影响 Intel 的处理器。
  • Intel 说它们已经发布了修复的补丁,但是没有提到性能损失。
  • AMD 说自己架构不同,所以没有什么影响。

目前各个操作系统,包括 Windows 、Linux 、MacOS X 和 Android 都有了对应的补丁。据传 Intel 的修复方法,使用了一个叫作 KAISER 的技术,它把内核空间与用户空间的页表分离开来。但是这又造成了一定的性能损失,论文里说的是 0.35% ,而也有传闻说 Intel 芯片的性能损失可以达到 5% 。

虽然 Spectre 的危害更加严重,但是要找到它的利用方法也十分不容易。所以现在还不必担心安全问题。只要赶紧更新系统,就可以避免危害了。但是英特尔的各位……算了不说了,我也是用英特尔的。

写在最后

“脏牛”、“心脏出血”这些漏洞,造成的影响也非常的大。这些漏洞所处的位置通常是我们接触不到的地方:操作系统内核、芯片、加密通信库之类。而正是这些东西,被如此广泛地使用,如果这些东西出了漏洞,那就会造成一场大的风波。

我有一个执念:如果出现了什么问题,那就从底层找原因。所以我更喜欢去研究一些看不到的东西,例如服务器的结构,操作系统里面的机制,解释器的工作原理。一旦钻入了底层,那就进入了一个非常广阔的世界,这里面的东西真是穷尽一生也没法全部掌握。而越是底层的东西,在经过重重的间接关联后,对顶层的影响是十分巨大的。说到这里又想起了 P 与 NP 问题,要是这个问题被解决,那么 RSA 算法也就被撼动了根基,进一步就会影响所有的网络加密通信。

扯远了扯远了。那么最后总结下来就是:千里之堤,毁于蚁穴。

参考链接

Freebuf 上的新闻: http://www.freebuf.com/news/159135.html

KAISER 的论文: https://gruss.cc/files/kaiser.pdf

Meltdown 和 Spectre: https://meltdownattack.com/

The mysterious case of the Linux Page Table Isolation patches

Today’s CPU vulnerability: what you need to know

CC BY-NC-SA 4.0 英特尔芯片漏洞的大新闻 by James & Alice is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.

英特尔芯片漏洞的大新闻》上有2条评论

    • 我觉得其实还好吧。虽然表面上看上去危害不大,自己好像也没遇到什么问题,但是那主要是因为服务器那边受到的影响比较大。如果不是安全人员日以继夜的修补,估计各位的账号不知道被日了多少次了。包括现在的 wordpress 都是有很多漏洞,虽然只要更新就可以避免被害,但是也有人不注意这个的,就容易被拿 shell 或者挂马之类的。
      再说挂马,现在的现代浏览器已经很少能够让你挂马入侵了。但是还有很多用户群体根本不知道什么是操作系统什么是浏览器,他们的浏览器可能还是万年不更新的 IE 8,这也就是为什么挂马一直都能有效果。如果大家都用 Chrome 或者 Firefox,那其实就很难受害了。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

To create code blocks or other preformatted text, indent by four spaces:

    This will be displayed in a monospaced font. The first four 
    spaces will be stripped off, but all other whitespace
    will be preserved.
    
    Markdown is turned off in code blocks:
     [This is not a link](http://example.com)

To create not a block, but an inline code span, use backticks:

Here is some inline `code`.

For more help see http://daringfireball.net/projects/markdown/syntax

This site uses Akismet to reduce spam. Learn how your comment data is processed.