开源软件无处不在。无论是哪个行业,每个企业都依赖软件来满足其业务需求。企业构建和使用的大多数应用程序在其代码中都包含开源元素。近几年软件行业逐渐迁移到云上,并且随着应用程序复杂性的增加,软件安全风险也随之增加。企业需要在其软件开发生命周期(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大防护,通过全链路扫描、问题关联及风险组织的方式保护企业软件供应链安全,降低企业安全漏洞修复成本。

开源依赖管理的最佳实践相关推荐

  1. 5个身份和访问管理的最佳实践

    5个身份和访问管理的最佳实践 预计到2021年,与网络犯罪相关的年度损害成本将达到6万亿美元,企业需要把重点放在改善网络安全措施和控制用户访问上.身份和访问管理(IAM)是成功协议的关键组成部分,需要 ...

  2. 《杜拉拉升职记》第二部,一本失败的小说,一本中层管理的最佳实践手册

    作为小说,这本书非常失败:全书缺乏冲突.主线几乎是杜拉拉教育培训中层经理的语录.直到最后才有一点冲突,就是杜拉拉的上级对杜拉拉的评级比较低,杜拉拉不满意.有一条支线是大区经理孙建东的一些烂事.但是这些 ...

  3. java程序員周報_分享我们团队管理的最佳实践——程序员的周报应如何填写

    无管理不成团队,无考核不成管理: 一切不谈考核的管理都是扯淡. 一.先看截图 1. 周报的填写 图1. 中层管理者填写周报 上图(图1)为中层管理者填写周报的界面,可以看到除了本周总结.下周计划.本周 ...

  4. Gradle 1.12用户指南翻译——第五十章. 依赖管理

    本文由CSDN博客貌似掉线翻译,其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Githu ...

  5. 主数据管理(MDM)的七个最佳实践

    主数据管理(MDM)的七个最佳实践 [ 14/09/2009 15:48:00 | By: pegem255 ] 来自网络:http://www.folo.cn/user1/19092/archive ...

  6. LDAP身份认证管理最佳实践

    LDAP身份认证管理最佳实践 轻型级目录访问协议(LDAP)为数据库访问控制提供了一个开源的,跨平台的解决方案.它是企业级的通用身份和访问管理(IAM)工具,但如果不遵循适当的管理协议,则可能会带来严 ...

  7. 学习Exchange管理最佳实践

    在回答新手提出的关于Exchange的问题的时候,一些所谓的"经验丰富"的IT老手会给出的用于防范危险的解决方法过于复杂.下面提供了一些找寻最佳实践的途径. 如果你经常浏览Exch ...

  8. 事务管理最佳实践全面解析

    事务管理最佳实践全面解析 前言 写作这篇文章的起因,是前一段时间,我使用Jbpm工作流引擎开发工作流管理系统的过程中,使用编程方式管理事务时遇到的问题. 由于之前很长一段时间,我一直都在使用Sprin ...

  9. 变更管理最佳实践的几种方法

    商业前景和客户期望在不断变化,数字转型已经成为跨行业商业成功的关键因素.数字转型就是利用现有技术来应对业务挑战和抓住机遇.你仔细分析就会发现,数字转换基本上是IT管理做得更好,以消除有问题的领域,并装 ...

  10. 【线上直播】大咖云集,共同探讨区块链开源最佳实践及场景应用

    众所周知,区块链技术的起源和发展都与开源社区有着紧密的联系,很多优质的区块链项目都发源于开源社区,并在社区中发展壮大.如今,区块链技术及开源区块链项目正在吸引着越来越多开发者的目光,那么在区块链火热发 ...

最新文章

  1. svn增量打包部署_利用svn的补丁文件打包生成增量文件
  2. 菜鸟学习Hibernate——简单的一个例子
  3. 企业Java应用服务器之JBoss7.1与Apahce整合
  4. WebSockets 简介
  5. 0001-Two Sum(两数之和)
  6. python采用编译型方式执行_Python程序的执行过程 解释型语言和编译型语言
  7. mysql把一行保存到另一个表_MYSQL:如何复制整个行从一个表到另一个在MySQL与第二个表有一个额外的列?...
  8. 【计算机网络复习】1.1.1 概念、组成、功能和分类
  9. ZooKeeper学习第七期--ZooKeeper一致性原理(转)
  10. html做table某一列的合计,Jquery、js计算table列合计
  11. 关闭恶意无限弹窗的方法
  12. IntelliJ IDEA使用教程 (总目录篇)
  13. Learning to Generalize:Meta-Learning for Domain Geralization 深度理解(公式详细推导,包含二阶导)
  14. 内存碎片产生原因及解决办法
  15. Flask-SQLAlchemy relationship中的 lazy屬性
  16. 这两款好用的识别图片文字的软件app值得你们收藏
  17. MX Player不支持此音频格式(EAC3)
  18. 手把手教你选购电脑组件
  19. 什么公司邮箱邮件系统安全,安全邮箱格式怎么写?
  20. 【NumPy中数组创建】

热门文章

  1. ESP32 GPIO函数相关介绍
  2. 9万字企业数字化技术中台、数据中台、工业互联网建设方案WORD
  3. 技术新人的大数据之路
  4. c 语言中字符与数字的转化,关于字符串与数字的转化(C语言)
  5. 辽宁大学计算机考研资料汇总
  6. 美团实习刚入职就连开3小时会,但是工作氛围超好超和谐
  7. JAVASE详解(下篇)
  8. 尿路感染治疗行业调研报告 - 市场现状分析与发展前景预测
  9. Druid连接池的快速使用
  10. 基于Socket的Android聊天室