导读:各位开发者朋友,如果你停止使用C或C++编程工具,政府机构可能会更喜欢它,特别是在欧美地区的研发工程师。
事情是这样的。美国总统拜登的政府,白宫国家网络总监办公室(ONCD)发表了一份报告,其呼吁开发人员使用“内存安全的编程语言”,这一类别将不包括一些当今还很流行的编程语言。
该建议也是总统拜登网络安全战略的一部分,同时也是其“保护网络空间的基石”的迈出的一大步。
什么是“内存安全”
内存安全是指防止处理内存访问的错误和漏洞。
图1 内存不安全与泄漏
常见的缓冲区溢出和悬空指针就是这方面的典型。而 Java 还有新兴语言Rust 通常被认为是一种内存安全语言,因为它们具有运行时错误检测检查功能。但是C 和 C++ 都允许使用直接内存地址和无边界检查进行任意指针与计算。
2019 年,Microsoft 安全工程师报告称,大约 70% 的安全漏洞是由内存安全问题引起的。Google 在 2020 年报告了相同的数字,此次是在 Chromium 浏览器中发现的错误和漏洞。
节选报告中所说:
“专家们已经锁定了一些编程语言,它们既缺乏与内存安全相关的特征,又在关键系统(如C和C++)中具有很高的扩散性,按照网络安全和基础设施安全局(CISA)的开源软件安全路线图的建议,从一开始就选择使用内存安全编程语言,这是以安全设计方式开发软件的一个典型实例”。
这份长达19页的报告的目标是确保网络安全的责任不仅仅掌握在个人和小企业手中。相反,责任在于更大的组织、科技公司,最终将在于联邦政府所掌握。
该报告详细说明了它认为“不安全”的编程语言,就是 C和C++。
在这里,我们并非要讨论编程语言的利弊。其实有意思的是,该报告并没有建议使用特定的编程语言来代替它们。我们被它告知,有几十种内存安全的编程语言可以而且应该被使用。
图2 ONCD第二章节
ONCD还要求企业和工程师在软件开发中采用最佳实践,并采用内存安全的软硬件,以减少恶意行为者攻击的攻击面。该报告本身没有详细说明它认为内存安全编程语言具体是哪些。
在 2022 年 11 月,美国国家安全局 (NSA) 发布了一份网络安全信息表格:
https://www.cisa.gov/sites/default/files/2023-12/The-Case-for-Memory-Safe-Roadmaps-508c.pdf
在此报告中,它详细说明了它认为内存安全的编程语言。
NSA 建议的内存安全编程语言列表
-
Rust
-
go
-
C#
-
Java
-
Swift
-
JavaScript
-
Ruby
白宫建议的编程语言有多受欢迎?
我们再来检视一下 TIOBE 指数(编程语言流行度的指标),可以看到 Python 连续排名第一。
在NSA的首选选项中,C#排在第五位,Java排在第四位,JavaScript排在第六位,Go排在第八位,排在后面的是 16 岁的 Swift、18 岁的 Rust 和 20 岁的 Ruby。
因此,NSA选择的语言还都在排行榜的前20名,它选择的七种语言中有四种在开发人员排行榜中“受欢迎”部分。
报告还呼吁对软件安全进行更好的权衡。ONCD 相信更好的技术指标使技术开发或提供商能够在漏洞成为问题之前更好地计划、预测和缓解软件安全漏洞。
在第二部分(第8页)中,它还回顾了阿波罗13号任务,该任务被美国宇航局归类为“失败”。这次任务遭遇了“灾难性”的问题,三名宇航员为了安全返回家园,在途中即兴维修并缓解了一些问题,因此产生了对内存安全代码的强烈需求,这些在后来严重影响了美国太空计划。
该报告详细说明了开发人员应该使用内存安全语言,一种尽可能接近内核的语言,以免我们在未来发生安全事故。
从时间线上来看,这份报告是美国政府采取的一系列安全措施中的最新一份。在2023 年 3 月,拜登总统就签署了一项网络安全行政命令,启动了保护软件和硬件的流程,同时也与科技行业企业建立了深度关系。
随着我们的世界越来越多的数字化优先,对更优质编码的需求变得更加重要。恶意代码正在被恶意使用,被攻击与被利用。
特别是该报告还重点介绍了 2021 年 12 月的 Log4j 漏洞,其中开源 Java 日志记录库 Log4j 通过一个名为 Log4Shell 的零日漏洞被很多黑客组织攻击。
责任将转移
在白宫的新闻稿中称,新报告的一个目标是将网络安全的责任从个人和小公司转移到大型组织、科技公司和美国政府自己身上,因为这些组织、科技公司和美国政府“更有能力管理不断变化的安全威胁”。
报告说,ONCD与私营公司合作,包括科技企业,学术界和其他相关组织,制定报告中的建议。ONCD 已经于 8 月就该主题发出了公众意见征询请求。它还收集了几家技术公司支持该计划的点评,包括惠普、埃森哲和Palantir等巨头。不少软件安全专家也对这份报告表示了赞赏。
华盛顿大学计算机科学教授丹·格罗斯曼(Dan Grossman)这样说道:
ONCD的报告对整个行业都将有帮助,或者有提升,也特别及时。虽然几十年来,C和C++的危险已经众所周知,但现在是白宫推动内存安全,将是非常的好时机,因为现在已经有实用和成熟的替代方案。
是时候发生改变
报告中重点提到,由于“来自利用内存安全违规的对手威胁的复杂性”,需要人们立即做出改变。
涉及政府、行业和学术界的关于内存安全的讨论可以带来有意义的变化。联邦政府的许多部门是软件的主要需求者,他们可以利用这一观点来决定即将到来的系统或新系统变更的优先级。
但是,远离C和C++不会在一夜之间发生,特别是在嵌入式系统中。但是其它语言一定会在系统软件中加速使用,特别是Rust,这个语言已经在显著增长,包括许多开发者预计这种进化会加速,而不是C和C++开发简单地立即停止,这似乎仍然是不可想象的。
可以确定的是,摆脱C和C++将是一个“漫长而艰难的过程”。互联网安全研究小组执行董事兼联合创始人Josh Aas在一篇文章中指出道:
“改变人们思考事物的方式需要持续的努力,而这样的沟通有助于使安全问题在人们的脑海中保持新鲜感。
Aas 还说,为了实现这种变化,政府和私营部门需要共同努力,将安全代码作为优先事项。
“归根结底,我们需要编写和部署新代码,但为了实现这一目标,我们需要资源,我们需要从政府到私营企业的各级领导人,将其作为优先事项,相关领导者需要意识到这个问题,他们需要知道,如果把解决这个问题作为优先事项,他们将得到更多地支持。
作者:场长
参考:
https://www.infoworld.com/article/3713203/white-house-urges-developers-to-dump-c-and-c.html