更安全的 C++ · Alex Gaynor

主要观点:倡导在安全相关环境中从内存不安全语言(C 和 C++)迁移到内存安全语言,同时认为让 C++更安全也有价值,需考虑改进 C++安全性的提案成本及实际能达到的安全程度,范围外不考虑影响系统语言使用原因及利用缓解措施等,重点从空间安全、未初始化内存、时间安全(主要是使用后释放漏洞)、数据竞争等方面分析改进 C++安全性的方法,结论是 C++有很大安全改进空间,让 C++像 Swift 或 Go 或 Rust 一样安全目前不知如何做到,工程和安全团队应将使 C++更安全与迁移到更安全语言的投资纳入组合。

关键信息:

  • 迁移到内存安全语言的合理性及 C++现有大量代码的现状。
  • 评估改进 C++安全性提案的成本和安全程度。
  • 空间安全方面可通过定义 STL 容器的默认索引操作进行边界检查等措施改进。
  • 未初始化内存可通过某些编译器标志初始化栈和要求 malloc 实现返回初始化内存来改善,但有局限性。
  • 时间安全方面智能指针虽可改善所有权模型但仍不足以解决问题,有关于获取“生命周期”语法和语义的提案但不完善。
  • 未提及解决数据竞争的 C++提案,且“借用检查器”不足以保证数据竞争安全。

重要细节:

  • [libc++的硬化模式实现了许多 STL 容器的边界检查检查]。
  • 初始化值为零虽更安全但有风险且有性能开销。
  • 关于“生命周期”提案的现状及对大型程序实现高覆盖率的推测。
阅读 37
0 条评论