查看原文
其他

差距还很大!大多数关键开源项目未使用内存安全代码

网空闲话 网空闲话plus
2024-08-29
美国网络安全和基础设施安全局(CISA)发布了一项研究,调查了172个关键开源项目是否容易受到内存漏洞的影响。该报告由CISA、联邦调查局以及澳大利亚和加拿大组织共同签署,是对2023年12月发布的“内存安全路线图案例”的后续行动,旨在提高人们对内存安全代码重要性的认识。内存安全语言是旨在防止常见内存相关错误(如缓冲区溢出、释放后使用和其他类型的内存损坏)的编程语言。比如Golang、Java、C#和Python通过垃圾收集来管理内存,自动回收释放的内存以防止被利用。CISA报告中称,观察到许多关键开源项目部分是用内存不安全的语言编写的,有限的依赖性分析表明项目通过依赖关系继承了用内存不安全的语言编写的代码。最后,CISA建议软件开发人员使用内存安全的语言(例如Rust、Java和GO)编写新代码,并将现有项目(尤其是关键组件)转换为这些语言。

美国国家网络安全和基础设施安全局(CISA)6月26日发布的最新研究揭示了关键开源项目在使用内存安全编码方面的严重不足。该研究涵盖了172个广泛部署的开源项目,旨在评估它们是否容易受到内存缺陷的影响。
内存安全编程语言旨在防止常见的内存相关错误,如缓冲区溢出、释放后使用等内存破坏。这些语言通过自动管理内存来实现,而不是依赖程序员实现安全的内存分配和释放机制。例如,Rust的借用检查器消除了数据竞争,而其他语言如Golang、Java、C#和Python则通过垃圾回收机制管理内存,自动回收已释放的内存以防止被利用。
相对而言,内存不安全的语言则未提供内置的内存管理机制,使开发人员需要自行负责,这增加了错误发生的可能性。如C、C++、Objective-C、Assembly、Cython和D等语言属于此类。
研究发现,超过半数的关键开源项目中存在使用内存不安全语言编写的代码。这些项目的总代码行数中,有55%是使用内存不安全语言编写的。尤其是在实施网络、加密和操作系统功能等低级功能时,由于资源限制和性能需求,开发人员往往被迫使用内存不安全语言。
CISA强调,即使是部分用内存安全语言编写的项目,也经常依赖于使用内存不安全语言编写的组件。这种情况下,开发人员可能会因需求而故意或错误地禁用内存安全功能,导致即使使用理论上更安全的构建模块,仍存在风险。
为了解决这一问题,CISA建议软件开发人员在编写新代码时采用像Rust、Java和Go这样的内存安全语言,并逐步将现有项目,特别是关键组件,转换到这些语言。此外,还建议遵循安全编码实践,仔细管理和审查依赖关系,并进行持续的测试,包括静态分析、动态分析和模糊测试,以便检测和解决内存安全问题。
这项研究突显了在当今数字环境中,保证软件安全和可靠性对于保护用户数据和网络基础设施的重要性。通过采用内存安全编码实践,可以显著降低由内存相关漏洞引起的潜在风险,提升软件的整体安全性和可信度。
附报告原文

参考资源
1、https://www.bleepingcomputer.com/news/security/cisa-most-critical-open-source-projects-not-using-memory-safe-code/
2、https://www.cisa.gov/resources-tools/resources/exploring-memory-safety-critical-open-source-projects


素材来源官方媒体/网络新闻
继续滑动看下一个
网空闲话plus
向上滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存