如何验证内核为 4.14.14 的 Linux 机器上启用了 Spectre retpoline 功能?

如何验证内核为 4.14.14 的 Linux 机器上启用了 Spectre retpoline 功能?

我安装了最新的稳定内核 4.14.14ELRepo这似乎对 Spectre 漏洞有一些修复。

变更日志CONFIG_RETPOLINE说文件中有一些/boot/config-4.14.14-1.el7.elrepo.x86_64可以启用 Spectre 缓解功能的内容,在我的情况下似乎是肯定的。

但是当我运行这个脚本检查所有问题都已修复,我没有看到 4.14.13 和 4.14.14 内核中的输出之间有太大差异。这个 retpoline 功能是否真的启用了,如果是的话如何验证?

4.14.13输出 在此输入图像描述

4.14.14输出 在此输入图像描述

我还对 4.14.14 和即将推出的功能内核中提供哪些幽灵变体保护的信息感兴趣。

答案1

看起来您目前已经使用 vanilla(或 ElRepo)内核完成了几乎所有您能做的事情。

发行版内核虽然名义上可能是旧版本,但很可能包含更多安全补丁 - 尚未进入普通内核的补丁。特别是,企业发行版目前正在努力利用来自 CPU 制造商的内幕信息和他们自己的开发资源,使修复程序进入工作状态并发布。在这种情况下,最新的普通内核不一定是最佳选择。

根据 4.14.13 内核上的脚本输出,您的处理器可以从微代码更新中受益。更新的微代码将启用 IBRS,这是缓解 Spectre 变体 2 的一种方法。要实际使用 IBRS 需要进一步的内核补丁,这些补丁目前正在审查中,可能会也可能不会包含在 4.15 内核中(然后可能向后移植到较旧的内核版本)..

在 4.14.14 中,内核提供了该CONFIG_RETPOLINE选项,可用于在有或没有 IBRS 的情况下缓解 Spectre 变体 2,但使用当前版本编译器版本还无法实现 retpolines 的全部效果。不过虽然目前retpoline的状态依然脆弱,但总比没有好。

Spectre 变体 1 的缓解措施还需要修改编译器。

因此,您现在主要等待 C 编译器更新,该更新将使您(或 ElRepo)能够在适当的位置编译具有更多 LFENCE 指令的内核,并具有更严格的 retpoline 实现。这些将缓解两个 Spectre 变体的影响,尽管变体 2 的完整重定位可能会消耗一些 CPU 性能。

其次,您正在等待 CPU 的(无错误)微代码更新,以便启用 IBRS 和内核更新以实际使用它。这可能伴随着 BIOS/固件更新,或者您可以让 Linux 在启动时安装更新的微代码。

更新: Debian 提供了更新的编译器包,集成了完整的 retpoline 功能。对于 Debian 8 (jessie),gcc-4.9带有 retpoline 反向移植的版本于 2018 年 2 月 17 日发布;对于 Debian 9 (stretch),gcc-6带有 retpoline 反向移植的版本于 2018 年 2 月 22 日发布。

同样在 2018 年 2 月 22 日,Debian 发布了 Debian 9 的内核更新,其中包含针对 Spectre 变体 2 的完整 retpoline 缓解措施以及array_index_mask_nospec针对 Spectre 变体 1 的缓解措施。因此,现在 Debian 9 上提供了全套 Spectre 缓解措施,无需BIOS/微代码更新。

一些测试表明,这种 retpoline 缓解措施实际上比英特尔提供的基于微码的缓解措施对性能的影响要小得多。

因此,所需编译器功能的向后移植工作正在进行中。不幸的是,RHEL/CentOS 7 的标准编译器版本是gcc-4.8.5:向后移植补丁的可用性gcc-4.9可能会有所帮助,但仍然需要做更多的工作才能将必要的编译器功能一直向后移植到gcc-4.8.5.

2018年2月20日,英特尔发布针对各种处理器型号的微代码更新的一组建议。它还列出了 1 月份发布的微代码版本,此后发现存在错误,并相应地建议这些特定微代码版本的任何部署应该停止

相关内容