C++ 安全性,在上下文中

主要观点:

  • 要改善 C++的安全性,需关注类型、边界、初始化和生命周期等四类安全问题,这是 NIST 等推荐的 MSLs 所提供的主要改进来源,可通过默认强化已知规则来实现,同时保持与现有 C++代码的完美向后兼容性。
  • 软件安全和软件安全都很重要,不能只关注编程语言安全,还应考虑其他因素如网络攻击、意外故障等。
  • 目标是将 C++中这四类安全漏洞减少 90 - 98%,而非追求零漏洞,因为这在不牺牲兼容性的情况下是可实现的,且能在现有代码基础上逐步改进。
  • 要纠正关于 C++安全问题的一些常见误解,如定义问题、形式证明安全性、迁移到 MSLs 的效果、程序员努力程度等。
  • 行动呼吁:整个行业应提高编程语言内存安全性,C++应针对关键安全类别进行改进,同时认识到编程语言安全不是万能的,还需重视其他安全方面,如使用静态分析器、更新工具、保护软件供应链等。

关键信息:

  • 四类安全问题及改进方向:类型安全(禁止或检查不安全的转换)、边界安全(禁止指针算术等,保证边界检查)、初始化安全(默认初始化前使用)、生命周期安全(禁止手动内存管理,保证空指针检查)。
  • 关于误解的阐述:如主流语言并非正式可证明安全,MSLs 也有漏洞,70%的安全漏洞归因于语言安全的说法有误等。
  • 行动呼吁内容:使用静态分析器和 sanitizers,更新工具,保护软件供应链,正确配置服务器,加密数据,保持威胁建模等。

重要细节:

  • 在 C++20 中已实现“超集”(如标准化 span、string_view、概念和边界感知范围等),现在应“子集化”,默认强制类型和内存安全最佳实践。
  • 对于现有代码,可通过自动注入边界检查等方式在不改变源代码的情况下提高安全性,同时也应重视需要手动更新代码的情况。
  • 不同的安全解决方案分为适用于新/可更新代码(需代码更改)和现有代码(只需重新编译)两类,应兼顾两者以提高安全性的采用率和影响。
  • 在附录中详细说明了如何通过具体规则和措施实现 98%的安全漏洞减少,如在不同安全方面的默认设置和可选项等。
阅读 11
0 条评论