NSA 发布关于内存安全的指南 - Software Memory Safety
NSA 发布关于内存安全的指南 - Software Memory Safety
CSI - CyberSecurity Information Sheet
NSA(National Security Agency - 美国国家安全局)在 2022 年 11 月 10 日发布了一份软件内存安全的指南,推荐使用 Rust、 C#、 Go、 Java、 Ruby 和 Swift 等内存安全的编程语言进行软件开发。
微软在 2019 年的一次会议上透露 70% 的软件漏洞是由内存安全问题引起的,而且这个数字在不断上升[1]。近几年 Google 也在 Chrome 中发现了类似比例的内存安全漏洞[2]。所以 NSA 建议尽可能使用内存安全语言的编程语言,虽然可以对非内存安全语言使用额外的保护措施,包括近几年来 Fuzzing 的工具在不断完善,内存安全的漏洞挖掘能力也在提升,但是都不能从根本上解决这个问题。
在这份指南里面,NSA 把内存安全的大部分问题归结于程序如何管理内存。不管是 "缓冲区溢出" 还是 "指针越界访问",都是由于程序没有正确管理内存导致的。,所以 NSA 认为在合适的机会下,建议用安全的编程语言来进行开发。 这里 NSA 强调了 "possible" ,NSA 也认为从一个编程语言的基础设施迁移到另一种编程语言不是一件小事儿,开发者要接受编程思想的转换,公司要接接受换编程语言带来交付的不确定性。NSA 也提到使用 SAST(Static Application Security Testing) 和 DAST(Dynamic Application Security Testing) 等测试技术来加固非内存安全的编程语言,但无论如何都不能改变内存不安全的本质。
Rust 只是推荐的内存安全编程语言中的一个
当然在 NSA 推荐的编程语言中,Rust 只是其中的一个,并且其他的编程语言也都有自己的优势。Rust 的内存安全是通过编译器来保证的,当然 Rust 的编译器也在不断完善,但是 Rust 的整个生态还不够完善,所以在一些场景下,Rust 也不是最好的选择。NSA 的推荐和 OpenSSF 对内存安全编程语言的推荐是一致的,所以从他们的角度来看是要关注所有的场景,而不是只关注在基础设施。
当前我在做 Rust 编程语言的事情,同时我也很喜欢这门编程语言,但是确实它不适合所有的事情。现在很多大型公司譬如 Google 在资助开发者使用 Rust 重写一些重要的开源项目,当前最受社区关注的 Rust For Linux 也是来自于 Google 背后的资助,除了资金的支持 Google 也投入了全职员工的参与。Rust Foundation 每年也有资助计划,帮助独立开发者使用 Rust 编写重要的开源项目,资金从 $100 到 $20,000 不等。
能看到的是公司、基金会甚至是国家组织以各种各样的方式支持开源和生态的发展,力图构建庞大的开源生态体系;但是从另一个方面,在这个过程中也存在着隐形的竞争、歧视甚至是攻击。这也许就是当今社会的现状,即使是开源看似这么伟大的事情也无法免俗。
P.S.
https://www.nsa.gov/Press-Room/Cybersecurity-Advisories-Guidance 收录了 NSA 所有网络安全方面的指南。这是个宝藏可以挖掘,有时间的人可以读一读,对于写胶片吹牛逼有很大帮助。
参考链接
[1] Microsoft® (2019), Trends, challenges, and strategic shifts in the software vulnerability mitigation landscape
[2] Google (2021), An update on Memory Safety in Chrome
[3] NSA (2022),Software Memory Safety