管理开源风险指南

目录

风险一:不一致的安全标准

风险二:未知的源代码起源

风险三:开源协议违规

风险四:开源代码质量问题

管理开源风险的最佳实践


我们生活在一个开源的世界中。如果你现在是一个开发人员,那么不管你在哪里工作或者构建什么类型的应用程序都或多或少的依赖着开源。事实上,根据中国信通院2020年对企业应用开源软件情况的调查,应用开源技术的企业占比已经达到了87.4%,有计划应用开源技术的企业占比也达到了10.3%。也就是说97%的企业在与开源打着交道,这也就不难理解为什么我们总是说“软件吞噬世界,开源吞噬软件”了。 

我们很容易理解为什么开源如此普遍。通过将开源代码库、扩展和其他资源导入到应用程序中,开发人员不必重新发明轮子。他们可以重复使用其他人已经编写好的代码,以便腾出更多的时间来编写那些还不存在的创新特性与功能。

然而,开源也有它的缺点。为了负责任的利用开源代码,避免经常伴随开源代码的安全性和规范性挑战,开发人员需要充分了解他们使用的开源软件及其相关风险。

为了在这一点上提供指导,本文将介绍一些将开源代码合并到更大的代码库中的最常见风险。同时,泛联新安还将为您提供确保开源代码安全的最佳实践。

  • 风险一:不一致的安全标准

当涉及到安全性时,开源代码之前的区别可能会很大。一些开源项目,比如Linux内核,保持了非常高的安全标准(尽管有时他们也会漏掉一些漏洞和缺陷)。但是其他的项目,比如GitHub上由计算机系学生为课堂作业编写的随机工具,可能并不总是保持着这么高的安全标准。

这就意味着,开源软件并不总是非常安全的。事实上,那些安全标准较高的项目只占到了较少的一部分。在大多数时候,使用开源代码意味着你同时接受了较高的简便性和不低的安全风险。

这种安全标准的不一致性给开发人员提出了一个最大的挑战,他们必须在个案基础上审查第三方开源代码的安全性。尽管许多开源的拥护者喜欢声称:“many eyeballs make all bugs shallow!”,他们认为开源社区能“自动”发现并及时修复漏洞。但事实是,一个给定的开源代码库上的eyeballs数量可能存在很大差异。开源项目得到的关注越少,编写人员的经验越不充足,它的安全标准就越低,其他开发人员再次利用时所承担的风险相应的也就会越高。

  • 风险二:未知的源代码起源

有时候,之所以很难审查开源代码的安全性,是因为我们完全不清楚这些代码的起源究竟是在哪里。

例如,你可能会在一个网站上找到一个源代码tarball,但该网站几乎没有提供关于谁编写了该代码的信息。也许文件中有一个README,它将代码的所有权指向了某个人,但是我们无法验证其真实性。

又或者,你可以从git存储库中克隆代码,假设repo的维护者就是代码的作者。但是repo可能包含实际上来自其他地方的代码,而且它们可以轻松的被复制到你使用的repo中。在这里,任何提到作者身份的文档文件都很难被验证其真实性。

无法确定代码的起源是一项很大的风险,显然,如果我们知道代码是由经验丰富、出于善意的开发人员编写的时候,就会更容易相信代码。但是,如果编写人员的能力有限,或不怀好意时(如前段时间一位开源代码的维护者因反俄给node-ipc库中添加了恶意代码),开源代码的安全性将受到很大的挑战。因此,我们无论如何都应该扫描代码以发现潜在的漏洞。不过正如前文所说,如果第三方代码来自可信任的公司或组织,那起码我们在使用时可以减少一些担忧和不必要的麻烦。

  • 风险三:开源协议违规

开发者总是认为自己是开源许可方面的专家,但大多数情况都不是。他们经常误解协议条款并持有一些错误的观点。例如“GPL说你不能为了钱而出售你的代码”或“根据MIT许可,你可以做任何你想做的事情,只要所有权归属于原始开发者。”

这样的错误概念会以不遵守开源代码协议的形式造成风险。如果开发人员不了解管理他们使用的各种开源组件的协议的具体要求,很可能会导致一些违反协议的不良后果。虽然在大多数时候没有人会因为你个人破坏了开源协议而起诉,但对于大型公司来说这样的诉讼比你想象的要频繁的多。

最麻烦的是,开源项目偶尔会改变他们的授权条款。例如,Elastic在2021年做出了一个著名的改变举动。这意味着你仅仅在第一次使用开源代码时遵循它的许可要求是远远不够的,每次代码更改版本时,我们都需要重新进行评估。

  • 风险四:开源代码质量问题

我们不得不承认一点,开源项目的开发者、贡献者和维护者可以是任何人。他们各自的经历和专业背景不同,必然会导致代码或开源项目的质量存在一定的差异。

泛联新安的一项调查显示,超过三分之一的被扫描软件中包含至少一个含漏洞的第三方组,超过四分之一的被扫描第三方组件中包含至少一个已知漏洞,平均每个第三方组件里包含73个已知漏洞。

在开源社区中,优秀项目毕竟是少数,而且再优秀的框架都会存在风险。此时,使用相应的代码质量安全检测工具就成为了最佳的选择。

  • 管理开源风险的最佳实践

以上确定的风险并不是回避开源的理由,当我们能对开源进行负责任的管理时,它对开发人员而言是利远大于弊的。例如:免费、透明、可更改、可协作等等优势。

为了控制风险,泛联新安建议您考虑以下使用开源代码的最佳实践:

1.从项目网站下载代码或者从GitHub repos下载链接到项目网站的代码。这比从随机的GitHub存储库中提取代码要好很多。

2.不要忘记经常扫描你的代码,不管是谁写的,也不管你对它的来源有多么肯定。建议您使用泛联新安的BinSearch,它能够精准分析识别代码组成成分和引用第三方组件、了解引用开源代码许可合规性、检测代码安全漏洞、分析植入恶意代码及溯源、鉴定代码剽窃详情等,为您管理二进制代码的安全风险提供自动化分析和预警功能,实现系统整体的代码安全防治。

3.持续验证您所使用的所有开源组件的授权条款。

4.与您的法律团队合作,以验证围绕开源的相关实践是否在实际上符合许可条款。请千万不要假设你的开发人员非常了解开源协议的方方面面,事实上,他们可能仅仅只是知道GPL和MIT是两种不同的开源许可而已。

最后再次声明,开源是一个很好的工具。如果没有开源代码和开源社区,现代开发人员的生活可能会十分单调乏味。但是在使用开源时,为了避免搬起石头砸自己的脚,管理其内在的风险是至关重要的一环。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

GitMore

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值