深入解析Meltdown与Spectre漏洞(第二部分):Spectre攻击原理与影响

本文详细解析Spectre变种1和变种2的攻击原理,包括利用分支预测和推测执行绕过内存边界检查的技术细节,以及对云计算和浏览器安全的影响,最后讨论缓解措施和未来安全展望。

Meltdown与Spectre可访问性概述(第二部分)

Spectre(变种1)

Spectre的第一个变种允许程序读取本无权限访问的内存。Spectre V1攻击之所以可能,是因为分支预测和推测执行两种优化的结合。攻击通过欺骗条件分支预测器跳过安全检查,在错误上下文中推测执行指令,这些指令的效果通过缓存计时侧信道可见。

技术细节

通过JavaScript在浏览器中执行攻击的示例:

  1. 创建两个大型内存分配:leaker(用于缓存计时侧信道)和reader(用于训练分支预测器)
  2. 训练分支预测器使其假设数组边界检查总是通过
  3. 确保leaker无缓存内容
  4. 读取reader的越界元素(称为secret
  5. 使用secret值作为索引读取reader元素,该操作被推测执行并缓存
  6. 通过测量每个元素的读取时间确定被缓存的元素,其索引即为secret

攻击带宽估计为10KB/s。

影响范围

  • 对桌面、笔记本和移动用户:网站可打破浏览器安全隔离,读取其他标签页的密码或信用卡号
  • 对云提供商和互联网公司:编程语言提供的隔离保证失效,需要重新评估安全架构和重构核心代码

应对措施

  • 更新浏览器、操作系统和BIOS至最新版本
  • 浏览器厂商已移除高精度计时器并避免使用易受攻击的代码模式
  • 主要云提供商已部署缓解措施

Spectre(变种2)

第二个变种允许程序读取无权限访问的内存,无论该内存属于同一程序、其他程序还是操作系统内核。

技术细节

Spectre V2攻击间接分支预测器,其特点包括:

  • 利用分支历史缓冲区(BHB)预测间接分支目标
  • 通过精心选择的分支序列"毒化"分支预测器
  • 攻击可跨权限级别执行(用户到内核、程序到程序、虚拟机到管理程序)

以从客户虚拟机读取管理程序内存为例:

  1. 分配用于缓存计时侧信道的内存块(reader
  2. 利用Linux KVM的eBPF解释器创建所需代码模式
  3. 通过BHB泄漏获取管理程序中的代码位置
  4. 执行特殊构造的间接分支,欺骗分支预测器
  5. 触发管理程序执行无害操作,启动推测执行链
  6. 通过缓存计时侧信道读取泄露的字节

影响范围

  • 结合了Spectre V1和Meltdown的最坏影响
  • 云提供商:打破了云计算系统中最强的租户隔离机制
  • 多种CPU架构的处理器受影响,不仅限于Intel

应对措施

  • 更新操作系统和固件(BIOS/UEFI)
  • 通过处理器微码更新、间接分支预测器行为控制或重编译避免间接分支
  • 主要云提供商已部署缓解措施

漏洞为何长期未被发现

  1. 计算环境变化:90年代多数计算机为单用户系统,缺乏内存保护,性能提升明显而安全影响不明显
  2. 概念验证难度:虽有多位研究者暗示此问题,但将理论转化为可行攻击极具挑战性

结论

微架构攻击将成为计算机安全的重要领域。由于众多部署平台易受Meltdown和Spectre影响,此类攻击在未来多年仍将具有相关性和危险性。

对于技术细节感兴趣的读者,建议阅读Meltdown和Spectre原始论文及Project Zero博客文章。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计