📜  Spectre 安全漏洞

📅  最后修改于: 2021-10-19 08:08:40             🧑  作者: Mango

什么是 Spectre 安全漏洞?

Spectre是一个安全漏洞,会影响所有使用分支预测和推测操作等机制的现代处理器。
幽灵攻击包括诱使受害者推测性地执行在正确程序执行期间不会发生的操作,并通过旁道将受害者的机密信息泄露给对手。这也暴露了其他受保护的内存空间,允许恶意代理访问数据,甚至修改数据。它与 Meltdown 漏洞同时被发现。

什么是分支预测和投机行为机制?

  • 分支预测:分支预测技术允许处理器通过将指令转换为谓词逻辑来加速流水线处理器中的执行。因此,仅执行谓词为真的那些指令。这允许 CPU 避免检查每个单独的分支以供执行。
  • 推测执行:推测执行与分支预测一起是乱序执行的一个组件,用于加速基于流水线的微处理器中的执行。我们从前面的定义中了解到,分支预测用于确定在条件跳转的情况下将执行哪条指令。投机行动更进一步。它确定执行下一条指令的结果。如果分支预测正确,则使用结果,否则将其丢弃。

Spectre 漏洞如何运作?

Spectre 漏洞有两种工作方式:
1. 本地开发:
在这种情况下,恶意代理位于计算机本身。以下是发生的步骤:

  1. 它操纵进程执行一条永远不会执行正常的指令。
  2. 当 CPU 评估执行的指令时,它会丢弃计算。
  3. 但是,不会恢复缓存的扩展大小。
  4. 只需查看缓存,就可以推断出其中的内容及其实际内存位置,从而将它们暴露给恶意程序

2. 远程开发:
在这种情况下,恶意代理通过 Javascript 工作。脚本化恶意软件可以访问与浏览器映射的所有内存。采取以下步骤:

  1. 通过对大型数据集进行增量读取来强制刷新缓存,因为 javascript 中的数组内存是使用 LRU 策略维护的。
  2. 然后,通过使用按位运算将索引设置为范围内的值对非常大的数据集进行迭代,然后在最终迭代中使用越界地址,分支预测器将被错误训练。
  3. 通过使用按位运算来设置范围内值并在最终迭代中使用越界地址来迭代大型数据集,分支预测器可能会被错误训练
  4. 定时读取使脚本能够读取位置

正在采取哪些缓解措施?

这一安全问题的发现导致需要制定许多预防和缓解措施。不同的处理器和软件供应商通过以下方式不同地解决了这个问题:

  1. 2018 年 3 月,英特尔为 Spectre 开发了硬件修复程序。这些漏洞通过一个新的分区系统得到缓解,该系统改进了进程和权限级别的分离。
  2. Microsoft 通过隔离内核和用户页表来采取行动。它还设计了新的 CPU 指令(Windows 兼容),消除了分支推测。
  3. 默认情况下,Chrome 64 包含针对攻击的缓解措施。 Chrome 63 用户可以通过启用站点隔离功能来手动缓解攻击 (chrome://flags#enable-site-per-process)
  4. 谷歌创建了一种名为“Retpoline”的新技术,该技术涉及将间接分支转向不同目标的编译器级别,这不会导致发生易受攻击的推测性乱序执行。
  5. Mozilla 正在降低 JavaScript 计时器的分辨率以帮助防止计时攻击,并计划在未来版本中对时间模糊技术进行额外的工作。

但是,需要注意的是,软件补丁的引入导致了严重的性能问题,尤其是在旧计算机上。此外,即使对于较新的英特尔芯片,也报告了不需要的重启。

参考:
https://en.wikipedia.org/wiki/Spectre_(security_vulnerability)

https://www.csoonline.com/article/3247868/vulnerabilities/spectre-and-meltdown-explained-what-they-are-how-they-work-whats-at-risk.html