上周(从原文发表时算起),名叫“熔断”和“幽灵”的严重漏洞被公布。由于这些问题的性质,漏洞的解决方案很复杂,并且要修改很多脆弱的代码。“熔断”漏洞的大部分修复工作都在进行中。在X86平台下,“熔断”漏洞的修复方法是KPTI。KPTI已经合并到了Linux主开发分支,也合并到了很多稳定分支上。当然,也包括了Fedora使用的内核分支。对于其他CPU架构,修复方案都已经接近完成,并且应该马上就可以用上了。“幽灵”漏洞的修复则更加困难,并且需要从很多方面进行修复。

和“熔断”漏洞类似,“幽灵”漏洞利用了CPU的推测执行技术。“幽灵”漏洞的修复方案的一部分就是对容易遭受攻击的指令序列关闭CPU的推测执行功能。Google和其他人开发的一个解决方案“retpolines”,即不允许CPU推测执行这段指令。可能出现危险的CPU推测执行的指令片段,可能会被替换为不允许推测执行的“retpoline”。这个解决方案的困难之处在于编译器需要知道该在哪儿放置retpoline。这意味着,完整的解决方案会涉及到编译器的修改。

retpoline的第一部分工作目前已经完成。这个功能应该会在接下来的几天中合并完成,并且很快就可以在Fedora的稳定发布渠道中可用了。这些补丁本身确实提供了一定程度的防御“幽灵”漏洞的保护,但需要做更多的工作才能成为完整的修复方案。上游开发人员仍在审查编译器支持以提供进一步的保护。对其他CPU架构的的支持也正在进行中。

一些代替的retpoline补丁,则需要暴露一些硬件特性来更加精细地控制CPU的推测执行。某些CPU有间接分支限制推测(Indirect Branch Restricted Speculation,简称IBRS)的功能。启用此功能后,用户空间程序将更加精细的限制CPU如何推测性执行。完全支持该功能则需要微码更新,其中一些现在可以与其他人一起使用。

完全支持该功能需要微码更新,一些CPU已经提供了微码更新,另外一些则很快就可用了。IBRS虽然能提供更完整的解决方案,无需编译器支持,但性能成本更高。IBRS补丁仍在审核中,最终应该可以合并,但在4.15版本的内核不会包含此特性。当IBRS补丁可用时,我们将把它们移植到Fedora内核的稳定分支。

IBRS和retpoline都覆盖了“幽灵”漏洞的“变种2”。“变种1”的解决方案需要扫描代码中可能有问题的序列,扫描也会产生很多误报(代码序列实际上不容易受到攻击),因此上游开发人员正试图缩小代码中需要修复的部分。修复已知易受攻击的代码序列的补丁已被合并。

虽然“幽灵”漏洞是一个重要的安全问题,但同样重要的是仔细审查修复方案以确保解决方案是可维护的。匆忙修复可能会在未来导致更多的问题。Fedora团队正在持续关注“幽灵”漏洞的修复进程,以便在就绪时将解决方案提供给您。

本文翻译自 Laura Abbott 的文章 An update on ongoing Meltdown and Spectre work