/proc/cpuinfo 的“bugs”部分实际上显示了什么?

/proc/cpuinfo 的“bugs”部分实际上显示了什么?

在具有当前内核和已安装微代码的 Debian Stretch 和测试/Buster 系统上,我仍然看到 Meltdown 和 Spectre 在/proc/cpuinfo.

然而,运行spectre-meltdown-checker显示并不容易受到攻击。

所以我想知道/proc/cpuinfo显示了什么。这些只是该 cpu 的漏洞吗?尽管系统已打补丁,但这些漏洞是否仍会始终列出?

答案1

/proc/cpuinfo提交消息中描述了“bugs”字段的意图介绍了它:

x86/cpufeature:添加错误标记/proc/cpuinfo

以与功能标志类似的方式转储表示我们已检测到和/或已将错误解决方法应用到我们正在执行的 CPU 上的标志。

优点是这些特性不会像 CPU 特性那样随着时间的推移而积累。

以前,内核检测到的硬件错误被列为单独的功能例如臭名昭著的 F00F 错误,它在 32 位 x86 系统上有自己的f00f_bug条目)。/proc/cpuinfo引入“bug”条目是为了将这些问题保存在一个单一的功能中,其风格与x86 CPU 标志

至于这些条目在实践中的含义,正如您在消息中所看到的,所保证的是内核检测到硬件错误。您需要查看其他地方(启动消息或特定/proc条目或/sys诸如 中的文件之类的条目/sys/devices/system/cpu/vulnerabilities/)以确定问题是否已得到处理。

“bug”条目的有用性受到两个方面的限制。首先,无法区分真负数和未知数:如果该字段未指定“cpu_meltdown”,您无法(仅从该字段)知道这是否意味着内核不知道 Meltdown,或者您的 CPU 不会受到 Meltdown 的影响。第二是检测过于简单化;它宁可过于谨慎,也可能会报告您的 CPU 易受攻击,但实际上并非如此。由于“检测”是表驱动的,因此其准确性取决于您正在运行的内核版本。

对于 Meltdown 和 Spectre 错误,检测过程会提供以下值:/proc/cpuinfo 工作原理如下,在 x86 上:

  • 如果CPU不进行任何猜测(486 级、一些 Pentium 级、一些 Atoms),它没有被标记为受 Meltdown 或 Spectre 影响;
  • 所有剩余的 CPU 都被标记为受 Spectre 变体 1 和 2 的影响(无论微代码版本等如何);
  • 如果CPU未被列为不易受到投机性商店旁路影响,如果其微代码未声明可缓解 SSB,并且 CPU 未声明可缓解 SSB,则将其标记为受 SSB 影响;
  • 如果CPU未被列为不易受到 Meltdown 影响(AMD),如果它的微代码没有声称可以缓解 Meltdown,那么它就会被标记为受 Meltdown 影响。

答案2

Meltdown/Spectre 漏洞存在于 CPU 芯片组设计/架构上,并且无需购买新的未来硬件,这些补丁只是一个很好的安全假象从长远来看。随着时间的推移,利用这些缺陷的新方法可能会出现,能够绕过当前的补丁。

简而言之,当前的软件补丁/微码缓解针对 Spectre/Meltdown 系列漏洞利用的已知方法的问题,但并没有解决首先允许它们的底层 CPU 设计问题。从长远来看,受影响的(几代)CPU 并没有停止受到攻击(而且很可能永远不会)。

然而,正如 @Gilles 正确指出的那样,发出该警告并不意味着当前已知的 Spectre/Meltdown 漏洞利用方法将起作用;如果安装了补丁,它们将无法工作。

在问题中提到的情况下,内核仅检查已知受 Spectre/Meltdown 影响的 CPU 型号(如果我们只讨论 x86,则目前所有 x86 CPU),因此cpu-insecure仍列在错误部分中/行中/proc/cpuinfo

去检查一下你的/proc/cpuinfo.如果您的内核有 KPTI 补丁,它将包含 cpu_insecure

我发现KPTI补丁中有这样一段代码:

   /* Assume for now that ALL x86 CPUs are insecure */
   setup_force_cpu_bug(X86_BUG_CPU_INSECURE);

内核更新后,您将得到:

bugs      : cpu_insecure

附言。利用 Spectre/Meltdown“bug”的新方法已经进行了一轮更新。这可能不会是最后一次。

相关内容