我了解了两个漏洞,也了解了一些CPU和处理器的历史记录。我想知道以前是否还有硬件(尤其是处理器的硬件)。
答案 0 :(得分:2)
所有CPU设计至少都有一些细微的设计缺陷。我们称这些为“勘误”。
出现了一些与安全性有关的CPU错误。不过,通常是“仅” DOS攻击。
Pentium F00F
bug影响了所有Intel P5微体系结构,然后才进行B2步进(已将其修复)。 lock cmpxchg8b eax
(具有寄存器操作数,而不是内存,因此无效)将锁定CPU,直到硬重新引导为止,从而使来自特权用户空间的DOS受到攻击。 (维基百科说,它使用lock
化的总线周期获取了非法指令IDT条目,因此系统保持锁定状态,等待从未发生的相应写入操作)。可以通过在尝试处理异常时强制CPU页面错误来在软件中解决该问题。
该维基百科条目将其与类似时代的Cyrix CPU上的Cyrix "coma bug"进行比较。
从那时起,英特尔的设计和验证技术就取得了进步:奔腾之后的CPU具有可更新的微代码,并且它们通过向其抛出随机指令序列来模拟CPU的门级软件模型,从而即使在奇怪的微体系结构状态下也能够捕获意外行为。
但是错误仍然可能发生。事实证明AH-merging uops weren't always handled correctly启用了超线程之后,Skylake需要进行微代码更新以禁用其循环缓冲区,从而在运行由OCaml编译器(erratum SKL150)生成的代码时导致意外崩溃。 (我的理解是Coffee Lake有一个工作循环缓冲区,但是SKL和KBL即使在紧密循环中也只能从uop缓存中运行。)我认为这充其量是一个锁定错误;它可能是一个错误。太难获得任何特定的东西以致无法读取机密或获得特权。
类似地,Skylake的mfence
在微代码更新中变得更加强大(完全阻止乱序执行,例如lfence
)to fix erratum SKL079。可能您无法利用来自WC内存(例如视频RAM)的movntdqa
弱负载的重新排序,但至少有可能取决于它的安全性/正确性。
有关https://www3.intel.com/content/dam/www/public/us/en/documents/specification-updates/desktop-6th-gen-core-family-spec-update.pdf的Skylake勘误的完整列表,请参见
。AMD当然也会为其CPU发布勘误表。
Meltdown和Spectre的不同之处在于CPU架构师知道CPU以这种方式工作,但没有意识到有一种可以利用它的方法。这非常微妙,将秘密数据转换为微体系结构状态,然后将该微体系结构状态读回为体系结构状态(寄存器中的实际值位于正确的路径上,而不是错误预测的阴影)。
就我们所知,我们还需要重新设计CPU来有效缓解其他令人讨厌的意外事件(新型微体系结构攻击)。
(通过新设计,Meltdown非常容易廉价地缓解,只需将特权不足的TLB + L1d命中率屏蔽为0即可,而不是返回实际数据。根据此StuffedCow blog article,某些CPU已经这样做了测试了许多微体系结构。尽管如此,Spectre很难做到[便宜] 。
超线程(通常是任何SMT)已经公开了共享物理核心的线程之间的微体系结构时序侧通道。由于这个和其他原因,加密算法通常要仔细编写,因此其性能与数据无关。这意味着避免可能在缓存中丢失的查找表。但是,定时侧通道是一种已知的攻击。</ p>