行业动态
涤故纳新,加快推进软件供应链安全
发布时间:2024-04-08 11:04 浏览次数:113次

引言


涤故纳新,正如诗句“问渠那得清如许,为有源头活水来”所体现的诗意,只要小渠的源头上一直有清水流进来,小渠中的水即使原来有点污浊,很快就会被冲洗干净。在软件研发中,只要把握住源头引入的开源代码的质量,配合研发过程的管理,产品代码的整体质量将快速得到提升。
开源软件是信息时代的公共基础设施,也是软件研发不可或缺的主要组成部分,因此,软件供应链安全已经成为世界各国非常重视的信息安全方向。企业要建立一套完善的软件供应链安全体系,存在周期长、起效慢的问题,奇科厚德提出利用第三方资源,首先快速建立可信开源仓库的方法,为希望快速推进软件供应链安全、快速看到效果的企业提供一条可行的路径。

推进软件供应链安全是趋势


软件供应链是指一个通过一级或多级软件设计、编程、测试阶段编写软件, 并通过交付渠道将软件从软件供应侧送往软件用户侧的结构。供应链中包括了开发者、开发工具、第三方库、构建系统、分发渠道等各个环节。

图1 软件供应链
开源软件是软件研发的基础,由于近年来开源软件频发安全事件,如“心脏滴血”、“LOG4J”等安全漏洞等爆发,人们发现,必须将代码的安全管理工作前移到代码引入阶段。于是世界各国强调软件供应链安全,并出台一系列法律法规和标准,推动企业在信息化、智能化过程中,改善软件生产管理过程,特别是管理开源软件。

引入开源代码面临挑战


企业搭建软件供应链安全保障体系,是一个非常庞大的系统工程,根据中国信通院发布的白皮书的介绍,一个完整的软件供应链保障体系如下图2。

图2 软件供应链安全保障体系(来源:中国信通院)
软件生产企业的供应链分三个环节,分别是软件的引入环节、生产环节和使用环节。过去研发企业主要关注的是产品的功能和性能,因此,程序员重点关心的也是用哪种开源代码能够帮助完成工作任务,而往往会忽视开源软件的安全性、合规性、可维护性等,其总体结果就是企业对开源软件的引入缺乏管理。
要管理好引入环节,有很多方面的工作,包括开源软件的来源情况、软件安全合规情况、软件是否有完整的资产记录、能够提供较好的服务和支持等。但是开源社区不是企业自已,人和资源都不在企业内,不能用企业管理的这一套管理逻辑和方法,因此企业面向海量的开源资源,管理上有诸多挑战:

挑战一:管理层难以把控开源软件的使用


开源软件来源于开源社区,代码质量参差不齐,许可证要求千变万化、社区的经营维护情况也是良莠不齐。因此,低质量、欠缺维护、有漏洞、有使用限制的开源代码往往在不经意中,被引入到产品中。
近年来,依赖引入是更加流行、更加隐蔽的一种引入方式。目前很多软件依赖外部代码仓库,例如Java开发者对Maven仓的依赖。这种依赖的代码,在进行编译前,并没有在研发环境中,而是在进行代码编译过程中,由编译器直接从互联网下载并注入到产品中,编译完成后,这些代码也无须在本地保留。而且,这些被依赖的代码本身还需要依赖其它开源模块,这种依赖称为“间接依赖”,间接依赖的层次常常达到4-5层,见下图3。因此,这种由代码依赖引入的安全漏洞或合规问题更加难以发现。

图3 直接依赖和间接依赖,以及间接依赖漏洞的隐蔽性

挑战二:推进软件供应链安全管理周期长


企业推进开源软件供应链管理,常采用的步骤是:“摸清家底-清算欠账-全面管理”的路径。
第一步:摸清家底
“摸清家底”一般采用软件成分分析(SCA)系统,对企业的软件产品进行逐一分析,根据企业开发的、在用的产品数量的多少而不同,往往需要花费数月的时间。通过对所有产品的清查,可以得到企业使用开源软件的整体情况,从而能够更好地设计后续的工作。
第二步:清算欠账
清算欠账,就是解决过去无序使用开源形成的遗留问题的过程。针对摸底过程中发现的开源软件漏洞问题,根据其严重程度,安排处理的先后顺序,逐步解决。对于一个较大的软件企业,产品多达数十款甚至数百款,要彻底解决遗留问题,又不能影响在研产品,只能利用少量资源,慢慢清理。因此清算欠账往往要很长的时间。
在“清算欠账”过程中,对在研软件如果管理不当,还会产生“旧账未还,又添新账”的情况,近一步加长周期。

挑战三:软件供应链安全管理头绪多见效慢


      开源软件管理牵涉的方面多,包括设计、开发、测试、安全、质量、法务部门都有涉及,对于企业来讲,是一个系统化的工作。要让开源软件管理产生好的效果,往往需要对企业内部的信息化平台进行系统性改造,以适应全新的管理需求。要对信息管理平台进行适当的改造,企业内部的人才也相对缺乏,需要重新进行系统性学习和研究、然后才能确定流程和方案,最后再进入编程、部署、试用、推广等步骤,因此存在周期长头绪多见效慢的问题。

涤故纳新,首先建立可信开源仓库


目前,国内很多行业正在推动软件供应链安全管理的工作,通过学习国际国内的最佳实践,例如Linux基金会发布的《企业开源指南》、《OSPO指南》,中国信通院的《开源合规指南》等资料,为企业制定一套切实可行的战略和方针。
奇科厚德认为这些方案中,存在前述分析中指出的管理难、周期长、见效慢的问题。因此,我们提出了一个改进思路:
利用第三方资源,首先建立可信开源仓库。
这个思路的原理就是“涤故纳新”,主打:推进快,见效快。
重点指出,这个思路与其他开源管理实践并不冲突,而是将最佳实践中的“建立可信开源仓库”的这个环节前移,从而产生出其不意的效果。

可信开源仓库是软件供应链的重要环节


可信开源仓库是一个由经过筛选的高质量、低风险的开源组件或者依赖组件组成的开源组件池,是企业研发部门公用的基础设施。
从软件供应链安全体系架构中,采用了可信开源仓库后,开源软件在生产中的流转过程,分成五步,“供、选、用、维、馈”,如下图4:

图4 可信开源仓库与软件供应链的关系
1. 供:程序员在互联网上搜寻到多个技术可用的开源软件来源。
2. 选:通过SCA分析,找出许可证合规、安全漏洞少、社区支持好的开源软件,纳入可信开源仓库;把问题开源组件挡在企业外面。
3. 用:从可信开源仓库中获得开源软件,应用到软件产品中。
4. 维:随时更新维护收纳的可信开源仓库中的开源组件的最新版本、版本升级、最新漏洞等情况,并提供安全预警。
5. 馈:发现开源组件漏洞,需要开源组件提供新功能,就将需求或者问题到反馈社区,推动社区更新。
有了可信开源仓库后,程序员只能在这个组件仓库里面获取开源代码,从而让软件开发工作的引入环节完全得到控制。
采用可信开源仓库,只使用安全的、高质量的开源组件,让新开发的软件质量更有保证,老软件的问题可以逐步处理,从而达到涤故纳新的效果,让软件供应链安全问题逐渐缓解,让其他手段可以更加从容地逐步采用。

首先建立可信开源仓库的好处


首先建立可信开源仓库,有以下好处:
1. 周期短、见效快
相比于前述“摸清家底-清算欠账-全面管理”的方法,先打造可信开源仓库的方法能够在新产品中快速看到成果。
一般来说,在研产品开发的推进速度比较快,我们通过对在研产品强制使用可信开源仓中的开源软件的方法,能够立即在新产品中得到更加安全的结果。
2. 降低入门管理难度
要建立一套完善的开源管理制度和平台,需要较长时间,签涉部门众多;而如果我们在启动软件供应链管理初期,让开发人员通过可信开源代码仓来使用开源软件,则只需要开发部门参与,就可以开始了,这个管理的难度就大大降低了。
该方法除了能解决前述问题以外,还可以产生其他好处:
3. 提升开发效率
内网中的代码仓库可以为开发者提供更快的访问速度和更好的搜索功能,使得开发者能够快速找到所需的开源项目,提高开发效率。
4. 提高代码安全性和合规性,降低管理负担
通过在内网中建立可信的开源代码仓,可以确保程序员访问和使用的开源项目是经过筛选和验证的,从而降低引入已知漏洞的风险。这有助于构建一个立体的防护体系,真正做到托管源代码的安全。
可信代码仓库把使用的开源组件范围做了限制,配合开源成分分析SCA工具,能够进一步提升SCA工具的准确度和精确度,为软件供应链管理打下更好的基础。
5. 优化资源管理
集中管理的可信开源仓库可以减少分散存储带来的冗余和维护成本,同时便于进行统一的版本控制和审计跟踪。
6. 加强权限控制
在内网中建立的代码仓库可以更严格地控制访问权限,确保只有授权的成员才能访问互联网,获取外部代码。
总的来说,通过在内网中建立可信开源仓库,不仅能够快速提升软件供应链质量,快速提升软件产品的安全性和合规性,还能够提升开发效率,促进内部资源的高效利用作,提高对研发人员的管理能力。

建立可信开源仓库的两种路径


建立可信开源仓库既有常规路径,也有快速路径本文推荐的是快速路径。
1. 常规路径:在使用中慢慢积累
企业建立流程管理,让需要使用开源组件的部门,提出需求,经过多部门审查和评估,包括漏洞评估、合规评估、社区评估等,最后将通过了审查的开源组件,纳入可信开源仓库。
这个方法的问题是:企业需要采购SCA(软件成分分析)工具、搭建开源管理流程和组织、以及将工具和流程整合起来的平台。每一步都需要很长时间,这会让建立可信开源仓库的过程变得漫长,跑在了建立流程、搭建平台的后面。
2. 快速路径:第三方服务商合作
国内部分提供开源成分分析(SCA)系统的厂商,拥有庞大的开源知识库,其中有开源组件的代码、许可证、漏洞、版本、依赖关系等信息。这些数据可以用来帮助企业快速筛选安全、合规、可用的开源组件,并下载到企业中。因此,通过与第三方服务商合作的方式,就能够在很短时间内,快速积累出企业所需可信开源仓库,为企业按部就班地构造开源管理体系争取到更多的缓冲时间。
第三方服务商不但可以帮助企业进行开源组件的筛选和标记,还可以帮助他们完成维护和更新,即可以在“供、选、维”三个方面为企业提供帮助。
在运行到一定阶段后,企业内部管理运行起来了,企业还可以自行接管、运维可信开源库,不会受第三方服务商的牵制。

筛选可信开源软件的原则


对于大型的开发团队,使用的开源组件数量很大,从数千到数万。选择开源组件,程序员首先根据组件的功能进行挑选时,一般可选的组件少则数个,多则数十个。
从软件供应链安全的角度来筛选开源组件时,考虑的维度往往不一样,通常考虑三个大的维度,十几项指标:

一、 安全性

1、 漏洞风险:是优先考虑的指标,如果存在高危/超危以上级别的漏洞,需要慎重考虑,等待其修复漏洞后再收录;

2、 依赖漏洞:一些组件依赖于其他开源组件,需要分析其依赖组件是否存在漏洞,依赖漏洞与源码漏洞应同等重视,同样处理;

3、 漏洞修复:如果一些组件存在高危以上级别的安全漏洞,且较长时间没有修复,说明社区的支持维护能力有问题,慎用;已经发现的依赖组件漏洞,也应一并考虑为其生态组成,慎用;

4、 安全政策和执行,社区有完整的安全问题处理流程,以及处理记录;

二、 合规性
1、 许可证:能够准确识别开源软件的所附带的所有许可证,这是实现合规性的基础;
2、 许可证冲突:需要考虑开源许可证是否与产品许可证的条款冲突,例如GPL-2.0,APGL-3.0,与MIT、Apache 2.0等许可证。
3、 使用领域限制:一些许可证只允许在学术研究机构自由使用等。
4、 许可证条款遵守:确保开发和分发过程遵循所有相关开源许可证的要求。例如,一些许可证要求在分发时包含原始许可证文本或修改通知。
5、 商标和专利:一些开源软件需要专利授权。
6、 出口管制或者法律遵守,例如采用的加密手段是否在国家的监管范围内,相关产品是否允许出口。

三、 可维护性

1、 社区活跃性:通过近一段时间代码提交、合并、提问等行为判定。

2、 产品发布和更新:社区是否能够保持一定的产品发布频率;最新近一次版本发布是什么时间。

3、 文档完整性,关于社区产品或项目的指导文件是否足够丰富。

无论企业自身或者第三方都需要根据这些规则,对加入可信开源仓库的组件进行筛选和过滤。

总结


当前,推进企业的软件供应链安全管理工作,是大势所趋,目前很多企业正在探索如何在自己的企业推进这项工作。
建立软件供应链安全保障体系是一项系统工程,周期长、复杂度高、见效慢。
如果“利用第三方资源,首先快速建立可信开源仓库”的路径,能够让企业快速轻量级介入,通过“涤故纳新”的方法,快速见到成效,为有序推进软件供应链安全管理打下一个良好的基础。

作者简介


龙文选,现任奇科厚德副总经理,Linux基金会亚太区布道者,资深开源行业专家,16年以上开源行业经验。曾担任Linux基金会超级账本中国区负责人,黑鸭子软件中国区技术经理等职。