软件供应链威胁

软件供应链攻击途径是指有人可能有意或无意地破坏您的软件的各种方式。

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

威胁的入口点遍布整个软件生命周期,可能源自组织内部,也可能源自组织外部。

软件供应链攻击的切入点

图表图例包含两组威胁:

  • 字母 AH 表示软件供应链中的攻击向量,在软件工件的供应链级别 (SLSA) 框架中被描述为威胁
  • 数字 14 表示 SLSA 框架未直接描述的其他攻击向量。

Google Cloud 提供了一套模块化功能和工具,其中融入了可缓解这两类威胁的最佳实践。

本文档中的各个子部分介绍了源代码、 build、部署和依赖项方面的威胁。

来源威胁

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

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

    • 为开发者工作站设置政策。 Cloud Workstations 提供全托管式预配置工作站,您可以根据自己的需求进行自定义。
    • 本地扫描代码。Cloud Code source protect(私密预览版)可提供实时安全反馈,包括依赖项的漏洞和许可信息。开发者还可以使用On-Demand Scanning API 扫描容器映像,以查找操作系统和语言包漏洞。
    • 有关提高代码安全性的实践的教育内容。
  • A:将有缺陷的代码提交到源代码库。这不仅包括恶意代码,还包括无意中引入漏洞以致遭受攻击(例如跨站脚本)的代码。 缓解措施包括:

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

在评估源代码完整性时,还要检查用于构建和部署软件的支持脚本和配置。将它们纳入源代码控制系统和代码审核流程,以便降低这些文件中的漏洞带来的风险。

如需详细了解如何保护来源,请参阅保护来源

构建威胁

这些威胁会在您构建或打包软件时入侵您的软件,或诱骗您的软件的消费者使用不良版本。

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

部署和运行时威胁

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

    • 构建不可重现,因为构建首次使用的依赖项可能与同一构建在未来执行时使用的依赖项不同。
    • 依赖项可能会解析为遭入侵的版本,或者包含会破坏软件的更改的版本。不良行为者可能会利用这种不确定性,导致您的 build 选择他们提供的软件包版本,而不是您打算使用的版本。许多依赖项最佳实践有助于降低依赖项混淆风险。
  • 2:破坏部署流程。如果您使用持续部署流程,那么一旦该流程遭到入侵,您向用户交付的软件就会出现不必要的更改。您可以限制对部署服务的访问权限,并在预生产环境中测试更改,从而降低风险。Cloud Deploy 可帮助您管理持续交付流程以及环境之间的提升。

  • 3:部署遭入侵或不合规的软件。强制执行部署政策有助于缓解此风险。您可以使用 Binary Authorization 验证容器映像是否符合政策条件,并阻止部署来自不受信任来源的容器映像。

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

    • 安全研究人员会定期发现新漏洞,这意味着新的发现可能会改变正式版应用的安全风险级别。
    • 某些配置会增加未经授权的访问风险,例如以根用户身份运行或允许在执行容器时进行提权。

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

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

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

依赖项威胁

依赖项包括 build 中的直接依赖项,以及所有传递依赖项(直接依赖项下游的递归依赖项树)。

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

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

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

缓解威胁

供应链的整体完整性取决于其最薄弱的环节。忽略某个攻击途径会增加供应链相应部分的攻击风险。

不过,您无需一次性更改所有内容。累积行为效应(更广为人知的名称是瑞士奶酪模型)适用于软件供应链安全。您实施的每项缓解措施都能降低风险,当您在整个供应链中结合使用多种缓解措施时,就能更好地防范各种类型的攻击。

  • 使用框架和工具评估安全状况,这些框架和工具可帮助您评估组织检测、应对和补救威胁的能力。
  • 了解最佳实践,以保护您的软件供应链,以及 Google Cloud 旨在支持这些实践的产品。
  • 将 Google Cloud 安全功能纳入开发、构建和部署流程,以提升软件供应链的安全性。您可以根据自己的优先事项和现有基础架构逐步实现服务。

后续步骤