为什么分支预测器无法在另一个过程中训练。

时间:2018-10-29 09:17:51

标签: branch-prediction spectre

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

1 个答案:

答案 0 :(得分:0)

  

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

简单答案:

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

  2. 由于它是另一个进程,因此我们无法直接将CPU指令注入另一个进程来访问所需的内存。

更详细:

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

V1的典型示例是JavaScript虚拟机。我们无法从VM内访问进程内存,因为VM会检查每次内存访问的范围。但是,使用Spectre V1,我们可以首先为VM训练分支预测器,然后以推测方式访问当前进程中的内存。

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

然后,我们不能仅仅要求远程进程“请阅读此秘密”,所以我们必须使用称为“面向返回的编程”的技术来推测性地执行远程进程内部所需的代码。

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