0

在 Spectre 变体 2 中,分支目标缓冲区 (BTB) 可能在另一个进程中中毒。如果分支预测器也使用虚拟地址来索引分支,为什么我们不能像在 Spectre v1 攻击中训练 BTB 那样训练分支预测器?

4

1 回答 1

0

如果分支预测器也使用虚拟地址来索引分支,为什么我们不能像在 Spectre v1 攻击中训练 BTB 那样训练分支预测器?

简单的答案:

  1. 我们不知道另一个进程的虚拟地址

  2. 由于它是另一个进程,我们不能直接将 CPU 指令注入另一个进程来访问我们需要的内存。

更详细:

当然,Spectre V1 和 V2 使用相同的漏洞——分支预测器。基本区别在于V1在同一个进程内工作,而V2在进程间工作。

V1 的一个典型例子是 JavaScript 虚拟机。我们无法从 VM 内部访问进程内存,因为 VM 会检查每个内存访问的边界。但是使用 Spectre V1,我们可以首先为 VM 训练分支预测器,然后推测性地访问当前进程中的内存。

如果我们想访问另一个进程,即 Spectre V2,事情会变得更加复杂。首先,我们必须训练远程进程的分支预测器。有很多方法可以做到这一点,包括你提到的方式:训练本地虚拟地址(如果我们知道的话)。

然后我们不能只问远程进程“请阅读这个和这个秘密”,所以我们必须使用称为“面向返回的编程”的技术来推测性地执行我们需要在远程进程中的代码片段。

这是主要区别。但正如我所说,您的建议是有效的,并且肯定会在某些 CPU 和某些情况下工作。

于 2018-11-07T15:44:09.400 回答