PAC 绕过新维度
摘要 ARM64 的指针认证通过 PACIA/PACIB 指令为返回地址和函数指针附加密码学签名,阻断了传统 ROP/JOP 攻击。然而,PAC 的密钥分域——指令地址用 A-key,数据地址用 B-key——留下了裂隙。攻击者可以在 JavaScript JIT 编译过程中喷射精心构造的 shellcode,利用 JIT 引擎生成混合了返回指令序列的代码,在指令域签名却在数据域校验,从而绕过 PAC 验证。 ARM64 PAC密钥分域与签名 PAC 指令与密钥 ARMv8.3-A 引入了指针认证(PAC),使用基于 QARMA 的轻量级 MAC 算法为 64 位指针生成认证码,嵌入指针的高位。核心指令: PACIA Xd, Xn:使用指令 A-key 对 Xn 生成签名,存储到 Xd。 PACIB Xd, Xn:使用指令 B-key 对 Xn 签名。 AUTIA Xd, Xn:验证 A-key 签名,若失败则将 Xd 设为无效指针。 AUTIB Xd, Xn:验证 B-key 签名。 A-key 用于指令地址(如返回地址、函数指针),B-key…