软件供应链威胁

软件供应链的攻击途径是指他人故意或意外入侵您的软件的各种方式。

存在漏洞的软件的风险包括凭据或机密数据泄露、数据损坏、恶意软件安装和应用服务中断。这些问题会导致损失时间、金钱和客户信任。

威胁的入口点涵盖整个软件生命周期,可能来自组织内部或外部。

展示软件供应链攻击入口点的图表

图表图例包含两组威胁:

  • 字母 A 到 H 表示软件供应链中的攻击途径在软件工件的供应链级别 (SLSA) 框架中描述为威胁威胁
  • 数字 14 表示 SLSA 框架未直接描述的其他攻击途径。

Software Delivery Shield 是 Google Cloud 上的全代管式软件供应链安全解决方案,它融合了最佳实践,可帮助您抵御这两组威胁。

本文档中的各小节从来源、构建、部署和依赖项的角度介绍了威胁。

来源威胁

这些威胁会影响源代码的完整性。

  • 1:编写不安全的代码。缺乏安全的编码实践可能会导致在编写代码时无意中包含漏洞。不安全的开发者工作站还可能会引入恶意或不安全的代码。缓解措施包括:

    • 为开发者工作站设置政策。 Cloud Workstations 提供全代管式预配置工作站,您可以根据自己的需求对其进行自定义。
    • 本地代码扫描。Cloud Code source protect(非公开预览版)提供实时安全反馈,包括依赖项的漏洞和许可信息。开发者还可以使用 On-Demand Scanning API 扫描容器映像是否存在操作系统和语言包漏洞。
    • 介绍提高代码安全性的方法
  • :将不良代码提交到源代码库。这不仅包括恶意代码,还包括无意中向攻击(例如跨站脚本攻击)引入漏洞的代码。 缓解措施包括:

    • 需要人工审核才能对源代码进行更改。
    • 使用与 IDE 和源代码控制系统集成的代码扫描和 lint 工具。
  • B:入侵源代码控制系统。限制对构建流水线中的源代码控制系统和其他系统的访问,并使用多重身份验证有助于降低这种风险。

在评估源代码的完整性时,还要检查用于构建和部署软件的支持脚本和配置。请将它们添加到您的源代码控制系统和代码审核流程中,以便防范这些文件中存在漏洞的风险。

请参阅保护源代码,详细了解如何保护源代码。

构建威胁

在您构建或打包软件时,这些威胁会损害您的软件,或者诱使软件的使用者使用不良版本。

  • C:使用并非来自可信源代码控制系统的源代码进行构建。 有助于降低此风险的缓解措施包括:
    • 使用用于生成出处信息的构建服务(例如 Cloud Build),以便您可以验证构建是否使用可信来源。
    • 将 CI/CD 基础架构置于网络边界内,以防止构建中的数据渗漏。对于 Google Cloud 服务,请使用 VPC Service Controls
    • Artifact Registry 等专用工件存储区中存储和使用您所需的开源依赖项的可信副本。
  • D:入侵构建系统。有助于降低此风险的缓解措施包括:
    • 遵循最小权限原则,仅允许有需要的个人访问构建系统。在 Google Cloud 中,您可以授予适当的预定义角色或创建自定义角色
    • 使用代管式构建服务,例如 Cloud Build。Cloud Build 会为每个构建设置虚拟机环境并在构建后将其销毁,从而运行临时构建
    • 将您的 CI/CD 基础架构置于网络边界内,以防止 build 中的数据渗漏。对于 Google Cloud 服务,请使用 VPC Service Controls
  • F:打包和发布在官方流程之外构建的软件。通过生成构建出处和为其签名的构建系统,您可以验证您的软件是否由可信的构建系统构建。
  • G:入侵您为内部或外部用户存储软件的代码库。有助于降低此风险的缓解措施包括:
    • Artifact Registry 等专用工件存储区中存储和使用您所需的开源依赖项的可信副本。
    • 验证 build 和源代码出处。
    • 仅限专用的非真人账号和代码库管理员拥有上传权限。在 Google Cloud 上,服务帐号代表服务和应用。

部署和运行时威胁

  • H:如果通过指定版本范围或未永久附加到特定 build 版本的标记解析依赖项,可能会导致以下几个问题:

    • 构建不可重现,因为构建首次使用的依赖项可能与 build 以后执行同一 build 时使用的依赖项不同。
    • 依赖项可能解析为遭到破解的版本,或包含会破坏软件的变更的版本。不法分子会利用这种不确定性,让您的 build 选择他们的软件包版本,而不是您打算使用的版本。很多依赖项最佳实践都有助于减轻依赖项混淆风险。
  • 2:破坏部署过程。如果您使用持续部署流程,则破坏该流程可能会给您向用户提供的软件带来不必要的更改。您可以通过限制对部署服务的访问权限并在预生产环境中测试更改来降低风险。Cloud Deploy 可帮助您管理环境之间的持续交付流程和推广。

  • 3:部署被破解或不合规的软件。强制执行部署政策有助于降低这种风险。您可以使用 Binary Authorization 来验证容器映像是否符合政策标准,并阻止部署来自不可信来源的容器映像。

  • 4:运行的软件中存在的漏洞和配置错误。

    • 我们会定期发现新漏洞,这意味着新发现的问题可能会改变生产环境中应用的安全风险级别。
    • 某些配置会增加未经授权的访问风险,例如以根用户身份运行或允许在执行容器时提升权限。

    GKE 安全状况信息中心显示有关正在运行的工作负载中的 OS 漏洞配置问题的信息。

    在 Cloud Run 中,您还可以查看有关已部署修订版本的安全性数据分析,包括您部署的容器映像中的已知漏洞。

请参阅保护 build,详细了解如何保护源代码;如需详细了解如何保护部署,请参阅保护部署

依赖项威胁

依赖项包括构建中的直接依赖项以及所有传递依赖项,它是直接依赖项下游的递归依赖项树。

在图中,E 表示在 build 中使用了不良依赖项。不良依赖项可能包括:

  • 您的应用所依赖的任何软件,包括您在内部开发的组件、商业第三方软件、开源软件。
  • 源自任何其他攻击途径的漏洞。例如:
    • 攻击者获得对您的源代码控制系统的访问权限,并修改您的项目所用依赖项的版本。
    • 您的 build 包含由组织中的其他团队开发的组件。他们直接从本地开发环境发布 build 和发布组件,但不小心在库中引入了一个漏洞,而这些漏洞仅在本地用于测试和调试。
  • 故意从公共代码库中移除开源依赖项。 如果使用流水线直接从公共代码库检索依赖项,移除操作可能会导致这些流水线中断。

请参阅依赖项最佳实践,了解降低风险的方法。

缓解威胁

供应链的整体完整性完全取决于供应链中最易受攻击的部分。忽略攻击途径会增加供应链中该部分受到攻击的风险。

同时,您无需一次性更改所有内容。累积行为效应(通常称为瑞士奶酪模型)适用于软件供应链安全性。您实现的每项缓解措施都可以降低风险,而在整个供应链中组合使用缓解措施后,您可以更好地防范不同类型的攻击。

后续步骤