根据一份新报告,美国白宫国家网络安全办公室(ONCD)呼吁开发人员使用“内存安全编程语言”,其中不包括一些流行的语言,比如C和C++。
内存安全是指保护免受与内存访问相关的错误和漏洞的影响。比如:缓冲区溢出和悬空指针。Java由于其runtime错误检测被认为是一种内存安全语言。但C和C++允许使用直接内存地址进行任意指针算术运算,并且没有边界检查。
2019年,微软的安全工程师报告称,大约70%的安全漏洞是由内存安全问题引起的。谷歌在2020年也报告了相同的数字,那是针对Chromium浏览器中发现的漏洞。
报告中称:“专家们确定了一些编程语言,它们既缺乏与内存安全相关的特征,又在关键系统中广泛使用,如C和C++。从一开始选择使用内存安全的编程语言,是一种以安全设计为目标的软件开发方式之一。”
报告详细说明了其认为“不安全”的编程语言,即C和C++。并且说明了“几十种可以使用且应该使用”的内存安全编程语言。
在2022年11月,美国国家安全局(NSA)发布了一份详细说明其认为内存安全的编程语言的网络安全信息简报。NSA推荐的内存安全编程语言包括:Rust,Go,C#,Java,Swift,JavaScript,Ruby。
通过查看编程语言流行度的TIOBE指数,我们可以看到Python排在第一位。在NSA推荐的选项中,C#排名第五,Java排名第四,JavaScript排名第六,Go排名第八,Swift排名第16,Rust排名第18,Ruby排名第20。所以NSA选择的语言在前20名中,只有其中四种是开发者“流行”使用的。
ONCD相信更好的指标能够使技术提供商更好地规划、预测和减轻漏洞问题。
该报告还回顾了阿波罗13号任务,这是NASA称之为“成功的失败”的任务。该任务遭遇了灾难性的故障,三名宇航员不过采取临时修复措施,解决了许多问题,平安返回了地球。报告详细说明了应该使用一种尽可能接近内核的内存安全语言,以免发生未来的事故。
随着越来越多的世界转向数字化,更好的编码需求变得更加重要。糟糕的代码可以被恶意利用来攻击弱点。报告中提到了2021年12月的Log4j漏洞,该漏洞利用了一个名为Log4Shell的零日漏洞,它是一个开源Java日志记录库Log4j被利用的案例。
唯一不安全的只有白宫