聚焦源代码安全,网罗国内外最新资讯!
编译:代码卫士
内存安全语言是指旨在阻止常见的与内存相关的错误的编程语言,这些错误包括缓冲溢出、释放后使用和其它内存损坏类型。这些编程语言自动管理内存,而非依赖于程序人员执行安全内存分配和解除分配机制。
现代安全语言系统的一个例子是 Rust 的借用检查器,它会消除数据竞争。其它语言如 Golang、Java、C#和Python通过垃圾回收来管理内存,以自动化方式重新收回被释放的内存以阻止它们遭利用。
内存不安全语言是指不提供内置内存管理机制的语言,他们将这个责任转嫁给开发人员,从而增加了出现错误的可能性。这类语言包括C、C++、Objective-C、Assembly、Cython 和D。
报告审计了172个广泛部署的开源项目,发现超过一半的项目包含内存不安全代码。
该报告的主要发现如下:
一些值得关注的案例包括 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建议遵守安全编码实践,仔细管理和审计依赖,持续测试包括静态分析、动态分析和模糊测试,检测并解决内存安全问题。
原文始发于微信公众号(代码卫士):CISA:多数重要的开源项目未使用内存安全代码
- 左青龙
- 微信扫一扫
- 右白虎
- 微信扫一扫
评论