基于 ARM 指针认证的核函数前向与后向控制流完整性保护
密码学与安全
2020-10-13 v2 操作系统
摘要
代码复用攻击仍是软件与系统安全的重大威胁。控制流完整性是一种抵御此类攻击的有前景的技术。然而,由于其控制流图不准确以及以安全性换取性能的实际策略,其有效性已被削弱。近年来,CPU 厂商已集成硬件特性作为对策。例如,ARM 指针认证(简称 PA)在 ARMV8-A 架构中引入。它可为地址高效生成认证码,该认证码编码在地址的未使用位中。当地址被解引用时,会检查认证码以确保其完整性。尽管已有采用 PA 加固用户程序的系统,如何有效利用 PA 保护操作系统内核仍是一个开放的研究问题。本文阐明了如何利用 PA 保护 Linux 内核的控制流,包括函数指针和返回地址。具体而言,为保护函数指针,我们将认证码嵌入其中,跟踪其传播,并在从内存加载或跳转到目标时验证其值。为进一步防御指针替换攻击,我们使用函数指针地址作为其上下文,并采用一种简洁设计,通过将地址背负到指针值中来传播地址。我们基于 LLVM 实现了原型系统,以识别函数指针、添加认证码并通过发射新机器指令验证函数指针。我们将该系统应用于 Linux 内核,并解决了大量实际问题,例如函数指针比较和算术运算。安全性分析表明,我们的系统能够保护 Linux 内核中的所有函数指针和返回地址。
引用
@article{arxiv.1912.10666,
title = {ARM Pointer Authentication based Forward-Edge and Backward-Edge Control Flow Integrity for Kernels},
author = {Yutian Yang and Songbo Zhu and Wenbo Shen and Yajin Zhou and Jiadong Sun and Kui Ren},
journal= {arXiv preprint arXiv:1912.10666},
year = {2020}
}