为BIOS添加针对Meltdown/Spectre的microcode更新
最近关于Meltdown和Spectre这两个漏洞的新闻非常火热,各大OS和硬件厂商也纷纷推出修复/减轻这两个漏洞的补丁。微软在1月的安全更新中包含了对Meltdown和Spectre的修复补丁,然而减轻Spectre的影响还需要CPU的microcode更新。看来暂时MSI不打算更新我使用的主板(Z97 SLI PLUS)的BIOS,所以我得自己给BIOS打补丁。
Intel放出了microcode更新,其中包含了对我的CPU(i7-4790k,Haswell)的更新,通过UEFI BIOS Updater(UBU)可以把这个新版本的补丁加进BIOS。
首先得知道对应Haswell的microcode是哪一个。这篇文章提到了Haswell的CPUID是0306C3,这个也可以用HWInfo64查看CPUID。对应的Intel的Microcode文件是06-3c-03,将这个文件解压到UBU同一目录下,然后把厂商的BIOS更新文件也放到UBU的目录下(比如我的BIOS是E7930IMS.1A0),然后打开管理员的命令行,执行UBU.bat,UBU会自动扫描目录下的BIOS文件并开始解析。解析完成后按回车进入主菜单,选项7是更新CPU microcode,进去之后会显示当前BIOS中包含的microcode对应的版本和平台号,如图:
如图可见,目前的BIOS包含了两个平台的microcode(Broadwell - 22, Haswell - 32),目前Broadwell 22的CPU还没有microcode更新,而我用的是Haswell的4790k,所以只用更新Haswell的就可以。按m选择microcode文件(UBU自带的版本只到22,修复了漏洞的版本是23),选择刚才解压的06-3d-03,UBU会校验文件是否完整,然后提供选项让更新microcode。按Y更新之后UBU会把新的microcode整合进BIOS,整合之后BIOS的结果如图:
注意到Broadwell的microcode没了。如果CPU是Broadwell架构的话刷新了这个BIOS会无法开机,所以在刷BIOS之前一定要确认现在的microcode是否跟CPU匹配。按0退回主菜单,再按0退出程序,会提示是否将改好的BIOS改名。然后把这个BIOS放到USB Key上,开机进BIOS用M-Flash刷进去。刷好之后可以在BIOS里面看到microcode确实已经更新:
注意CPUID/MicroCode已经是更新的版本23了。
同时微软的检测脚本也会提示已经有硬件支持:
不过Intel目前的microcode估计还有问题,在刷写了新的microcode后系统日志里面会看到有WHEA警告,提示CPU内部出现奇偶性校验错误。同时Lenovo也提到目前的microcode更新在多个平台都有错误。