Meltdown与Spectre可访问性概述(第二部分)
Spectre(变种1)
Spectre的第一个变种允许程序读取本无权限访问的内存。Spectre V1攻击之所以可能,是因为分支预测和推测执行两种优化的结合。攻击通过欺骗条件分支预测器跳过安全检查,在错误上下文中推测执行指令,这些指令的效果通过缓存计时侧信道可见。
技术细节
通过JavaScript在浏览器中执行攻击的示例:
- 创建两个大型内存分配:
leaker
(用于缓存计时侧信道)和reader
(用于训练分支预测器) - 训练分支预测器使其假设数组边界检查总是通过
- 确保
leaker
无缓存内容 - 读取
reader
的越界元素(称为secret
) - 使用
secret
值作为索引读取reader
元素,该操作被推测执行并缓存 - 通过测量每个元素的读取时间确定被缓存的元素,其索引即为
secret
值
攻击带宽估计为10KB/s。
影响范围
- 对桌面、笔记本和移动用户:网站可打破浏览器安全隔离,读取其他标签页的密码或信用卡号
- 对云提供商和互联网公司:编程语言提供的隔离保证失效,需要重新评估安全架构和重构核心代码
应对措施
- 更新浏览器、操作系统和BIOS至最新版本
- 浏览器厂商已移除高精度计时器并避免使用易受攻击的代码模式
- 主要云提供商已部署缓解措施
Spectre(变种2)
第二个变种允许程序读取无权限访问的内存,无论该内存属于同一程序、其他程序还是操作系统内核。
技术细节
Spectre V2攻击间接分支预测器,其特点包括:
- 利用分支历史缓冲区(BHB)预测间接分支目标
- 通过精心选择的分支序列"毒化"分支预测器
- 攻击可跨权限级别执行(用户到内核、程序到程序、虚拟机到管理程序)
以从客户虚拟机读取管理程序内存为例:
- 分配用于缓存计时侧信道的内存块(
reader
) - 利用Linux KVM的eBPF解释器创建所需代码模式
- 通过BHB泄漏获取管理程序中的代码位置
- 执行特殊构造的间接分支,欺骗分支预测器
- 触发管理程序执行无害操作,启动推测执行链
- 通过缓存计时侧信道读取泄露的字节
影响范围
- 结合了Spectre V1和Meltdown的最坏影响
- 云提供商:打破了云计算系统中最强的租户隔离机制
- 多种CPU架构的处理器受影响,不仅限于Intel
应对措施
- 更新操作系统和固件(BIOS/UEFI)
- 通过处理器微码更新、间接分支预测器行为控制或重编译避免间接分支
- 主要云提供商已部署缓解措施
漏洞为何长期未被发现
- 计算环境变化:90年代多数计算机为单用户系统,缺乏内存保护,性能提升明显而安全影响不明显
- 概念验证难度:虽有多位研究者暗示此问题,但将理论转化为可行攻击极具挑战性
结论
微架构攻击将成为计算机安全的重要领域。由于众多部署平台易受Meltdown和Spectre影响,此类攻击在未来多年仍将具有相关性和危险性。
对于技术细节感兴趣的读者,建议阅读Meltdown和Spectre原始论文及Project Zero博客文章。