开源正在深刻改变商业世界!开源带来的是速度、创新和便利,根本性地改变了IT模式。开源项目吸引了众多志愿者主动参与生产协作,软件正以前所未有的方式快速推进和发展。更重要的是,开源开放生产协作方式使得每个人都能以更低的成本获得软件(有时甚至不需要任何成本)。
开源软件库应运而生,并广泛应用于跨行业、跨政府和教育组织中。一项研究发现,96%的应用程序包含开源组件。一个典型的软件应用程序平均包含257个开源组件,这些开源组件可能跨越开发语言和工具包。这相当于应用程序由高达90%的开放源代码组成。
数据:当前95%的IT组织依赖开源软件
开源软件的安全问题
开源也给企业带来新的安全风险,有些甚至达到了危险级。随着开放源代码的广泛使用,受影响的用户数量以及安全曝光数量也在迅速增加。2014年出现的“心脏流血”安全漏洞(Heartbleed security bug)就是一个典型的例子,受“心脏流血”安全漏洞攻击的网站达到80万多个。
要解决这一问题,其关键不是IT组织和软件开发人员要不要继续使用开源,而是使用什么样的开源软件库?如何以及怎样使用开源软件库?这些开源软件库是否包含漏洞?这些漏洞会否影响到应用程序?开源代码的使用会给我们带来哪些风险和责任?
针对上述问题,建立一个管理开源库和组件的制度及机制至关重要。否则,企业数字化转型之路将充满荆棘、问题,甚至失败。更糟糕的是,这些漏洞不仅会影响您的组织,还会潜在地损害您的客户和消费者。
将近88%的Java应用程序在组件中至少存在一个漏洞
开源 5 点须知
1. 当前所有的开发团队都在使用开源。
2. 敏捷和开发运营改变了软件开发方式。完全从头开始构建软件及按期交付几乎不可能同时实现。
3. 完全从头开始构建软件会导致更高的开发成本。
4. 开源提供了用其他方法无法实现的基本的、有时是最先进的软件功能。
5. 开源隐藏潜在风险,一个健全的开源安全制度十分必要。
开源风险的由来
商业和技术正在经历前所未有的变化。云计算、移动技术、物联网(IoT)以及处理能力的根本性进步,为组织发展提供了更大的空间。但是,越来越多的收益是建立在越来越快的行动上的。开放源代码和软件,既实现了开发运营速度和灵活性的有效结合,同时也忽略了编码质量和可能的安全漏洞。
挑战还不止于此。企业在使用哪些特定的库、组件和代码?这些库有漏洞吗?如果有,会有哪些威胁?并非所有的漏洞都会带来威胁,所以有必要了解漏洞是否真的危险。如果漏洞真的有危险,它会造成多大程度的破坏?直接和间接开源库的使用加剧了这些挑战。在某些情况下,这些间接依赖关系可能会扩展到项目或应用程序的5或10个级别。
只是简单地使用开源库不会对业务构成安全威胁。
真正的问题是您不知道所使用的应用程序包含漏洞。
对于开发团队来说,管理开放源代码和有效地防范安全风险势在必行。然而,从头开始为每个应用程序生成每段代码是不可行的。事实上,使用开源会带来显著的竞争优势。利用开源可以让开发人员把90%的时间花在10%的应用程序上,这10%就是你和你的竞争对手的区别所在。
在下载组件之前,你不可能彻底审查每个源代码和代码库(使用的开源组件太多了)。仅在2017年,开发者下载了超过520亿的Java组件和超过120亿的Docker Hub组件。在过去的五年里,开源软件的使用量增加了5倍。然而,建立一个风险最小化、保护最大化的安全机制是有可能的。它只需要一个明确的策略和一个解决开源风险的制度和机制。
建立开源安全制度至关重要
开源已经成为企业软件开发最重要的工具之一。如今,在线库、模块化组件和预构建的代码已经成为软件开发运营和其他企业活动的基础。要有效和安全使用开源代码,相关的挑战是:快速识别新的和不同类型的威胁、风险和问题,然后采取行动迅速解决漏洞。被动等待开放源代码库中的外部修复,或者简单地相信开源社区“众人参与代码审查”就能发现问题,这是一种错误的安全意识。
开源软件的风险围绕着三个关键领域:能见度、安全性和治理。理解这些因素以及它们是如何影响开源安全的,有助于企业制定更强大的网络安全规划。
数据:拥有应用密钥的成熟项目通过率比新项目高35%。
为制定有效保护软件的安全制度,以下三个关键领域至关重要:
# 能见度
开源软件组件用在哪里?
完全了解组织对开源软件和代码的使用情况是至关重要的。然而,在开源世界中,这个问题特别棘手,因为组织通常依赖于开源库,而开源库又依赖于其他开源库。因此,开发人员在引入几个开源库的同时,实际上引入了数百个其他开源库(包括它们的所有漏洞)。此外,虽然开源库的一个部分可能不会受到攻击,但其他子集可能受到攻击。了解开源软件用在哪里至关重要,以便在发现软件库存在漏洞后,知道如何进行处理。
使用哪个开源版本?
了解正在使用开源组件的版本也是必要的。所使用开源组件是最新的版本?还是旧版本?那种认为IT团队会自动更新到开放源码软件最新和安全版本的认识是错误的。认为IT团队所使用漏洞检测工具是最好的认识也是错误的。
什么时候检查开放源码的状态?
还有一个问题就是开发团队和其他团队检查补丁和更新的频率。检测到编码存在漏洞到修复漏洞之间的这段时间至关重要。雪上加霜的是,美国国家漏洞数据库(National Vulnerability Database)上提交的漏洞实在是太多了,整理提交的文件需要时间,从发现漏洞到官方正式披露漏洞可能需要几个月的时间。
# 安全性
有没有补丁更新规范?
检查开源代码版本更新是一回事,确保补丁和及时更则是另一回事。企业必须有一个清晰的规范和流程来监督代码补丁和更新。
漏洞管理方法是什么?
还需要了解在开放源代码(或任何其他软件)出现问题时发生了什么以及如何做出反应。这个机制可以帮助企业快速找到编码漏洞,并以迅速和有效的方式予以补救。
有没有代码测试和验证系统?
这是确保应用程序安全性最重要的方面。仅仅知道开放源代码存在问题并没有什么好处,更重要的是理解它如何影响您的组织。
# 开源治理
是否完全理解版权和协议的含义?
许可条款是一个关键问题。要了解如何使用开源软件,如何修改它,“copyleft”许可有关使用和修改的相关规定。
所使用的开源软件是否符合组织的法规和政策?
开源的一个关键因素是确保它的使用符合组织的政策和流程,且有必要的机制以确保合规。
如何防止不安全的库进入到生产环境?
当严重安全风险的库可能导致企业应用程序被利用时,可以做到终止开发工作,这表明您已具备将安全性集成到开发工具链的能力。
开源风险的管理方法
对于一个组织来说,最根本的问题是如何在快速生成代码与确保安全之间取得平衡。实质上,这两个目标并不冲突。通过重新思考和重组流程,建立一个好的机制,就有可能发现问题并迅速解决它们。以下是保护开源的七个基本方针:
1. 从制度上确保开源代码和其他代码的能见度
建立应用程序目录至关重要。研究表明,只有一半的组织在维护组件和子组件的清单,只有一半的人认为只有漏洞被公开时才需要更新组件。完整的开放源代码清单是确保企业安全的良好起点。
2. 在安全与开发之间取得平衡
现在,开放源代码的管理已经超出了开发团队的范围。事实上,让开发团队负责安全肯定会破坏对代码的保护。最佳实践是从一个共同的角度来进行保护,沟通和协作对于风险和修复的优先级、工具的选择以及教育培训等工作的安排至关重要。
3. 建立简单易行的开源安全制度
所有人都朝着同一目标努力,解决安全风险要容易得多。建立开源安全标准、考核指标、业务流程,并从思想和组织上予以确保开源安全机制的运行,组织就会受益。选择正确的工具,如软件组合分析,可以帮助建立开放源代码高风险版本的黑名单。
4. 管理技术债务
制定适当的策略和程序非常重要,这样团队才能领先于攻击者。尽管开源库和代码不断更新、打补丁和修复,攻击者也可以看到发布在国家漏洞数据库中的内容。这意味着,在新的开源代码更新时,始终监控并进行更改是至关重要的。
5. 建立安全管理员制度
理解组织的业务和开发需求的能力,以及保护其资产所需的安全性,对加强保护大有帮助。此外,在开发团队中建立一个安全卫士可以帮助转换和传播技术数据,并确保您的组织有效地解决开放源代码和库中的漏洞。
6. 尽早并且经常测试代码
最重要的是,在开发和部署的所有阶段测试开放源代码。通过静态和动态测试的持续监视可以发现可能无法检测到的漏洞和错误。在某些情况下,它们可能并不明显,除非组织使用特定的业务逻辑。
7. 建立一套行之有效的开源安全解决方案
通过数据挖掘、机器学习及建立漏洞数据库,将安全提升到一个新水平。有了这个数据库,您可以提前得到漏洞通知,这比您只依赖国家病毒数据库要早得多。开源安全解决方案可以帮助您用简单的方法快速堵上安全漏洞。
数据:开发人员尽早扫描代码,通常会比那些不扫描代码的人多修复48%的缺陷。
成功的密码
尽管与开源安全相关的问题和方面很多,但归根结底,它们都可以归结为几个基本目标:
1. 识别和编目所有开放源代码和商业代码
2. 使用工具和流程来识别漏洞
3. 使用专门的工具来处理风险和问题
静态和动态扫描等工具可以完成此任务。它们为管理代码和使用自动化识别漏洞建立了一个有效的制度保障。采用这种方法的组织能够更好地以最大的优势和最小的风险使用开源。
在当今敏捷、开发运营的世界中,这种级别的开源安全保护至关重要!
参考资料:
https://www.veracode.com/sites/default/files/pdf/resources/ipapers/everything-you-need-to-know-open-source-risk/index.html
往期推荐