近日,GitHub在其年度Octoverse状态报告中指出,开源软件安全漏洞在被披露之前的发现周期超过四年。
报告分析了超过45,000个活动代码目录,以深入了解开源安全性(漏洞)以及开发人员在漏洞报告、警报和补救方面的做法。
其他发现
通过分析依赖关系图收集的长达一年的数据后,报告发现GitHub上的大多数项目至少具有一个开源依赖项。
对于使用Java(94%)、Ruby(90%)和NET(90%)的用户来说百分比最高。Java和Rudy项目的中位数直接依赖项数量最多(分别为10和9),而Java的中位数可传递依赖项数量最多(即它们的直接依赖项本身具有其他依赖项)。
另一个有趣的发现是,大多数开源软件漏洞是由错误而不是恶意攻击引起的。
“对来自六个生态系统的521个随机样本进行的分析发现,有17%的代码提交与后门尝试之类的明显恶意行为有关。在这17%的统计中,绝大多数来自npm生态系统。”
他们解释说,后门最明显的迹象是攻击者通常是通过账户劫持来获取对程序包源代码存储库的访问权限,而针对这些尝试的最后一道防线是在开发管道中进行仔细的同行评审,尤其是来自新提交者的更改。
“许多成熟的项目都进行了认真的同行评审。攻击者已经意识到了这一点,因此他们经常试图在发行时间节点通过版本控制之外的手段来实施破坏,例如通过对软件包名称进行篡改来欺骗人们下载恶意代码版本。”
GitHub指出,人为失误产生的漏洞也能具有类似恶意攻击的破坏性,而且更有可能影响受欢迎的项目。
开源安全的最佳实践
报告强调,开源安全的关键是利用自动警报和补丁工具。“我们自己的分析发现,自动生成pull request更新补丁版本的存储库,平均修复时间为33天,这比没有自动更新的存储库要快13天或1.4倍。”