软件供应链安全入门:依赖、构建与发布的可信链路

举报
yd_237615889 发表于 2026/09/29 10:29:40 2026/09/29
【摘要】 博客 · 安全工程 / 研发流程 · 2026-09-29软件供应链安全入门:依赖、构建与发布的可信链路现代产品里大部分代码来自第三方:一次依赖投毒、一次构建链泄露,就能绕过你所有业务代码的测试。这篇讲清四个攻击入口、依赖与漏洞治理、SBOM,以及小团队四周就能落地的可信链路。工程实践手记 ·2026-09-29 ·约 13 分钟阅读一、四个入口:攻击者会从哪里进来你的产品里有多少代码是自己...
博客 · 安全工程 / 研发流程 · 2026-09-29

软件供应链安全入门:依赖、构建与发布的可信链路

现代产品里大部分代码来自第三方:一次依赖投毒、一次构建链泄露,就能绕过你所有业务代码的测试。这篇讲清四个攻击入口、依赖与漏洞治理、SBOM,以及小团队四周就能落地的可信链路。


工程实践手记 ·2026-09-29 ·约 13 分钟阅读

一、四个入口:攻击者会从哪里进来

你的产品里有多少代码是自己写的?对多数团队来说,答案是"一小半"——剩下的来自开源依赖、基础镜像、构建工具链。供应链安全关注的正是这条链路上"别人的代码"如何一路走到你的生产环境。

入口 攻击形态 核心防线
依赖投毒 恶意包、抢注相似名、维护者账号被劫持 最少依赖、锁文件、私有代理
传递依赖 你没直接装的包,藏在依赖的依赖里 完整的依赖清单(SBOM)
构建链 CI 凭证泄露、构建脚本被篡改 最小权限与短时效凭证
发布链 制品被替换、下载源被劫持 制品签名与部署前校验
业务代码测得再严,链路上一环被替换,一切都归零——供应链安全守的是「别人的代码」到你生产环境之间的每一段路。
· · ·

二、依赖治理:从「少装一个包」开始

  • 最少依赖原则:每个新依赖都是新的信任边界。引入前评估:维护活跃度、下载量与受关注度、近期 issue 响应、需要什么权限(安装脚本、网络、文件写入)
  • 锁文件 + 冻结安装:锁死完整依赖树(含传递依赖),用 npm ci 这类"按锁安装"的命令,杜绝"构建时又拉了什么新东西"
  • 私有代理:上游包先进内部代理再进项目,既能防上游被删/被替换,也能拦截抢注名的相似包
  • 定期审计:SCA 工具(依赖扫描)接进 CI 与定时任务,新漏洞第一时间进入视野

三、漏洞管理:不是所有 CVE 都要立刻修

扫描工具很容易把报告变成"几千条待处理",然后没人再打开它。有效的做法是分级 + SLA:按可利用性、暴露面(是否可达、是否面对公网)、数据敏感度综合定级;严重漏洞 7 天内修复、高风险 30 天、其余按迭代节奏——并且给出例外记录流程(不修也要有人签字说明原因)。

一个关键判断:「依赖里存在漏洞」不等于「你的系统可利用」。多数扫描只报告版本命中,是否真的可达需要人工或用可达性分析确认——把有限的时间花在真正可达的漏洞上。

四、SBOM:一张「配料表」的威力

SBOM(软件物料清单)是产品里全部组件的清单:名称、版本、来源、依赖关系,格式常用 SPDX 或 CycloneDX。它的价值在"事发那一刻":某基础库爆出漏洞,你能在五分钟内查清哪些产品、哪些版本受影响——没有 SBOM 就只能人肉翻仓库。它同样常用于应对客户与监管的合规问询。

# 构建时为镜像生成 SBOM(示意,syft 风格)
syft registry/myapp:1.4.2 -o cyclonedx-json > myapp.sbom.json

# 把 SBOM 与制品一起归档:按版本保存,随构建自动更新

三条纪律:随构建自动生成(手工整理必然过期);随手归档到可检索的位置;别把它当一次性交付物——不随版本更新的 SBOM 就是废纸。

五、签名与验证:让「可信」可以被程序证明

  • 制品签名:用 Sigstore / cosign 这类工具给镜像与包签名,证明"它确实来自你的流水线"
  • 部署前校验:K8s 准入或部署脚本先验签,签名不符直接拒绝——防止中间任何环节被替换
  • 用 digest 引用镜像:部署时锁定摘要(sha256:…),不用浮动 tag——"到底跑的哪个版本"永远可回答
  • CI 最小权限:构建凭证短时效、默认只读、按需提权;把它当成"能生产一切制品"的总统钥匙来管
· · ·

六、落地路线:四周四步走

  • 第 1 周 · 打地基:确认锁文件齐全、安装命令都是"冻结模式";把依赖扫描接进 CI 与每周任务
  • 第 2 周 · 立规矩:新依赖评审清单上线;内网代理启用;给扫描结果定分级与修复 SLA
  • 第 3 周 · 有清单:构建时自动生成 SBOM 并按版本归档,做一次"假如某依赖爆漏洞"的桌面演练
  • 第 4 周 · 可验证:制品签名 + 部署前校验上线;镜像改用 digest 引用;CI 凭证收敛到最小权限

七、五个常见坑

  • 只扫直接依赖:传递依赖才是数量和风险的大头——看完整依赖树
  • 报告没人看:没有分级、SLA 与负责人的扫描,只是生产没人读的报表
  • 用浮动 tag 部署:版本无法追溯,出事后无法回答"线上到底是哪个制品"
  • CI 令牌权限过大、长期有效:一次泄露就能把恶意版本推上生产
  • SBOM 一次性交付:不随构建更新、不归档检索——真需要它的时候找不到、对不上

速查卡

场景 做法
引入新依赖前 按清单评审:活跃度、权限、替代方案
防依赖被替换 锁文件 + 冻结安装 + 私有代理
漏洞来了 按可达性分级,按 SLA 修复,例外留记录
想快速查影响面 构建时生成 SBOM 并按版本归档
防制品被掉包 签名 + 部署前验签 + 镜像用 digest
防 CI 被利用 最小权限、短时效凭证、敏感操作二次确认

写在最后

供应链安全不要求你"信任更少",而是要求你把信任变得可验证:依赖有清单、构建有记录、制品有签名、部署有校验。这条链路不需要一次建满——从锁文件和依赖扫描开始,每周往前走一步,半年后你就拥有了一条别人很难攻破、而你自己完全掌握的可信交付路径。

下一步 · 检查你们仓库的锁文件与安装命令
两件事今天就能做:确认依赖树被完整锁定、把 CI 的安装命令改成冻结模式——零成本,堵住最常见的第一类风险。系列下一篇候选:日志规范与结构化日志、事件驱动架构入门、性能预算实践。
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。