CISA:大多数关键开源项目未使用内存安全代码

liftword2周前 (05-12)技术文章7


美国网络安全和基础设施安全局(CISA)近日发布的报告调查了172个关键开源项目的内存安全问题。报告显示,超过半数项目的代码存在内存不安全的情况,尤其在资源限制和性能要求高的情况下,开发人员依然选择使用内存不安全的语言。


关键开源项目的内存安全状态分布 来源:CISA


内存安全的重要性


内存安全语言通过自动管理内存,防止常见的内存相关错误(如缓冲区溢出和释放后使用)。例如,Rust的借用检查器能够消除数据争用,语言如Golang、Java、C#和Python通过垃圾回收来防止内存被错误利用。相比之下,内存不安全的语言(如C、C++和Assembly)不提供内存管理机制,增加了开发人员出错的风险。


调查结果


根据CISA、联邦调查局(FBI)以及澳大利亚和加拿大安全机构的报告,关键的开源项目中存在大量内存不安全的代码。以下是主要发现:


  • 52%的关键开源项目包含内存不安全的代码。
  • 这些项目中55%的代码行数(LoC)是内存不安全的。
  • 大型项目大多数使用内存不安全的语言。
  • 暗LoC计算十大项目的内存不安全代码比例均超过26%,平均比例为62.5%,有些项目高达94%。
  • 即使用内存安全语言编写的项目也常常依赖于用内存不安全语言编写的组件。


一些关键开源项目的内存不安全代码比例如下:


  • Linux:95%
  • Tor:93%
  • Chromium:51%
  • MySQLServer:84%
  • glibc:85%
  • Redis:85%
  • SystemD:65%
  • Electron:47%


建议措施


CISA指出,软件开发人员面临多重挑战,尤其在实现网络、加密和操作系统功能时,不得不使用内存不安全的语言。此外,开发人员有时为了性能和资源限制,故意或错误地禁用内存安全功能,即使这样做会带来风险。


CISA建议软件开发人员使用内存安全的语言(例如Rust、Java和GO)编写新代码,并将现有项目(尤其是关键组件)转换为这些语言。


此外,CISA还建议开发人员遵循安全编码实践,仔细管理和审核依赖关系,并执行持续测试,包括静态分析、动态分析和模糊测试,以检测和解决内存安全问题。


报告链接:

https://www.cisa.gov/sites/default/files/2024-06/joint-guidance-exploring-memory-safety-in-critical-open-source-projects-508c.pdf

相关文章

Python垃圾回收机制详解

Python 的垃圾回收机制结合了引用计数和分代回收,确保内存高效管理并处理循环引用问题。以下是其核心机制的分步解释:1. 引用计数(Reference Counting)原理:O 每个对象维护一个引...

python的垃圾回收机制:内存管理的幕后英雄

一、什么是垃圾回收机制?在Python程序运行过程中,会不断创建各种对象,如列表、字典、类实例等。当这些对象不再被使用时,就成了 “垃圾”,占用的内存空间需要被释放,以便后续程序使用。垃圾回收机制(G...

Python垃圾回收:循环引用检测算法实现

Python内存管理的核心是自动垃圾回收机制,它使开发者能够专注于业务逻辑而无需手动管理内存。Python采用引用计数作为基础内存管理方式,每个对象都有一个引用计数器记录指向它的引用数量。当计数为零时...

使用Python实现垃圾分类系统

1 问题如何使用python实现垃圾分类,这里需要创建多个系统。2 方法在python中实现垃圾分类,需要创建多个系统,整体设计思路垃圾分类学习器包含了学习模块和测试模块两部分,用户可以根据需求对垃圾...

Python常见面试题及解答总结

以下是 Python 常见的面试题及简要答案示例,覆盖基础语法、数据结构、算法和高级特性等方向:一、Python 基础Python 中可变(Mutable)和不可变(Immutable)数据类型有哪些...

新手学Python避坑,学习效率狂飙! 十八、Python 内存管理

Python 的内存管理系统是一个复杂但高效的机制,以下是对其的一些分享。内存管理机制对象的创建与分配:Python 中一切皆对象,当创建一个对象时,例如x = 5,解释器会在内存中为整数对象5分配空...