聚焦源代码安全,网罗国内外最新资讯!
编译:代码卫士
内存安全语言是指旨在阻止常见的与内存相关的错误的编程语言,这些错误包括缓冲溢出、释放后使用和其它内存损坏类型。这些编程语言自动管理内存,而非依赖于程序人员执行安全内存分配和解除分配机制。
现代安全语言系统的一个例子是 Rust 的借用检查器,它会消除数据竞争。其它语言如 Golang、Java、C#和Python通过垃圾回收来管理内存,以自动化方式重新收回被释放的内存以阻止它们遭利用。
内存不安全语言是指不提供内置内存管理机制的语言,他们将这个责任转嫁给开发人员,从而增加了出现错误的可能性。这类语言包括C、C++、Objective-C、Assembly、Cython 和D。
报告审计了172个广泛部署的开源项目,发现超过一半的项目包含内存不安全代码。
该报告的主要发现如下:
52%的开源项目中包括使用内存不安全语言编写的代码。
55%的代码使用内存不安全语言编写。
最大规模的项目很大比例使用内存不安全语言编写。
在按照代码总行数排列的十大项目中,每个项目的内存不安全代码总行数占比超过26%。
这些大型项目中内存不安全代码总行数的中位数比例是63.5%,其中四个项目占比超过94%。
即使是使用内存安全语言编写的项目也经常依赖于以内存不安全语言编写的组件。
一些值得关注的案例包括 Linux(不安全代码的比例95%)、Tor(93%)、Chromium(51%)、MySQL Server(84%)、glibc(85%)、Redis (85%)、SystemD (65%) 和 Electron (47%)。
内存不安全语言使用比例 | 项目数量 | 所有项目占比 | 内存不安全项目占比 |
0% | 82 | 48% | |
>0%,≤25% | 31 | 18% | 34% |
>25%,≤50% | 12 | 7% | 13% |
>50%,≤75% | 23 | 13% | 26% |
>75%,≤95% | 20 | 12% | 22% |
>95%,≤100% | 4 | 2% | 5% |
CISA 解释称,软件开发人员面临多种挑战,常常不得不使用内存安全语言,如资源限制和性能要求等。当执行底层功能如网络、加密和操作系统功能时更是如此。
CISA 在报告中指出,“我们发现很多重要的开源项目部分使用内存不安全语言编写,有限的依赖分析表明项目通过 继承了使用内存不安全语言编写的代码。在性能和资源限制是重要因素的情况下,我们发现并认为内存不安全语言会被继续使用。”
CISA 还强调了开发人员禁用内存安全性能的问题,或者是错误或者是故意为之,以满足特定要求,导致即使使用理论上更安全的构建块时,仍然存在风险。最后,CISA建议软件开发人员使用内存安全语言如 Rust、Java和GO来编写新代码并将现有项目尤其是关键组件的语言转化到这些语言。
另外,CISA建议遵守安全编码实践,仔细管理和审计依赖,持续测试包括静态分析、动态分析和模糊测试,检测并解决内存安全问题。
https://www.bleepingcomputer.com/news/security/cisa-most-critical-open-source-projects-not-using-memory-safe-code/
题图:Pexels License
本文由奇安信编译,不代表奇安信观点。转载请注明“转自奇安信代码卫士 https://codesafe.qianxin.com”。
奇安信代码卫士 (codesafe)
国内首个专注于软件开发安全的产品线。
觉得不错,就点个 “在看” 或 "赞” 吧~