可靠的软件供应链需要上游供应链软件社区的持续投入和长期支持(Long Time Support,LTS)。软件也存在生命周期,上游供应链软件开发团队能否对软件全周期进行持续高质量的维护与投人,也是软件供应链中的风险点。在安全漏洞披露之后,供应链软件对安全漏洞更新与修复速度影响到下游软件的安全与可靠性,而其依赖于背后是否有一支强大的开发与维护团队。此外,也要注意上游供应链软件的开发者生态。由于开源软件的非营利性,开源社区往往依赖于开发者的无偿贡献与使用者的自愿资助,因此其软件周期存在很大的不确定性,很可能在资金缺乏后停止软件的维护。而软件的停止维护也意味着安全漏洞暴露之后,下游软件无法通过更新的方式规避安全漏洞的风险,使得软件项目暴露在安全风险之下例如,红帽公司决定在2021年12月底停止对Cent0SLimux8的支持,意味着国内大量使用Cent0s的企业都需要进行上游操作系统的迁移与替换而没有及时替换的软件在遇到安全漏洞之后可能面临无法得到红帽公司技术支持的帮助。
对应传统供应链的概念,广义的开源软件供应链可以这样定义:开源软件供应链是一个实际业务系统,在开发和运行过程中,涉及的所有开源软件上游社区(Upstream)、源码包(SourcePackage)、二进制包(Binary)、包管理器(PackageManager)、存储仓库(Repository),以及开发者(Developer)和维护者(Maintainer)、社区(Community)、基金会(Foundation)等,按照依赖、组合、托管、指导等关系形成的供应链网络。
随着开源组件的不断增多,大量的第三方开源组件被集成到软件中导致供应链变得越来越复杂。“供应链”通常牵扯数十个(甚至数千个)个体开发人员、组织机构、软件片段,以及将它们交织在一起的工具、策略和程序。开源软件供应链关系网络越发复杂多元化,导致开源软件的供应链风险尤其突出。Sonatype的软件供应链状况报告指出,29%的热门开源项目至少包含一个已知漏洞,2020~2021年针对开源软件供应链的网络攻击增加了650%Ф。最常见的攻击是依赖项混淆和命名空间混淆攻击,其次是误植域名攻击。在这几种情况下,攻击者通常依托于恶意软件包,-旦维护人员不小心下载就会被攻击。相对少见的攻击是恶意源注人,但这也是最可怕的攻击。恶意软件会通过黑进开发人员的账户、篡改工具直接注人开源项目,随之进入下游应用程序中,进而影响整个进程。因此需要对软件供应链进行分析、检测与规避隐含的风险。当前开源软件供应链存在标准不清晰、风险处置能力滞后、生态体系不透明等问题。总体来说当前中国开源软件供应链主要面临三方面的挑战。
首先,关键开源组件的可持续维护是一个挑战。开源供应链中关键开源组件出现问题,那么会对整个供应链产生巨大影响。2022年3月发生的faker.js与colors.js开源库遭作者Marak恶意破坏的事件就是典型的例子faker.js与colors.js使用范围较广,faker.js在npm上的每周下载量接近250万次,colors.js的下载量约2240万次,属于较为关键的开源软件供应链上游节点。faker.js使用的是十分宽松的MIT开源许可协议,因此许多商业公司并没有为使用此项目支付任何费用。作为fake数据领域最优秀的开源项目之一,faker.js和colors.js庞大的工作量却主要由其作者 Marak人完成,并且没有从商业公司得到相应的支持和回报。在这种恶性循环下,作者长期积累的负面情绪终于爆发,他开始通过向两个包提交恶意代码进行供应链投毒,并发布到GitHub和npm包管理器中,之后又将项目仓库所有代码清空,完全停止维护,使得依赖于这两个库的数千个项目无法运行。
可靠的软件供应链需要上游供应链软件社区的持续投入和长期支持(Long Time Support,LTS)。软件也存在生命周期,上游供应链软件开发团队能否对软件全周期进行持续高质量的维护与投人,也是软件供应链中的风险点。在安全漏洞披露之后,供应链软件对安全漏洞更新与修复速度影响到下游软件的安全与可靠性,而其依赖于背后是否有一支强大的开发与维护团队。此外,也要注意上游供应链软件的开发者生态。由于开源软件的非营利性,开源社区往往依赖于开发者的无偿贡献与使用者的自愿资助,因此其软件周期存在很大的不确定性,很可能在资金缺乏后停止软件的维护。而软件的停止维护也意味着安全漏洞暴露之后,下游软件无法通过更新的方式规避安全漏洞的风险,使得软件项目暴露在安全风险之下例如,红帽公司决定在2021年12月底停止对Cent0SLimux8的支持,意味着国内大量使用Cent0s的企业都需要进行上游操作系统的迁移与替换而没有及时替换的软件在遇到安全漏洞之后可能面临无法得到红帽公司技术支持的帮助。
其次,国际局势动荡也是一个挑战。最近几年,开源软件供应链出现了意识形态、地缘政治、战争冲突等导致的开源社区分裂。一些关键的开源托管平台和开源基础软件对特定国家、特定实体雇员采取了账号禁止访问、代码删除等“断供”行为,这也是未来开源软件发展面临的又一巨大挑战。开源无国界,但开源组织(如基金会)、开源代码托管平台(属于商业公司所有)都会受到属地出口管制政策的制约。例如,全球最大的代码托管平台 GitHub、全球最大的容器托管平台Docker Hub、国际著名开源基金会Apache软件基金会就明确声明受美国《出口管理条例》的约束。出于美国制裁的原因,GitHub开始封禁俄罗斯开发者的账号,严格限制俄罗斯获得维持军事能力技术。。一些著名的开源社区和开源项目也出现了宣扬政治立场的行为。轻则在开源项目中植入支持某方的标语口号、捐款按钮等,重则把对方排除出开源社区。例如,0penBLAS作为一个基于BSD许可发行的优化 BLAS 计算库,删除了对俄罗斯国产处理器 Elbrus 的支持这意味着Elbrus可能将无法使用新版功能的优化线性代数内核,未来E-brus处理器也无法在被依赖 OpenBLAS库的应用直接使用。
最后,大企业垄断开源生态的行为会阻碍创新。开源一直秉承鼓励创新的发展理念,已成为推动全球数字科技创新的重要因素。数据表明,开源技术支撑了90%以上的互联网产品,推动了一大批小而精的创新型企业发展壮大Φ。开源倡导开放、共享的模式,兴起之时就遭到众多科技巨头的坚决抵制,但随着开源势不可挡的发展,全球科技巨头转而持续加码开源领域,纷纷通过收购开源平台强化其垄断地位,试图通过掌控开源平台不断强化对科技生态的领导力,并使得社区从早期高度分散的技术架构转变为由几个强大的网络巨头所控制的架构。这种“大公司拥抱开源”的现象,一方面,因大公司拥有在更高级别上开发和维护开源项目所需的资金,推动产生了更多的开源重点项目,并有助于提高质量和安全性;另一方面,受商业利益等因素驱使,通过对开源社区项目的开发和商业化推广,对开发人员施加种种限制,易造成技术垄断,阻碍技术创新。