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