什么是 ARM Pointer Authentication (PAC)?
Pointer Authentication (PAC) 是 ARMv8.3-A 架构引入的一种硬件安全特性,旨在防止代码重用攻击(如返回导向编程(ROP)和跳转导向编程(JOP))。PAC 通过对指针(函数指针、数据指针等)生成和验证加密签名,确保指针的完整性和真实性,从而增强系统的安全性。
PAC 的基本原理
PAC 通过在指针中加入一个签名(authentication code)来验证指针的有效性。签名生成和验证过程需要一个密钥,这个密钥存储在处理器的特权控制寄存器中,并且对用户态代码不可见。
PAC 主要由以下指令构成:
- 生成签名(Sign a pointer):
PACIA
:使用 A 键对指针生成签名。PACIB
:使用 B 键对指针生成签名。
- 验证签名(Authenticate a pointer)