问题描述
当前的Meltdown Intel处理器漏洞目前已通过启用页表隔离来解决。如何关闭它有一个问题:如何禁用页表隔离以重新获得因英特尔CPU安全漏洞补丁而导致的性能损失?
我的问题恰恰相反:有没有办法检查正在运行的系统PTI机制是否对系统有效,从而系统受到保护?我特意寻找cat /proc/something
或cat /sys/something
,而不是检查内核版本或配置参数等。
最佳解决思路
-
将内核配置中的CONFIG_PAGE_TABLE_ISOLATION称为Raniz’s suggested对桌面Ubuntu没有帮助,但可能有助于云实例:
grep CONFIG_PAGE_TABLE_ISOLATION=y /boot/config-`uname -r` && \ echo "patched :)" || echo "unpatched :("
-
您可以使用
/proc/cpuinfo
检查为JonasCz suggested:grep -q "cpu_insecure\|cpu_meltdown\|kaiser" /proc/cpuinfo && echo "patched :)" \ || echo "unpatched :("
-
或者来自
dmesg
(感谢Jason Creighton):dmesg | grep -q "Kernel/User page tables isolation: enabled" \ && echo "patched :)" || echo "unpatched :("
-
您可以从Raphael Carvalho编译测试程序以进行Meltdown检测:
sudo apt-get install git build-essential cd /tmp git clone https://github.com/raphaelsc/Am-I-affected-by-Meltdown.git cd Am-I-affected-by-Meltdown make sudo sh -c "echo 0 > /proc/sys/kernel/kptr_restrict" ./meltdown-checker
在修补的系统上它应该以输出结束
...
so far so good (i.e. meltdown safe) ...
System not affected (take it with a grain of salt though as false negative
may be reported for specific environments; Please consider running it once again).
-
使用https://github.com/speed47/spectre-meltdown-checker中的工具进行检查:
cd /tmp wget https://raw.githubusercontent.com/speed47/spectre-meltdown-checker/master/spectre-meltdown-checker.sh sudo sh /tmp/spectre-meltdown-checker.sh
在修补系统上,它应显示以下内容:
Spectre and Meltdown mitigation detection tool v0.27
Checking for vulnerabilities against live running kernel Linux 4.4.0-109-generic #132-Ubuntu SMP Tue Jan 9 19:52:39 UTC 2018 x86_64
...
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)
不要在Xenial上安装4.4.0-108-generic!它breaks boot/reboot/shutdown/suspend functionality!
安装4.4.0-109-generic(see USN-3522-3了解详情)!
在Robie Basak already wrote,有一个关于Spectre and Meltdown vulnerabilities status in Ubuntu的页面。
还有:
次佳解决思路
运行以下命令:
dmesg | grep 'page tables isolation'
如果显示已启用,则启用PTI。如果未显示任何内容或您在终端中看到’disabled’,则禁用PTI。 Ubuntu尚未发布补丁,因此它不会显示任何消息。
第三种解决思路
您可以使用cat /proc/cpuinfo
进行检查,如果它在”bugs”下报告cpu_insecure
,则启用PTI。
如果它是空白的(或者只是没有列出cpu_insecure
),那么很可能你正在运行一个尚未修补的内核(Ubuntu’s hasn’t),或者你有一个AMD处理器(因为它们可能会被启用不容易受伤)。
目前all CPUs are treated as vulnerable在最新的4.15内核中。
第四种思路
我找到了这个很好的sh脚本来测试你系统上的Meltdown /幽灵漏洞:
https://github.com/speed47/spectre-meltdown-checker
该脚本会检查您的系统是否已知系统上已知的Meltdown和specter补丁,以告诉您这些漏洞现在是否已被您的操作系统缓解
第五种思路
您可以检查/proc/config.gz以获取CONFIG_PAGE_TABLE_ISOLATION=y
,这意味着内核是使用KPTI编译的。
这是在我修补的运行4.14.11-1的Arch Linux系统上:
$ zgrep CONFIG_PAGE_TABLE_ISOLATION /proc/config.gz
CONFIG_PAGE_TABLE_ISOLATION=y
参考资料