[论文解读] In-Kernel Control-Flow Integrity on Commodity OSes using ARM Pointer Authentication
本文提出 PAL,一种基于硬件的内核级控制流完整性(CFI)机制,用于 Linux 和 FreeBSD 等通用操作系统,利用 ARM 指针认证(PA)技术。PAL 通过自动上下文感知的精炼机制提升 CFI 精度,并借助静态验证器确保正确性,实现接近零的性能开销(Apache 上低于 1%,Linux perf 上为 3–5%),同时在 iOS 及其他基于 PA 的系统中发现了新的攻击向量。
This paper presents an in-kernel, hardware-based control-flow integrity (CFI) protection, called PAL, that utilizes ARM's Pointer Authentication (PA). It provides three important benefits over commercial, state-of-the-art PA-based CFIs like iOS's: 1) enhancing CFI precision via automated refinement techniques, 2) addressing hindsight problems of PA for in kernel uses such as preemptive hijacking and brute-forcing attacks, and 3) assuring the algorithmic or implementation correctness via post validation. PAL achieves these goals in an OS-agnostic manner, so could be applied to commodity OSes like Linux and FreeBSD. The precision of the CFI protection can be adjusted for better performance or improved for better security with minimal engineering efforts if a user opts in to. Our evaluation shows that PAL incurs negligible performance overhead: e.g., <1% overhead for Apache benchmark and 3~5% overhead for Linux perf benchmark on the latest Mac mini (M1). Our post-validation approach helps us ensure the security invariant required for the safe uses of PA inside the kernel, which also reveals new attack vectors on the iOS kernel. PAL as well as the CFI-protected kernels will be open sourced.
研究动机与目标
- 解决通用操作系统(如 Linux 和 FreeBSD)在使用 ARM 指针认证时缺乏精确且可部署的内核级 CFI 机制的问题。
- 通过支持自动、与操作系统无关的精炼机制,克服现有基于 PA 的 CFI 方案在精度不足和易受事后攻击影响方面的局限性。
- 通过静态验证器确保基于 PA 的 CFI 的正确性与安全性,检测编译器优化陷阱及内核镜像中的实现缺陷。
- 将性能开销最小化,以支持实际部署,同时维持强安全保证。
- 通过系统化的威胁建模,揭示并分析现有基于 PA 的保护机制(如 iOS 内核)中出现的新攻击向量。
提出的方法
- 利用 ARM 指针认证(PA)生成签名函数指针,在运行时对控制流转移进行认证。
- 实现上下文分析器,自动推断内核特有的惯用模式与设计范式(如对象不变性、调用上下文),以精炼间接调用目标,提升 CFI 精度。
- 使用静态验证器检查最终内核镜像中所有 PA 签名指针是否符合安全不变量,检测诸如指针过早存储或优化导致的失效等问题。
- 在 GCC 编译器管道的 GIMPLE 中间表示(IR)层级集成 CFI 机制,实现与操作系统无关的部署,无需修改内核源码。
- 保留一个 PA 密钥用于内核保护,另一个用于用户空间,并通过按应用多路复用密钥,防止密钥重用攻击。
- 在运行时执行后置验证,以检测原始指针或认证失败情况,确保对边缘情况和编译器误优化的鲁棒性。
实验结果
研究问题
- RQ1如何使基于 PA 的 CFI 在精度与效率之间达到平衡,以满足 Linux 和 FreeBSD 等通用操作系统内核的实际部署需求?
- RQ2在使用 PA 实现内核级 CFI 时,由于编译器优化或误用而引发的新攻击向量有哪些?
- RQ3基于内核设计模式的自动化精炼技术是否能显著提升 CFI 精度,而无需人工注入代码?
- RQ4静态验证器在检测基于 PA 的内核镜像中那些运行时检查无法发现的细微安全缺陷方面,其能力边界如何?
- RQ5基于 PA 的内核级 CFI 在真实工作负载下引入的性能开销有多大?是否可被视为适用于生产环境?
主要发现
- PAL 将间接调用目标数超过 100 的比例从 Android CFI 的 7.0% 降低至 0.08%,显著提升了 CFI 精度。
- Apache 基准测试显示性能开销低于 1%,Linux perf 基准测试显示开销为 3–5%,表明在真实硬件(M1 Mac mini)上影响可忽略。
- 静态验证器在最新 iOS 内核中发现了新的攻击向量,并揭示了现有基于 PA 的方案(如 PARTS 和 Apple 的 CFI)中的缺陷。
- PAL 方法与操作系统无关,可轻松应用于 Linux 和 FreeBSD,仅需极少工程投入,通过自动上下文分析实现高精度 CFI。
- 该系统通过静态与运行时验证强制实施严格不变量,成功防御了常见的 PA 相关攻击(如抢先劫持与暴力破解)。
- PAL 已开源,包含编译器插件、静态验证器及针对 Linux 和 FreeBSD 的 CFI 加固内核,支持可复现性与进一步研究。
更好的研究,从现在开始
从阅读论文到最终审阅,大幅缩短您的研究时间。
无需绑定信用卡
本解读由 AI 生成,并经人工编辑审核。