当前位置: 首页>>技术教程>>正文


如何检查我的Ubuntu上是否启用了KPTI?

, ,

问题描述

当前的Meltdown Intel处理器漏洞目前已通过启用页表隔离来解决。如何关闭它有一个问题:如何禁用页表隔离以重新获得因英特尔CPU安全漏洞补丁而导致的性能损失?

我的问题恰恰相反:有没有办法检查正在运行的系统PTI机制是否对系统有效,从而系统受到保护?我特意寻找cat /proc/somethingcat /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).

在修补系统上,它应显示以下内容:

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

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/1242.html,未经允许,请勿转载。