什么是 Meltdown/Spectre?

Meltdown 和 Spectre 是影响大多数 PC 和智能手机的新处理器漏洞。用户可以安装修补程序,但它们会影响处理器性能。

Share facebook icon linkedin icon twitter icon email icon

Meltdown/Spectre(熔毁/幽灵)

学习目标

阅读本文后,您将能够:

  • 定义并区分 Meltdown 和 Spectre
  • 描述推测执行的工作方式
  • 说明 Meltdown 修补程序对处理器速度的影响

什么是 Meltdown/Spectre?

Meltdown 和 Spectre 是最近在 Intel、AMD、Apple 和 ARM 处理器芯片中发现的漏洞。这些漏洞由相关芯片的严重设计缺陷引起,由于发现了这个问题,开发人员不得不重新设计 Windows、Mac 和 Linux 操作系统软件,以防护漏洞并防止攻击者加以利用。

这些漏洞由 Google Project Zero 的研究人员发现,该团队致力于及时发现安全漏洞,以免遭攻击者利用。截至目前,尚未发现有人利用 Meltdown 或 Spectre 漏洞。Apple、Intel 和 Microsoft 等主要技术公司的安全团队以及开源 Linux 开发人员现在都投入了大量资源,试图确保其处理器和操作系统的安全性,以免遭到恶意利用。

谁会受到 Meltdown 和 Spectre 漏洞的影响?

除了少数例外,所有 PC 和/或智能手机所有者都面临危险。根据 Google 提供的信息,1995 年以后生产的所有装有 Intel 处理器芯片的设备都会受到影响。AMD 和 ARM 更难被利用,但它们同样有风险。

如何防范 Meltdown/Spectre 漏洞?

除更换 PC 处理器以外,消除漏洞的唯一方法是修补操作系统。苹果在 12 月初悄悄针对 OSX 推出了 Meltdown 修补程序,微软在 1 月 3 日发布了 Windows 修补程序,而 Linux 开发人员仍在创建修补程序。

很遗憾,这些 Meltdown 修补程序有一个副作用:由于设计原因,计算机安装带修补程序的操作系统后,其处理速度会减缓。速度减缓会导致性能下降大约 5-30%,这在很大程度上取决于芯片的类型和所执行的任务。

Meltdown 和 Spectre 漏洞的实际工作方式是怎样的?

Meltdown 和 Spectre 都是在执行称为“内核代码”的特殊低级代码时创建的漏洞,内核代码专门在“推测执行”期间运行。

什么是推测执行?

用比喻来解释推测执行,或许是最简单的办法。想象一个徒步旅行者在树林里迷了路,他遇到了一个岔路口,分别通向两条大致平行的路。其中一条通往她家,另一条则不是。她没有浪费时间等待其他远足者给她指路,而是选择了她认为最有可能通向家中的那条路。在途中某个地方,她遇到了一个路标,如果路标告知她走的是正确的路,那么她会继续沿着那条路回家。如果路标告诉她走错了,她会迅速返回并改走另一条路,这并不比她一直呆在原地寻找方向更差。

推测执行

许多现代处理器采用一种叫做“推测执行”的类似技术:CPU 尝试猜测下一步需要执行什么代码,在收到请求前即开始执行该代码。如果事实证明不需要执行该代码,则撤销更改。这是为了节省时间并加快性能。

关于 Meltdown/Spectre 漏洞的报告表明,Intel CPU 可能在无需进行重要安全检查的情况下,对代码进行推测执行操作。或许,可以编写软件来检查处理器是否已执行通常会被这些安全检查阻止的指令。

对推测执行的不当处理会引起 CPU 漏洞,攻击者可能利用该漏洞访问内核内存中的高度敏感数据,例如密码、加密密钥、个人照片、电子邮件等。

那么,什么是内核?

内核是位于计算机操作系统核心的程序。它具有对操作系统的完全控制权,并负责管理启动、内存处理等所有流程。内核还负责将数据处理指令发送到 CPU(中央处理单元)。大多数 CPU 一直在内核模式和用户模式之间来回切换。

内核模式和用户模式有什么区别?

在内核模式下,CPU 执行的代码可以不受限制地访问计算机的硬件和内存。此模式通常专用于最低级别和最受信任的操作。若在 CPU 处于内核模式时发生崩溃,就可能是灾难性的;它们可能会使整个操作系统崩溃。

在用户模式下,正在执行的代码无法访问硬件或参考内存,相反,必须委托系统 API 进行访问(拥有适当权限的用户模式软件可以请求某些内核模式功能,然后系统 API 可以运行这些功能)。用户模式崩溃通常是孤立的,并且可以恢复。大多数代码在用户模式下执行。

为什么 Meltdown 修补程序会降低性能?

Meltdown 修补程序中的修复功能将内核的内存与用户进程进行更显著的分离。这是通过称为内核页表隔离(KPTI)的方法完成的。KPTI 将内核模式操作移到与用户模式操作完全分开的地址空间中。这意味着需要花费大量时间,在内核模式和用户模式之间切换。

为了说明这一点,假设有一辆快餐车,只出售两种东西:热狗和冷柠檬水。快餐车内的员工可以轻松到达装热狗的蒸锅和装冷柠檬水的冷却器,快速地为顾客服务。现在,假设健康检查员来了,要求将冷热食品存放在不同的场所。现在,员工仍然可以直接拿取热狗,但必须走出快餐车,然后沿着街边走到取柠檬水的地方。这样,等候的队列将移动得慢得多,尤其是在顾客订购大量柠檬水的情况下。KPTI 降低操作系统性能的原理与此类似。

Meltdown 和 Spectre 有什么区别?

Meltdown 和 Spectre 都是因处理器处理推测执行的方式而导致的漏洞,但它们的工作方式及其影响的处理器类型有所不同。

Meltdown 仅影响 Intel 和 Apple 处理器,并可能遭到利用,泄露处理器在推测执行期间执行代码时暴露的信息。Meltdown 比 Spectre 更容易遭到利用,安全专家标记其具有更大的风险。值得庆幸的是,Meltdown 可以更容易和更直接地修补。

Spectre 会影响 Intel、Apple、ARM 和 AMD 处理器,攻击者可以利用该漏洞,真正诱使处理器运行其不应运行的代码。据 Google 的安全专家称,Spectre 比 Meltdown 更难利用,但也更难防护。

想要了解有关 Meltdown 和 Spectre 的更多信息?

如果您想了解与它们相关的更多技术细节,可以查看完整的 Meltdown 论文Spectre 论文