作者:电子创新网张国斌
近日,多家外媒报道,美国网络安全和基础设施安全局(CISA)和联邦调查局(FBI)宣布将说服软件制造商放弃 C 和 C++ 等 “内存不安全 ”的编程语言。根据其《产品安全最佳实践》报告,美国政府正在鼓励软件制造商放弃 C/C++,并采取其他可以 “降低客户风险 ”的措施。CISA 和 FBI 将遵守内存安全准则的最后期限定为 2026 年 1 月 1 日。
不过这个报告涉及的是指导方针和建议,而不是强制性规则,尤其是针对从事关键基础设施或国家关键功能的软件制造商。这些机构特别强调了内部软件、云服务和软件即服务。
难道 C 和 C++ 真要退出历史舞台了吗?
至少从 2019 年开始,内存安全就一直是一个讨论话题。美国国家安全局 2023 年关于内存安全的一份报告指出,C 和 C++ 等语言 “在内存管理方面提供了很大的自由度和灵活性,同时在很大程度上依赖程序员对内存引用进行必要的检查”。然而,报告继续指出,这些语言缺乏固有的内存保护,无法防止内存管理问题。威胁者可以利用这些语言中可能出现的内存问题。
CISA称“在有现成的内存安全语言可以替代的情况下,使用内存不安全语言(如 C 或 C++)开发用于关键基础设施或“国家关键功能” NCF 的新产品线是危险的,会大大增加国家安全、国家经济安全和国家公共健康与安全的风险”。简而言之,不要使用 C 或 C++,它不安全!
2024 年早些时候,CISA 与联邦调查局、澳大利亚信号局澳大利亚网络安全中心、加拿大网络安全中心等合作机构共同发布了一份报告《探索关键开源项目中的内存安全》,对 172 个关键开源项目进行了分析。研究结果表明,这些项目中有一半以上的代码是用内存不安全语言编写的,占所有受检项目总代码行数的 55%。具体来说,"内存不安全语言要求开发人员正确管理内存的使用和分配。错误不可避免地会导致内存安全漏洞,如缓冲区溢出和释放后使用。成功利用这些类型的漏洞可以让对手控制软件、系统和数据。
CISA 指出内存安全漏洞占安全漏洞的 70%。为解决这一问题,CISA 建议开发人员过渡到内存安全编程语言,如 Rust、Java、C#、Go、Python 和 Swift。这些语言内置了针对常见内存相关错误的保护措施,使它们从代码开始就更加安全。
CISA 要求使用 C 或 C++的公司必须在 2026 年 1 月 1 日前制定出转移现有代码库的路线图。CISA 认为,从减少漏洞和提高安全性的角度来看,长期效益超过了初期投资。
美国国家安全局批准的内存安全语言包括Python、Java、C#.、Go、Delphi/Object Pascal.、Swift、Ruby、Rust、Ada等。
这其中,Rust获得了重点推荐,Rust是一种系统编程语言,注重内存安全、并发性和性能。它最初由Mozilla公司开发,设计目的是在保证代码安全的同时提供类似C++的高性能,适用于系统级开发、嵌入式开发、WebAssembly等多种场景。
Rust的主要特点:
内存安全:Rust采用严格的借用检查和所有权机制,确保在编译期间消除大多数的内存管理错误,如空指针和数据竞争。Rust在编译期会检查变量的生命周期、可变性等,以避免常见的内存错误。
零成本抽象:Rust语言提供了高效的抽象,开发者可以用高级的编程方式写出接近底层的高性能代码。这些抽象不会对程序性能造成显著影响,确保代码执行效率。
无GC(垃圾回收)机制:Rust不使用垃圾回收机制,而是依靠编译期的所有权检查来管理内存。这种方式减少了垃圾回收带来的性能开销,适合对内存管理要求严格的场景。
并发性支持:Rust拥有天然的线程安全性,避免了数据竞争问题。借助Rust的所有权系统,编译器能够在编译期检测并发问题,保证在运行时的并发安全。
现代化语法:Rust拥有清晰、现代的语法,方便开发者编写出更具表现力的代码。Rust的语法结合了C和C++的低层次控制能力,同时也有类似Python、JavaScript等现代语言的易用性和简洁性。
Rust的应用场景:
系统开发:适合操作系统、驱动程序等需要直接操作硬件的场景。
嵌入式开发:Rust的高性能和内存安全特性使其在嵌入式系统中也具备广泛应用。
WebAssembly:Rust的二进制代码优化和高效执行特性使其在WebAssembly中非常适用。
CLI工具:许多命令行工具都是用Rust编写的,得益于它的内存效率和快速响应。
实际上,Rust在性能和安全性方面的独特优势让它逐渐成为系统级开发中越来越受欢迎的选择。
对于美国政府建议放弃 C 和 C++,大家怎么看?欢迎留言讨论!
注:本文为原创文章,未经作者授权严禁转载或部分摘录切割使用,否则我们将保留侵权追诉的权利