当前的Meltdown Intel处理器漏洞目前已通过启用页表隔离来解决。有一个问题如何将其关闭:如何禁用页表隔离以恢复由于英特尔CPU安全漏洞补丁而导致的性能损失?
我的问题是相反的:有没有办法检查正在运行的系统上的PTI机制在系统上是否有效,从而保护了系统?我专门在寻找cat /proc/something
或cat /sys/something
,而不是检查内核版本或配置参数等。
当前的Meltdown Intel处理器漏洞目前已通过启用页表隔离来解决。有一个问题如何将其关闭:如何禁用页表隔离以恢复由于英特尔CPU安全漏洞补丁而导致的性能损失?
我的问题是相反的:有没有办法检查正在运行的系统上的PTI机制在系统上是否有效,从而保护了系统?我专门在寻找cat /proc/something
或cat /sys/something
,而不是检查内核版本或配置参数等。
Answers:
您可以运行以下命令以查看所有可用的缓解措施(不仅针对PTI,而且针对其他漏洞):
$ cat /sys/devices/system/cpu/vulnerabilities/*
Mitigation: PTE Inversion
Mitigation: Clear CPU buffers; SMT vulnerable
Mitigation: PTI
Mitigation: Speculative Store Bypass disabled via prctl and seccomp
Mitigation: usercopy/swapgs barriers and __user pointer sanitization
Mitigation: Full generic retpoline, IBPB: conditional, IBRS_FW, STIBP: conditional, RSB filling
按照Raniz的建议在内核配置中添加CONFIG_PAGE_TABLE_ISOLATION在桌面Ubuntu上无济于事,但在云实例上可能有帮助:
grep CONFIG_PAGE_TABLE_ISOLATION=y /boot/config-`uname -r` && \
echo "patched :)" || echo "unpatched :("
您可以/proc/cpuinfo
按照JonasCz的建议进行检查:
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编译测试程序来检测熔毁:
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)
如Robie Basak所写,Ubuntu中有一个有关Spectre和Meltdown漏洞状态的页面。
也有:
dmesg | grep isolation && echo "patched :)" || echo "unpatched :("
所列出的命令不必要地危险:它不会显示实际匹配的行,并且如果匹配其他随机的“隔离”实例,也将愉快地打印“ patched :)” ...
/proc/cpuinfo
为cpu_insecure抓取)。如果将其放入脚本中,并且将来有一个在其微体系结构中已解决问题的CPU,/proc/cpuinfo
则不再赘述,cpu_insecure
并且脚本将相信即使已修补内核也未修补。我也建议反对第三个建议,因为在某些时候输出中可能有一个单词isolation
,dmesg
而没有提及内核页表隔离。
isolation
将匹配Kernel/User page tables isolation: enabled
和Kernel/User page tables isolation: disabled on command line
。
运行以下命令:
dmesg | grep 'page tables isolation'
如果显示已启用,则表示已启用PTI。如果未显示任何内容,或者您在终端中看到“禁用”,则表示禁用了PTI。Ubuntu尚未发布该修补程序,因此不会显示任何消息。
dmesg
输出中。查看/var/log/kern.log*
它是否退回足够远的距离以显示启动消息。Ubuntu曾经将启动时dmesg
输出记录到/var/log/dmesg
,但似乎不再这样做了。
您可以使用进行检查cat /proc/cpuinfo
,如果它cpu_insecure
在“错误”下报告,则表示已启用PTI。
如果为空白(或仅未列出cpu_insecure
),则很可能您正在运行尚未打补丁的内核(Ubuntu尚未打补丁),或者您拥有AMD处理器(因此将不启用该处理器) (不是脆弱的)。
当前,所有最新版本4.15内核中的CPU被视为易受攻击。
cpu_insecure
任何x86 CPU 设置;12年4月14日和更新将只设置它的Intel CPU(包括那些太老或太原始易受攻击双方将设置它,即使KPTI为禁用。
我发现了这个很棒的sh脚本来测试系统上的Meltdown / spectre漏洞:
https://github.com/speed47/spectre-meltdown-checker
该脚本会检查系统是否存在已知的Meltdown以及幽灵补丁,以告诉您这些漏洞是否已由操作系统缓解
您可以检查/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
/proc/
Ubuntu内核默认不启用当前运行的内核的配置。(不太优雅)的解决方法/boot/config-$( uname -r )
改为grepping 。
在我的AWS Ubuntu 14.04.5 LTS EC2实例上,我运行了
grep CONFIG_PAGE_TABLE_ISOLATION /boot/config-$(uname -r)
应该说:
CONFIG_PAGE_TABLE_ISOLATION=y
对于更新,我做了:
sudo apt-get update && sudo apt-get install linux-image-generic
我认为这也可以:
sudo apt-get update
sudo apt-get dist-upgrade
要检查内核版本:
uname -r
必须是3.13.0-139通用或更高版本。