7.3 CIS软件供应链安全指南
随着行业不断成熟的软件供应链实践,我们看到了NIST、开源安全基金会(OpenSSF)和互联网安全中心(CIS)等组织的指导。在本节中,我们将讨论最近发布的CIS软件供应链安全指南(https://github.com/aquasecurity/chain-bench/blob/main/docs/CIS-SoftwareSupply-Chain-Security-Guide-v1.0.pdf)。本指南是与Aqua Security合作创建的,Aqua Security创建了一个名为chain bench的开源工具,以帮助您审核软件供应链堆栈是否符合CIS指南(https://github.com/aquasecurity/chain-bench)。
《软件供应链安全指南》的CIS基准旨在提供一套与平台无关的高级最佳实践,随后可用于为GitHub、GitLab等平台构建特定于平台的指南。
该指南由五个核心领域组成:
- 源代码
- 构建管道
- 依赖项
- 工件
- 部署
它还涵盖了软件供应链的各个阶段,从源代码到部署,并涉及整个过程中存在的各种潜在威胁载体。如图 7.8 所示,它让人想起另一个新兴框架 SLSA,以及现有的开放全球应用安全项目 (OWASP) 软件组件验证标准 (SCVS) 框架。
总体而言,该指南涵盖了所讨论的五个类别中的 100 多项建议。让我们逐一介绍这五个类别,重点介绍该领域的重要性以及其中包含的一些值得注意的建议。
源代码
如前所述,该指南遵循软件供应链生命周期,因此源代码不可避免地位于列表的顶部,因为它是该生命周期的第一阶段。由指南得出源代码是其余流程/阶段的真实来源。
在处理保护源代码时,您将寻求保护代码以及源代码管理系统,恶意行为者可能会利用这些系统来破坏源代码本身。指南表示保护源代码涉及开发人员、代码中的敏感数据以及源代码管理平台本身等方方面面。
源代码类别本身分为以下几个小节:
■ 代码变更
■ 存储库管理
■ 贡献访问
■ 第三方
■ 代码风险
这些小节包括关键建议,所有这些建议都与源代码安全有关。在“代码变更”小节中,一些值得注意的示例包括确保在版本控制中跟踪代码更改、扫描代码合并以查找风险以及确保代码更改需要两个经过严格身份验证的用户的批准。这些控制措施试图确保跟踪更改、在允许代码更改之前降低风险,以及由具有适当身份验证措施的用户进行同行/双人代码审查。
在“存储库管理”小节中,建议使用安全控制措施,例如确保将 SECURITY.md 文件发布在公共存储库中并清理不活动的存储库。这些措施有助于保护存储库的完整性、指导安全和/或漏洞反馈,并防止存储库蔓延和缺乏治理。
控制贡献访问是用于验证代码完整性是否得到解决的另一项基本措施。在贡献访问子部分中,建议的控制措施包括要求对代码贡献进行多因素身份验证 (MFA)、实施对存储库的最低许可访问控制以及将 Git 访问限制在特定的允许列表 IP 地址。采取这些措施可提高代码贡献流程和源代码的安全性,仅向获得授权、经过适当身份验证且来自获准 IP 地址的用户授予访问权限。
代码存储库中的第三方应用程序对组织构成风险。包括与第三方工具的集成,以实现增强的功能或能力以及开发人员的工作效率。采取措施,例如确保管理员批准已安装的应用程序、删除过时的应用程序以及实施最低许可控制,可以大有裨益。第三方子部分中的这些基本控制措施可最大限度地减少组织的攻击面,并限制第三方应用程序受到攻击时的爆炸半径。
降低代码风险是组织在处理其源代码安全时必须执行的一项关键活动。在代码风险小节中,建议采用风险控制措施,例如扫描代码中的敏感数据(如机密和机密蔓延),特别是在云原生 DevOps 环境中。还包括需要通过静态应用程序安全测试 (SAST) 扫描代码中的漏洞,以及使用软件组合分析 (SCA) 和新兴的 SBOM 工具和实践来查找 OSS 组件中的漏洞。
构建管道
根据 CIS 指南的定义,构建管道用于获取源代码的原始文件并运行一系列任务以获得最终的工件作为输出。这相当于存储并最终部署的软件/应用程序的最新版本。构建管道部分包括构建环境、构建工作者、管道说明和管道完整性。该指南强调,许多建议与自托管构建平台有关,而不是即服务 SaaS 产品。也就是说,即服务产品(例如基于 SaaS 的产品)有其独特的风险,我们在第 6 章“云和容器化”中提到过。
对于构建环境,该指南建议采取一些控制措施,例如将管道专用于单个存储库、使用不可变的管道基础设施和配置,以及确保记录构建环境的活动。这些控制措施可确保组织避免诸如漂移和配置偏差、出现问题时缺乏可见性/日志记录等问题,并在创建构建环境期间促进自动化,从而最大限度地降低手动活动的风险。这些控制有助于避免诸如人为错误之类的问题,这些问题可能导致数据泄露和配置错误,而恶意行为者可以利用这些错误。
构建工作者,称为运行者,是管道操作基础设施的核心组件,也是那些试图造成破坏的人的目标。工作者可以签出代码、执行测试,甚至将代码推送到注册表,所有这些都可以用于邪恶的目的。这里的安全控制包括一次性构建工作者、构建工作者之间的职责分离以及运行时安全性的实施。这些活动试图确保监视运行时事件是否存在恶意行为模式,将构建工作者的潜在攻击限制在其分配的职责而不是更广泛的环境中,并最大限度地降低数据被盗的风险。
管道指令用于将源代码转换为最终工件。当被篡改时,指令可用于执行恶意活动。安全控制包括将构建步骤定义为代码、明确定义输入和输出以及自动扫描管道以查找配置错误。这些控制确保构建步骤不可变且可重复,并具有预期的输入/输出,并且扫描可以识别错误配置以避免后门或妥协。
维护管道完整性是一项关键控制,包括验证管道、必要的依赖项及其生成的工件是否符合要求且未经更改。此领域的关键控制包括尝试确保工件在发布时签名、依赖项在使用前经过验证以及管道生成可重现的工件。这些控制可验证工件是否由受信任的实体签名、依赖项在使用前经过审查以及管道是否持续生成工件以确保未发生篡改。该指南还建议不仅为软件或构建过程的每个组件生成 SBOM,还建议确保对 SBOM 进行签名以进一步证明其有效性。这些建议与 NIST 和 OpenSSF 的指导一致,并利用 Sigstore 等技术,我们在第 4 章“软件物料清单的兴起”中关于 SBOM 和软件签名的讨论中介绍了这些技术。
依赖项
CIS 指南认识到依赖关系在软件供应链中发挥的基本作用。它强调依赖关系通常来自第三方来源(例如 Log4j),一旦被利用,可能会造成巨大损失。事实上,Sonatype 和 EndorLabs 等研究表明,七分之六的漏洞来自传递依赖关系。
第三方软件包需要适当的管理和使用,包括努力建立信任并适当管理其使用。第三方软件包不仅会影响您的软件,还会影响您软件的下游消费者,Log4j 及其相关的受影响软件供应商的大量通知就是明证。此处的安全控制包括验证第三方工件和开源库、要求第三方供应商提供 SBOM 以及要求/验证构建过程的签名元数据。 这些步骤有助于降低使用恶意或高风险第三方组件的风险,从而了解供应商/供应商的软件内部情况,并确保工件在构建过程中没有受到损害。
该指南要求验证软件包以了解如何以及是否使用它们,它包括政策和技术控制的组合,例如建立组织范围内的依赖项使用指南、扫描软件包中的已知漏洞以及保持对所有权变化的认识。这些控制有助于管理软件包的使用,同时确保现有软件包不易受攻击,并跟踪可能导致新所有者进行恶意活动的所有权影响。
工件
根据 CIS 指南的定义,工件是存储在软件包注册表中的软件的打包版本。该指南强调需要在整个生命周期内保护工件,从创建到部署到环境中。
进行验证控制是必要的,例如确保工件由管道签名,然后在分发之前加密,以及控制谁可以执行解密。此类控制可确保工件具有完整性和机密性,仅限于有权查看工件解密副本的人员。
必须实施工件的基本访问控制也是必须的。此领域通常涉及存储工件的注册表,确保在交付给客户之前,工件没有通过各种攻击媒介被篡改。控制包括控制可以上传新工件的允许用户数量,并为用户访问实施 MFA。这追求将用户管理从软件包注册表分离到外部身份验证机制/服务器的目标。
软件包注册表是攻击面的另一个组成部分,也是组织工件的存储位置。虽然目标是保护工件,但如果不保护存储它们的注册表,您就无法做到这一点。 控制措施包括审核软件包注册表的配置更改以及以加密方式验证软件包注册表中的工件。
来源可追溯性或代码出处是另一种越来越受关注的最佳实践。它是确保组织及其客户都了解工件的来源以及工件来自可信来源的过程。必须通过 SBOM 和元数据等方法确保工件包含有关其来源的信息。组织还应使用代理注册表来代理来自公共注册表的内部软件包请求。此建议与 NIST 800-161r1 附录 F(https://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-161r1.pdf)相一致,该附录要求建立已知验证组件的内部注册表。NIST 800-161 附录 F 有自己的网页(www.nist.gov/itl/executive-order-14028-improving-nations-cybersecurity/software-security-supply-chains)。
部署
最后,我们进入开发阶段——软件供应链的最后阶段,在此阶段,工件被部署到运行时环境。此阶段的控制包括部署配置和部署环境。
对于部署配置,建议您将部署配置文件与源代码分开,跟踪部署配置更改,并使用扫描器来保护基础设施即代码 (IaC) 清单。 部署配置中的错误配置或漏洞会使部署环境变得脆弱。
部署环境建议包括使部署自动化和可重复,并限制对需要它的人的访问。这些建议确保部署不可变,避免配置偏差,并限制访问以最大限度地减少威胁。
虽然软件供应链安全仍然是一个不断发展的领域,但 CIS 指南以及本书中提到的其他组织的指导,成为历史上网络安全阴暗领域的一盏明灯。 软件供应链是一个极其复杂和脆弱的生态系统,由于它影响到无数的组织、消费者、供应商和行业,它存在系统性风险。请务必留意后续特定于平台的 CIS 基准,这些基准建立在《CIS 软件供应链指南》中引用的控制和建议的基础上.
No Comments