您需要做什么才能达到 SLSA 级别 – 非常实用的指南

所有文章

背景

SLSA(软件工件的供应链级别)是一个安全框架,旨在防止篡改、提高完整性以及保护包和基础设施的安全。 SLSA 的核心概念是软件工件只有满足三个要求才可以被信任:

  1. 该工件应具有描述其起源和构建过程的出处文档(L1)。
  2. 出处文件应该值得信赖并经过下游验证(L2)。
  3. 构建系统应该是值得信赖的(L3)。

SLSA 框架定义了级别,代表软件供应链的安全程度。这些级别对应于这些要求的实施级别(上面标记为L1-L3)。

抄写员的

valint slsa
valint slsa 命令可用于生成 Provenance 文档。接下来,我们将描述如何使用此工具达到 SLSA 级别。

注:我们这里指的是SLSA V1.0框架。

SLSA L1

这款 SLSA L1 包括:

  • 软件生产商遵循一致的构建过程。
  • 构建平台自动生成描述工件如何构建的来源数据。
  • 软件生产商将来源数据分发给消费者。

实现 SLSA L1 的清单:

  • 使用 CI 系统构建您的软件。最好使用受源代码控制的构建脚本。
  • 激活
    valint slsa
    valint slsa
    命令作为构建脚本的一部分来创建 Provenance 文档。请注意,
    valint slsa
    valint slsa
     命令允许向 Provenance 文档添加附加信息 - 您可以根据需要定制 Provenance 文档的内容。

SLSA L2

这款 SLSA L2 包括:

  • SLSA L1 要求。
  • 该构建在托管构建平台上运行,该平台本身生成并签署出处。
  • 出处的下游验证包括验证出处的真实性。

实现 SLSA L2 的清单:

  • SLSA L1 清单。
  • 使用托管构建服务(而不是在开发人员计算机上执行构建)。
  • 创建一个签名的 Provenance 文档(而不是未签名的文档,这对于 SLSA L1 来说已经足够了)这可以通过运行来实现
    valint slsa ... -o attest
    valint slsa ... -o attest
    。抄写员的 瓦林特 工具具有广泛的签名功能;对于企业,我们建议使用 X.509 PKI 密钥和证书。 
  • 使用以下方法验证下游来源文档的真实性
    valint verify
    valint verify
    命令。验证可能包括签名和签名身份,以及确保 SLSA 来源文档内容的其他验证规则。一些例子可以在 Scribe 中找到 政策目录.

注意:验证应由所构建软件的使用者完成;对于内部合规性,验证可以作为测试管道的一部分来完成。

SLSA L3

SLSA L3 要求

这款 SLSA L3 包括:

  • SLSA L2 要求。
  • 构建平台实施强有力的控制:
    • 防止运行相互影响,即使在同一项目中也是如此。
    • 防止从用户定义的构建步骤访问用于签署来源的机密。

此外,为了信任构建平台,需要 验证构建平台。构建平台应该是可信的,因为来源文档将被信任 不可伪造的 构建将是 孤立。这种验证衍生出以下要求:

  • 验证 平台使用不中断 不可伪造性和隔离性 要求。
    • 例如,可以通过评估管道中缓存的使用来验证隔离性。
    • 为了确保 Provenance 文档的不可伪造性,我们建议在专用的构建管道中生成并签名它。
  • 验证 构建平台的可信度.
    •  对于 SaaS CI,应与构建平台供应商进行验证。在软件生产商负责构建系统的部署的情况下,建议将供应商自我证明与对部署方面进行分析相结合。
    • 例如,在部署自托管 CI 时,供应商证明应声明构建如何相互隔离,部署分析应验证 CI 系统的访问权限和日志审计。

这些要求具有挑战性,因为满足这些要求依赖于 CI 平台,无法完全自动化,并且需要对构建系统和管道进行专业的安全分析。这就是为什么 SLSA 框架特别建议组织逐渐从 SLSA L2 发展到 SLSA L3 合规性。

如果您从本文一直读到这里,并认为 SLSA L3 适合您,请卷起袖子加油——以下是我们建议的清单:

实现 SLSA L3 的清单:

  • SLSA L2 清单。
  • 评估 CI 系统。目标是回答以下问题:
    • 在什么情况下,未经授权的实体可以逃避构建系统?
    • 在什么条件下构建可以相互影响?

一旦得到答复——管理剩余的风险。

  • 隔离Provenance文档的生成:
    • 将 Provenance 文档的创建分离到不同的管道,最好是在单独的构建服务上。
      • 仅向此管道公开用于签署 Provenance 文档的机密。
      • 创建或验证此管道上的来源文档内容。在验证的情况下,使用直接从构建平台或其他可信来源收集的数据来验证管道内生成的来源文档的所有可能字段。
  • 隔离并验证构建管道与其他管道运行的隔离:
    • 验证缓存和共享卷的使用。
    • 验证与其他管道共享的机密不允许管道相互影响。
    • 验证管道运行不会相互影响
      • 例如,防止通过一条管道完成的安装影响其他管道的运行。这可以通过使用临时构建运行程序(例如为每个构建创建的容器)或验证构建运行程序每次从预定状态启动来完成。

要使用 Scribe 工具实现 SLSA L3,我们建议执行以下操作:

  • 检测构建管道以生成填充 Provenance 文档所需的所有证明。例如,您可能决定需要在构建期间安装的依赖项列表。该列表可以由
    valint bom dir:
    valint bom dir:
    命令。此外,使用以下方法在管道中创建来源证明
    valint slsa
    valint slsa 命令。
  • 创建一个单独的可信来源生成管道,该管道将执行以下操作:
    • 根据构建管道中创建的文档生成可信的来源文档;
      • 从构建服务收集数据并使用它来验证和更新 Provenance 文档。
      • 验证在构建管道中创建的证明的内容。例如,通过将构建管道中的 SBOM 证明与单独采样的 SBOM 证明进行比较来验证构建运行程序的内容。
      • 使用从构建管道收集的证明来更新来源文档。
      • 可以使用以下命令更新来源文档
        valint slsa
        valint slsa
        命令。
    • 通过评估从构建服务收集的数据来验证构建是否已隔离。例如 – 验证缓存和机密的使用。

为了执行此类数据收集和评估,Scribe 提供了为构建运行创建证明并执行所需验证的工具。

---

好的。看来你们都准备好了。当然,如果您需要任何帮助, 让我们知道。我们随时为您提供帮助,并乐意提供建议或积极提供帮助。

此内容由领先的端到端软件供应链安全解决方案提供商 Scribe Security 为您提供 - 为整个软件供应链中的代码工件以及代码开发和交付流程提供最先进的安全性。 了解更多