开源依赖管理的最佳实践

开源软件无处不在。无论是哪个行业,每个企业都依赖软件来满足其业务需求。企业构建和使用的大多数应用程序在其代码中都包含开源元素。近几年软件行业逐渐迁移到云上,并且随着应用程序复杂性的增加,软件安全风险也随之增加。企业需要在其软件开发生命周期(SLDC)中实施开源依赖管理最佳实践,并选择正确的工具来管理其开源风险。对开发人员进行开源安全培训和实现功能强大的软件成分分析(SCA)工具都是保护代码免受开源软件风险的关键步骤。

开源风险分析报告

业内知名机构 Synopsys 发布了2022 开源安全风险分析报告(此处查看报告获取方式),并就开源软件的广泛采用及其带来的安全风险提出了需要关注的要点。该报告调查了涵盖17个行业,其中4个行业部门的计算机硬件和半导体、网络安全、能源和清洁技术以及物联网在其审核的代码库中100%包含开源代码。剩下的纵向公司93%到99%的代码库都包含开源元素。

报告指出,尽管许可证冲突(license conflict)有所减少,从2020年65%的代码库中发现许可证冲突,减少到今年的53%,但未经审查的依赖关系的情况有所增加。 也就是说,当开发人员引入开源依赖项时,他们往往不知道包含许可条款和条件的子依赖项。例如,node.js 组件的某些版本包含利用了 CC-SA 3 许可证下的代码,而这可能会对使用代码的人有一定要求,并需要对可能相关的知识产权问题进行法律评估。

看起来许可证冲突和高风险漏洞的数量减少是个良好的趋势,但实际上超过一半的代码库包含许可证冲突,近一半包含高风险漏洞。更令人担忧的是,在2097个经过审计的代码库中,88%的代码库进行了风险评估,其中都包含过期版本的开源组件。 也就是说,更新或修补程序可用但还未应用。虽然说企业有理由不总是保持软件更新,但需要对其代码中使用的开源部分保持准确和更新,否则如果未更新的组件被遗忘,将有可能变成高风险利用。这也正是 Log4j 事件的情况。虽然漏洞本身就具有风险性,但企业在修复该漏洞时产生的恐慌和混乱更多来自于不知道这个漏洞在系统和应用程序中的具体位置。

开源依赖管理最佳实践

在企业中建立一个全面、完善的开源软件管理程序看起来是一项非常庞大的工程,往往让人望而却步,但企业可以尝试从一些最佳实践开始一步步建立。为了避免在公布零日漏洞时产生混乱,且有效保护资源和数据,企业需要建立开源软件治理制度。这其中就包括制定策略,建立相关审批流程,并对现有的开源软件依赖进行全面的审计。

1.制定策略

为企业构建开源代码策略可以在最大程度上降低使用开源代码软件相关的法律、技术和业务风险。开源软件政策和治理计划可以侧重于在开发过程中使用开源代码和在内部使用开源软件,企业甚至可以建立相关部门来专门管理与开源软件相关的任何事务。

制定开源软件政策的第一步就是要确定关键的策略相关联的群体,这些人将直接受到政策的影响,比如开发人员,以及批准政策并承担相应开源软件使用风险的 c-level 管理人员。或间接受到影响的群体,包括 IT 人员、使用开源软件的团队经理、为开源许可证合规性提供建议的法律专家及架构师们。所有之间或间接关联的群体应当尽早参与政策制定的过程。

企业的战略政策需要概述在开源软件管理方面的目标,确定目前在企业中使用了多少开源软件,同时定义企业使用目标。战略政策还需要规定哪些开源许可证被涵盖,以及开源软件的使用在内部开发和交付的软件中的使用有何不同。企业需要建立一个开源软件的采购和选择流程。理想情况下,这个流程清晰的描述了获得开源软件的批准网站、存储库和方法,以及如何决定某个特定的软件包是否适合对应任务。该流程还应该指定谁可以下载开源软件,从哪里下载,以及在下载、使用或分发之前是否需要许可。

2.建立审批流程

此外,建议企业建立审批流程,来确定软件包是否符合企业的需求和质量标准。该流程需要考虑的一些标准包括代码质量、支持级别、项目成熟度、贡献者声誉和漏洞趋势。将这些标准考虑在内,能够有效保护开发团队,避免代码中出现同一软件包的不同版本,并确保每个版本都被合理修复和升级。同时为了让审批流程更好地发挥其作用,流程中的请求需要快速进行流转。那么建立一个预批准的开源代码列表能够有效加快此流程流转速度。

3. 建立审计程序

企业除了要确保开源代码符合内部政策之外,还要对开源代码进行审计,以全面了解企业正在使用哪些开源软件。这样能够帮助企业识别和定位组件,这一点对于保持开源许可证的合规性和出现漏洞披露时至关重要。建议企业在整个软件开发生命周期(SDLC)中扫描开源代码或组件,确保使用开源的应用程序在准备发布前都要进行最终扫描,尤其是依赖项与第三方组件。

为了确定企业的应用程序中有哪些易受攻击的组件,需要先确定应用程序中的开源组件。这时就需要考虑代码的所有版本和分叉,检测源码和二进制形式的组件,分析嵌入开源的商业软件,而不仅仅是软件包管理器中声明的内容。将这项任务自动化,开发团队就不必手动执行(且手动执行的准确率低于自动化)。这样企业就能够迅速地确定有漏洞的组件,并在新的漏洞被发现时及时报告。上述的这一步非常重要,如果企业无法及时准确发现易受攻击的组件,就不能准确地修复。

在审计之后,企业就可以创建任务清单和对应的计划,来确保合规性。这些任务包括提供源代码,代码或文档中需要包含的必要通知,以及更新最终用户许可协议。在合规性不可行的情况下,企业需要寻找替代方案,比如不同的库等。

SEAL 软件供应链防火墙

Seal 软件供应链防火墙旨在为企业提供代码安全、构建安全、依赖项安全及运行环境安全等4大防护,通过全链路扫描、问题关联及风险组织的方式保护企业软件供应链安全,降低企业安全漏洞修复成本。

你可能感兴趣的:(开源依赖管理的最佳实践)