有谁知道为什么建议使用LFENCE指令在Spectre#1(边界检查绕过/越界读取)的情况下停止推测执行,但是在Spectre#2(分支目标注入(inject))的情况下却毫无用处?这两个Spectre漏洞都与推测执行有关,并且正在利用分支预测变量。据我了解,第一种情况涉及通用预测变量,第二种涉及间接调用预测变量。如果我开始使用LFENCE来防止基于间接调用预测变量来减轻Spectre#2的推测执行,它会有用吗?

最佳答案

Spectre paper



这意味着如果您有类似的代码

if (security critical check)
  execute critical code
else
  do not execute critical code

那么您需要将序列化指令放在安全关键代码之前:
if (security critical check)
  lfence
  execute critical code
else
  do not execute critical code

避免猜测可能会泄漏信息的检查。

在Spectre#2中,攻击者控制CPU推测执行将继续的“入口点”。推杆
lfence
critical code

这无济于事,因为攻击者无需使预测成为lfence的目标,他们就可以使它直接成为critical code的目标。

关于assembly - LFENCE与Spectre#2真的没用吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48445290/

10-11 18:32