网络威胁与对策
供应链攻击
约 4 分钟阅读
最后更新: 2026-02-14
什么是供应链攻击
供应链攻击是一种不直接攻击目标组织,而是通过其信任的软件、库、服务或硬件的供应链进行渗透的攻击方法。由于利用合法的更新机制和依赖关系,能有效绕过传统安全措施。
在现代软件开发中,一个应用程序依赖数百到数千个开源库。仅攻破其中一个依赖就能影响所有下游用户。软件供应链的攻击面已大幅扩展。
常见攻击模式
供应链攻击有几种典型模式。
- 构建系统入侵:渗透软件的构建和分发基础设施,在合法二进制文件中嵌入恶意软件。SolarWinds 事件 (2020 年) 中,构建管道被入侵,向约 18,000 个组织分发了恶意更新。
- 依赖投毒:发布与流行库名称相似的恶意包 (域名抢注) 或接管废弃的包。在 npm 和 PyPI 生态系统中已报告大量此类事件。
- 更新劫持:在合法软件更新中注入恶意代码。信任自动更新的用户在不知情的情况下安装了被篡改的版本。
- xz Utils 后门 (2024 年):攻击者花费数年获得 xz 压缩库维护者的信任后,插入了针对 SSH 认证的后门。在广泛分发前被偶然发现,凸显了依赖少数维护者的开源项目的脆弱性。
防御策略与框架
防御供应链攻击需要多层方法 - - 单一措施是不够的。
依赖管理
- SBOM (软件物料清单):创建应用程序所有依赖组件的清单。当发现漏洞时,可以快速识别受影响的系统。
- 锁文件与哈希验证:使用锁文件 (package-lock.json、poetry.lock) 固定依赖版本。通过哈希检查验证包完整性以检测篡改。
- 依赖扫描:使用 Dependabot、Snyk 或 Trivy 等工具自动检测依赖中的已知漏洞。
构建与分发安全
- 可重现构建:确保从相同源代码构建始终产生相同的二进制文件。这使得检测构建过程中的未授权修改成为可能。
- 代码签名:对发布的软件进行数字签名,使用户可以验证未被篡改。
- SLSA (软件制品供应链级别):Google 提出的框架,定义软件供应链的安全级别。达到更高的 SLSA 级别提供更强的防篡改保证。
IaC 与基础设施供应链风险
供应链攻击不仅限于应用代码,还延伸到 IaC (基础设施即代码) 领域。如果基础设施定义中使用的第三方组件 - - 如 Terraform 模块或 CloudFormation 模板 - - 被篡改,整个云环境都可能被入侵。
- 固定模块版本:始终为 Terraform 模块和其他 IaC 组件指定确切版本。避免使用"latest"或未指定版本的引用。
- 审查第三方模块:在采用前审计第三方模块的源代码。检查是否有过度的 IAM 权限、意外的网络配置或数据外泄。
- 私有模块注册表:将批准的模块托管在私有注册表中,而非直接从公共源拉取。这在模块进入基础设施前增加了审查层。
常见误解
- 来自可信供应商的软件是安全的
- 正如 SolarWinds 事件所示,即使是大型供应商的正规软件,如果构建过程被入侵也可能包含恶意代码。供应商信任度和软件安全性是不同的问题 - - 接收方也需要进行验证。
- 开源因为有很多人监督所以安全
- 许多开源项目依赖少数维护者,并非所有提交都经过充分审查。在 xz Utils 事件中,攻击者花费数年获得维护者信任后才植入后门。
供应链攻击与零日攻击对比
供应链攻击
通过可信供应链渗透。利用合法更新渠道,检测困难。影响范围广,一次入侵可波及数千个组织。
零日攻击
直接利用未知漏洞。在补丁存在之前发动攻击。常用于定向攻击,影响范围相对有限。
分享