中文

我们仍需要 coal mine 中的 canary 吗?测量影子栈在抵御栈溢出中的有效性

密码学与安全 2024-12-24 v1

摘要

栈 canary 与影子栈是缓解内存安全漏洞的广泛部署的缓解措施。虽然栈 canary 由编译器引入并依赖在变量与控制数据之间放置哨兵值,但影子栈实现通过硬件特性显式保护返回地址。本文我们假设栈 canary 与影子栈在抵御顺序栈溢出方面提供相似的保护水平。基于 Juliet 测试套件,我们评估 64 位 x86 (x86-64) 系统在启用栈 canary 作为 x86-64 影子栈强制执行时是否受益。我们观察到 GCC 与 Clang 编译器在不同优化级别下的溢出检测率存在差异,这我们归因于编译器生成的栈布局差异。我们也发现 x86-64 影子栈实现更有效,能够在配合类栈保护器的栈布局时超越栈 canary。我们实现并评估了增强版 Clang x86-64 影子栈插装方案,提高了基于此观察的影子栈检测准确性。

关键词

引用

@article{arxiv.2412.16343,
  title  = {Do we still need canaries in the coal mine? Measuring shadow stack effectiveness in countering stack smashing},
  author = {Hugo Depuydt and Merve Gülmez and Thomas Nyman and Jan Tobias Mühlberg},
  journal= {arXiv preprint arXiv:2412.16343},
  year   = {2024}
}