美国国家安全局建议从 C/C++ 切换到内存安全语言


美国国家安全局(NSA)发布了一份指南,旨在帮助软件开发商和运营商预防和缓解软件内存安全问题。其鼓励组织将编程语言从 C 和 C++ 之类的语言转变为内存安全的替代语言——即 C#、Rust、Go、Java、Ruby 或 Swift,以保护代码免受远程代码执行或其他黑客攻击。

NSA 建议企业尽可能使用内存安全语言,并通过编译器选项、工具选项和操作系统配置等代码强化防御措施加强保护。”

NSA 方面表示,内存安全问题在可利用的漏洞中占比很大。并引用了微软的数据指出,该公司从 2006 年到 2018 年 70% 的漏洞是由于内存安全问题造成的;谷歌的 Chrome 在几年内也发现了类似比例的内存安全漏洞。

该组织认为,恶意的网络行为者会利用不良的内存管理问题来访问敏感信息、颁布未经授权的代码执行、以及造成其他负面影响,而这些通常会危及设备并成为大规模网络入侵的第一步

“常用的语言,如 C 和 C++,在内存管理方面提供了很大的自由度和灵活性,同时严重依赖程序员对内存引用执行所需的检查,简单的错误就可能会导致可利用的基于内存的漏洞。软件分析工具可以检测到许多内存管理问题的实例,操作环境选项也可以提供一些保护,但内存安全软件语言所提供的固有保护可以防止或减轻大多数内存管理问题。

NSA 建议在可能的情况下使用内存安全语言。虽然使用非内存安全语言的附加保护措施和使用内存安全语言并不能对可利用的内存问题提供绝对的保护,但它们确实提供了相当的保护。因此,私营部门、学术界和美国政府的总体软件界已经开始倡议,推动软件开发文化向使用内存安全语言发展。”

不过 NSA 也指出,“内存安全”有点用词不当,且这个概念也是相对的。并警告称,即使使用内存安全语言,内存管理也不完全是内存安全的。

“大多数内存安全语言承认,软件有时需要执行不安全的内存管理功能来完成某些任务。因此,有一些类或函数被认为是非内存安全的,并允许程序员执行可能不安全的内存管理任务。某些语言要求对任何内存不安全的内容进行明确的注释,以使程序员和程序的任何审查者意识到它是不安全的。内存安全语言还可以使用以非内存安全语言编写的库,因此可以包含不安全的内存功能。尽管这些包含内存不安全机制的方法颠覆了固有的内存安全性,但它们有助于定位可能存在内存问题的位置,从而可以对这些代码部分进行额外的审查。”

另一方面,一些内存安全语言可能会以性能为代价。此外,学习一门新的语言也并不容易;譬如,Rust 虽然功能强大,但学习曲线相当陡峭。

更多详情可查看完整报告。


相關推薦

2024-03-21

C++ 之父:Rust 等内存安全语言的安全性并不优于 C++ 美国国家安全局建议从 C/C++ 切换到内存安全语言

2023-02-03

在美国国家安全局 (NSA) 建议组织从 C/C++ 切换到内存安全语言 (如 C#、Rust、Go、Java、Ruby 或 Swift) 之后。C++ 之父 Bjarne Stroustrup 回应称,在他看来,NSA 报告中提到的“安全”编程语言在重要应用程序中实际上并不优于 C++。

2024-08-06

公共部门的注意,并促使白宫和美国网络安全和基础设施安全局(CISA)鼓励使用内存安全编程语言--主要是 Rust,还有 C#、Go、Java、Python 和 Swift。 尽管有 C/C++ 开发人员反驳说,只要正确遵守 ISO 标准并认真应用测试工具,就可

2023-04-08

有良好的开发体验。若检查结果中存在不满足的检查项,建议您根据修复建议进行调整。 提供基础模板和卡片模板,支持Stage工程下创建ArkTS服务卡片,帮助开发者快速开发应用和服务。 支持OpenHarmony工程添加Extension Ability

2024-06-04

程还提供了ARM开发板和华为的ARM云服务器供学生使用,并建议学生在ARM平台上完成课程项目。通过接触ARM系统,学生可以消除对ARM的陌生感,感受到使用ARM进行开发与在其他CPU架构上开发并无明显区别,消除学生畏难情绪。随着

2022-09-22

nals 的主要开发者 Mark Russinovich 近日发表言论称,建议开发人员停止使用 C/C++ 来启动新项目,并建议可在需要使用 non-GC 语言的场景中使用 Rust。针对此言论,外媒 The Register 向微软进行了询问,即 Russinovich 的建议

2023-11-15

单、易用,能快速完成任务。Go 深受 C 语言的影响,但在内存安全、垃圾收集和结构类型方面也有重大改进。 平均工资:~$130k 薪资中位数:$128k 发现的工作数量(带薪水):1.2K 个 查看具体的 Go 职位。 6 - Ruby Rub

2022-09-21

态称,开发人员是时候停止使用 C/C++ 来启动新项目,并建议可在需要使用 non-GC 语言的场景中使用 Rust。 “说到语言,现在是时候停止用 C/C++ 启动任何新项目了,并在那些需要使用 non-GC 语言的场景中使用 Rust。为了安全

2022-09-22

达 14 个月。Shopify 于 2021 年 7 月从另一个 WebAssembly 引擎切换到 Wasmtime。切换后,Shopify 的平均执行性能提升了大约 50%。Fastly 于 2022 年 3 月从另一个 WebAssembly 引擎切换到 Wasmtime。切换后,Fastly 的执行时间优化了大约 50%。此外,F

2022-10-13

继呼吁停用 C/C++ 开发新项目并使用 Rust 之后,Microsoft Azure CTO、Sysinternals 的主要开发者 Mark Russinovich 的一条吐槽 Git 的新社交动态又引起了广泛讨论。他表示: Git 又一次让我想拔掉我的头发。这是我使用过的

2024-09-26

2022年,开发者们就这门语言进行了争论,一些人将Rust的内存安全特性称为对多年来内核工作的“侮辱”。9月初,Rust for Linux项目的一位维护者辞职,称对“非技术性的胡说八道”感到沮丧。这在技术圈引起了讨论。 Linus表示,

2022-12-06

gle 在公告中表示,"在过去几年/几个 Android 系统版本中,内存安全漏洞的数量大幅下降"。 具体而言,2019 年至 2022 年期间,每年的内存安全漏洞数量从最初的 223 个下降到如今的 85 个。内存安全漏洞现在在 Android 系统总漏洞

2024-06-04

虽然当下与内存安全相关的讨论围绕着Rust相对于C/C++/Zig/Go等语言的安全性展开,但Rust的主要目标是确保程序的正确性。 Rust并不仅仅是关于内存安全的。尽管人们普遍认为Rust是一种内存安全的语言,但实际上,Rust更注重的

2023-04-24

p教学语言。 可惜的是, 比 Common Lisp以及Elisp还要小众, 建议大家从学习的目的去学习Lisp思想, 其他就算了, 工作和爱好都用不上它。 最后我想分享的是,为什么要学习很多语言? 因为我们可以学习各种语言的设计思想