除了 Meltdown 和 Spectre 之外,还有其他处理器漏洞吗?

Are there any processors vulnerabilities other than Meltdown and Spectre?

我了解了这两个漏洞,还了解了一些 CPU 和处理器的历史。我想知道以前有没有硬件(尤其是处理器)

所有 CPU 设计都至少有一些细微的设计缺陷。我们称这些为 "errata".

存在一些与安全相关的 CPU 错误。不过,通常 "just" DOS 攻击。

Pentium F00F bug 在 B2 步进(修复它)之前影响了所有英特尔 P5 微体系结构。 lock cmpxchg8b eax(带有寄存器操作数,而不是内存,因此无效)锁定 CPU 直到硬重启,从非特权用户空间发起 DOS 攻击。 (维基百科说它使用 locked 总线周期获取非法指令 IDT 条目,因此系统保持锁定状态,等待从未出现的相应写入)。它可以通过在尝试处理异常时强制 CPU 出现页面错误来在软件中解决。

该维基百科条目将其与来自相似时代的 Cyrix CPU 上的 Cyrix "coma bug" 相比较。


英特尔的设计和验证技术从那时起就取得了进步:CPU 秒后 Pentium 有了可更新的微代码,他们通过向其添加随机指令序列来模拟 CPU 的门级软件模型, 即使在奇怪的微体系结构状态下也能捕捉到意外行为。

但是错误仍然会发生。在发现 启用了超线程后,Skylake 需要更新微代码以禁用其循环缓冲区,从而导致在 OCaml 编译器生成 运行ning 代码时发生意外崩溃(勘误表 SKL150)。 (我的理解是 Coffee Lake 有一个工作循环缓冲区,但 SKL 和 KBL 只有 运行 来自 uop 缓存,即使对于紧密循环也是如此。)我认为这充其量只是一个锁定错误;很难得到任何特定的东西来读取秘密或获得特权。

同样,Skylake 的 mfence 在微代码更新中变得更加强大(完全阻止乱序执行,如 lfenceto fix erratum SKL079。可能你不能利用从 WC 内存(例如视频 RAM)重新排序 movntdqa 弱排序的负载,但至少有可能某些东西的安全性/正确性可能取决于它。

有关 Skylake 勘误表的完整列表,请参阅 https://www3.intel.com/content/dam/www/public/us/en/documents/specification-updates/desktop-6th-gen-core-family-spec-update.pdf

AMD 当然也会为他们的 CPU 发布勘误表。


Meltdown 和 Spectre 的不同之处在于 CPU 架构师知道 CPU 是那样工作的 ,但没有意识到有一种方法可以利用它。它非常微妙,将秘密数据转换为微架构状态,然后将该微架构状态读回 架构 状态(正确路径上的寄存器中的实际值,而不是在错误预测的阴影下)。

据我们所知,我们需要重新设计 CPU 以有效缓解其他令人讨厌的意外事件(新的 类 微体系结构攻击)。

(Meltdown 很容易通过新设计以低廉的成本缓解,只需将权限不足的 TLB+L1d 命中屏蔽为 0 而不是返回实际数据。这就是一些 CPU 已经在做的事情,根据这个 StuffedCow blog article 测试了很多微架构。幽灵很难廉价,不过。)

超线程(通常是任何 SMT)已经暴露了共享物理核心的线程之间的微体系结构时序侧通道。出于这个和其他原因,加密算法通常被仔细编写,因此它们的性能不依赖于数据。这意味着避免可能在缓存中丢失的查找表。不过,定时侧信道是一种已知的攻击。