软件供应链及云原生时代所面临的挑战
什么是软件供应链
软件供应链是指用于构建软件应用程序的组件、库和工具的组合,通常通过组装开源和商业软件组件来开发产品。材料清单(SBOM)声明了供应链的部分或大部分。
软件供应链安全事件
- 2025年,全球45%的组织将遭受软件供应链攻击,较2021年增加三倍。
- 常见攻击案例:FossHub、Keydnap、Kingslayer、Foxif/CCleaner、Log4j等。
软件供应链安全问题
-
开源软件风险
- 98%的软件包含开源代码,其中84%至少包含1个漏洞,平均漏洞数量1582.2个。
- 2021年开源组件下载量增长73%,达到2.2万亿次,针对开源软件的供应链攻击增长650%。
- 四大开源生态(Java、JavaScript、Python、.NET)2021年发布72万个新项目和630万个新版本。
-
开发流程及工具链风险
- 攻击方式包括:提交有问题的代码、破坏代码仓库、编译篡改过的代码、污染构建环境、使用有问题的依赖、发布被篡改的包等。
云原生时代软件供应链的复杂性
- 软件开发工具、技术栈爆发式增长。
- 应用软件与基础设施边界模糊,OS、应用运行时、基础镜像等多样化。
软件供应链的原材料与产出物的治理
软件开发各阶段原材料、产出物的构成
- 代码仓库:开发人员自研代码。
- 构建系统:应用二进制包。
- 制品仓库:应用镜像。
- 运行环境:应用部署、云原生应用。
开源治理
- 建立依赖项引入管理规范与流程。
- 结合自动化工具进行持续检查与控制。
- 参考OpenSSF相关文档与实践建议。
基于源代码/软件包的成分分析及漏洞匹配
- 常用工具:Java(maven, gradle)、JavaScript(npm, yarn)、Go(go module)、.NET(nuget)、C/C++(conan)等。
- 漏洞库:NVD、GitHub、GitLab、OSV、CNVD等。
- 匹配规范:CPE、PURL、SWID等。
镜像安全
构建仅包含App和运行所需依赖的“最小”镜像
- 方法:选择尽可能小的Base Image(如Alpine),基于普通镜像“瘦身”。
- 测试案例:Distroless、Alpine、Docker-slim对比,Distroless结合multi-stage build安全性更高。
方案选择思考
- Distroless:官方内置依赖,Ephemeral Containers解决troubleshooting问题。
- Alpine:musl库应用兼容问题。
- Docker-slim:需深入了解应用实际运行依赖。
- Distro Secure Base Image:安全、兼容,适合特定发行版传统应用改造场景。
链路检查及门禁
全链路检查及门禁
- 代码仓库:API扫描、Webhook拦截、CI Plugin阻止。
- 构建系统:Plugin模式(旁路控制)、制品库代理/依赖项防火墙(主路控制)。
- 制品仓库:IDE插件、Kubernetes API、Admission Webhook, OPA。
软件供应链平台、工具、流程的保护
开发工具平台的安全风险
- GitLab、Jenkins等存在漏洞,如SolarWinds安全事件。
代码仓库安全
- GitLab敏感行为监测示例:Application Log、Production Log、API Log等。
构建平台安全
- Jenkins常见安全加固:禁用executor、加密Inbound连接、使用容器化Agent等。
- Sigstore相关项目。
实现软件供应链的全局可见性和安全性
SBOM数据及配置数据
- 用于漏洞匹配及变更追踪。
- 源码仓库、构建流水线、镜像仓库、运行环境扫描。
基于链路关联的漏洞优先级匹配
应用系统层级的供应链可视化
SEAL软件供应链防火墙
- 全链路防护,包括代码仓库、构建系统、制品仓库、运行环境。
研究结论
- 软件供应链安全需端到端防护,重点关注开源组件、开发工具链、镜像安全。
- 通过SBOM、链路检查及门禁实现全局可见性和安全性。
- 建议采用Distro Secure Base Image等安全镜像方案,并加强开发工具平台的安全加固。