警惕开源软件风险提升我国软件供应链科技安全
2021-06-04陈健陈志中国科学技术发展战略研究院
■文/陈健 陈志(中国科学技术发展战略研究院)
当前,开源软件在软件供应链体系渗透率不断提高,已经成为软件生态中必不可少的要素。在云计算、大数据、人工智能、工业互联网等新兴领域,开源已成为主要开发模式。操作系统、数据库、中间件软件、应用软件、设备固件等的开发、编译、测试都越来越多的采用开源代码,软件供应链的开源化趋势越来越明显。在政府管理、军工、能源、金融等关键行业,也从以前的“谈开源色变”,到现在已经广泛接受和应用开源软件。但不可忽视的是,当前的开源世界仍由美国称霸,不光绝大多数开源基金会和开源项目都位于美国,几乎所有开源许可证和代码托管平台也都由美国的学术界和工业界主导(数据来源:中国开放指令生态联盟《开源项目风险分析与对策建议》)。不管是PC互联网领域的Wintel联盟,移动互联网领域的ARM+Android,还是大数据领域的Hadoop、Spark,AI领域的GPU、TensorFlow,这些支撑行业应用、产品和生态的底层基础,国内公司几乎都还是“拿来主义”。但“华为事件”警示我们,“免费午餐”的背后往往要付出昂贵的代价。在国际形势扑朔迷离和传统安全与非传统安全风险交织的大背景下,众多中国科技企业和用户将同样可能面临“华为之劫”。因此,重新审视开源软件的风险问题将成为提升我国软件供应链科技安全的重中之重。
一、三大风险敲响开源警钟
(一)数量激增的开源软件安全漏洞带来巨大信息安全隐患
随着开源组件和容器的广泛采用,开源软件中安全漏洞、恶意软件包、后门等问题数量激增,系统信息泄露、密码管理、资源注入、跨站请求伪造、跨站脚本、HTTP消息头注入、SQL注入、越界访问、命令注入、内存泄漏等数据安全和隐私风险日益严峻(数据来源:SNYK《2019年开源安全现状调查报告》)。统计显示,2019年公开的开源软件漏洞数量已增至6000多个,增幅近50%(数据来源:WhiteSource《2019年开源组件安全漏洞现状报告》);NVD、CNVD等漏洞库中的开源软件漏洞数量不断增加,还有大量开源软件漏洞未被收录到这些漏洞库中(数据来源:《2019年开源软件风险研究报告》,已知的开源漏洞只有84%提交到NVD美国国家漏洞数据库);易受攻击的开源组件代码库比例从2018年的60%增至75%,包含高风险漏洞的代码库的比例由2018年的40%增至49%(数据来源:美国新思科技公司《2020年开源安全和风险分析报告》)。开源软件的安全漏洞对个人的隐私保护及企业和国家的信息安全问题提出了重大挑战,例如,2014年臭名昭著的Heartbleed 漏洞就曾导致全球超过三分之二的网站“心脏出血”,大量私钥和其他加密信息处于暴露危险之下。不同于传统闭源软件,开源软件由多人协作完成,其依赖和引用关系较为复杂,安全漏洞的放大作用非常显著,加剧了开源软件的漏洞管理难度。尤其在中美贸易摩擦日益复杂的局势下,一旦美国利用开源软件中的恶意代码、病毒、后门等对我国进行监视或攻击,将使我国信息安全遭受致命打击。
(二)开源许可协议的多样性和脆弱性引发知识产权及合规风险
开源许可协议是涉及版权、专利、商标等一系列权利义务的格式合同,开源软件的作者或权利人主要通过开源许可协议对其知识产权进行许可与约束。若开源软件使用者未依照相应的开源许可协议使用开源软件,将可能面临知识产权及合规风险。全球范围内的开源许可协议已达上百种,目前最常用的六大开源许可协议(GPL、LGPL、BSD、MIT、Mozilla、Apache)核心出发点是一致的,即允许用户免费使用、修改软件,但在具体许可细节上差别很大。例如,使用GPL许可协议的代码再发布软件时没有提供源代码,就属于违约行为,那么该使用者对开源软件的复制、修改、再发布就会造成版权侵权;BSD和MIT等部分开源许可协议并未包含明确的专利许可条款用以许可用户使用软件所包含的相关专利,开源使用者很可能被开源贡献者提起专利诉讼并收取专利许可费;多种开源许可协议之间还可能存在不兼容性,据统计,67%的代码库包含某种形式的开源代码许可证冲突,33%的代码库包含没有可识别许可证的开源组件(数据来源:《开源产业白皮书2019》)。
另外,开源协议所体现的是民事主体的意思自治和相对性等法律特性,导致开源协议具有某种“脆弱性”的限制,从而使开源软件的使用规则存在不确定性,体现在:协议本身可以通过协商、修订、补充等方式进行修改;违约责任的设置可能导致当事人在权衡各种可能责任之后做出主动或者“恶意”的违约,特别是可以终止许可,禁止开源分支等。例如,2018年以来多个开源软件开发商(Redis、MongoDB、Kafka等)已经对其过去使用的开源许可证进行了修改。最重要的是,意思自治和相对性约束了开源协议仅对协议各方发生效力,其作用为保护知识产权,不涉及其他的国家法律层面的条款(如出口管制、司法管辖权等)。从现有情况来看,当前最常用的6个开源许可协议,没有在知识产权层面上对中国进行管制,也均未涉及与政府出口管制相关的声明。但当发生国家安全、社会公众利益和个人(合同方)利益竞合时,就会产生事实上的法益冲突和优先劣后等问题。极端情况下,如果美国NSF、NASA以国防安全为由,制定一个新的开源许可证,限制其资助的所有开源项目只能在美国使用和发布,则美国以外的其他国家将失去这部分开源项目的使用权。我国公司一旦使用,就会侵犯知识产权,这一潜在风险不容忽视。
(三)出口管制蔓延使开源基础架构面临“断供”风险
开源相关的法律约束除开源许可证外,还包括出口管制和司法管辖权。按照美国出口管制条例的规定(734.7b和742.15b),所有“公开可获得”的源代码(不含加密软件以及带加密功能的其他开源软件),都是不被出口管制的,而“公开可获得”的带加密功能的源代码,虽不会被限制出口,但需登记备案(5D002)。司法管辖权是指法院或司法机构对诉讼进行裁决和判决的权力。使用网站或注册会员时,如果其使用条款或会员条款中指定了司法管辖权的归属,则代表合同双方同意只承认指定的司法机关做出的判决为赔偿的依据。从现有开源基金会和托管平台的情况来看,开源基金会的管理办法差异较大,例如,Linux基金会自身的管理办法不受美国出口管制,但其旗下的虚拟化项目Xen明确要求其使用并出口者遵循美国出口管制;Apache基金会的管理办法明确说明遵循美国出口管制,旗下绝大多数项目如Hadoop、Spark等,在备案(5D002)后即不受出口管制。而GitHub、SourceForge和Google Code 3个代码托管平台均明确声明遵守美国出口管制条例,并且司法管辖权均在加州。这就意味着,如果一个开源项目或开源组织声明遵从美国的出口管制条例,此时一旦美国修改条例,将一些核心基础软件加入到管制中,那么大量核心开源项目将受到出口管制。2019年7月,GitHub托管平台就曾因美国贸易管制政策,限制了克里米亚开发者的账户,导致其托管的开源代码无法访问。因此,一旦美国针对中国公司的贸易管制政策蔓延到开源项目,中国公司托管在海外的开源代码资产将面临冻结风险。尤其是当一个开源项目或开源组织指定了司法管辖权归属于美国某法院,则所有围绕使用条款展开的纠纷,都将以该美国法院的判决为准,我国企业胜诉的几率将十分渺茫。
二、三大策略提升我国开源软件供应链科技安全
(一)从技术突破、安全审查规范、平台建设、公共服务等多角度构建开源软件供应链安全防范体系
美国国家标准与技术研究院(NIST)早在2015年就发布了NIST-800-161标准,为信息与通信技术系统的风险管理提供了指南。美国国防部高级研究计划局(DARPA)于2013年部署了专门以软件供应链安全检测技术为目标的商用信息技术软件及固件审查项目(VET)。Google、IBM、Red Hat、JFrog等大型科技公司还联合开发Grafeas开源项目,用于统一设计和管理软件供应链,从而提升其安全性。与之相比,我国尚未部署以开源软件供应链安全为主题的重点研发项目,在产品审查测评过程中,也鲜有开源软件供应链安全相关的流程要求及检测手段。因此,我国应加快与开源软件供应链安全相关的核心技术和关键设备的攻关,以及深度学习、区块链等新型安全防护技术的应用探索。从国家层面制定出台关于开源软件准入、采购规范、代码安全检测等安全审查机制的规范及标准。推动国家主管部门、权威测评机构、科研单位、大型互联网企业等组织加强合作,共同推动开源软件供应链可信组件资源平台和可信软件资源镜像仓库的建设及应用。另外,应依托行业组织和中介机构,开展与开源风险防范相关的公共服务,引导和规范企业对开源软件的应用,通过技术评测、案例讲习、咨询服务等途径增强企业的开源风险防控意识和能力。
(二)以“开源软件及其协议的司法界定”和“数字贸易规则的一致性”为着力点,完善开源软件知识产权相关法律法规
目前我国与保护开源软件知识产权相关的法律包括《著作权法》与《计算机软件保护条例》,但在这两部法律中,都没有明确的开源软件的定义以及对开源许可协议的司法界定。例如,在《计算机软件保护条例》中,还认为“同一计算机程序的源程序和目标程序为同一作品。”但是,发布目标程序与同时发布源程序,明显是两种差异巨大的行为。再者,《计算机软件保护条例》中所说的:“软件著作权人可以全部或部分转让其软件著作权,并有权获得报酬”,其中的部分转让,是否包含“修改权的部分转让”?例如,虽然允许修改源代码,但是代码中关于许可证的注释内容,能不能被删除或修改?另外,外国开源软件,包括开源软件的许可协议,是否受到中国法律保护?这些都是现有法律法规中缺失的内容,需要从版权法下开源属性权利的独立性、合同法下开源软件许可协议的规范等方面进一步界定和完善。
另一方面,开源软件的全球参与必然产生数据出境的问题。在数字贸易相关谈判中,如何保护源代码,一直是各方争议的重点。中国一向主张强制性地要求企业开放源代码,在具体行业市场准入中也将开放源代码作为前提条件。而美国在TPP14.17第1款明确要求实现“源代码非强制本地化”,并将越来越多的软件产品源代码纳入“非强制开放”的范畴。欧盟和日本的态度与美国类似,这势必会与中国现行的源代码规则产生尖锐冲突。基于此,可考虑将开源软件作为特殊类型进行制度和协议设计,逐渐放松国内立法(《商业密码管理条例》等)中有关源代码开放和商业密码使用限制的规定,进一步协调进出口监管法与版权法,并从网络安全法的基本法出发,对开源软件进行单独的安全审查和出境评估。
(三)搭建自主可控的开源基础设施,助力我国开源生态体系建设,积极探索与国际接轨的开源治理模式
近年来,以华为、阿里、百度、腾讯等为首的中国科技企业和个人在国际开源项目中的成绩日趋瞩目,成为GitHub上第二大贡献者(数据来源:《GitHub2019年度报告》)。但从长远来看,为摆脱对国外开源软件的依赖,我国必须加强自身的开源力量,包括提倡和发展不受美国出口管制和司法管辖权限制的开源项目,完善中国自己的开源社区与托管平台等开源基础设施。当前国内开源基础设施建设仍然滞后,例如,国内首屈一指的代码托管平台码云Gitee为超过500万名开发者和10万家企业托管开源项目超过1000万项,但与GitHub在全球拥有的1亿个存储库和约3100万开发人员规模相比仍存在巨大差距。另外,国内托管平台上的开源项目全球影响力较小,生态链不完善。为此,我国应联合主管部门和大型企业建设国家主导的开源社区,搭建面向全球的开源共享和交流平台,支持开放原子开源基金会、中国开源软件推进联盟等国内开源基金会和开源组织的发展;营造更为开放和自由的开源文化,在全球更广阔的范围内吸引开源爱好者;帮助国内企业推广原创开源项目,例如帮助“鸿蒙”系统与科技企业的对接;共同制定与国际接轨的开源软件治理行业标准,推动国内开源生态健康、持续发展。