FineIBT 是由 Intel 工程师领导的一项 Linux 内核计划,旨在将 Intel 控制流执行技术 (CET) 和控制流完整性的优点相结合。FineIBT 于 2022 年合并为 Linux 6.2 内核,作为替代控制流完整性实现。之前已经解决了一些 FineIBT 弱点,但现在该实现已被确定为“严重缺陷”,至少在下一代 Intel 处理器出现 FRED 之前。
这种具有间接分支跟踪的细粒度控制流实施技术旨在将最佳功能与提供内核控制流完整性 (kCFI) 的细粒度特性相结合,同时在现代 x86_64 CPU 上使用 IBT 的粗粒度硬件 CFI。除了安全研究人员上周报告说,他们已经能够通过内核入口点绕过 FineIBT。
亚利桑那州立大学的研究人员指出:
“作为最近接受的一篇论文的一部分,我们证明了 syscall 入口点可以在 x86-64 系统上被滥用,以通常绕过 FineIBT/KERNEL_IBT 免受前向边缘控制流劫持。在提交论文之前,我们将这一发现传达给了 s@k.o,并鼓励我们在论文被接受后将问题进行强化,以讨论如何解决这个问题。
旁路利用了入口点的架构要求,从 endbr64 指令开始,并能够通过 wrgsbase 控制从用户空间到 FSGSBASE 扩展的GS_BASE,以便执行到 ROP 链的堆栈枢轴。
Citrix 的 Linux 内核开发人员 Andrew Cooper 是回应者之一:
“这确实很有趣。Linux 不能使用 Supervisor 影子堆栈,因为围绕 NMI 重入(以及更普遍的 IST)的混乱需要 ROP 小工具才能安全运行。在阴影堆栈处于活动状态的情况下实现这一点虽然并非不可能,但被认为非常复杂。
Linux 的 supervisor 影子堆栈支持正在等待 FRED 支持,它修复了 NMI 重入问题和 NMI 中的其他嵌套异常,并禁止使用 SWAPGS 指令,因为 FRED 试图确保正确的 GS 始终在上下文中。
但是,PantherLake/DiamondRapids 计划提供 FRED 支持,但尚未发货,因此现在没有用。
Linux 内核开发人员最终从这项研究中达成共识,即 FineIBT 在现有处理器上的当前形式存在“严重缺陷”。反过来,在 CPU 耗尽之前,目前没有解决方案可以在 Linux 系统上安全使用 FineIBT 灵活返回事件交付 (FRED)。英特尔 FRED 看起来将与即将推出的 Core Ultra“Panther Lake”和至强 7“Diamond Rapids”处理器一起推出。
反过来,Linux 内核所做的是使 FineIBT 支持依赖于为内核启用的 FRED。这个补丁做了这个根本性的改变,从今天开始,它正在排队等待 tip/tip.git 的 “x86/cpu” 分支 —— 要么是为了即将到来的 Linux 6.15 合并窗口,要么是它被拉入 x86/fixes 以继续进入 Linux 6.14。
转自 Linux’s FineIBT Protections “Critically Flawed” Until Intel CPUs Appear With FRED – Phoronix