在Spectre变体2中,分支目标缓冲区(BTB)可能在另一个过程中中毒。如果分支预测器也使用虚拟地址为分支建立索引,为什么我们不能像在Spectre v1攻击中训练BTB那样训练分支预测器?
答案 0 :(得分:0)
如果分支预测器也使用虚拟地址为分支建立索引,为什么我们不能像在Spectre v1攻击中训练BTB那样训练分支预测器?
简单答案:
我们不知道另一个进程的虚拟地址
由于它是另一个进程,因此我们无法直接将CPU指令注入另一个进程来访问所需的内存。
更详细:
当然,Spectre V1和V2使用相同的漏洞-分支预测器。基本区别是V1在同一进程中工作,而V2在多个进程中工作。
V1的典型示例是JavaScript虚拟机。我们无法从VM内访问进程内存,因为VM会检查每次内存访问的范围。但是,使用Spectre V1,我们可以首先为VM训练分支预测器,然后以推测方式访问当前进程中的内存。
如果我们要访问另一个进程(即Spectre V2),事情会变得更加复杂。首先,我们必须训练远程过程的分支预测器。有很多方法可以做到这一点,包括您提到的方法:训练本地虚拟地址(如果我们知道的话)。
然后,我们不能仅仅要求远程进程“请阅读此秘密”,所以我们必须使用称为“面向返回的编程”的技术来推测性地执行远程进程内部所需的代码。
那是主要区别。但是正如我所说,您的建议是有效的,并且肯定会在某些CPU和某些情况下有效。