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





