据Gartner表示,现代软件大多数是被组装出来的,而不是被开发出来的。据不完全统计,一个应用的开源组件占整个应用的60%,剩下的40%由业务代码、配置文件、构建脚本、静态资源等数据构成。在软件开发过程中开源组件的使用越来越广泛,其地位也越来越重要。
据官方数据库显示,开源组件的风险呈上升趋势。而这一风险的平均发生概率是8.77%,是OWASP Top10中事件发生率最高的。
目前已知的Maven仓库数据量达650万,Nuget仓库累计下载量超930亿,Rubygems 仓库累计下载量超712亿,PyPI仓库使用人数超过49万,从这些数据可以看出开源组件正在被广泛使用。其次,从需求量来讲,Sonatype的《2020软件供应链报告》指出,2020年世界各地的开发者对开源组件和容器的需求,超过1.5万亿个。如果说在软件供应链中,软件是其重要成分,那么在软件中,开源组件则是其不可或缺的成分。
而从开源软件供应链角度看,开源软件供应链是一个系统在开发和运行过程中,涉及所有开源软件上游社区、源码包、二进制包、包管理器、仓库等,按照依赖、组合等形成的供应关系网络。它是开源组件和软件供应链的结合。
开源组件在软件开发过程中占有重要地位,但是开源组件的风险也随其使用的广泛而逐渐上升,在实际使用过程中常常面临诸多挑战,如安全漏洞、知识产权、软件供应链安全等。
安全漏洞
指在硬件、软件、协议的具体实现或系统安全策略上存在的缺陷,可以使攻击者能够在未授权的情况下访问或破坏系统。就像SQL注入、失效的访问控制、失效的密码加密等,这些代码行为导致的漏洞。安全漏洞还有个重要特征,就是其数据来源较分散,比如CVE官网、美国国家漏洞中心、中国的CNVD等,都有自己收纳的漏洞库。
知识产权
即我们常说的License,主要分为强传染性、弱传染性和商业友好性。强传染性,指软件必须作为一个整体涵括在license许可的规范和约束下去发布。弱传染性,就是类似LGPL/CPL/MPL协议,以LGPL协议为例,它允许在部分条件下可以不去做开源。商业友好性,像Apache/MIT/BSD协议,对开源不做任何要求,用户可以任意修改、分发开源组件。
软件供应链安全
软件供应链安全风险,主要包括上游的缺陷漏洞代码和恶意代码,以及下游对上游的依赖引用和文件引用。
一:依赖传播。软件供应链中,开源组件的依赖层级和链路非常长,如果出现风险,很难识别是哪一个开源组件导致了漏洞,对排查和处理问题会造成很大的阻碍。
二:同源拷贝。在实际引用组件时,可能只需要其中一部分功能,如拷贝一个文件或一段函数,并不需要把该组件整块进行编译,一旦出现漏洞和风险,这将使风险溯源非常困难,严重影响修复进度。
三:对开源项目的维护。许多开源项目是由一些小开发团队或个人在维护,这就使得更新维护进度有很多不确定性,很多的代码库在过去两年或者更久的时间内未进行过功能升级、代码优化和任何安全问题修复的依赖项。
除此之外,Sonatype在《2020软件供应链报告》中提出下一代软件供应链攻击,即现在大多数攻击者不再被动等待已知公开漏洞信息的披露,而是更加主动的攻击上游开源组件,这对他们来讲更方便有效。
面对开源组件的安全风险,实际应该如何去解决?要坚持以人为本、流程+技术的综合方式去治理。让我们从三个角度来做些分析:
首先,从人的角度来讲,建立开源组织体系。在整个软件供应链的流程中,开源组件贯穿于整个软件开发、测试、交付和使用等环节,每一个环节需要人员协作并协调管理。因此,从上层的维度建立开源管理办公室或领导小组对整个流程进行全面管控,让开发人员、安全人员全面学习开源生态知识,了解生态运作机制,开展开源风险意识培训,强化开源风险管控手段,这显得尤为重要。
其次,从流程角度来讲,建立开源管理体系。围绕开源技术进行全生命周期的理念,建立安全准入机制,引入开源软件前先评估安全风险。在使用/更新/升级阶段,建立开源软件使用、更新和升级的规范和流程制度,持续检测、跟踪漏洞情报和响应。在退出阶段,及时做好退出管理、记录和追踪,通过设置黑名单、阻断策略规则等方式来隔离退出的组件。
最后,从技术角度来讲,要利用好SCA工具。开源网安自主研发的软件成分分析SCA产品——开源组件安全及合规管理平台(SourceCheck),用于第三方组件安全管控,包括企业组件使用管理、组件使用合规性审计、新漏洞感知预警、开源代码知识产权审计等,支持对源码及发布包检测,是 OWASP Top 10 中“使用含有已知漏洞的组件”安全风险的最佳解决方案。
开源网安SourceCheck可实现自动化、无感知地对企业级软件资产信息进行收集与管理,使软件资产分布可视化;并提供软件资产跟踪定位和管控、新漏洞的自检和预警,以及对自研组件和程序代码的许可合规性进行检测。
企业管理人员必须形成共识,安全问题不仅是安全部门和安全人员的事情,在软件开发正向着“快速迭代、快速开发、快速交付”的发展趋势下,开发团队与测试、运维和业务部门之间的关系,也应该打破原有的隔阂,实现安全左移。安全左移,就是要在软件开发全生命周期解决安全问题,而不是在软件上线之后进行安全维护。这一理念的实质内容是,从需求导入、代码审计、开发测试到部署上线,安全需要持续存在以及发挥能效,且安全资源完成软件化、组件化、服务化改造,以便结合自动化手段,实现从代码到应用的全流程安全介入,这样才能有效防控开源组件风险,增强业务应用的安全性。
开源网安作为国内领先的软件安全全生命周期解决方案提供商,未来我们将继续秉承“捍卫中国软件安全”的核心理念,通过“软件安全开发流程+自动化安全测试工具+培训服务”三大抓手,弥合开发与安全的鸿沟,帮助企业提升软件的安全与质量,为中国软件安全保驾护航。