供应链安全:依赖与构建链风险入门
admin
2026-10-26 23:54
24人看过
免费
# 供应链安全:依赖与构建链风险入门
> 核心一句话:**软件供应链 = 代码从编写 → 依赖引入 → 构建打包 → 分发交付 → 客户部署的全链路;风险不只是自己写的代码,更多来自第三方依赖、构建流水线、制品仓库。**
> 适用:DevSecOps、开源组件治理、SBOM、CI/CD安全、软件物料清单。
## 一、基础概念
### 1. 软件供应链包含两大块
1. **依赖链(第三方组件)**
项目引入的开源库、SDK、jar/npm/pip/go模块,直接下载的二进制包。
你写的业务代码只是一小部分,**绝大部分代码来自第三方依赖**。
风险点:依赖存在漏洞、投毒、后门、维护停更。
2. **构建链(CI/CD流水线)**
代码提交 → 拉取依赖 → 编译构建 → 生成镜像/安装包 → 制品仓库存储 → 发布上线。
风险点:流水线被劫持、构建节点被入侵、制品被篡改、凭证泄露。
### 2. SBOM(软件物料清单)
SBOM = 软件的“配料表”,记录所有组件名称、版本、许可证、供应商、CVE。
作用:快速定位哪些资产包含有漏洞的依赖,漏洞爆发时快速影响面排查。
常见标准:SPDX、CycloneDX。
## 二、依赖链风险(开源组件风险)
### 风险类型
1. **已知CVE漏洞**
依赖库存在公开漏洞(如Log4j、Spring4Shell),业务直接继承该漏洞。
> 坑:很多项目只扫描直接依赖,忽略**传递依赖(间接依赖)**。A库依赖B库,B有漏洞,你同样受影响。
2. **依赖投毒(Supply Chain Compromise)**
- 名称混淆攻击(typosquatting):发布名字拼写近似的恶意包(`requests-sec` 冒充 `requests`)
- 劫持维护账号:接管开源项目账号,发布带后门新版本
- 上游仓库被入侵,官方包植入恶意代码
3. **废弃组件(孤儿组件)**
组件作者停止维护,漏洞长期不修复,持续留在项目中。
4. **许可证风险**
开源协议冲突(GPL强传染协议),引发知识产权合规问题。
### 依赖治理手段
1. 依赖锁定:`package-lock.json`、`requirements.txt`、`pom.lock`,固定版本
2. SCA 软件成分分析工具:扫描项目,识别所有依赖、CVE、许可证(Snyk、Dependabot、OWASP Dependency-check)
3. 私有制品镜像仓库:内部镜像代理,不直接公网拉包,缓存+扫描
4. 最小依赖原则:不引入无用开源包,精简依赖树
## 三、构建链风险(CI/CD流水线风险)
攻击者目标:**在构建环节注入后门,最终产出带恶意代码的软件制品**
典型攻击面:
1. 代码仓库劫持:Gitee/GitHub账号泄露,提交恶意代码
2. CI runner/构建服务器被攻陷:在构建节点植入后门,编译阶段篡改产物
3. 流水线凭证泄露:仓库密钥、云AK、制品仓库token硬编码在代码/流水线配置
4. 构建时动态拉取外部脚本:`curl xxx | bash`,外部脚本一旦被篡改,构建即中毒
5. 制品仓库被篡改:镜像/安装包上传后被替换,上线的不是你构建的包
### 构建链防护措施
1. 最小权限:CI账号只拥有构建上传制品权限,禁止生产高权限
2. 流水线不可变:不允许构建时动态拉取远程脚本,所有代码/脚本纳入版本管理
3. 制品签名:构建完成对镜像/二进制签名;部署前校验签名(SLSA)
4. 隔离构建节点:一次性ephemeral(临时销毁)构建容器,每次构建环境重置
5. 日志审计:CI全流程日志留存,记录每次构建的输入代码、依赖版本、输出制品哈希
## 四、SLSA 软件供应链安全等级(快速理解)
SLSA(Supply-chain Levels for Software Artifacts),Google推出,国内等保、政企采购越来越多引用
- L1:基础,有版本控制,基本记录
- L2:可信构建,源码托管,独立CI构建
- L3:强化,源码与构建隔离,证明来源,审计日志
- L4:最高,端到端强完整性,多方验证,一次性构建环境,防止构建劫持
## 五、实战工作流(依赖+构建链安全)
1. 开发阶段:IDE集成SCA,提交前扫描依赖漏洞
2. 代码提交:代码门禁,MR/PR合并触发SCA扫描,高危漏洞阻断合并
3. CI构建:
- 拉取锁定版本依赖,禁止模糊版本`^latest`
- 生成SBOM,自动上传SBOM到平台
- 扫描镜像/制品漏洞
- 制品签名,记录制品哈希
4. 制品仓库:存储SBOM、漏洞报告、签名信息
5. 部署阶段:校验制品签名、哈希,校验SBOM,不部署未通过扫描的制品
6. 持续监控:持续监控上游依赖新增CVE,定期扫描存量项目
## 六、典型误区分点
1. ❌ 只扫描业务代码,不扫描传递依赖:绝大多数供应链漏洞藏在间接依赖
2. ❌ 一次扫描永久安全:上游依赖不断爆出新CVE,需要持续监测
3. ❌ 认为只要源码安全就没问题:CI流水线被劫持,干净源码也能产出恶意制品
4. ❌ 依赖直接从公网拉取:公网包源污染风险高,无缓存、无审计
5. ❌ SBOM一次性导出不再更新:代码版本迭代,SBOM需要跟着更新
## 七、工具清单入门
- SCA:OWASP Dependency-Check、Snyk、Trivy
- SBOM生成:CycloneDX、syft
- 镜像扫描:Trivy、Aqua、Harbor镜像扫描
- 制品签名:cosign
- 源码仓库:Gitea/GitLab,配置保护分支、MR审核
## 速记口诀
**依赖看SCA,构建守CI;SBOM做配料,制品验签名。**
版权声明:倡导尊重与保护知识产权。未经许可,任何人不得复制、转载或以其他方式使用本站原创内容。