中文

DangKiller:通过隐式标识符高效消除悬垂指针

密码学与安全 2020-03-03 v1 编程语言

摘要

释放后使用(Use-After-Free)漏洞允许攻击者通过悬垂指针访问非预期内存,具有更大威胁。然而,大多数检测方案只能检测悬垂指针并使其失效,而不能提供在运行时修复错误的容错机制。此外,这些技术以复杂的结构和过多扫描(sweep)低效地获取和管理元数据。本文的目标是采用编译器插桩自动且高效地消除悬垂指针。在本文中,我们观察到大多数技术缺乏准确高效的指针图元数据维护方法,因此需要扫描日志以减少冗余并扫描整个地址空间以查找悬垂指针。同时,它们缺乏直接的、高效获取元数据的方法。本文的核心见解是,唯一标识符可用作哈希或直接映射算法的键。因此,本文为每个内存对象及其对应引用维护相同的隐式标识符。将唯一 ID 与内存对象的元数据关联,可以高效地获取和管理指针图元数据。因此,随着延迟释放技术引入 C/C++,我们提出 DangKiller 作为一种新颖且轻量级的悬垂指针消除方案。我们首先演示了 MinFat Pointer,它可快速计算每个对象与指针的唯一隐式 ID,并使用哈希算法获取元数据。其次,我们提出基于 ID 的日志缓存与日志压缩机制,以减少悬垂指针候选的冗余。结合 ARM64 系统上的地址标记架构,我们的实验表明,除个别特例外,DangKiller 在 SPEC CPU2006 和 2017 基准测试上分别以仅 11% 和 3% 的运行开销消除释放后使用漏洞。

关键词

引用

@article{arxiv.2003.00175,
  title  = {DangKiller: Eliminating Dangling Pointers Efficiently via Implicit Identifier},
  author = {Daliang Xu and Dongwei Chen and Chun Yang and KangSun and Xu Cheng and Dong Tong},
  journal= {arXiv preprint arXiv:2003.00175},
  year   = {2020}
}