如何禁用页面表隔离以恢复因英特尔CPU安全漏洞补丁而损失的性能?

由于当前的英特尔CPU安全漏洞问题,预计会发布一个补丁来降低系统性能。
我该如何确保这个补丁不会安装在我的Ubuntu系统上?

49你可以通过禁用其他各种安全机制来进一步提高系统性能。不,这并不是一个建议。 - scai
11如果性能对您很重要,我建议您自己构建最新的内核候选版本,并测试其在您的工作负载上的性能损失。您可能会发现开销是可以忽略或可接受的。 - Jeffrey Bosboom
5我无法过分强调这个主意有多糟糕。 - Alexander
13我打算提出异议。就个人而言,我不建议禁用安全功能,但对于注意到性能下降的用户来说,禁用PTI可能是一个合理的选择,考虑到利用这个特定的安全漏洞进行攻击可能是多么困难以及目标计算机/数据的价值。问题是如何禁用这个选项,而不是是否应该禁用这个选项。 - Panther
2我同意,PTI是一个安全功能,可能会有不可忽视的成本。这取决于OP自己是否认为它适合他们,并且超出了这个问题的范围。 - Jake
2安全问题并不总是适用于每种情况。如果你是一个虚拟机提供商,那么“熔断”是可怕的。但对于你的非公共计算服务器来说,它的适用性要小得多。这个问题是合理的,通过建议关闭一切来嘲笑是不恰当的。熔断需要本地访问。在许多情况下,如果“坏人”已经有了本地访问权限,那你已经输了。仅仅因为媒体大声喊叫,并不意味着这与RCE或任何其他远程可利用的漏洞有丝毫相似之处。 - Aaa
很多评论在这里反对这种做法,基于的假设是请求者迟早会成为黑客的受害者。如果请求者是一个研究人员,他想要在自己的机器上测试这些漏洞呢? - Demis Palma ツ
5个回答

补丁(也称为“页面表隔离”)将成为正常内核更新的一部分(当您更新系统时会得到)。然而,强烈建议保持内核最新,因为它还会获得许多其他安全修复。所以我不建议仅使用没有修复的过时内核。
但是,您可以通过在内核命令行中添加pti=off内核补丁添加此选项,附有更多信息)来有效地禁用该补丁(如何操作)。请注意,这样做会导致系统安全性降低。

关于启用和禁用PTI的更多信息和性能测试,请参考PostgreSQL邮件列表 - 简而言之,它会对性能产生10%至30%的影响(对于ProstgreSQL来说是如此,而其他例如游戏可能会受到较小的影响)。

请注意,这只会影响英特尔处理器,因为AMD 显然不受影响reddit),所以预计在AMD上默认情况下将被禁用。


2"...这将在AMD上可以预见地默认禁用。" 这是不是意味着由Canonical为搭载AMD CPU的Ubuntu操作系统提供额外的内核版本? :) - cl-netbox
17不,内核会在启动时检测是否运行在AMD CPU上,并且如果是的话会禁用修复功能。@cl-netbox - Jonas Czech
1根据https://www.theregister.co.uk/2018/01/04/intel_amd_arm_cpu_vulnerability/的报道,AMD芯片受到至少一种Spectre攻击(分支目标注入)的影响,因此它们也将在本周进行可能会影响性能的内核更新,尽管它们并不受到Meltdown的影响。 - Dave Sherohman
2显然,这个功能是基于x64架构的,而不是i386/IA-32。因此,该补丁也不会影响32位的Linux(安全/Kconfig要求启用PAGE_TABLE_ISOLATION需要X86_64)。这又引出了另一个问题。那么,安装了32位Linux的x64机器会受到影响吗?如果是的话,那么那些受限于BIOS只能运行32位指令的旧x64机器(比如旧的基于Atom的上网本)会怎样呢?它们会成为易受攻击的目标吗? - thePiGrepper
3直到我确切地了解到有一种基于JavaScript的攻击后,我原本打算使用它。 - Joshua
在 Aerospike(高性能低延迟数据库)中我发现的是,CPU 使用并不总是一个问题(如果你的 CPU 使用率为 20%,提升到 40% 的话可能不会有速度问题),其次,Retpoline 真的很好。这是我们关心延迟的用户所说的。最后,如果你已经处于虚拟化的世界中,禁用 Meltdown 在客户端中的风险是特权升级 - "Guest" 账户可以做一些可怕的事情。但是你已经关闭了非特权账户,对吗? - Brian Bulkowski
2@thePiGrepper,不存在“x64机器只能通过BIOS运行32位指令”的情况。如果CPU可以运行x86_64指令,那就是一颗x86_64 CPU。那些Atom机器是64位的,只是UEFI被限制为32位而已,你可以在这些机器上安装64位Linux系统(参考链接:https://askubuntu.com/q/727664/253474)。 - phuclv

更新:该问题已被赋予两个名称:Meltdown和Spectre。我已根据新信息更新了答案。
首先,它将是一个内核补丁。它将显示为更高的版本。它将被安装,因为您已安装了linux-image-generic。这就是该软件包的用途。所以您可以删除linux-image-generic。这是一个可怕的、灾难性的想法,会使您暴露于各种恶意攻击,但您确实可以这样做。可能还会有在CPU中修复的CPU微码,这主要取决于Intel是否提供在linux-firmware中的解决方案。
您采用的方法来取消修复此问题是无关紧要的。您要求绕过某些东西,而您既不知道错误的真正影响,也不知道修复它的性能成本。
这个漏洞很恶劣。报告的CVE是跨进程内存读取。任何进程都能读取其他进程的内存。输入、密码,全部都能读取到。这很可能对沙盒也有影响。现在还处于早期阶段,我预计人们会进一步推动这个问题,无论是在影响力还是访问权限方面。
性能损失可能没有你担心的那么大。人们提到的数字主要关注理论子系统性能或最坏情况。受影响最严重的是缓存不良的数据库。游戏和日常使用可能不会有明显变化。
即使我们现在已经知道了实际的漏洞是什么,说影响有多大还为时过早。虽然自由读取RAM是不好的,但还有更糟糕的事情存在。我还建议测试一下修复措施对你的影响(根据你的使用情况)。
暂时不要开始预先加载GRUB配置标志,也不要立即删除内核元包。

8你只需要在内核命令行(在GRUB中)添加pti=off来禁用这个补丁。 - Jonas Czech
3@JonasCz,如果那个评论是真的,我不清楚,但听起来似乎值得单独回答,特别是如果你能够提供相关参考资料。 - Byte Commander
依我之见,nopti是一个更好的选择。 - Panther
@Panther 如果你读完第一个主要段落,你会注意到我在这里的建议既不是这样也不是那样。KPTI 是一项对于不能自行处理此类事务的 CPU 来说非常重要的安全功能。在你确定它对你来说是安全的,并且实际上拥有它会对你产生负面影响之前,请不要禁用它。 - Oli
3@Oli 我同意那个建议,并且在其他地方也提过类似的建议。话虽如此,问题是如果需要的话如何禁用这个新的安全功能,而在我看来,nopti 是一个可选项。 - Panther
1是的,当我使用虚拟机时,它会使我的系统活动减缓99%。从主机复制文件到虚拟机以前只需要2-3秒钟,现在需要超过一分钟。 - rboy

虽然我不建议这样做,但是根据Phoronix的说法,禁用PTI是可能的。
为了实现这一点,在/etc/default/grub文件中,在以GRUB_CMDLINE_LINUX_DEFAULT开头的行旁边的字符串后面添加nopti,然后运行。
sudo update-grub

然后重新启动。

有关禁用与性能相关的安全功能的内核引导参数的更多信息,请参阅:Ubuntu Wiki中的Spectre&Meltdown MitigationControls


1内核引导参数noptipti=off有什么区别? - niutech
@niutech 没有区别,你可以查看这里以获取证明。 - nixpower


链接的文档中提到,nopti和pti=off是等效的。 - flerb

最简单的方法:在内核配置中取消勾选
-> 安全选项
[ ] 在用户模式下删除内核映射
然后编译新的内核

1欢迎来到Ask Ubuntu!以目前的形式来看,你的回答还有改进的空间。你能否参考一下如何撰写一个好的回答问题和回答的样式指南。- 来自审核 - J. Starnes
2很遗憾,J. Starnes是对的。除非万不得已,否则你不再自己编译内核了。 - Joshua
这是对内核选项的一个相当琐碎的更改,但在我看来,“nopti”可能是大多数人更好/更容易的选择。 - Panther