编译命令:
gcc -pthread -o bpf_spectre_type_confusion bpf_spectre_type_confusion.c -Wall -ggdb -std=gnu99
执行命令:
(sudo) ./bpf_spectre_type_confusion 1 2 ffffffffa4925620 0x10
其中 1 和 2 是两个在不同物理核心上运行的 CPU 线程,ffffffffa4925620 是我们想要泄漏的目标内存地址,0x10 是要泄漏的字节数。该漏洞利用已被修复,但仍可通过以 sudo 权限执行代码来观察结果,因为反制措施仅应用于非 sudo 情况。
泄漏的目标示例地址可通过 sudo cat /proc/kallsyms | grep core_pattern 获取,预期结果可通过 cat /proc/sys/kernel/core_pattern 查看。
使用 DIV 指令(内部已通过添加分支来修补,以避免除零异常)来误导分支预测器的方法由 Piotr 在其研究中发现。参考链接:https://www.openwall.com/lists/oss-security/2021/06/21/1
特别感谢 Jann Horn,他在最初的研究中开发了此漏洞利用代码的基础(https://bugs.chromium.org/p/project-zero/issues/detail?id=1711)。