Gartner在《软件组成分析的技术洞察》报告中提出了四项提升软件安全性的建议,其中一项建议强调,要加强对开源软件许可证的治理。开源许可证是开源治理的重要考虑因素,管理好开源软件许可证是安全开发的核心。无论有心或无意,在不遵守许可证规定的情况下进行操作都会带来危险。

开源许可证无处不在

几乎所有的现代软件都集成了开源组件,其中大多数开源组件都包含了许可证(不应当使用缺少显式许可证的开源软件,因为授权不明确)。那么,这些许可证怎么会被忽视、无视或驳回呢?这要缘于典型应用程序中开源软件的庞大数量。

Gartner在报告中写道:"一项供应商进行的研究表明,96%被检查的代码库中至少包含一些开源代码,其中40%的软件包至少含有一个高风险漏洞。在大多数现代DevOps开发项目中,应用程序中使用的大部分代码都是由开源代码构成的,其余的代码主要是作为"胶水"来组装和调用各种函数。”

只有12%的Gartner受访者将许可问题作为他们最关心的问题。然而,乍看之下可能没有问题,但忽视或滥用许可证可能会带来隐藏的风险。

不了解开源许可证会带来什么风险?

开源软件许可证授予他人在一定条件下修改、使用和发布软件的权利。然而,每个组件都通过不同许可证和不同条款来发布。在一个典型的软件供应链中,有成百上千个这样的组件,很容易就会出现复杂的情况。

开源软件许可证使用不当而导致的常见问题包括:

  • 向有贡献的开发者或项目团队支付款项和/或报酬

  • 要求使用开源软件的专利软件在获得开源软件许可的情况下回归公共领域

  • 由于组件之间许可不兼容或公司利益冲突产生的知识产权纠纷

然而,由于开发速度和竞争创新的要求,我们需要使用开源代码。与单纯依靠内部开发人员编写代码不同,开源代码使你能够享受成百上千对公共项目做出贡献的人的成果。

为了避免许可证问题,公司应当制定许可证策略,并根据这些策略评估所有引入的开源组件。一个"经过批准"的开源组件列表可以保护开发者,避免使用包含有问题许可证的组件。这将消除或大大减少开发过程中的许可证风险。

Gartner建议:"在缺乏策略或策略比较特殊的情况下,应定期扫描系统,以发现有问题的许可证并标记问题。如果发现存在被禁止的许可证,就生成一个缺陷工单;如果在代码库中出现特别危险的许可证,则中止构建过程。

避免许可证风险,应自查4个问题

常见的开源软件许可证可以分为以下两大类:

1.允许性或自由性许可证(要求很少)

  • 按你认为合适的方式使用该代码

  • 使用风险自负

  • 鸣谢作者

例子包括:BSD(Berkley Software Distribution)、MIT和Apache 2许可证

2.Copyleft(要求较多)

  • 来源和衍生品必须在相同的版权条款下。

  • 如果你分发二进制文件,则必须提供源代码

例子包括:GPL、Affero GPL(AGPL)、Lesser GPL(LGPL)、Mozilla Public License(MPL)、Eclipse Public License(EPL)和Common Development and Distribution License(CDDL)。

所有组织在评估许可证风险时,都应该问四个问题

  • 什么是"发行"(distribution),它与我的组织有什么关系?

  • 开源代码许可证如何影响软件的专利权?

  • 什么是"通知"(notice)要求,我们如何遵守?

  • 我们是否有"衍生作品",以及与之相关的:将GPL代码纳入我的专有代码是否会导致专有代码在GPL下被许可?

如果能回答上述问题,你就能很好地管控开源许可证风险。

参考来源:blog.sonatype.com

声明:本文来自安全内参,版权归作者所有。文章内容仅代表作者独立观点,不代表安全内参立场,转载目的在于传递更多信息。如有侵权,请联系 anquanneican@163.com。