美国NSA建议开发者多用可保障内存安全的程序语言

美国国家安全局(NSA)上周公布了一份软件开发指南,建议开发者多使用可保障内存安全的程序语言,例如用C#、Rust、Go、Java、Ruby或Swift来取代C与C++。

NSA先描述了软件内存安全的重要性,指出不管是微软或Google的研究,都显示有70%的安全漏洞是源自于内存的安全问题,黑客可利用这些漏洞来执行远程程序攻击,作为大举入侵组织网络的第一步。

开发者常用的C与C++在内存管理上提供了很大的弹性,因而重度依赖开发者来检查内存参数,而简单的错误便可能导致内存遭到滥用的安全漏洞。即使软件分析工具可侦测到许多内存管理问题,操作环境的选项也能带来某些保护,但NSA认为,借由原本就内置内存保护的程序语言来撰写程序,即可避免或减少绝大多数的内存管理问题。

常见的内存问题包括缓冲区溢出、逻辑错误或竞争危害。NSA指出,内存管理问题不仅会衍生安全漏洞,就算是那些不会遭到滥用的内存问题,也可能造成错误的程序结果,降低程序的性能或造成程序宕掉,然而,那些把内存视为自动化管理的程序语言,将可协助避免开发者引入某些类型的内存问题。

这些程序语言利用编译时间与执行期的检查来创建自动保护机制,以防开发者无意中采用错误的内存管理。

不过,就算是使用这些内置内存保护的程序语言,也并非毫无风险,因为软件有时需要执行不安全的内存管理功能才能完成任务,且各种语言对内存的安全保护程度不一。

NSA表示,他们理解要把一个成熟的软件开发基础架构从一个语言迁移到另一个语言并非易事,即便是老练的程序开发者也需要接受新语言的训练,效率也会受到影响,但他们必须忍受该学习曲线并克服各种新手错误。

若是无法立即切换程序语言,NSA也建议开发者应通过安全测试来强化应用程序的安全性,包括针对应用程序进行静态(SAST)与动态(DAST)的安全测试,而且最好是执行多个不同的SAST及DAST工具来提高找出内存问题的几率,以确保应用程序的安全。

总之,NSA鼓励组织尽可能地采用多管齐下的方式来强化内存管理的安全性,除了采用内存安全程序语言之外,还可同时辅以编译器选项、工具分析及操作系统配置,以减少内存漏洞,提高黑客的攻击门槛。