开源依赖项管理指南

开源,依赖,管理,指南 · 浏览次数 : 98

小编点评

**软件生态系统依赖关系分析** 软件生态系统包含了一个庞大的关系网络,其中一些联系非常深入,而一些关系则更为表面。 **易受攻击的依赖项** 95% 的易受攻击的依赖项都是可传递的,这些依赖项深藏在软件供应链中的组件,使它们更难以评估和触及。 **依赖关系维护的挑战** 近期的软件供应链混乱为依赖项维护又增加了一层难度。 **开源依赖项的新漏洞** 随着开源软件的流行,每天都在产生新的依赖项。近期的软件供应链混乱为依赖项维护又增加了一层难度。 **如何应对依赖关系安全风险** * 为开源项目做贡献。 * 围绕软件采购和相关性管理构建更智能的文化。 * 删除未使用的依赖项。 *优先处理高风险和可触及的漏洞。 *合理安排更新时间。 * 参考链接: * Core Infrastructure 的cense II 报告 * Endor Labs 的 StateOfDependencyManagement2022 报告 * Acceleration Economy 的 Why Core Open Source Security Projects Need More Resources

正文

就像人际关系中人与人之间的关系一样,软件生态系统中包含一个庞大的关系网络。其中一些联系非常深入,而有一些关系则更为表面。但实际上,现代基于开源的软件开发涉及一个极其庞大的依赖关系树,依赖关系层层叠加,同时涉及和包含已知或未知的风险。
 

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/

与开源依赖项管理指南相似的内容:

开源依赖项管理指南

就像人际关系中人与人之间的关系一样,软件生态系统中包含一个庞大的关系网络。其中一些联系非常深入,而有一些关系则更为表面。但实际上,现代基于开源的软件开发涉及一个极其庞大的依赖关系树,依赖关系层层叠加,同时涉及和包含已知或未知的风险。 Endor Labs 最近的一份报告发现,95% 的易受攻击的依赖

微软宣布 S2C2F 已被 OpenSSF 采用

开源供应链安全对大多数 IT 领导者来说是个日益严峻的挑战,围绕确保开发人员在构建软件时如何使用和管理开源软件 (OSS) 依赖项的稳健策略至关重要。Microsoft 发布安全供应链消费框架 (S2C2F) 是一个以消费为中心的框架,它使用基于威胁的风险降低方法来缓解开源软件 (OSS) 中的安全

Node工程的依赖包管理方式

在前端工程化中,JavaScript 依赖包管理是非常重要的一环。依赖包通常是项目所依赖的第三方库、工具和框架等资源,它们能够帮助我们减少重复开发、提高效率并且确保项目可以正确的运行。

Maven进阶学习指南

当我们在开发项目时,有时需要用到外部依赖组件,例如当我们需要Json序列化的时候需要用到FastJson组件,我们可以通过下载对应jar包加载到项目中。但当一个大的项目同时需要依赖各种各样的外部服务,就存在着配置繁琐、依赖冲突等问题,因此可以通过maven来完成对应的依赖管理功能。

【java深入学习第1章】深入探究 MyBatis-Spring 中 SqlSession 的原理与应用

前言 在使用 MyBatis 进行持久层开发时,通常会与 Spring 框架集成,以便更好地管理事务和依赖注入。在 MyBatis-Spring 集成中,SqlSession 是一个非常重要的概念。本文将详细介绍 SqlSessionTemplate 和 SqlSessionDaoSupport,并

极速进化,光速转录,C++版本人工智能实时语音转文字(字幕/语音识别)Whisper.cpp实践

业界良心OpenAI开源的Whisper模型是开源语音转文字领域的执牛耳者,白璧微瑕之处在于无法通过苹果M芯片优化转录效率,Whisper.cpp 则是 Whisper 模型的 C/C++ 移植版本,它具有无依赖项、内存使用量低等特点,重要的是增加了 Core ML 支持,完美适配苹果M系列芯片。

免费且离线的同声翻译利器「GitHub 热点速览」

开源的翻译软件众多,但大多数依赖于翻译 API 服务,因此就需要联网、有次数限制、并非完全免费。然后,本周上榜的是一款可以离线使用的 Android 翻译软件:RTranslator,它创建于 4 年前,最初也是基于谷歌翻译 API 开发,但在上周发布的 2.0 版本中,采用了全新的 NLLB+Wh...

无需依赖Docker环境制作镜像

随着高版本的Kubernetes弃用Docker,企业也可以不依赖Docker环境了,但是DevOps通过Kubernetes部署的话,仍然需要制作镜像,那么在没有Docker环境的情况下如何制作呢?推荐一款谷歌的开源工具Jib,github地址,它是一个无需Docker守护进程——也无需深入掌握D

Vue源码学习(九):响应式前置:实现对象的依赖收集(dep和watcher)

好家伙,这是目前为止最绕的一章,也是十分抽象的一章 由于实在太过抽象,我只能用一个不那么抽象的实例去说服我自己 完整代码已开源https://github.com/Fattiger4399/analytic-vue.git 1.我们要做什么? 来看这个例子, index.html setTimeou

一键启动的AI离线知识库,无需复杂环境依赖,小白都能上手了

简介 在人工智能技术飞速发展的今天,我们经常面临一个挑战:如何快速、简便地部署和使用AI技术?AntSK项目,一个开源的AI知识库和智能体,就是为了解决这一问题而诞生的。现在,我们自豪地宣布,AntSK已经实现了无需复杂部署的一键启动功能,让每个人都能轻松拥抱AI的便利。 为什么选择AntSK? 无