如何保护您的服务器免受Meltdown和Spectre漏洞的影响
什么是熔毁和幽灵?
2018 年 1 月 4 日,现代 CPU 设计中的多个漏洞被披露。 利用某些处理器性能优化,这些名为 Meltdown 和 Spectre 的漏洞使攻击者可以强制应用程序在正确操作时泄露系统和应用程序内存的内容。 这些攻击之所以有效,是因为处理器内的正常权限检查行为被推测执行、分支预测、乱序执行和缓存等特性的交互破坏了。
在 CVE-2017-5754 中披露了崩溃。 Spectre 在 CVE-2017-5753 和 CVE-2017-5715 中公开。
有关更多详细信息,请查看下面的 熔毁如何工作? 和 幽灵如何工作? 部分。
我受到 Meltdown 和 Spectre 的影响吗?
Meltdown 和 Spectre 影响了大多数现代处理器。 这些漏洞中使用的处理器优化是大多数 CPU 的核心设计功能,这意味着大多数系统在专门修补之前都是易受攻击的。 这包括在云环境中运行的台式计算机、服务器和计算实例。
操作系统供应商正在发布防止 Meltdown 的补丁程序。 虽然也为 Spectre 发布了更新,但它代表了一整类漏洞,因此可能需要更广泛的持续修复。
在云和虚拟化环境中,提供商将需要更新底层基础设施来保护他们的客人。 用户将需要更新他们的服务器以减轻对来宾操作系统的影响。
我该如何保护自己?
针对此类漏洞的全面保护可能需要更改 CPU 设计。 在此期间,软件更新可以通过禁用或解决导致这些漏洞的某些优化行为来缓解漏洞。
不幸的是,由于这些补丁会影响处理器内的优化例程,因此缓解补丁可能会降低服务器的性能。 减速的程度很大程度上取决于正在执行的工作类型,I/O 密集型进程受到的影响最大。
当前缓解补丁状态
在撰写本文时(2018 年 1 月 9 日),Linux 发行版已开始分发补丁,但尚未完全修补任何发行版。
已发布带有 部分缓解 (针对 Spectre 的 Meltdown AND 变体 1 进行了修补)的内核更新的发行版包括:
- CentOS 7:内核 3.10.0-693.11.6
- CentOS 6:内核 2.6.32-696.18.7
已发布带有 部分缓解 (针对 Meltdown 进行修补)的内核更新的发行版包括:
- Fedora 27:内核 4.14.11-300
- Fedora 26:内核 4.14.11-200
- Ubuntu 17.10:内核 4.13.0-25-generic
- Ubuntu 16.04:内核 4.4.0-109-generic
- Ubuntu 14.04:内核 3.13.0-139-generic
- Debian 9:内核 4.9.0-5-amd64
- Debian 8:内核 3.16.0-5-amd64
- Debian 7:内核 3.2.0-5-amd64
- Fedora 27 Atomic:内核 4.14.11-300.fc27.x86_64
- CoreOS:内核 4.14.11-coreos
如果您的内核至少更新到与上述对应的版本,则已应用了一些更新。
具有 尚未发布具有缓解 内核的操作系统包括:
- FreeBSD 11.x
- FreeBSD 10.x
将于 2018 年 1 月 13 日结束生命周期的 Ubuntu 17.04 将不会收到补丁 。 强烈建议用户更新或迁移。
警告: 我们强烈建议您更新或迁移任何已结束生命周期的版本。 这些版本 不会 接收针对 Meltdown 和 Spectre 等漏洞的关键安全更新,这些漏洞可能会使您的系统和用户面临风险。
由于此漏洞的严重性,我们建议在更新可用时应用更新,而不是等待完整的补丁集。 这可能需要您在接下来的几天和几周内多次升级内核并重新启动。
如何应用更新?
要更新您的服务器,您需要在有可用于您的发行版的补丁后更新您的系统软件。 您可以通过运行常规软件包管理器来下载最新的内核版本,然后重新启动服务器以切换到修补代码来进行更新。
注意: 这篇文章是为了普遍适用和平台无关而写的。 如果您使用 DigitalOcean 作为您的托管服务提供商并运行较旧的 Droplet,您可能需要在开始之前执行一个额外的步骤。
DigitalOcean 的旧内核管理系统使用可以在控制面板中更改的外部管理内核。 如果您的 Droplet 使用此系统,您需要先将其配置为使用 内部内核管理 ,然后再继续(较新的 Droplet 自动使用此系统)。 要检查您是否需要更新到内部内核并了解如何进行切换,请阅读我们的 如何更新 DigitalOcean 服务器的内核 文章。
对于 Ubuntu 和 Debian 服务器,您可以通过刷新本地软件包索引然后升级系统软件来更新系统软件:
sudo apt-get update sudo apt-get dist-upgrade
对于 CentOS 服务器,您可以通过键入以下内容下载并安装更新的软件:
sudo yum update
对于 Fedora 服务器,请改用 dnf
工具:
sudo dnf update
无论操作系统如何,一旦应用更新,重新启动服务器以切换到新内核:
sudo reboot
服务器重新联机后,登录并根据上面的列表检查活动内核,以确保您的内核已升级。 经常检查新的更新,以确保您收到更多可用的补丁。
附加上下文
Meltdown 和 Spectre 系列漏洞利用现代处理器中的性能增强功能。 推测执行、特权检查、乱序执行和 CPU 缓存等处理器功能的组合允许对应该越界的内存位置进行读取访问。 结果是非特权程序可以被强制从其内存中泄露敏感数据或从内核或其他应用程序访问特权内存。
熔断是如何运作的?
Meltdown 漏洞通过利用称为推测执行的 CPU 优化中的缺陷来诱使处理器读取越界内存位置。 一般的想法是这样的:
- 请求非法内存位置。
- 如果第一个请求包含某个值,则发出第二个请求以有条件地读取有效的内存位置。
- 使用推测执行,处理器在检查初始请求是否无效之前完成两个请求的后台工作。 一旦处理器了解请求涉及越界内存,它就会正确拒绝这两个请求。 尽管在特权检查代码将内存访问识别为无效后,处理器不会返回结果,但这两个访问的位置都保留在处理器的缓存中。
- 现在对有效的内存位置进行了新的请求。 如果返回很快,则说明该位置已经在 CPU 缓存中,说明之前的条件请求已被执行。 这些条件的迭代使用可用于理解越界内存位置中的值。
Meltdown 代表可以修补的特定漏洞。
幽灵是如何工作的?
Spectre 还通过欺骗处理器滥用推测执行来读取受限值来工作。 披露通知描述了 两个变体 ,具有不同级别的复杂性和影响。
对于 Spectre 的 变体 1,处理器被欺骗在强制执行边界检查之前推测性地执行读取。 首先,攻击者鼓励处理器推测性地到达其有效边界之外的内存位置。 然后,像 Meltdown 一样,附加指令根据越界值有条件地将合法地址加载到缓存中。 计算之后检索合法地址所需的时间可以揭示它是否已加载到缓存中。 反过来,这可以揭示越界内存位置的值。
Spectre 的 变体 2 是最复杂的利用和缓解措施。 处理器经常推测性地执行指令,即使它们遇到尚无法评估的条件语句。 他们通过使用称为分支预测的机制猜测条件的最可能结果来做到这一点。
分支预测通过代码路径使用先前运行的历史来选择推测性执行的路径。 攻击者可以使用它来启动处理器以做出不正确的推测性决定。 因为分支选择历史不存储对决策的绝对引用,所以即使在另一部分代码中训练时,处理器也可能被欺骗选择代码的一部分中的分支。 这可以被利用来揭示可接受范围之外的内存值。
结论
Spectre 和 Meltdown 代表严重的安全漏洞; 它们可能产生的影响的全部潜力仍在发展中。
为了保护您自己,请在供应商发布补丁时警惕更新您的操作系统软件,并继续监控与 Meltdown 和 Spectre 漏洞相关的通信。