How to Secure Existing C and C++ Software without Memory Safety

2025年03月27日
  • 简介
    软件内存安全最重要的安全好处可以简单地表述为:对于C和C++软件,攻击者可以利用大多数漏洞和安全问题来获得对软件行为的完全、无限制控制,而这对内存安全软件中的大多数漏洞来说并不成立。 幸运的是,这种安全优势——即大多数漏洞不会让攻击者获得完全控制——可以在未修改的C/C++软件中实现,并且无需针对每个应用程序进行额外努力。 这并不需要尝试去实现内存安全;相反,消除大部分因内存损坏而导致的程序执行组合方式就足够了。为了消除这些交错执行路径,已经存在一些实用的编译器和运行时机制,它们几乎不增加开销,也不需要特殊的硬件或平台支持。 这里描述的每种机制已经在至少一个平台上得到了大规模的实际应用。通过在开发工具链中支持这些机制的联合使用,可以快速且显著地提升所有C和C++软件对抗远程代码执行攻击的安全性。
  • 图表
  • 解决问题
    该论文试图解决C/C++软件中因内存安全问题导致的远程代码执行攻击问题。这是一个长期存在的问题,但论文提出了一种新的方法来减少未修改的C/C++软件中的漏洞利用风险。
  • 关键思路
    相比传统追求内存安全的方法,论文提出通过限制程序在内存损坏情况下的执行路径(消除大多数组合性执行方式)来降低攻击者获取完全控制的可能性。这种方法不需要对现有C/C++软件进行修改,也不依赖特殊硬件或平台支持,仅需利用现有的编译器和运行时机制即可实现。
  • 其它亮点
    论文强调其方法已经在多个平台上大规模应用,并且可以显著提升C/C++软件的安全性。实验设计可能涉及对比不同机制的有效性和性能开销。此外,论文提到这些技术无需额外硬件支持,易于集成到现有开发工具链中。虽然没有明确提及数据集或开源代码,但值得进一步研究的是如何将这些技术更广泛地应用于不同的软件生态系统。
  • 相关研究
    与本研究相关的其他工作包括:1) AddressSanitizer等内存错误检测工具;2) Control Flow Integrity (CFI) 技术;3) Microsoft的Control Flow Guard (CFG) 和 Google的SafeStack项目。另外,类似的研究还包括 'Memory Safety Without Runtime Checks' 和 'Practical Memory Safety for C Programs' 等论文,它们探索了不同的内存安全改进策略。
PDF
原文
点赞 收藏 评论 分享到Link

沙发等你来抢

去评论