草庐IT

达摩克利斯之剑:开源软件的合规风险及防控策略

sealio 2023-03-28 原文

作者简介

冯才效,SEAL 安全工程师,拥有6年云计算领域经验,先后参与 Rancher, Harvester 等开源项目。现致力于编写开发者友好型的软件供应链安全检修工具。

开源软件运动兴起于上个世纪,近几年在国内愈发活跃,各类开源项目如雨后春笋般涌现。与此同时,大部分企业开始拥抱开源。开源软件的使用避免重复造轮子,提升了产品研发效率,但同时也可能会带来隐藏的风险。

开源软件和商业软件不同,开源软件是面向公众开放软件源代码,代码的获取者享受在其许可证授权范围内操作开源软件的权利。不同许可证之间,具体条款可能存在冲突。因此,开源许可证合规是风险防控的重要考虑因素之一。

开源软件合规风险

知识产权纠纷

开源软件并不意味着用户可以自由使用,而是通过许可证规定使用者使用、修改和发布软件的权利。大多数现代软件都集成了大量的开源组件,它们使用的许可证在具体的条款上存在差异,不遵守许可证规定使用,将可能造成侵权,严重时可能会面临法律诉讼,产品召回等风险。

许可证冲突

不同许可证的条款各不相同,开发软件的过程中也将多个不同的开源组件合并成新软件,若使用的开源软件许可证条款之间存在冲突,将可能使得合并成的新软件不合法。Ruby Rails 团队就曾遇到该问题。GPLv2 许可证的 mimemagic 使用了 MIT 许可证的 shared-mime-info 软件,这两种许可证是不兼容的。mimemagic 的作者在被告知后将最新版的 0.4.0 和 0.3.6 移动到 GPLv2 下。但是 Ruby on Rails 和其他使用了该包的软件都受到了影响,成千上万的团队都可能要做出调整,最终 Rails 用 Marcel 替换了 mimemagic。

私有软件开源

在引入使用了传染型许可证的开源软件时,依据该许可证的要求,可能使得私有软件必须也继承该许可证,进而被要求公开私有源代码。

企业如何进行合规检查?

制定开源合规策略

开源合规策略是基于开源软件许可证的基础条款、现行政策并结合使用者自身情况,制定的一系列使用开源软件的条件。构建开源合规策略是合规检查的基础。

  • 梳理开源许可证条款

梳理开源软件常用许可证相关条款,构建易读快捷查询的手册。

  • 构建许可证分组策略

对常用许可证进行分组。自由使用许可证组,需要审查许可证组,禁止使用许可证组。初级的分类支持开发人员快速做出选择,避免合规问题同时兼顾开发效率。

  • 构建许可证兼容策略

许可证兼容性是指许可证间是否兼容。实际开发中,会使用大量开源软件,可以参考许可证兼容性矩阵构建许可证兼容性策略,检查同一个项目中集成的组件之间是否存在许可证冲突。

许可证的兼容矩阵

制定合规的软件开发流程

一个软件的生命周期包括需求分析、设计、实现、测试、部署、运维7个阶段,将开源合规流程纳入软件开发生命周期管理,能有效避免合规风险。

  • 需求分析阶段,除了确立软件需求规范,同时需要和所有利益相关方明确软件所需的合规策略,合规流程,共同确立使用的软件成分清单标准,确保能获取清晰的软件成分,完整的成分依赖关系,便于后续进行合规检测。SBOM 是软件成分清单标准的一种实现,理想情况下,在软件供应链中参与的各方,每一环节都将输出 SBOM 提供给下一环节,根据 SBOM 可检测是否违反合规策略,使用统一的 SBOM 格式将有助于后续构建自动化检测机制。

  • 软件设计阶段,根据合规策略选择合适的开源软件。

  • 软件实现阶段,实际开发中可能使用大量的开源软件,可借助工具扫描项目,获取项目直接,间接使用的开源软件,以及其软件许可证等信息,生成软件成分清单文件与物料清单(SBOM),可以更加简单,高效的解决软件成分和许可证的识别问题。确保 SBOM 中使用到的开源软件的许可证属于自由使用许可证组,或经审批允许使用;不存在安全风险,或引入的安全风险在可控范围内。

  • 软件测试阶段,检查生成的 SBOM 是否符合标准,信息是否完备,根据 SBOM 检查使用的开源软件是否违反合规策略。

  • 部署阶段,通过最终测试后,构建完整的软件 SBOM,包含软件基本信息,依赖关系等,并确保最终输出的软件不存在合规风险,输出软件的同时为下游用户提供 SBOM。

  • 运维阶段,持续跟进合规策略库和软件的更新,定期生成最新的 SBOM 进行检测,及时发现合规风险,对因变化引起违反合规策略的情况,及时修复。

总结

开源在软件领域已经势不可挡,随之而来的风险也不容忽视。企业在采用开源软件的同时,也应时刻注意悬在头顶上方的达摩克利斯之剑,积极制定开源合规策略和流程,定期进行合规检查,在享受开源带来的便利的同时,规避其风险。

参考链接:

Comparison of free and open-source software licenses:

https://en.wikipedia.org/wiki/Comparison_of_free_and_open-source_software_licenses

Fulfilling Open Source license obligations Can checklists help?:

https://events19.linuxfoundation.org/wp-content/uploads/2018/07/OSLS-2019-Fulfilling-Open-Source-license-obligations-Can-checklists-help.pdf

Rails waves goodbye to mimemagic, welcomes Marcel to fix GPL MIME drama:

https://www.theregister.com/2021/03/29/rails_mime_fix/

有关达摩克利斯之剑:开源软件的合规风险及防控策略的更多相关文章

  1. 软件测试基础 - 2

    Ⅰ软件测试基础一、软件测试基础理论1、软件测试的必要性所有的产品或者服务上线都需要测试2、测试的发展过程3、什么是软件测试找bug,发现缺陷4、测试的定义使用人工或自动的手段来运行或者测试某个系统的过程。目的在于检测它是否满足规定的需求。弄清预期结果和实际结果的差别。5、测试的目的以最小的人力、物力和时间找出软件中潜在的错误和缺陷6、测试的原则28原则:20%的主要功能要重点测(eg:支付宝的支付功能,其他功能都是次要的)80%的错误存在于20%的代码中7、测试标准8、测试的基本要求功能测试性能测试安全性测试兼容性测试易用性测试外观界面测试可靠性测试二、质量模型衡量一个优秀软件的维度①功能性功

  2. ruby-on-rails - 覆盖 Controller 中的 protect_from_forgery 策略 - 2

    我想使用两种不同的protect_from_forgery策略构建一个Rails应用程序:一种用于Web应用程序,一种用于API。在我的应用程序Controller中,我有这行代码:protect_from_forgerywith::exception为了防止CSRF攻击,它工作得很好。在我的API命名空间中,我创建了一个继承self的应用程序Controller的api_controller,它是API命名空间中所有其他Controller的父类,我将上面的代码更改为:protect_from_forgery:null_session.遗憾的是,我在尝试发出POST请求时遇到错误:“

  3. 网站日志分析软件--让网站日志分析工作变得更简单 - 2

    网站的日志分析,是seo优化不可忽视的一门功课,但网站越大,每天产生的日志就越大,大站一天都可以产生几个G的网站日志,如果光靠肉眼去分析,那可能看到猴年马月都看不完,因此借助网站日志分析工具去分析网站日志,那将会使网站日志分析工作变得更简单。下面推荐两款网站日志分析软件。第一款:逆火网站日志分析器逆火网站日志分析器是一款功能全面的网站服务器日志分析软件。通过分析网站的日志文件,不仅能够精准的知道网站的访问量、网站的访问来源,网站的广告点击,访客的地区统计,搜索引擎关键字查询等,还能够一次性分析多个网站的日志文件,让你轻松管理网站。逆火网站日志分析器下载地址:https://pan.baidu.

  4. python - 开源 Twitter 克隆(在 Ruby/Python 中) - 2

    关闭。这个问题不符合StackOverflowguidelines.它目前不接受答案。我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。关闭6年前。Improvethisquestion是否有任何用Ruby或Python编写的生产就绪的开源Twitter克隆?我对功能丰富的实现更感兴趣,而不仅仅是简单的Twitter消息(例如:API、FBconnect、通知等)谢谢!

  5. 【血泪建议】软件测试岗位现状,可惜之前没人告诉我,肠子都晦青了.... - 2

    谈到现状,国内的软件测试行情目前呈现了两极分化的极端情况。一个是早期的手工测试人员吐槽工作不好做,即使有工作也是外包,而且薪资太低;一方面是很多互联网企业感叹自动化测试人才难找,有技术的自动化测试工程师,高薪难聘。这两者其实并不矛盾。手工测试工作难找也确实是目前真实的行情早期从事功能测试的手工测试人员,在测试方面大多采用手动、人工执行的方式查找软件缺陷和BUG,用行业术语来描述就是“点点点”。这种测试方式耗费大量人力和资源,工作效率却十分低下。在早期软件复杂和迭代程度不高的情况下,有资本的企业会“供养”一批这样的手工测试人员。但对测试员本身来讲,毫无技术难度的工作,和几乎没有保障的薪资水平,直

  6. Gradle 自动化构建开源工具 - 2

    文章目录写在前面1、下载与安装(windows)1.1、idea中配置gradle2、基础知识(Gradle6.9为例)2.1、Gradle脚本语法2.1.1、dependsOn2.1.2、创建动态任务2.1.3、增加任务行为2.1.4、参数2.1.5、Ant任务2.1.6、方法2.1.7、默认任务2.1.6、依赖任务的不同输出3、java项目中使用3.1、在已有项目中构建gradle3.2、在新建项目时构建gradle(idea)3.3、gradle项目目录结构3.4、build.gradle3.4.1、plugins3.4.2、repositories3.4.3、dependencies3

  7. 最强Http缓存策略之强缓存和协商缓存的详解与应用实例 - 2

    HTTP缓存是指浏览器或者代理服务器将已经请求过的资源保存到本地,以便下次请求时能够直接从缓存中获取资源,从而减少网络请求次数,提高网页的加载速度和用户体验。缓存分为强缓存和协商缓存两种模式。一.强缓存强缓存是指浏览器直接从本地缓存中获取资源,而不需要向web服务器发出网络请求。这是因为浏览器在第一次请求资源时,服务器会在响应头中添加相关缓存的响应头,以表明该资源的缓存策略。常见的强缓存响应头如下所述:Cache-ControlCache-Control响应头是用于控制强制缓存和协商缓存的缓存策略。该响应头中的指令如下:max-age:指定该资源在本地缓存的最长有效时间,以秒为单位。例如:Ca

  8. ruby - 使用 Ruby Net 实现重新连接策略 - 2

    我正在开发一个将XML发布到某些网络服务的小型应用程序。这是使用Net::HTTP::Post::Post完成的。但是,服务提供商建议使用重新连接。类似于:第一个请求失败->2秒后重试第二个请求失败->5秒后重试第三次请求失败->10秒后重试...这样做的好方法是什么?简单地在循环中运行以下代码,捕获异常并在一定时间后再次运行?或者还有其他聪明的方法吗?也许Net包甚至有一些我不知道的内置功能?url=URI.parse("http://some.host")request=Net::HTTP::Post.new(url.path)request.body=xmlrequest.con

  9. 0基础学习软件测试有哪些建议 - 2

    其实现在基础的资料和视频到处都是,就是看你有没有认真的去找学习资源了,去哪里学习都是要看你个人靠谱不靠谱,再好的教程和老师,你自己学习不进去也是白搭在正式选择之前,大可以在各种学习网站里面找找学习资源先自己学习一下为什么选择学软件测试?同学们理由众多!大概分这几类:①不受开发语言、行业产品变化限制;②入门更简单,对零基础、女生都友好;③软件项目都需要测试人员,职业生涯稳;④学习周期短,但薪资并不低。要想“肩扛”一条线?需掌握三大技能:技能1:掌握测试流程,熟悉系统框架能提前与开发人员一起制定测试计划,通过测试左移,推动代码评审,代码审计,单元测试,自动化冒烟测试,来保证研发阶段的质量。技能2:

  10. 停车系统源码-基于springboot+uniapp开源项目 - 2

    Iparking停车收费管理系统-可商用介绍Iparking是一款基于springBoot的停车收费管理系统,支持封闭车场和路边车场,支持微信支付宝多种支付渠道,支持多种硬件,涵盖了停车场管理系统的所有基础功能。技术栈Springboot,MybatisPlus,Beetl,Mysql,Redis,RabbitMQ,UniApp功能云端功能序号模块功能描述1系统管理菜单管理配置系统菜单2系统管理组织管理管理组织机构3系统管理角色管理配置系统角色,包含数据权限和功能权限配置4系统管理用户管理管理后台用户5系统管理租户管理多租户管理6系统管理公众号配置租户公众号配置7系统管理操作日志审计日志8系统

随机推荐