生成阶段概述
构建容器映像是容器安全供应链(CSSC)框架的第三个阶段。 虽然某些企业直接从外部源拉取基础映像,但其他企业可能会从内部目录中拉取基础映像,而无需根据签名和证明验证图像。 请务必确保始终从内部目录中拉取基础映像,并在使用前进行验证。 生成映像后,一些企业会发布它们而不进行漏洞和恶意软件扫描,并且无法生成 SBOM 等证明,在后续供应链阶段无法验证这些证明。 必须确保生成的容器映像受信任且符合企业策略。
Microsoft 的容器安全供应链(CSSC)框架确定了构建容器映像的需求,并提供一组最佳做法和工具,帮助你安全地生成受信任且合规的映像。 在本文中,你将了解可在 CSSC 框架的生成阶段中使用的目标、最佳做法和工具。
背景
目前,企业使用各种方法来安全地生成合规的容器映像。 在生成容器映像之前,需要内部团队从内部 黄金注册表中提取基础映像。 但是,在使用前不会验证这些映像,不建议这样做,因为 黄金注册表 可能会遭到入侵,映像可能会变得恶意。 企业还控制添加到容器映像中的库和包的来源,以确保质量。
生成容器映像后,企业会生成其他元数据,以确保容器映像符合要求。 一些企业利用 SLSA 证明文档来知道哪个 git 提交负责生成容器映像以及它是否可重现。 其他人使用 Docker 标签在容器映像的所有者和负责提交映像的人员上提供证明。 一些企业扫描映像中是否存在漏洞和恶意软件,并相应地生成报告。
CSSC 框架的生成阶段建议一组步骤和安全控制,这些步骤和安全控制应在发布前生成可信且合规的容器映像。
推荐做法
Microsoft 建议采用以下做法安全地生成合规的容器映像。
- 仅从内部目录中拉取基础映像以减少攻击面并提高安全性。
- 如果可用,请在使用基础映像之前验证签名和证明,以确保它们可信且合规。
- 无发行版映像 仅包含应用程序及其运行时依赖项,无需任何其他软件或操作系统组件。 使用无分发映像作为基本映像来减少攻击面并提高安全性。
- 对生成平台或服务应用 最低特权访问权限 ,以确保只有经过授权的用户能够进行更改或修改,从而降低未经授权的访问、数据泄露和其他安全事件的风险。
- 扫描容器映像以查找生成后的漏洞和恶意软件,以降低引入安全漏洞的风险。
- 使用其他元数据(如 SBOM 和源元数据)在生成后扩充容器映像。
- 使用企业密钥在生成后对容器映像和相关元数据进行签名,以确保完整性并提供受信任的审批标记供内部使用。
- 及时修补容器映像以解决已知漏洞。
- 使依赖项保持最新状态,以跟上漏洞和安全修复。
用于生成合规容器映像的工作流
生成阶段有一个工作流,用于创建符合组织和安全策略的容器映像。 仅对授权用户将特权级别访问控制应用于生成平台或服务至关重要。 在目录中提供基础映像时,生成工作流执行以下操作:
- 仅从内部目录拉取基础映像。
- 在使用基础映像之前验证基本映像,以确保其可信且合规。
- 在基础映像的基础上,从信任源添加其他框架、应用程序代码和/或配置,以便生成。
- 在生成过程中生成 SBOM。
- 在生成后扫描生成的容器映像中是否存在已知漏洞和恶意软件,以防止引入安全漏洞。
- 修补生成的容器映像以解决已知漏洞和恶意软件
- 将漏洞和恶意软件报告附加为映像证明,以在供应链的后续阶段使用。
- 将 SBOM 附加为映像证明,以在供应链的后续阶段使用。
- 使用其他元数据(如源元数据)扩充生成的图像,以便在供应链的后续阶段使用。
- 使用企业密钥对生成的映像和相关元数据进行签名,以确保完整性并为部署阶段提供受信任的审批戳
生成阶段的安全目标
拥有定义完善的工作流来生成可信且合规的容器映像有助于企业提高安全性并减少容器供应链上的攻击面。 CSSC 框架的生成阶段旨在满足以下安全目标。
由于访问控制不当,减少攻击面
内部用户可能会在生成基础结构上做出意外更改或配置不正确。 CSSC 框架中的生成阶段通过默认强制 实施最低特权访问控制 来解决此风险,以便资源所有者可以确保适当的人员有权进行更改和配置,从而减少攻击面。
减少恶意内部用户的攻击面
标识盗窃可用于访问生成平台、修改二进制文件,以及注入对原始开发人员和用户不可见的非法更改。 内部用户也存在注入易受攻击的代码或配置错误的风险。 CSSC 框架中的生成阶段通过应用 Azure 基于角色的访问控制(Azure RBAC)来应对此风险,并从各种代码所有者强制执行代码评审。
由于外部依赖项,减少攻击面
来自外部源的基本映像可能是恶意的。 外部注册表可能会遭到入侵。 CSSC 框架中的“生成”阶段仅使用目录中的基本映像,并在使用它们之前根据签名、漏洞和恶意软件报告和其他图像元数据对其进行验证来解决此风险。
具有隐藏后门的恶意开源软件 (OSS) 包可能会导致包的二进制文件与源代码不匹配。 依赖项或开源组件的有效性可能会过期,从而阻止上游的最新安全修补程序。 CSSC 框架中的生成阶段通过使用批准的库、定期扫描漏洞和恶意软件以及使库保持最新状态来解决此风险。
由于生成受损,减少攻击面
易受攻击的生成代理可以注入可能导致 SolarWinds 攻击等攻击的侧二进制文件或恶意代码。 CSSC 框架中的生成阶段通过定期修补生成代理来解决此风险。
确保最小图像质量
在 CSSC 框架的生成阶段,企业可以在生成后为映像的漏洞和恶意软件扫描配置所需的步骤,并生成报告。 企业还可以使用其他元数据(包括 SBOM、来源元数据和其他满足其策略的内部元数据)生成后扩充映像。 他们还可以使用企业密钥对项目进行签名,以确保完整性,并为部署阶段提供受信任的审批戳。
建议的工具
Microsoft 提供了一组工具和服务,可帮助企业在生成阶段工作流中实施建议的步骤,并解决上面列出的安全目标。
用于在生成后保持最新状态的工具
Dependabot 是一种通过拉取请求自动执行依赖项更新的工具。 有关详细信息和后续步骤,请参阅 本指南 。
Copa 是 Microsoft 支持的开源项目,根据漏洞扫描结果解决容器映像中的 Linux OS 包漏洞。 有关详细信息和后续步骤,请参阅 本指南 。
用于持续漏洞扫描和修补映像的工具和服务
Microsoft Defender for Cloud 是云原生解决方案,用于改进、监视和维护容器化工作负载的安全性。 Microsoft Defender for Cloud 为存储在Azure 容器注册表中的映像提供漏洞评估和管理工具。
Copa 是 Microsoft 支持的开源项目,根据漏洞扫描结果解决容器映像中的 Linux OS 包漏洞。 有关详细信息和后续步骤,请参阅 本指南 。
用于使用企业元数据扩充外部映像的工具和服务
ORAS 是由 Microsoft 支持的一个NCF 项目,它提供一个开源 CLI 和库来与 OCI 注册表进行交互。 ORAS 可用于添加批注并将元数据附加到容器映像。 ORAS 可用于添加 SBOM、来源元数据和其他元数据,以丰富供应链中后续阶段的图像。
Microsoft 的 SBOM 工具 是一种开源、高度可缩放且企业就绪的工具,用于为各种项目创建与 SPDX 2.2 兼容的 SBOM。 SBOM 工具可用于为容器映像生成详细的 SBOM。
公证项目 是一个 Microsoft 支持的NCF 项目,用于开发用于签名和验证软件项目的规范和工具。 公证项目 notation
的工具可用于使用企业密钥对容器映像和其他云原生项目进行签名。
Azure 密钥库是一种基于云的服务,提供一个安全且集中的位置,用于存储和管理加密密钥、机密和证书。 AKV 可用于安全地存储和管理企业密钥。
后续步骤
请参阅 部署阶段 的概述,以安全地部署容器映像。