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

时间:2018-01-25 14:30:40

标签: assembly memory x86 x86-64 cpu-architecture

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

1 个答案:

答案 0 :(得分:10)

来自Spectre paper

  

7个缓解方案

     
    

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

  

这意味着如果你有像

这样的代码
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

以避免对支票的猜测可能泄露信息。

在幽灵#2中,攻击者控制着#34;入口点" CPU推测执行将继续。把

lfence
critical code

无效,因为攻击者不必使预测定位到lfence,他们可以直接定位critical code