从代码到部署 - 云原生时代软件供应链安全

如果无法正常显示,请先停止浏览器的去广告插件。
分享至:
1. 从代码到部署 - 云原生时代软件供应链安全 数澈软件 / 江鹏 peng@seal.io
2.
3. 关于数澈软件SEAL  成立于2022年初,总部位于深圳,致力于构建新一代软 件供应链安全解决方案  创始团队来自Kubernetes管理平台Rancher中国的核心团 队  团队人员在云计算、开源、企业级软件开发领域有丰富 的经验  已完成数千万元种子轮融资
4. 软件供应链及云原生时代所面临的挑战
5. 什么是软件供应链? “软件供应链”是用于构建软件应用程序的组件、库和工具的组合。 软件供应商通常通过组装开源和商业 软件组件来开发产品。材料清单(SBOM)声明了该供应链的部分或大部分。 @Wikipedia 传统 制造/销售 原料/零件 工厂 仓储/零售 消费者 自研代码/ 外部依赖 构建系统 制品仓库 云端/本地部署 软件 开发/部署
6. 软件供应链安全事件 2017 2018 2019 2020 SolarWinds npm installer Keydnap FossHub Kingslayer ROS PEAR Foxif/CCleaner Handbrake Elmedia PyPI typosquatting acroread Colourama Canonical Agama 2022 2021 Xcode Kaseya Codecov SITA Nissan Travis CI Syniverse ua-parser-js Bangkok Airways coa rc PHP octupus SawFish GoDaddy SshiSwap sonarqube nodejs Nintendo Wii Twitch “ By 2025, 45% of organizations worldwide will have experienced attacks on their software supply chains, a three-fold increase from 2021.” 数据来源:https://github.com/cncf/tag-security/tree/main/supply-chain-security/compromises Log4j node ipc npm faker npm colors VSCode
7. 软件供应链安全问题 – 开源软件风险 650%  应用程序不是从零开始编写,第三方组件被大量使用 并组装到应用程序中 的软件包含开源代码。其中84%包 相比2020年,2021年针对开源软件 含至少1个漏洞,平均漏洞数量是 的供应链攻击增长650%  开源组件被广泛使用,提高了开发人员的效率,加快 了软件开发迭代速度,但也带来了更多的风险 98% 158 2.2万亿  应用程序中有60% - 80%是开源代码*  安全漏洞 630万 开源组件下载数量2021年增长 四大开源生态(Java、Javascript、 73%,总下载次数达到了2.2万亿次 Python、.NET) 2021年发布了72万 个新项目和630万个新版本 来源:2021 Open Source Security and Risk Analysis Report - Synopsys  License合规  版本陈旧/停止维护  ……
8. 软件供应链安全问题 – 开发流程及工具链风险 A. 提交有问题的代码 B. 破坏代码仓库 C. 编译篡改过的代码 D. 污染构建环境 E. 使用有问题的依赖 F. 发布被篡改的包 G. 破坏软件包仓库 H. 使用被篡改的软件包 来源:Google SLSA Framework, Supply chain Levels for Software Artifacts
9. 软件供应链安全治理 全链路流转追踪与管控 Software Supply Chain Security Orchestration and Correlation 软件开发 原材料的安全治理防护 软件开发平台与工具的安全治 理与防护 软件开发 产出物的安全治理防护
10. 云原生时代软件供应链更加复杂 软件开发工具、技术栈爆发式增长 应用软件与基础设施的边界模糊 Application Binary Application Runtime (JDK8) OS (CentOS 7) Application Binary Application Binary Application Runtime (JDK8) Application Runtime (JDK11) Base Image (CentOS) Base Image (Ubuntu) Application Binary … Kubernetes&Container Engine OS Application Runtime (JDK17) Base Image (Alpine)
11. 软件供应链的原材料与产出物的治理
12. 云原生应用在软件开发生命周期中的变化 开发人员 代码仓库 自研代码 + 构建系统 应用二进制包 + 制品仓库 应用镜像 + 识别并管理软件开发各阶段原 材料、产出物的构成(SBOM) 及其变化是软件供应链安全的 基础 以上共同组成了应用系统视角的“软件成分” 运行环境 应用部署 +
13. 开源治理  建立依赖项引入管理规范与流程  结合自动化工具进行持续检查与控制  OpenSSF相关文档与实践建议参考:  ossf/package-manager-best-practices: Collection of security best practices for package managers. (github.com)  ossf/scorecard: Security Scorecards - Security health metrics for Open Source (github.com)
14. 基于源代码/软件包的成分分析及漏洞匹配 通常基于包管理器进行依赖/成分分析 漏洞库  Java: maven, gradle (pom.xml etc.)  免费库:NVD、GitHub、GitLab、OSV、CNVD ……  JavasScript: npm, yarn (package.json, yarn.lock etc.)  商业及私有库  Go: go module (go.mod, go.sum)  Dotnet: nuget (deps.json, packages.config)  C/C++: conan (conanfile)*  Ruby: Gems (Gemfile)  PHP: composer (composer.json)  ……  Alpine: apk  RedHat: rpm  Debian: dpkg  …… 代码/二进制扫描 匹配规范  CPE(Common Platform Enumeration) cpe:/<part>:<vendor>:<product>:<version>:<update>:<edition>:<language> cpe:2.3:a:pivotal_software:spring_security:5.1.4:*:*:*:*:*:*:*  PURL(Package URL) scheme:type/namespace/name@version?qualifiers#subpath pkg:maven/org.apache.xmlgraphics/batik-anim@1.9.1?packaging=sources  SWID等
15. 镜像 – 云原生时代软件供应链的原材料及产出物 降低镜像“底噪”和“受攻击面”的方法? 构建仅包含App和运行所需依赖 “最小”镜像 选择尽可能小的Base Image(Alpine?) 基于普通镜像“瘦身”,移除App运行 不需要的组件
16. 一个Java App的简单测试 Distroless dockerfile Docker-slim 基于Alpine裁剪 Alpine dockerfile 镜像大小(MB) 组件数量(syft扫描) docker scan(snyk)漏洞扫描(排除jar包 漏洞) Trivy漏洞扫描(排除jar包漏洞) Distroless 282 139 (27) 24 low Alpine 376 133 (21) 3 critical, 14 high, 3 medium, 1 low Docker-slim 214 112* None* LOW: 22, MEDIUM: 4, HIGH: 0, CRITICAL: 0 UNKNOWN: 0, LOW: 0, MEDIUM: 6, HIGH: 26, CRITICAL: 4 None*
17. Distro Secured Base Image 来源:Why distroless containers aren't the security solution you think they are (redhat.com)
18. 方案选择思考 Distroless base image结合multi stage build能够低迁移成本满足安全性需求  官方based image内置依赖满足应用运行需求 易用性 安全性  Ephemeral Containers解决troubleshooting工具问题(k8s 1.25已 stable) Alpine based image是可选方案之一  musl库应用兼容问题 Docker-slim需要对应用实际运行依赖有较深入了解并熟悉工具使用 兼容性  支持http api的应用或许更适合 结合内部应用运行历史情况,Distro secure base image不失为一个安全、兼 容的解决方案  特别是运行于特定性发行版的传统应用改造后运行场景
19. 链路检查及门禁 开发人员 • IDE插件 代码仓库 构建系统 制品仓库 运行环境 • 代码仓库API,全量 • CI Plugin 扫描及构 • 制品仓库Plugin模式 • Kubernetes API 代码扫描 (旁路控制) 建阻止 • Webhook,增量 PR/MR/Commit扫描 及拦截 • 制品库代理/依赖项 • Kubernetes 防火墙(主路控 Admission 制) Webhook, OPA
20. 软件供应链平台、工具、流程的保护
21. 开发工具平台的安全风险 GitLab漏洞统计 SolarWinds安全事件 Jenkins漏洞统计 来源:https://www.cvedetails.com/
22. 代码仓库安全
23. GitLab敏感行为监测示例 名称 位置 Access token创建记录 /var/log/gitlab/gitlab-rails/application.log Application Log Production Log /var/log/gitlab/gitlab- rails/application_json.log /var/log/gitlab/gitlab- rails/production_json.log /var/log/gitlab/gitlab-rails/production.log API Log /var/log/gitlab/gitlab-rails/api_json.log Web Log /var/log/gitlab/nginx/gitlab_access.log 参考:Controlling the Source: Abusing Source Code Management Systems (securityintelligence.com)
24. 构建平台安全 Sigstore相关项目
25. Jenkins的常见安全加固  在控制节点禁用executor  禁用或加密Inbound连接  禁用SSHD(SSH Server plugin)  限制Agent权限(Authorize Project插件)  使用容器化的Agent(每个构建环境是一个新的容器)  避免手工安装插件  对Markup Formatter启用Safe HTML  限制秘钥访问(Folders插件)  ……
26. 实现软件供应链的全局可见性和安全性
27. 软件供应链安全需要端到端的安全防护 应用系统层级的供应链可视化 源码仓库扫描 基于链路关联的漏洞优先级匹配 构建流水线扫描 SBOM数据 (用于漏洞匹配及变更追踪) 持续追踪SBOM变化 镜像仓库扫描 配置数据 (工具平台安全检查) 供应链流程策略控制 运行环境扫描 其他系统集成
28. 基于SBOM的流转变更检测 源代码 SBOM 差 新增成分包 异 供应链流转检测 检 移除成分包 阻 止 测 构建物/镜像 成分包版本变化 SBOM 策略引擎 历史版本 SBOM 变 更 版本变更检测 检 当前版本 测 SBOM 新增成分包 告 警 允 许 移除成分包 成分包版本变化 27
29. 应用系统全局视角的软件供应链管理 开发人员 SEAL 软件供应链防火墙 代码仓库 统一管理 构建系统 可视化&可追溯 28 制品仓库 策略管控 运行环境 安全与合规
30. 欢迎进一步交流探讨
31.
32.

Accueil - Wiki
Copyright © 2011-2024 iteam. Current version is 2.137.1. UTC+08:00, 2024-11-15 05:53
浙ICP备14020137号-1 $Carte des visiteurs$