Spectre 补丁如何工作?

Mea*_*ess 2 cpu computer-architecture

英特尔/微软如何为 Spectre 提供软件补丁,因为 Spectre 利用了超标量处理器的推测执行性质,这是一种无法修改或禁用的硬件功能(至少不会因推测执行而导致 IPC 收益的大量损失)?这些“补丁”实际上是如何发挥作用的?

小智 8

有多种技术可以缓解软件中的 Spectre 式漏洞,无需修补微代码或更改硬件,但它们确实会产生一些性能成本。我不熟悉 Microsoft 如何实施这些缓解措施,但Linux 文档很全面

对于 Spectre 变体 1,易受攻击的内核代码(由代码审计或扫描工具确定)根据具体情况进行注释,以使用 nospec 访问器宏进行边界剪辑[2],以避免任何可用的泄露小工具。

对于 Spectre 变体 2 缓解措施,编译器将内核中的间接调用或跳转转换为等效的返回蹦床 (retpolines) [3] [9]以转到目标地址。retpolines 下的推测执行路径被困在无限循环中,以防止任何推测执行跳转到小工具。

这里描述缓解技术的参考文献本质上并不是防止 Spectre 式信息泄漏的方法,但它们是针对受影响处理器实现方式所产生问题的实用解决方案。

  • 同样重要的是要注意,英特尔和 AMD 的微代码更新根本无法“自行”缓解 Spectre。它们提供了软件(例如内核)可以在某些点使用的钩子,以使以后的分支不依赖于早期分支的历史记录,等等。 (对于 AMD 来说,有一种将 LFENCE 设置为(推测)执行障碍的方法;以前 AMD 的 LFENCE 是无操作的(可以运行 4 个/时钟),因为他们之前没有记录其执行障碍行为英特尔就是这样做的。这使得 LFENCE 对于订购 RDTSC 和正在计时的代码非常有用。) (6认同)