在具有当前内核和已安装微代码的 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”的新方法已经进行了一轮更新。这可能不会是最后一次。