下载 PDF 摘要:空间安全违规是许多安全攻击和应用程序意外行为的根源。现有的强制执行空间安全的技术在对象或指针粒度上广泛工作。基于对象的方法往往会导致高 CPU 开销,而基于指针的方法会导致高 CPU 和内存开销。 SGXBounds 是一种基于对象的方法,是迄今为止为对象提供完整越界保护的最有效技术。但是,这种方法的一个主要缺点是它将应用程序地址空间限制为 4GB。在本文中,我们介绍了 CGuard,这是一种为 C 应用程序提供对象边界保护的工具,其开销与 SGXBounds 相当,而不会限制应用程序地址空间。 CGuard 在对象的基地址之前存储边界信息,并在 x86_64 架构中可用的虚拟地址的备用位中编码基地址的相对偏移量。对于无法放入备用位的对象,CGuard 使用自定义内存布局,使其能够在一次内存访问中找到对象的基地址。我们的研究揭示了来自 SPEC CPU2017 基准测试套件的 gccand x264 基准测试和来自 Phoenix 基准测试套件的 string_matchbenchmark 的空间安全违规。 SPEC CPU2017 和 Phoenix 基准套件的执行时间开销分别为 44% 和 25%,而当 CPU 完全饱和时,Apache Web 服务器的吞吐量降低了 30%。这些结果表明 CGuard 在保持合理效率的同时可以非常有效。