开源软件供应链攻击分析与数据集解读
1. 开源软件开发项目背景
在典型的开发环境中,维护者负责管理系统、审核和批准贡献、定义和触发构建过程。开源项目会接收贡献者的代码贡献,这些贡献会由维护者审查并合并到项目代码库中。构建过程会处理项目的源代码和其他资源,目标是生成软件工件,这些工件随后会发布到分发平台或包存储库,供最终用户和其他开发项目使用。
项目资源存储在版本控制系统(如Git)中,并复制到构建系统的本地文件系统。构建过程开始时,依赖管理器会分析直接依赖声明,以建立包含所有直接和传递依赖的完整依赖树,并从包存储库(如Python的PyPI、Node.js的npm、Java的Maven Central)下载这些依赖。
此类项目环境存在众多信任边界,许多威胁针对相应的数据流、数据存储和过程。即使仅考虑单个软件项目的环境,管理这些威胁也具有挑战性。当考虑具有数十或数百个依赖的供应链时,每个依赖都有类似的环境,这使得这些项目的综合攻击面明显大于完全内部开发的软件。
从攻击者的角度来看,恶意行为者试图通过感染一个或多个上游开源包来破坏软件项目的构建或运行时环境的安全性。以下将通过两个攻击树来介绍如何实现这一目标。
2. 恶意代码注入
攻击者将恶意代码注入下游包依赖树有两种策略:
- 创建新包 :
- 仿冒包名(typosquatting) :使用与现有包名相似的名称,如添加或删除连字符、遗漏单个字母、交换易误输入的字母等,以吸引用户引用。例如“pythonkafka”针对“kafka - python”。
-