【问题标题】:Are there any processors vulnerabilities other than Meltdown and Spectre?除了 Meltdown 和 Spectre 之外,还有其他处理器漏洞吗?
【发布时间】:2018-12-15 16:18:12
【问题描述】:

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

【问题讨论】:

  • 题外话 在 StackOverflow 上。一般来说,处理器也有错误(例如旧的Pentium FDIV bug...)。他们的规格是abstraction。早在 1940 年代,冯·诺依曼就注意到了这一事实,这可能是计算机科学的根源之一
  • 我早在 1983 年就遇到了硬件错误。在ND-500。我的父亲和我的主人(例如 J.Pitrat)在 IBM7094 上有硬件错误。 1960 年代的计算机不如今天可靠。
  • @BasileStarynkevitch:一个更安全的例子是Pentium F00F bug,其中lock cmpxchg8b eax(带有寄存器,而不是内存,操作数)锁定CPU直到硬重启,从非特权用户空间。它基本上是一个停止和捕捉指令,但显然它可以在软件中解决。
  • 实际计算机未按规定运行的任何硬件错误都可能与安全性相关(尤其是如果您可以重现该错误)
  • 因此,这意味着每个处理器的架构都可能存在与安全问题相关的错误。由于抽象,人们不会注意到它们。

标签: security hardware cpu-architecture microprocessors


【解决方案1】:

所有 CPU 设计都至少存在一些细微的设计缺陷。我们称这些为“勘误表”。

存在一些与安全相关的 CPU 错误。不过,通常“只是” DOS 攻击。

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

该维基百科条目将其与类似时代的 Cyrix CPU 上的 Cyrix "coma bug" 进行比较。


从那时起,英特尔的设计和验证技术取得了进步:奔腾之后的 CPU 具有可更新的微码,它们通过向其抛出随机指令序列来模拟 CPU 的门级软件模型,即使在奇怪的微架构状态下也能捕捉到意外行为。

但错误仍然可能发生。 Skylake 在发现 AH-merging uops weren't always handled correctly 启用了超线程后需要更新微码来禁用其循环缓冲区,从而导致在运行由 OCaml 编译器生成的代码时意外崩溃(勘误 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很多微拱门。不过,Spectre 很难做到便宜。)

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-08
    • 1970-01-01
    • 2023-02-09
    • 2018-06-20
    • 1970-01-01
    • 2012-06-04
    相关资源
    最近更新 更多