与幽灵#2相比,LFENCE真的没用了?

Art*_*nov 6 memory x86 assembly x86-64 cpu-architecture

有人知道为什么LFENCE指令建议在Specter#1(边界检查旁路/越界读取)的情况下停止推测执行,但在Spectre#2(分支目标注入)的情况下是没用的吗?这两个幽灵漏洞都与推测性执行有关,并且正在利用分支预测器.据我所知,在第一种情况下涉及通用预测器,其次是间接呼叫预测器.如果我开始使用LFENCE来防止基于间接呼叫预测器的推测性执行来缓解幽灵#2,那会有用吗?

EOF*_*EOF 10

来自幽灵纸

7减缓方案

如果可以在潜在敏感的执行路径上暂停推测执行,则可以减轻条件分支漏洞.

这意味着如果你有像这样的代码

if (security critical check)
  execute critical code
else 
  do not execute critical code
Run Code Online (Sandbox Code Playgroud)

那么你需要在安全关键代码之前放置序列化指令:

if (security critical check)
  lfence
  execute critical code
else 
  do not execute critical code
Run Code Online (Sandbox Code Playgroud)

避免猜测检查可能泄漏信息.

在Spectre#2中,攻击者控制"入口点",CPU推测执行将继续.把

lfence
critical code
Run Code Online (Sandbox Code Playgroud)

没有帮助,因为攻击者不必导致预测目标lfence,他们可以critical code直接使其成为目标.

  • @EOF英特尔表示,当您要减轻“幽灵”(Spectre)#2时,网纹可用于反渗透线的构造。https://software.intel.com/sites/default/files/managed/1d/46/Retpoline-A-Branch-Target-Injection-Mitigation.pdf (2认同)