论文标题
Cryptsan:利用ARM指针身份验证C/C ++的内存安全性
CryptSan: Leveraging ARM Pointer Authentication for Memory Safety in C/C++
论文作者
论文摘要
即使经过数十年的检测和预防研究,记忆安全错误仍然处于安全漏洞的最高排名中。已经提出了针对C/C ++的各种缓解,从语言方言到仪器。其中,基于编译器的仪器特别有希望,不需要手动代码修改并能够实现精确的存储安全性。不幸的是,现有的基于编译器的解决方案在许多领域都妥协,包括性能以及可用性和记忆安全保证。硬件的新开发项目可以帮助提高基于编译器的内存安全性的性能和安全性。 ARMV8.3体系结构中添加的ARM指针身份验证旨在启用硬件辅助控制流完整性(CFI)。但是,由于其操作是通用的,因此它也可以实现其他更全面的硬件运行时完整性方法。因此,我们提出了Cryptsan,这是一种基于手臂指针身份验证的内存安全方法。 Cryptsan使用指针签名将内存安全性改造为C/C ++程序,保护堆,堆栈和全球群体免受时间和空间漏洞的影响。我们提供了一个完整的基于LLVM的原型实现,该实现在M1 MacBook Pro上运行,即在实际的ARMV8.3硬件上运行。我们的原型评估表明,该系统在实际条件下的表现优于类似的方法。这是与未录制的库和对元数据攻击的密码保护的互操作性,使Cryptsan成为将记忆安全性改造为C/C ++程序的可行解决方案。
Memory safety bugs remain in the top ranks of security vulnerabilities, even after decades of research on their detection and prevention. Various mitigations have been proposed for C/C++, ranging from language dialects to instrumentation. Among these, compiler-based instrumentation is particularly promising, not requiring manual code modifications and being able to achieve precise memory safety. Unfortunately, existing compiler-based solutions compromise in many areas, including performance but also usability and memory safety guarantees. New developments in hardware can help improve performance and security of compiler-based memory safety. ARM Pointer Authentication, added in the ARMv8.3 architecture, is intended to enable hardware-assisted Control Flow Integrity (CFI). But since its operations are generic, it also enables other, more comprehensive hardware-supported runtime integrity approaches. As such, we propose CryptSan, a memory safety approach based on ARM Pointer Authentication. CryptSan uses pointer signatures to retrofit memory safety to C/C++ programs, protecting heap, stack, and globals against temporal and spatial vulnerabilities. We present a full LLVM-based prototype implementation, running on an M1 MacBook Pro, i.e., on actual ARMv8.3 hardware. Our prototype evaluation shows that the system outperforms similar approaches under real-world conditions. This, together with its interoperability with uninstrumented libraries and cryptographic protection against attacks on metadata, makes CryptSan a viable solution for retrofitting memory safety to C/C++ programs.