Skip to main content
QUICK REVIEW

[论文解读] PAC it up: Towards Pointer Integrity using ARM Pointer Authentication

Hans Liljestrand, Thomas Nyman|arXiv (Cornell University)|Nov 22, 2018
Security and Verification in Computing参考文献 36被引用 34
一句话总结

本文提出 PARTS,一个编译器插桩框架,利用 ARM 指针认证(PA)来强制实施代码指针和数据指针的指针完整性,显著提升对控制流攻击和面向数据攻击的防护能力。通过结合指针签名与运行时类型安全,PARTS 在性能开销极低的情况下实现了强大的安全保证——代码指针和返回指针签名的性能开销低于 0.5%,nbench-byte 基准测试中数据指针签名的性能开销为 19.5%,优于现有解决方案,包括完全精确的静态 CFI。

ABSTRACT

Run-time attacks against programs written in memory-unsafe programming languages (e.g., C and C++) remain a prominent threat against computer systems. The prevalence of techniques like return-oriented programming (ROP) in attacking real-world systems has prompted major processor manufacturers to design hardware-based countermeasures against specific classes of run-time attacks. An example is the recently added support for pointer authentication (PA) in the ARMv8-A processor architecture, commonly used in devices like smartphones. PA is a low-cost technique to authenticate pointers so as to resist memory vulnerabilities. It has been shown to enable practical protection against memory vulnerabilities that corrupt return addresses or function pointers. However, so far, PA has received very little attention as a general purpose protection mechanism to harden software against various classes of memory attacks. In this paper, we use PA to build novel defenses against various classes of run-time attacks, including the first PA-based mechanism for data pointer integrity. We present PARTS, an instrumentation framework that integrates our PA-based defenses into the LLVM compiler and the GNU/Linux operating system and show, via systematic evaluation, that PARTS provides better protection than current solutions at a reasonable performance overhead

研究动机与目标

  • 为应对 C 和 C++ 等内存不安全语言中日益增长的运行时攻击威胁。
  • 探索 ARMv8-A 指针认证(PA)作为通用防御机制的潜力,超越返回地址保护的范畴。
  • 设计并实现一个实用、高效且安全的框架,强制实施所有指针类型的完整性,包括数据指针。
  • 评估在真实工作负载中基于 PA 的防御方案在安全性和性能之间的权衡。
  • 实现基于 PA 的防护机制在主流编译器和操作系统中的集成。

提出的方法

  • 设计一种指针签名方案,使用密码学 MAC(PAC)对所有代码指针和数据指针进行认证,防止篡改。
  • 引入运行时类型安全机制,通过确保仅类型正确的指针可被使用,以限制指针替换攻击。
  • 构建 PARTS,一个与 LLVM 和 GNU/Linux 集成的编译器插桩框架,可在编译时自动应用基于 PA 的保护机制。
  • 对返回地址、函数指针和数据指针使用 PAC 进行插桩,以检测并防止伪造指针的使用。
  • 使用 pacga 指令支持对任意数据块的认证栈保护和完整性检查。
  • 设计一种密钥管理策略,将 PA 密钥配置陷阱置于更高特权级别(EL2/EL3),以防止权限提升。

实验结果

研究问题

  • RQ1ARM 指针认证能否有效扩展至返回地址保护之外,以保护所有指针类型?
  • RQ2如何在保持性能和实用性的同时,利用 PA 缓解指针重用攻击?
  • RQ3使用 PA 保护数据指针的性能开销是多少,是否适合实际部署?
  • RQ4运行时类型安全与 PA 的结合是否能提供比现有 CFI 或影子栈方案更强的安全保证?
  • RQ5如何将基于 PA 的防护机制集成到现有软件栈中,包括共享库和遗留代码?

主要发现

  • PARTS 在代码指针和返回地址签名方面实现了低于 0.5% 的平均性能开销,表现出极高的效率。
  • 在 nbench-byte 基准测试中,数据指针签名的平均开销为 19.5%,对安全关键型应用而言可接受。
  • PARTS 提供比完全精确的静态 CFI 更强的安全保证,因为它可防止来自进程外部的伪造指针值。
  • 指针签名与运行时类型安全的结合能有效防御控制流攻击和面向数据编程(DOP)攻击。
  • PARTS 对指针重用攻击具有强韧性,成功利用需同时满足栈指针值匹配且源自同一进程中的同一函数。
  • 该框架通过 PAC 包装器和注解支持与遗留代码的集成,实现与非插桩代码的安全互操作。

更好的研究,从现在开始

从论文设计到论文写作,大幅缩短您的研究时间。

无需绑定信用卡

本解读由 AI 生成,并经人工编辑审核。