就像人际关系中人与人之间的关系一样,软件生态系统中包含一个庞大的关系网络。其中一些联系非常深入,而有一些关系则更为表面。但实际上,现代基于开源的软件开发涉及一个极其庞大的依赖关系树,依赖关系层层叠加,同时涉及和包含已知或未知的风险。
Endor Labs 最近的一份报告发现,95% 的易受攻击的依赖项都是可传递的。这些传递性依赖项是深藏在软件供应链中的组件,使它们更难以评估和触及。这些易受攻击的软件包有些是已经过时,有些则是新发布的,根据报告结果发现2022 年发布的软件包中仍有 25% 存在 1 到 18 个已知漏洞。
围绕开源依赖项的新漏洞每天都在产生。近期的软件供应链混乱(software supply chain chaos)为依赖项维护又增加了一层难度。尽管非营利组织和政府机构已寻求提高开源安全性并引入有关保护第三方软件的法规,但软件行业距离拥有必要的标准和技术来遏制开源依赖带来的安全隐患还有很长的路要走。
Endor 的2022年依赖管理状态报告着眼于现代基于开源的开发的复杂性并提供一些指导性建议。本文将总结该研究的要点,从而帮助大家更好地了解依赖管理的状态以及网络安全专业人员应如何应对。
理解依赖传递
直接依赖是指应用程序直接依赖某个库或包来运行。另一方面,传递依赖是嵌入在包中的依赖。可以想象,应用程序开发人员可能会通过包含其他依赖项在不知不觉中将多个级别的传递依赖项插入到他们的应用程序中。报告中的图表 8 直观地描述了传递依赖项如何在下游应用程序中存在:
图片来源:EndorLabs
该报告发现依赖项平均深度相差两层,但在某些情况下可能达到七层之多。
对于这项研究,Endor Labs 从 Census II 报告中获取了一个数据集,该报告提供了一份最流行的免费开源软件 (FOSS) 列表,并使用其他来源对其进行了丰富。这些数据在 GitHub 上开源,代表了对涵盖 npm、maven、nugget、pipit 和 ruby gems 等发行版的生产应用程序的扫描。
在 Census II 数据集中提到的254个不同的 Maven 包中,大多数平均有 14 个依赖项。这可能看起来不是很高,但考虑到大多数应用程序有数十个(如果不是数百个)依赖项,应用程序拥有受影响的传递依赖项的可能性呈指数级增长。因此,随机的 Maven 包有 32% 的机会在其依赖树中隐藏一个或多个已知漏洞。一些离群值具有更多的依赖性,增加了潜在漏洞的可能性。例如,log4j-core v2.19.0 有 141 个依赖项,而更令人惊讶的是 aws-java-sdk v1.12.316 被发现存在 331 个依赖项。
如何管理依赖关系
在云服务提供商 (CSP) 的世界中,安全责任是共同承担的。CSP 保护基础设施,消费者保护构建在基础设施之上的应用程序。然而在开源世界中,安全责任很大程度上落在了软件消费者的身上。OSS消费者负全责,需要根据具体情况应对安全风险。话虽如此,我们已经看到监管机构采取了实质性行动,来建立更多关于第三方依赖性的标准。其中包括针对云服务的候选欧盟网络安全认证计划、白宫第 14028 号行政命令以及来自NIST、NITIA和ENISA的指南。此外,OpenSSF、CNCF 和 OWASP 等非营利组织继续传播最佳实践并开发相关的安全工具。然而,软件供应商仍必须自行确保其依赖树稳定且没有重大漏洞。以下是从报告中总结的一些关于如何应对的提示:
为开源项目做贡献。正如之前提到的,太多公司使用开放源代码而不回馈项目。开源需要集体努力来改进,但对比其高使用率,很少有企业组织真正支持它们并报告安全漏洞。
围绕软件采购和相关性管理构建更智能的文化。软件提供商需要更深入地研究依赖关系网,以审查依赖关系中的表面区域并发掘深层依赖。这也意味着需要更新依赖树中的旧组件,并在获取过程中更具选择性来避免恶意包。
删除未使用的依赖项。如果程序不调用上游项目中的依赖项,最好将其删除。这可以降低隐藏漏洞的可能性,并最大限度地减少相关安全风险。正如报告所说,软件组合分析 (SCA) 工具应优先分析实际会在生产中显示的依赖项,而不是仅用于测试目的的依赖项。
优先处理高风险和可触及的漏洞。企业可能更倾向快速修复CVSS评分更高的漏洞。此外企业还需要考虑漏洞的可达性(reachability)。黑客往往会选择那些容易被利用的低风险漏洞为目标,从而向企业发起恶意攻击。
合理安排更新时间。研究发现,只有 9% 的更新需要进行重大版本更改。然而,20.1% 的非主要版本会导致重大变更!依赖项更新可能需要花费时间和精力进行调试,但不进行处理可能会使主要漏洞利用容易受到攻击。因此,最好设置适合企业团队的定期更新节奏。
参考链接:
https://www.coreinfrastructure.org/programs/census-program-ii/
https://github.com/endorlabs/StateOfDependencyManagement2022
https://accelerationeconomy.com/cybersecurity/why-core-open-source-security-projects-need-more-resources/