中文

并非如此之快:理解并缓解编译器优化对代码复用 gadget 集的负面影响

密码学与安全 2021-09-30 v3

摘要

尽管编译器优化在其功能语义上经过了广泛测试与正确性认证,已有研究表明若干编译器优化会违反源代码中实现的安全保证。先前工作揭示了此类优化如何向程序中引入语义安全弱点,但关于编译器优化对具有安全含义的非语义属性的影响仍存在显著的知识空白。特别是,目前鲜有关于编译器的代码生成与优化决策如何影响实现面向返回编程等代码复用攻击方法所需的、称为 gadget 的可复用代码段的可用性与效用。本文通过对编译器优化在代码复用 gadget 集上影响的研究来弥合此空白。我们分析并比较了用两种生产编译器(GCC 与 Clang)构建的 20 个不同基准程序的 1,187 个变体,以确定其优化行为如何就量化与质性指标影响程序变体中存在的代码复用 gadget 集。我们的研究暴露了一个重要且出乎意料的问题:编译器优化以高比率引入新 gadget,并产生包含通常比未优化代码中那些对攻击者更有用的 gadget 集的代码。利用差分二进制分析,我们识别了造成此现象根源的若干不良行为的根因。进而,我们提出并评估了若干缓解这些行为的策略。特别地,我们展示了后生产二进制重编译能以可忽略的性能影响有效缓解这些行为,从而得到具有显著更小且更无用 gadget 集的优化代码。

关键词

引用

@article{arxiv.2005.08363,
  title  = {Not So Fast: Understanding and Mitigating Negative Impacts of Compiler Optimizations on Code Reuse Gadget Sets},
  author = {Michael D. Brown and Matthew Pruett and Robert Bigelow and Girish Mururu and Santosh Pande},
  journal= {arXiv preprint arXiv:2005.08363},
  year   = {2021}
}

备注

30 pages, 7 figures, 9 tables