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直接使其成为目标.