随着软件开发沿着软件供应链生命周期进行,软件包阶段成为一个关键节点,将源代码转换为准备分发的可执行工件。然而,这个关键阶段也无法避免漏洞,使其成为恶意行为者寻求破坏软件完整性和安全性的主要目标。这篇博文深入研究了此阶段可能出现的普遍威胁,并概述了缓解这些威胁的有效策略。
软件开发生命周期中的软件包阶段
软件供应链生命周期的打包阶段包括打包和准备软件以分发给用户的过程。此阶段涉及创建安装包、管理依赖项以及生成软件的元数据。
构建完整性威胁是一些漏洞,可能允许攻击者在打包过程中对软件进行未经授权的更改。这些威胁可以通过多种方法引入,例如破坏包注册表、利用打包工具中的漏洞或操纵第三方依赖项。
现代软件对开源组件的完全依赖使得这一阶段成为最常见的 SSCA 目标。在流行的开源组件中引入隐形恶意软件是许多网络犯罪分子的梦想。这就是为什么2023 年发现了超过245,000 个恶意软件包。
封装阶段软件供应链安全威胁示例
使用受损的软件包
这是指部署或使用被对手篡改或修改的软件包的行为。
这种情况可能发生在程序包离开官方程序包注册表后,无论是通过直接访问用户的系统还是通过社会工程策略诱骗用户下载或安装恶意程序包。这种向量的一个例子是Browserify 域名仿冒攻击。
一名攻击者试图侵入 Linux 和 Mac 系统,渗透了名为 Browserify 的流行 Node.js 库的开发过程。攻击者将恶意代码植入项目的源代码中,意图通过 NPM 包注册表进行分发。一旦受污染的 Browserify 包上传到 NPM,毫无戒心的开发人员就会下载并安装它,并相信它是合法版本。
嵌入在程序包中的恶意代码会默默运行,从而损害其感染的系统的完整性。这可能会导致数据被盗、系统不稳定,甚至攻击者进行远程访问。
破坏包注册表
受损的软件包注册表是一个已被对手渗透的软件存储库,该对手已获得对注册表管理界面或基础设施的未经授权的访问权限。
这使得攻击者可以修改或用恶意软件包替换合法软件包,然后将其分发给毫无戒心的安装用户。此类威胁的一个例子是对包镜像的攻击:一名研究人员为了推广开源软件,破坏了多个流行的包注册表,包括 Maven Central、NPM 和 RubyGems。
通过访问这些注册表,研究人员能够创建镜像和原始存储库的副本,这为开发人员下载软件包提供了便捷的选择。
然而,这些镜像却有着险恶的目的。受损的镜像充当了研究人员分发恶意软件包的渠道。这些软件包取代了合法的软件包,没有被主注册表检测到,毫无戒心的开发人员在不知不觉中下载并安装了它们。一旦安装,这些恶意软件包就会释放其有效负载,执行任意代码、窃取敏感数据或中断操作。
上传修改包
攻击者将修改后的包上传到包含恶意代码或有效负载的存储库或分发渠道。这可以通过修改包的源代码、打包或元数据来完成。
此类威胁中最臭名昭著的威胁之一是2021 年的 CodeCov 攻击。攻击者试图使用 CodeCov(一种流行的持续集成和持续交付 (CI/CD) 工具)破坏软件项目,并利用泄露的凭据获得对项目的 Google Cloud Storage (GCS) 存储桶的未经授权的访问。一旦攻击者获得了 GCS 存储桶的访问权限,他们就会上传一个恶意工件,即 CodeCov 包的修改版本,然后通过 CodeCov 服务分发给用户。
毫无戒心的开发人员会依靠自动更新功能下载并安装恶意软件包,并相信它是合法的。一旦安装,恶意代码就会默默运行,从而损害其感染系统的完整性。这可能会导致数据被盗、系统不稳定,甚至攻击者进行远程访问。
对包注册表的攻击非常常见,以至于某些攻击模式被命名为:
在“误植域名”中,不良行为者会向注册表上传多个带有轻微拼写错误或与合法、流行的名称相似的恶意软件包,希望开发人员将预期的软件包名称与恶意软件包名称拼写错误。通常,恶意软件包会伪装成合法软件包而不被发现,从而增加了被观测星击中的可能性。
依赖混乱利用了一些包管理器从多个注册表解析所请求的包的方式。当组织使用在内部注册表中发布的内部组件时,知道这一事实的攻击者可能会在公共注册表中发布同名的恶意组件。如果用于内部组件的名称未限定范围,某些包管理器将获取恶意组件而不是内部组件。
通过 Troyan Packages ,网络犯罪分子可以将恶意软件伪装成有用的有效代码。这可以由真正的作者使用,也可以由愿意维护该包的贡献者使用。这也称为包劫持。攻击者使用许多技术来劫持现有的软件包,例如“域接管” ,其中攻击者接管了废弃的过期域,重新创建了旧的维护者电子邮件并执行密码恢复以接管维护者帐户。
随着组织越来越多地采用优先考虑自动化和持续交付的软件开发方法,保护软件包阶段的重要性变得前所未有的重要。通过在整个关键阶段实施强大的安全措施,组织可以大大降低遭受恶意攻击的风险,这些攻击可能会损害其软件的完整性和安全性。
软件包阶段代表了软件供应链中的一个脆弱点。组织必须注意这些威胁并实施必要的安全措施以保护其软件免受攻击。通过这样做,他们可以为用户和客户保证其软件的完整性、安全性和可靠性。
请记住,软件供应链安全是一个持续的过程,而不是终点。通过不断评估和调整安全实践来应对新出现的威胁,组织可以保护其软件供应链并向用户提供可信的软件。
版权归原作者 网络研究院 所有, 如有侵权,请联系我们删除。