依赖混淆攻击
依赖混淆攻击 是什么?
依赖混淆攻击供应链攻击的一种,攻击者在公共注册中心发布与组织内部依赖同名的恶意包,诱使构建工具拉取公共版本。
依赖混淆利用包管理器(npm、pip、Maven、NuGet、RubyGems 等)在同时使用公共与私有注册中心时的默认解析行为。攻击者通过泄露的 manifest、公开仓库或 DNS 等手段获取内部包名,然后在公共注册中心发布同名的更高版本包,等待构建机器安装。Alex Birsan 在 2021 年的研究证明多家大公司均受影响。缓解措施包括:显式指定 registry 范围(npm scoped 包、NuGet 上游 feed、pip --index-url)、在公共注册中心提前占位、阻断对外解析、用 Sigstore 或 PGP 对包签名,以及通过受管控的制品库统一约束包名与来源。SLSA、SBOM 与对公共注册中心新增包的持续监控,也有助于检测此类尝试。
● 示例
- 01
公共 npm 上出现的恶意 internal-utils@99.0.0 取代了内部的 internal-utils 包。
- 02
构建流水线从 PyPI 拉取本应来自私有源的 pip 依赖。
● 常见问题
依赖混淆攻击 是什么?
供应链攻击的一种,攻击者在公共注册中心发布与组织内部依赖同名的恶意包,诱使构建工具拉取公共版本。 它属于网络安全的 应用安全 分类。
依赖混淆攻击 是什么意思?
供应链攻击的一种,攻击者在公共注册中心发布与组织内部依赖同名的恶意包,诱使构建工具拉取公共版本。
依赖混淆攻击 是如何工作的?
依赖混淆利用包管理器(npm、pip、Maven、NuGet、RubyGems 等)在同时使用公共与私有注册中心时的默认解析行为。攻击者通过泄露的 manifest、公开仓库或 DNS 等手段获取内部包名,然后在公共注册中心发布同名的更高版本包,等待构建机器安装。Alex Birsan 在 2021 年的研究证明多家大公司均受影响。缓解措施包括:显式指定 registry 范围(npm scoped 包、NuGet 上游 feed、pip --index-url)、在公共注册中心提前占位、阻断对外解析、用 Sigstore 或 PGP 对包签名,以及通过受管控的制品库统一约束包名与来源。SLSA、SBOM 与对公共注册中心新增包的持续监控,也有助于检测此类尝试。
如何防御 依赖混淆攻击?
针对 依赖混淆攻击 的防御通常结合技术控制与运营实践,详见上方完整定义。
依赖混淆攻击 还有哪些其他名称?
常见的别称包括: 命名空间混淆, 替换式攻击。
● 相关术语
- appsec№ 1069
软件供应链安全
保护软件生产链中每一个环节——源代码、依赖、构建、签名、分发与部署——使其免受篡改、恶意代码与完整性破坏的学科。
- attacks№ 1116
供应链攻击
通过攻陷可信的第三方软件、硬件或服务提供商,进而入侵其下游客户的攻击方式。
- attacks№ 1184
拼写抢注 (Typosquatting)
注册与合法域名或软件包名极为相似的拼写错误版本或视觉仿冒名,以利用用户或开发者的输入和识别错误。
- appsec№ 305
依赖固定
把软件依赖以精确版本进行声明,通常结合加密哈希,使构建始终消费同一批工件并抵御供应链篡改的实践。
- appsec№ 971
SCA(软件成分分析)
对应用使用的开源与第三方组件进行自动化分析,识别已知漏洞、许可证风险以及过时或高风险依赖。
- appsec№ 784
软件包签名
对软件包进行加密签名,使使用者能够验证发布者身份并确认工件在发布后未被篡改。
● 参见
- № 1097Starjacking(蹭星攻击)
- № 647恶意 npm 包
- № 1183拼写抢注包(Typosquatted Package)