※※※工具※※※
Alex Ionescu根据intel新发布的白皮书
更新了他写的SpecuCheck错误的地方
白皮书
https://newsroom.intel.com/wp-content/uploads/sites/11/2018/01/Intel-Analysis-of-Speculative-Execution-Side-Channels.pdf
https://t.co/eHcsnNxf8D
SpecuCheck
https://github.com/ionescu007/SpecuCheck
SpecuCheck是一个程式让使用者不用安装SpeculationControl模组
就可以检查自己系统对应Meltdown&Spectre修补的情况。
如图
https://github.com/ionescu007/SpecuCheck/raw/master/SpecuCheck.png
显示比较简明,可以看到CPU微码是否有更新IBRS/IBPB。
不过作者还是建议使用官方的SpeculationControl模组来检查,
因为他写的程式可能会有自己推测错误的地方。
(WIN7系统要更新PowerShell到新版才能安装SpeculationControl)
https://docs.microsoft.com/zh-tw/powershell/scripting/setup/installing-windows-powershell?view=powershell-5.1
https://goo.gl/F9JuUm
※※※重点※※※
目前各作业系统对应Meltdown&Spectre和CPU微码更新的情况总整理
https://gist.github.com/woachk/2f86755260f2fee1baf71c90cd6533e9
建议阅读原文,整理非常详尽。
1. Meltdown (Variant 3) : CVE-2017-5754
Linux已经透过KPTI修补,Windows也已经发布KVAS补丁。
效能下降看使用情况,一般桌面使用者可能不会有太大的效能损失。
Haswell之前的CPU因为缺少INVPCID,在Windows上打这个补丁后效能下降会比较多。
不过在Linux上,即使没有INVPCID,只要有PCID的CPU,
例如Ivy Bridge,还是可以快速切换页表。
KPTI只支援64bit的作业系统,所以32bit的版本无法修补,
不过有一些32bit OS的例如MacOS,本身免疫Meltdown。
AMD的CPU免疫Meltdown。
2. Spectre (Variant 2) : CVE-2017-5715
在Windows上,Haswell以后的CPU已可以透过更新IBRS/IBPB微码
(例如透过BIOS更新)来修补这个漏洞。
如果没有微码可以更新,可以改用作业系统内核层级的LFENCE作为缓解,
如果CPU不支援SMEP,会改用Google提供的Retpoline取代LFENCE。
在Linux上,这个漏洞目前还没有修补。
未来将会使用Retpoline来修补,预测对服务器的效能大约会有5-10%的损失,
但对一般使用者的影响应该会很轻微,
不过应用程式也需要重新编译才能提供完全的保护,
如果使用者希望没有设置IBRS=2的程式也能获得保护,
还是需要更新CPU微码,
目前Intel已经提供Haswell以后的IBRS微码更新。
AMD的CPU不需要使用Retpoline,只要LFENCE就可以修补内核对抗这个漏洞,
和Intel一样,也提供IBPB微码更新,让没有重新编译的程式也能获得保护。
(但目前微码还没完全释出,同时内核修补还没有合并进官方分支)
3. Spectre (Variant 1) : CVE-2017-5753
详情请参阅原文
※※※八卦※※※
Longhorn提到前述的BIOS更新(更新IBRS微码)会造成非常巨大的效能下降,
Intel自己在Linux Kernel Mailing List承认效能下降是"horribly slow"
https://twitter.com/never_released/status/949231568509267968
所以Asus的 -21% 可能已经是尽最大努力的最好情况。
一夜回到革命前......