如何缓解 Linux 系统上的 Spectre 和 Meltdown 漏洞?

GAD*_*D3R 36 linux x86 vulnerability

安全研究人员在Project Zero上发布了一个名为 Spectre 和 Meltdown 的新漏洞,允许程序从其他程序的内存中窃取信息。它影响 Intel、AMD 和 ARM 架构。

可以通过访问 JavaScript 网站远程利用此漏洞。技术细节上可以找到redhat的网站Ubuntu的安全团队

通过推测执行侧通道攻击(CVE-2017-5715、CVE-2017-5753、CVE-2017-5754 aka Spectre 和 Meltdown)导致的信息泄漏

发现一类新的旁道攻击会影响大多数处理器,包括来自 Intel、AMD 和 ARM 的处理器。该攻击允许恶意用户空间进程读取内核内存,并允许来宾中的恶意代码读取管理程序内存。为了解决这个问题,需要更新 Ubuntu 内核和处理器微码。这些更新一旦可用,将在未来的 Ubuntu 安全通知中公布。

JavaScript 中的示例实现

作为概念验证,编写的 JavaScript 代码在 Google Chrome 浏览器中运行时,允许 JavaScript 从其运行的进程中读取私有内存。

我的系统似乎受到了幽灵漏洞的影响。我已经编译并执行了这个概念验证 ( spectre.c)。

系统信息:

$ uname -a
4.13.0-0.bpo.1-amd64 #1 SMP Debian 4.13.13-1~bpo9+1 (2017-11-22) x86_64 GNU/Linux

$ cat /proc/cpuinfo
model name  : Intel(R) Core(TM) i3-3217U CPU @ 1.80GHz

$gcc --version
gcc (Debian 6.3.0-18) 6.3.0 20170516
Run Code Online (Sandbox Code Playgroud)

如何缓解 Linux 系统上的 Spectre 和 Meldown 漏洞?

进一步阅读:使用 Meltdown 实时窃取密码

更新

Spectre & Meltdown Checker4.9.0-5@Carlos Pasqualini 回答之后使用后切换到内核版本,因为安全更新可用于缓解 debian Stretch 上的 cve-2017-5754:

CVE-2017-5753 [bounds check bypass] aka 'Spectre Variant 1'
* Checking count of LFENCE opcodes in kernel:  NO  (only 31 opcodes found, should be >= 70)
> STATUS:  VULNERABLE  (heuristic to be improved when official patches become available)

CVE-2017-5715 [branch target injection] aka 'Spectre Variant 2'
* Mitigation 1
*   Hardware (CPU microcode) support for mitigation:  NO 
*   Kernel support for IBRS:  NO 
*   IBRS enabled for Kernel space:  NO 
*   IBRS enabled for User space:  NO 
* Mitigation 2
*   Kernel compiled with retpoline option:  NO 
*   Kernel compiled with a retpoline-aware compiler:  NO 
> STATUS:  VULNERABLE  (IBRS hardware + kernel support OR kernel with retpoline are needed to mitigate the vulnerability)

CVE-2017-5754 [rogue data cache load] aka 'Meltdown' aka 'Variant 3'
* Kernel supports Page Table Isolation (PTI):  YES 
* PTI enabled and active:  YES 
> STATUS:  NOT VULNERABLE  (PTI mitigates the vulnerability)
Run Code Online (Sandbox Code Playgroud)

2018 年 1 月 25 日更新

spectre-meltdown-checker脚本由 debian 正式打包,可通过backports 存储库、Buster 和 Sid用于 Debian Stretch

更新05/22/2018

Speculative Store Bypass (SSB) – 也称为变体 4

在所有先前存储器写入的地址已知之前,具有利用推测执行和存储器读取推测执行的微处理器的系统可能允许通过旁道分析向具有本地用户访问权限的攻击者未经授权地披露信息。

恶意系统寄存器读取 (RSRE) – 也称为变体 3a

带有利用推测执行和对系统寄存器进行推测读取的微处理器的系统可能允许通过旁道分析向具有本地用户访问权限的攻击者未经授权披露系统参数。

编辑 2018 年 7 月 27 日

NetSpectre:通过网络读取任意内存

在本文中,我们提出了 NetSpectre,这是一种基于 Spectre 变体 1 的新攻击,不需要目标设备上的攻击者控制代码,从而影响数十亿设备。与本地 Spectre 攻击类似,我们的远程攻击需要目标代码中存在 Spectre 小工具。我们表明,在暴露的网络接口或 API 中包含所需 Spectre 小工具的系统可以使用我们的通用远程 Spectre 攻击进行攻击,从而允许通过网络读取任意内存。攻击者只向受害者发送一系列精心设计的请求,并测量响应时间以从受害者的内存中泄露一个秘密值。

小智 12

Alan Cox 分享了来自 AMD 博客的链接:https : //www.amd.com/en/corporate/speculative-execution

变体一:边界检查绕过

由系统供应商和制造商提供的软件/操作系统更新解决。预期的性能影响可以忽略不计。

变体二:分支目标注入

AMD 架构的差异意味着利用该变体的风险几乎为零。迄今为止,尚未在 AMD 处理器上证明 Variant 2 的漏洞。

变体三:恶意数据缓存加载

由于 AMD 架构差异,零 AMD 漏洞。

不过,最好能得到第三方对这些 AMD 声明的确认。

受影响系统上的“缓解”需要新内核和重新启动,但在许多发行版中,尚未发布包含修复程序的软件包:

Debian:

我发现的其他信息来源:

  • 一大堆 AMD 信息对 CPU 是 Intel Core 的提问者没有帮助。 (12认同)
  • 对于 Linux 内核,请参阅 Greg Kroah-Hartman 的帖子:http://kroah.com/log/blog/2018/01/06/meltdown-status/ (5认同)

Win*_*nix 11

2018 年 1 月 27 日英特尔微码破坏了一些系统

用于解决推测执行分支安全漏洞的英特尔微代码更新 2018-01-08破坏了一些系统。从 1 月 8 日到 1 月 21 日,这影响了许多 Ubuntu 系统。2018 年 1 月 22 日,Ubuntu 发布了一个更新,该更新从 2​​017 年 7 月 7 日起放回了较旧的微码。

如果您在 2018-01-08 和 2018-01-22 之间遇到更新问题、重新安装 Ubuntu 并关闭更新,您可能需要再次尝试 Ubuntu 自动更新。

2018 年 1 月 16 日更新了 4.14.14 和 4.9.77 中的 Spectre

如果您已经像我一样在运行内核版本 4.14.13 或 4.9.76,那么安装它们是很容易的,4.14.14并且4.9.77当它们在几天内出现以减轻 Spectre 安全漏洞时。此修复程序的名称是Retpoline,并且没有之前推测的严重性能损失

Greg Kroah-Hartman 已经发布了 Linux 4.9 和 4.14 点版本的最新补丁,其中现在包括 Retpoline 支持。

此 X86_FEATURE_RETPOLINE 已为所有 AMD/Intel CPU 启用。要获得全面支持,您还需要使用包含 -mindirect-branch=thunk-extern 支持的较新 GCC 编译器构建内核。GCC 更改昨天已在 GCC 8.0 中登陆,并且可能会向后移植到 GCC 7.3。

那些想要禁用 Retpoline 支持的人可以使用noretpoline引导打补丁的内核。

这里没有深入了解 JavaScript 的细节是如何立即避免 Meltdown 漏洞(以及截至 2018 年 1 月 10 日的 Spectre 保护)

2018 年 1 月 12 日更新

来自Spectre 的初步保护就在这里,并将在未来数周和数月内得到改进。

Linux 内核 4.14.13、4.9.76 LTS 和 4.4.111 LTS

来自这篇Softpedia 文章

Linux 内核 4.14.13、4.9.76 LTS 和 4.4.111 LTS 现在可以从 kernel.org 下载,它们包括针对 Spectre 安全漏洞的更多修复,以及 Linux 4.14.12、4.9 的一些回归上周发布了 .75 LTS 和 4.4.110 LTS 内核,因为有些人报告了一些小问题。

这些问题现在似乎已修复,因此可以安全地将基于 Linux 的操作系统更新到今天发布的新内核版本,其中包括更多 x86 更新、一些 PA-RISC、s390 和 PowerPC (PPC) 修复以及对驱动程序(Intel i915、crypto、IOMMU、MTD)以及通常的 mm 和核心内核更改。

许多用户在 2018 年 1 月 4 日和 2018 年 1 月 10 日遇到 Ubuntu LTS 更新问题。我已经使用4.14.13了几天没有任何问题,但是YMMV


2018 年 1 月 7 日更新

Greg Kroah-Hartman昨天写了一篇关于 Meltdown 和 Spectre Linux 内核安全漏洞的状态更新。有些人可能会称他为 Linux 世界中仅次于 Linus 的第二个最有权势的人。本文讨论了大多数 Ubuntu 用户拥有的稳定内核(在下面讨论)和 LTS 内核。


Linux 内核 4.14.11、4.9.74、4.4.109、3.16.52 和 3.2.97 补丁熔毁缺陷

这篇文章

敦促用户立即更新他们的系统

2018 年 1 月 4 日 01:42 GMT · 作者:Marius Nestor

Linux 内核维护者 Greg Kroah-Hartman 和 Ben Hutchings 发布了 Linux 4.14、4.9、4.4、3.16、3.18 和 3.12 LTS(长期支持)内核系列的新版本,这些内核系列显然修补了影响大多数现代的两个关键安全漏洞之一处理器。

Linux 4.14.11、4.9.74、4.4.109、3.16.52、3.18.91 和 3.2.97 内核现在可以从 kernel.org 网站下载,并敦促用户更新他们的 GNU/Linux 发行版如果这些新版本立即运行任何这些内核系列。为什么要更新?因为他们显然修补了一个名为 Meltdown 的严重漏洞。

如前所述,Meltdown 和 Spectre 是两个漏洞,几乎影响了过去 25 年发布的现代处理器 (CPU) 驱动的所有设备。是的,这意味着几乎所有的手机和个人电脑。Meltdown 可以被非特权攻击者利用来恶意获取存储在内核内存中的敏感信息。

Spectre 漏洞补丁仍在开发中

虽然 Meltdown 是一个严重的漏洞,可以暴露您的秘密数据,包括密码和加密密钥,但 Spectre 更糟糕,而且不容易修复。安全研究人员表示,它会困扰我们很长一段时间。众所周知,Spectre 会利用现代 CPU 使用的推测执行技术来优化性能。

在修补 Spectre 错误之前,强烈建议您至少将 GNU/Linux 发行版更新到任何新发布的 Linux 内核版本。因此,请在您最喜欢的发行版的软件存储库中搜索新的内核更新并尽快安装。不要等到为时已晚,现在就去做!


我已经使用 Kernel 4.14.10 一个星期了,所以下载和启动 Ubuntu Mainline Kernel 版本4.14.11对我来说并不太在意。

Ubuntu 16.04 用户可能更喜欢与 4.14.11 同时发布的 4.4.109 或 4.9.74 内核版本。

如果您的常规更新没有安装您想要的内核版本,您可以按照这个 Ask Ubuntu 答案手动安装:https : //askubuntu.com/questions/879888/how-do-i-update-kernel-to-the-latest -主线版本/879920#879920


4.14.12 - 一天有什么不同

在我最初回答后不到 24 小时,发布了一个补丁来修复他们可能已经匆忙推出的 4.14.11 内核版本。建议所有 4.14.11 用户升级到4.14.12格雷格-KH 说

我宣布发布 4.14.12 内核。

4.14内核系列的所有用户都必须升级。

此版本中仍然存在一些人们遇到的小问题。希望它们能在本周末得到解决,因为补丁还没有落在 Linus 的树上。

现在,一如既往,请测试您的环境。

查看此更新并没有更改很多源代码行。


小智 6

可以通过访问 JavaScript 网站远程利用此漏洞。

的确。因此,一种明智的缓解措施是在您的 Web 浏览器中禁用 JavaScript,或使用不支持 JavaScript 的 Web 浏览器。

大多数支持 JavaScript 的浏览器都有禁用它的设置。或者,如果您希望维护允许 JavaScript 的站点或域的白名单,那么有各种附加组件可以提供帮助,例如uBlock OriginNoScript

NB 不用说,禁用/限制 JavaScript 不应该是您唯一的缓解措施。一旦编写、测试和发布任何相关的内核修复程序和其他安全更新,您还应该额外检查(并可能应用)它们。在Debian衍生的分布,使用命令 sudo apt updatesudo apt list-upgradable,和sudo apt upgrade

更新:不要相信我的话。Alan Cox 也说了很多相同的话:

你需要大约关心什么大的时候是JavaScript的,因为可以远程使用由JavaScript网页上,从系统内存偷东西的漏洞。... 考虑像 Adblockers 这样的东西和像 noscript 这样的扩展程序,它们可以首先阻止大量垃圾运行。尽快这样做。当操作系统更新出现时应用它们。(来源

  • 对不起,虽然这有助于对抗 attac,但如果没有 JS,您将无法在这里留下答案。这个建议类似于“停止使用互联网”(2018 年)。 (5认同)
  • @MoritzBoth,谢天谢地,许多网站在没有 JS 的情况下运行良好。遗憾的是,正如您所指出的,StackExchange 确实需要 JS 才能发布。这是 SE 中的(严重!)缺点 :( (4认同)
  • 对于 FireFox 来说,[noScript](https://noscript.net/) 之类的插件 _might_ 有助于减少 JavaScript 在可疑站点上的使用——尽管 FF Quantum (V57) 带来的最近变化已经在整个FF插件池... (3认同)
  • 自从 Quantum 发布以来,我已经切换到 Pale Moon,正是出于这个原因。非常适合我,包括 NoScript 和 Cookie Masters(曾经是 Cookie Monster)。 (2认同)
  • @MoritzBoth 我*真的不认为*禁用 JS 等于“停止使用网络”,更不用说“停止使用互联网”了。然而,现在是提高对来自*某些*网络内容提供商的普遍依赖 JS 的问题的认识的好时机。 (2认同)

小智 6

使用 JavaScript 可以利用这一点并不是重点,也不应该是主要关注点(尽管这是一个主要问题,因为这样可以轻松地在您的系统上执行远程代码,但这不是唯一的问题)这可能发生的方式)。

您不应该关注 Javascript 和/或浏览器。理想情况下,您的 CPU 应该打补丁。不幸的是,对于当前的大多数错误浪潮,这似乎是不可能的。Debian 和所有其他操作系统提供方将共同采取唯一的其他可能的方式来推荐没有缺陷的 CPU:他们迫使系统解决 CPU 中的错误。这些补丁不能解决问题。相反,操作系统会尽可能地将它们隐藏在用户在机器上运行的任何程序(以及您的浏览器)中。

这种隐藏是额外的计算工作,因此您的整体系统性能将低于没有。低多少可能在很大程度上取决于这些程序的作用。

考虑到这一点,回到您的问题:您可以做些什么来保护您的 Debian 系统,那就是安装安全更新。我相信 Debian 会根据这些错误尽一切可能尽可能安全地运行 Debian,尽管 CPU 存在固有缺陷。

各种大公司已经在研究这个问题,许多硬件和 Linux 专家也是如此。我不想绝对阻止你自己尝试一些东西或试图帮助一般的努力。但是,如果您只对自己的安全性和及时修复感兴趣,那么他们很可能会在比您更短的时间内找到更好的解决方案,现在就开始自己研究这个问题。