eBPF 子系统中存在允许绕过 Spectre 攻击防护的漏洞

Linux 内核中已发现一个漏洞 (CVE-2021-33624),该漏洞允许使用 eBPF 子系统绕过针对 Spectre 类漏洞的保护,从而可以通过为某些操作的推测执行。 Spectre 攻击要求特权代码中存在特定的命令序列,从而导致指令的推测执行。 通过操纵传输执行的 BPF 程序,可以在 eBPF 中生成类似的指令,并通过侧通道泄漏内核内存和物理内存的任意区域的内容。

该漏洞是由验证器中的缺陷引起的,验证器用于检测 BPF 程序中的错误和不可接受的活动。 验证器枚举可能的代码执行路径,但跳过从指令集架构的语义的角度来看不可接受的分支选项。 当执行 BPF 程序时,验证器未考虑的此类分支选项可能会被处理器错误地预测并以推测模式执行。 例如,在分析“加载”操作时,验证者期望该指令使用的寄存器的地址值始终在指定的边界内,但攻击者可以创造条件,使处理器尝试推测性地执行操作不符合验证条件的地址。

该问题自内核4.15发布以来就一直出现,并已以补丁的形式修复(1)。 该漏洞在发行版(Debian、RHEL、Ubuntu、Fedora、SUSE、Arch)中仍未修复。

此外,您还可以注意有关防止 Spectre 漏洞的工具的性能影响的说明。 该说明总结了 rr(记录和重放)调试器的优化结果,该调试器曾在 Mozilla 中创建,用于调试 Firefox 中难以重复的错误。 缓存用于检查目录是否存在的系统调用将测试项目的“rrsources”操作从 3 分 19 秒减少到 36 秒。

优化作者决定检查禁用 Spectre 保护后性能会如何变化。 使用“mitigations=off”参数启动系统后,未经优化的“rrsources”的执行时间为2分5秒(快1.6倍),经过优化后为33秒(快9%)。 有趣的是,禁用 Spectre 保护不仅使内核级别的代码执行时间减少了 1.4 倍(从 2m9s 减少到 1m32s),而且还使用户空间的执行时间减少了一半(从 1m9s 减少到 0m33s),这可能是由于 CPU 缓存操作和 TLB 效率降低所致当幽灵保护启用时重置。

来源: opennet.ru

添加评论