来自谷歌的佐拉·布里奇斯 предложил 针对 LLVM 编译器集,实施 SESES(推测执行副作用抑制)保护的补丁,有助于阻止对 Intel CPU 推测执行机制的攻击,例如 LVI。 该保护方法是在编译器级别实现的,基于编译器在生成机器代码时添加指令 朗讯,它们被插入在每个存储器读取或写入指令之前,以及结束该块的指令组中的第一个分支指令之前。
LFENCE 指令等待所有先前的内存读取提交,并禁用 LFENCE 之后的后续指令的抢占,直到提交完成。 使用LFENCE会导致性能显着下降,因此建议在极端情况下对特别关键的代码使用保护。 除了全面保护之外,该补丁还提供了三个标志,允许您有选择地禁用某些级别的保护,以减少对性能的负面影响。
在进行的测试中,对 BoringSSL 包使用 SESES 保护导致该库每秒执行的操作数减少了 14 倍——受保护版本的库的性能平均仅为其他版本的 7.1%。未受保护的版本(变化取决于测试,从 4% 到 23%)。
为了比较, 建议 此前,对于 GNU Assembler,在每次内存加载操作之后和某些分支指令之前执行 LFENCE 替换的机制表现出约 5 倍的性能下降(没有保护的代码的 22%)。 保护方法也是 建议的 и 已实施 由英特尔工程师设计,但其性能测试结果尚未公布。 最初,识别 LVI 攻击的研究人员预测,在应用全面保护时,性能会下降 2 至 19 倍。
来源: opennet.ru