随着软件开发的复杂性和动态性不断增加,软件供应链的安全风险成为了一个亟需重视的重要议题,而在技术的飞速发展和广泛应用下,新质生产力相关领域同样存在着软件供应链安全方面的问题,作为《2023软件供应链安全研究报告》系列中的第二篇,本篇文章对软件供应链安全风险的原因进行深度解析并对新质生产力范畴中如人工智能、区块链、国产商用密码等重要技术的软件供应链安全问题进行了一定的探讨研究。
软件供应链安全风险原因解析
(一)漏洞修复信息缺乏有效传递机制
由于软件采购等商业环节,开发者和使用者间的信息传递并不通畅,同时很多开发者也不会随时关注项目中所依赖的开源组件的安全情况。当漏洞爆发时,即使厂商快速的发布修复补丁,修复信息也不会被主动“推送”给用户。因此,如果用户不知道自己在软件供应链中使用了易受攻击的组件,他们就不会知道自己需要更新安全补丁。并且由于开源组件传播链条广泛,各组件之间耦合强,在缺乏及时的信息推送的情况下,会导致漏洞修复信息存在不同步现象,从而对软件供应链安全造成重大影响。
(二)漏洞修复存在滞后性
部分项目的维护者对漏洞的修复周期过长,尤其是开源项目。维护者针对开源项目的处理反馈不及时,存在排斥漏洞公开的情况。如下图所示,开源项目公开说明不再维护。如果此时有人发现漏洞,那么很有可能这个漏洞不会收到反馈或者反馈周期长于常规项目。
图2 不再维护的开源项目
图2 不再维护的开源项目
图3 安全研究员提交的漏洞
图3 安全研究员提交的漏洞
(三)开源力量分布不均衡,大量项目安全检查无法保障
在现代软件开发生态中,大量的开源项目被引入以适应越来越复杂的业务性需求。从开源项目整体看,人力、物力的分布非常不均衡。除了极少数国内外知名的开源软件,绝大部分开源软件都是由个人或小团体开发,开发者普遍缺乏安全方面的知识经验,因此往往软件在开发时就已存在漏洞,给使用者带来了安全隐患。同时由小开发团队或个人维护的项目的更新维护进度充满不确定性,很多的代码库在过去两年或者更久的时间内未进行过功能升级、代码优化和任何安全问题修复的依赖项。
当安全漏洞被爆出时,开源软件的应急响应和修复周期往往滞后于商业软件。开源维护者往往不会修复低版本的缺陷代码,低版本的代码可以通过代码托管平台继续提供下载服务,这也就意味着使用者继续使用漏洞版本,黑客通过网络空间测绘工具和搜索引擎可以快速定位到存在漏洞的网站,给开源软件供应链攻击带来了可乘之机。
开源软件漏洞影响版本难以确定。安全行业需要漏洞的具体版本实现对使用受影响漏洞版本产品的用户进行安全保护,所以无论从漏洞发现者本身,还是从国际著名的安全漏洞库CVE官方研究团队的角度来说,都需要将相关版本信息与漏洞信息形成关联关系。由于开源生态(指开源项目、开源漏洞、开源组件之间的依赖关系、开源组织团队等组成的一个生态圈)的复杂性,当开源软件出现漏洞时,安全研究人员往往无法确定漏洞的具体影响版本。以CVE为例,漏洞数据库中有关版本表达的格式规范问题与开源生态存在很大的差异性,一般有以下场景:
1)开源项目未明确标注所有版本,导致版本和漏洞匹配存在困难
2)项目并不迭代更新版本,而是直接在原始项目上进行更新
3)开源项目与安全漏洞采用了不同的版本描述方式
4)数据审核不严谨,通用平台标识(CPE)存在一定错误率
(四)软件供应链安全的底层支撑技术不够完善
当前软件供应链安全治理存在如下四个痛点。第一,软件项目的成分和组织方式复杂,导致软件成分识别的准确率、覆盖率提升存在瓶颈。第二,开源软件安全漏洞数据质量参差不齐,进一步影响开源漏洞检测的准确率和查全率。第三,普通软件开发者欠缺安全背景知识,导致修复措施单一且低效。第四,软件版本更新可能涉及项目代码的重构和适配,需要耗费巨大代价。
对应四方面痛点的供应链安全技术:软件组成成分分析、漏洞数据库质量管理与提升、漏洞的修复方案推荐、以及软件依赖更新与项目代码自动适配,目前还存在较大的发展空间。
1、软件组成成分分析能力的提升
对软件的各个组成部分进行深入分析,识别其中的安全漏洞和潜在风险。软件组成成分分析技术涉及到构建组件指纹库、高效精准的指纹抽取和匹配等。软件成分分析工具应重点发展和满足以下特性:
具备多维度的成分检测能力。软件成分分析应具备多维度检测,包括开源组件、开源项目源码、开源二进制成分等。具有专职且规模化的数据团队为工具提供持续的数据更新维护。专职且规模化的数据团队要保证工具的数据全面性。应确保数据时效性,第一时间控制安全风险。应确保数据准确性,对于没有统一的规范的开源数据,应去除干扰,确保开源数据的准确性。与国家标准相兼容统一。优秀的软件成分分析工具应从概念定义、功能原理、检测能力、检测颗粒度、评价尺度等多方面,符合国家或行业标准规范,应与国家标准相兼容,与主流厂商、社会行业公允的结果、方案相一致。否则,容易造成口径标准不一致,最终遗漏了风险。
2、漏洞数据库的质量管理与提升
依赖自动化的工具结合人工审核确认或者发动行业影响力共建行业平台,提高数据的准确性和可用性,反映最新的安全漏洞趋势。
3、漏洞修复方案推荐精度的提升
包括更新版本、热补丁等方法。更新版本是最常见的修复漏洞的方法,但往往需要付出较大的代价。热补丁则可以快速修复漏洞,但需要保证其稳定性和兼容性。
4、依赖更新与项目代码自动适配方法的探索
未来开源安全技术的一个方向。随着软件项目的发展,其所依赖的库和框架也会不断更新,而这些更新可能会导致项目代码出现不兼容或者安全漏洞。因此,未来的开源安全技术需要能够自动化检测依赖更新,同时对项目代码进行自动适配,如删除API的替换API查找、不兼容API检测、代码自动重构等。
未来开源安全技术一定会进一步增强和延伸,开源软件的使用必是运行在完整的开源安全解决方案之上。开源软件安全解决方案的发展将有助于提高开源软件的安全性和可靠性,促进开源软件的广泛应用和发展。
新一代信息技术产品软件供应链安全初探
新质生产力是以新技术深化应用为驱动,以新产业、新业态和新模式快速涌现为重要特征,进而构建起新型社会生产关系和社会制度体系的生产力。新一代信息技术产品软件的供应链安全风险会迟滞新质生产力发展。本章对软件领域新质生产力范畴内的几个重点技术中的软件供应链安全问题进行初步探讨。
(一)生成式人工智能服务
在实际应用中,用户一般通过生成式人工智能应用系统来与语言模型进行交互,这些应用系统通常会集成多个模块,以下为各模块存在的潜在风险:
表 1 生成式人工智能各模块风险描述
除了上述风险之外,生成式人工智能服务的供应风险同样值得注意。近两年,受大模型的发展与热度影响,算力市场需求旺盛。当前全球AI芯片市场主要由几家大型跨国公司主导,例如英伟达,其技术和生态已经十分成熟,而国内AI芯片市场正处于快速发展阶段。虽然在技术和生态方面取得了一定进展,但与国际领先企业相比仍有差距。
当前较为紧张的国际局势以及美国越发严格的先进半导体出口管制规定,以及对特定供应商的集中依赖,会增加供应链风险,削弱国内人工智能算法的复杂度与性能提升、延缓模型训练速度、约束应用部署规模,更会阻碍人工智能技术的发展。
国产AI芯片想要应用落地并推动上层深度学习应用的发展,离不开其配套软件生态的发展,比如驱动、深度学习计算库、AI应用开发框架等,在此方面,国内还存在着软件栈不完善、兼容性不足、适配周期长、可靠性待验证等挑战。
(二)区块链
区块链是新一代信息技术的重要组成部分,是分布式网络、加密技术、智能合约等多种技术集成的新型数据库软件。国际标准ISO 22739《区块链和分布式记账技术 术语》将区块链定义为“使用密码技术链接将共识确认过的区块按顺序追加形成的分布式账本”。区块链技术具有去中心化、不可篡改、透明可追溯等特点,在多个领域具有应用潜力,并且目前在金融、政务、供应链、知识产权等领域已经取得了一定的应用成效。随着技术的不断发展和成熟,区块链技术还将在更多领域得到应用,并对经济社会产生深远影响,保障其软件供应链的安全也变得日益重要。
1、常见区块链应用类型及相关安全风险
- 去中心化应用(DApps)
DApps通常依赖于智能合约和前端用户界面。相关风险包括前端依赖库的漏洞,如2018年的“Event-Stream”事件,其中一个广泛使用的NPM包被植入恶意代码。此外,智能合约本身可能包含漏洞,如The DAO攻击,导致数百万美元损失。
- 加密货币钱包
加密钱包软件的供应链风险包括恶意代码注入和依赖库漏洞。例如,2019年Electrum钱包遭受了一个通过恶意服务器执行的钓鱼攻击,导致用户资金被盗。
- 区块链平台
如以太坊、EOS等,它们的风险在于核心协议层的漏洞。以太坊在2016年发生了“重入攻击”,这是由于智能合约的安全漏洞,导致价值5000万美元的以太币被盗。
- 交易所和金融服务
这类应用的风险包括后端API的安全漏洞,和前端到后端的数据通信安全问题。例如,2014年的Mt. Gox交易所攻击,由于API安全漏洞导致4.8亿美元的比特币被盗。
2、区块链软件供应链安全特异性
由于区块链技术的去中心化和不可更改性,会涉及到一些特有的开发环境和应用场景,其在软件供应链安全方面存在一些独特的挑战和应对措施。除了常规的源代码管理和开发者身份验证、持续集成和自动化安全检查、开源组件依赖治理等软件供应链安全防护技术手段,还需要额外关注以下方面并采取相应的应对措施。
- 智能合约代码审计和验证:
智能合约作为区块链技术的核心组成部分,一旦部署就无法更改。这要求对智能合约的代码进行严格的审计和验证,以确保没有漏洞或恶意代码,可以使用专门的工具和平台进行自动化的智能合约代码审计。
- 共识机制的安全性:
区块链网络中的共识机制是确保交易验证和区块创建的关键。不同的共识算法(如PoW、PoS、PoA)各有其安全特性和潜在风险。需要对共识机制的实现代码进行严格的审查和测试,以防止可能的攻击,如51%攻击、双重支付攻击等。
- 节点和网络层的安全:
区块链网络的去中心化特性使得网络层面的安全措施尤为重要。需要确保网络通信安全,防止中间人攻击和数据篡改。
- 区块链平台的依赖库和工具链安全:
由于区块链开发常依赖特定的库和工具链,如Solidity编译器、Truffle框架等,因此确保这些工具和库的安全性对于整个软件供应链至关重要。需要对这些依赖的源代码进行审计,并确保使用官方或可信的版本。
- 私钥管理和存储:
区块链中私钥的安全管理和存储是一个重要环节。泄露或丢失私钥可能导致资产损失或其他严重后果。需要采用安全的密钥管理系统和存储解决方案,如硬件钱包、安全的密钥生成和备份机制等。
(三)密码软件供应链安全分析
密码算法、密码协议的设计具有高度的专业性,针对不同语言、不同平台开发的密码算法库、协议组件和密码管理系统等开源软件,极大缓解了密码复杂性与开发人员专业能力不足的矛盾,加速了密码机制在各行业业务系统中的应用,例如OpenSSL组件在操作系统、Web服务中间件和加密软件中得到了普遍应用,调查显示,全球范围内超过66%的网站需要依赖OpenSSL。密码应用普及的同时,也逐渐让密码软件自身成为系统新的攻击面。
近年来,随着供应链安全的关注,密码软件算法库上下游环节的安全威胁也日益猖獗。OpenSSL组件在主流开源软件包生态系统漏洞总数及年度增长TOP20名录中排名第八。此外,考虑到密码算法漏洞发现和利用难度较大,现实中针对密码机制的攻击逐渐从加密算法的设计漏洞向实现漏洞转变,例如通过加密机制绕过、密钥的硬编码利用、密钥的不安全存储利用等途径,实现对实际密码防御机制的突破。
伴随RSA公司后门事件、OpenSSL“Heartbleed”等漏洞的曝光,开源密码软件作为一种特殊的供应链,日渐成为新的攻击突破口而备受关注,如何保证开源密码软件供应链安全已成为当前迫切研究和解决的问题。
1、开源密码软件生态日益繁荣
A. 数学运算库
多精度算术库通过优化算法实现,确保密码运算中大数计算的高效性和可靠性,为实现各种密码算法、协议提供了强大的支持。如BIGNUM。
B. PRNG生成
伪随机数生成器(pseudo-random number generator,PRNG)。加密算法的安全性很大程度上取决于其伪随机数生成器(PRNG)的不可预测性。因此,伪随机数漏洞风险直接威胁密码算法保护信息安全的能力。
C. 安全协议套件
具有代表性的国产密码软件有GMSSL、Tongsuo、Kona等。其中GMSSL早期版本依托OpenSSL项目,并较早地实现了对国密SM2、SM3、SM4以及SM9算法的功能支持。Tongsuo开源密码软件项目提供现代密码学算法和安全通信协议服务,在实现主流加密算法的同时,亦实现中国商用密码算法、后量子算法及同态加密算法。腾讯在2022年下旬发布腾讯Kona开源国密套件,该套件基于JDK标准组件JCA、PKI和JSSE的SPI接口实现,套件中包括了基础算法簇、数字证书安全以及国密安全通信协议等功能。
D. 密码系统
开源密码系统通常为密钥管理、身份管理等提供一体化解决方案。密钥管理系统(Key Management System,KMS)是开源密码软件的重要类型。如Crypto API KMS是一个开源Node.js SDK库,是区块链基础设施、数据和工具的新组件,帮助企业和组织完全控制主私钥、主种子和助记符,是用于数字资产操作、创建钱包和地址以及签署交易的企业级安全解决方案。该库可支持企业创建硬件钱包(xPub、yPub、zPub),并在本地签署交易,而无需联网。
2、影响密码供应链安全的典型风险
截至目前,关于开源密码软件供应链的漏洞事件依旧普遍存在,开源密码软件供应链相关漏洞事件的发展趋势。在2008年之前针对密码软件的攻击目标还是以传统密码算法为主。当前开源密码软件供应链的上下游产品已经成为攻击的目标。
A. 密码组件后门预置
2021年德国波鸿鲁尔大学的研究人员Beierle等人发表论文披露,早期应当淘汰的GSM通讯加密算法GEA-1和GEA-2的安全性和目的性存在疑点。研究者认为该两种算法包含人为设置的后门程序。
B. 软件中缺陷密码算法的使用
密码算法漏洞的发现通常有一定的过程,但算法审核通过后会有很长一段时间的应用,密码算法的生命周期也比较漫长,很多业务系统中由于未及时移除、更新具有缺陷的密码算法,导致网络攻击的发生。此外一些国外流入的软件中使用的不安全密码算法,也成为影响数据安全、系统安全的潜在风险。
C. 密码算法和协议的不安全实现
加密算法软件生命周期中的密钥、密码参数等因素都直接决定信息加解密过程的安全性,任何形式的密码误用都会导致加解密过程存在脆弱性风险。由于加密算法和密码协议在实现过程中的误用问题通常具有一定的隐蔽性,也为密码误用发现工作带来一定的难度。密码误用的出现可能会破坏数据机密性和完整性,进而危及通信安全。密码算法和协议的不安全实现主要体现以下几个方面:
一是密码软件设计造成的不安全。体现在密码算法模式的选择不当、参数设置不当。另外,部分密码协议理解差异,导致协议设计存在漏洞。
二是密码软件实现导致的漏洞。如C语言实现算法的缓冲区溢出漏洞等,构成对密码机制的破坏。攻击者可以通过观察受害者的私钥操作来推断出RSA私钥的值,进而对信息安全构成威胁。
3、量子计算对密码供应链的影响
美国国家标准与技术研究所(NIST)发布了《抗量子密码学报告》,该报告估计最早的密码破解事件可能在2030年出现。滑铁卢大学的Michele Mosca博士估计,到2026年,一些基本的公钥密码学工具将有七分之一的机会被破解、到2031年有50%的机会。