RegGuard:利用 CPU 寄存器缓解控制流与数据流导向的攻击
密码学与安全
2021-10-22 v1
摘要
CPU 寄存器是小型离散存储单元,用于在 CPU 内保存临时数据和指令。寄存器不能像内存那样寻址,这使得它们免受内存攻击和其他手段的操纵。在本文中,我们利用这一点为关键程序数据(包括栈上活跃的局部变量和控制对象)提供保护机制。这种保护有效消除了控制流和数据流导向攻击的威胁,即使对手完全知晓活跃栈也是如此。我们的方案 RegGuard 是一种编译器寄存器分配策略,利用可用的 CPU 寄存器在执行期间保存关键变量。与传统分配方案不同,RegGuard 优先考虑程序变量的安全重要性而非其预期性能增益。我们的方案能有效处理保存到栈的寄存器,即当中编译器需要释放寄存器以为新函数调用的变量腾出空间时。借助 RegGuard,整个栈上任何位置的关键数据对象都受到有效保护免遭破坏,即使对手具有任意读写权限。虽然我们的主要设计重点是安全性,但性能对于方案在实际中被采用也非常重要。RegGuard 仍受益于通常与寄存器分配相关的性能提升,且在大多数情况下开销与其他未加保护寄存器分配方案的百分之几以内。我们给出了使用不同基准测试程序和 C 库在 ARM64 平台上的详细实验来展示 RegGuard 的性能。
引用
@article{arxiv.2110.10769,
title = {RegGuard: Leveraging CPU Registers for Mitigation of Control- and Data-Oriented Attacks},
author = {Munir Geden and Kasper Rasmussen},
journal= {arXiv preprint arXiv:2110.10769},
year = {2021}
}
备注
15 pages with 8 figures