CNCF(云原生计算基金会)在2021年发布了《软件供应链最佳实践指南》,指南详细介绍了50多种改进云原生软件供应链的方法。该指南引用了“安全软件工厂”(SSF) 的概念,但没有提到如何建立。
2022年5月20日CNCF 技术咨询组 (TAG) 为安全供应链工作组通过发布《安全软件工厂白皮书》作为“安全软件工厂”补充内容。该参考架构展示了安全软件工厂的概念设计(其组件是什么以及它们的作用)和一种如何使用当今生态系统中可用的开源工具来实现的模型。
什么是安全软件工厂?
安全软件工厂是 DevOps 的演变。良佳实践、支持和特定工具构成了 DevSecOps 平台,可在任何地方交付安全、高质量的软件。
敏捷和 DevOps 实践正在驱动极快的软件开发速度,多年来开发人员一直享受本地工作站带来的好处。现在,考虑到这些 DevOps 堆栈已经从开发人员电脑提升到组织生产环境中,可能没有考虑到较好的安全结构,这可能会为软件开发生命周期 (SDLC) 堆栈中的不利许可证、CI/CD 蔓延、依赖关系受损和漏洞打开闸门,而这些闸门正是推动开发业务并为客户和最终用户提供价值的核心。
安全软件工厂位于更大的系统交付生命周期过程中,在该过程中,SSF具有上游和下游依赖性。在上游,SSF 依赖于人类用户和其他软件服务的身份和访问管理。在管道运行期间,SSF 依赖源代码控制来获取要构建的代码,并依赖 Artefact Storage 来获取构建所需的依赖项。在下游,SSF 依赖于提供有关工件的证明和签名,生产系统可以使用这些证明和签名来确定工件的出处并制定有关工件部署的政策决策。
什么是安全软件工厂参考架构?
目前,CNCF 将“软件供应链”定义为“在编写、测试、打包和分发应用软件给最终消费者时执行的一系列步骤”。软件工厂是促进软件交付的总体逻辑结构。如果正确完成,它可以确保安全性是该应用程序交付过程的关键组成部分。
CNCF 安全软件工厂指南基于之前的 CNCF 研究文献,例如《云原生安全最佳实践》和《软件供应链最佳实践》。安全软件工厂参考架构强调现有的开源工具,并强调安全性。它还围绕着《软件供应链白皮书》中的四项总体原则,每一项都是确保从开始到代码再到生产的安全软件交付所必需的:
1.纵深防御
2.签名和验证
3.工件元数据分析
4.自动化
这四个原则依次应用和组织在被视为软件工厂实体的五个功能领域。
在考虑如何保护这些实体时,有两种组织安全控制的广泛方法:
1.围绕三个关键问题:
出处验证:确保现有证据假设关于工件的来源和来源是真实的,并且工件或其随附的元数据在构建或交付过程中未被篡改。
可信度:保证给定的工件及其内容可以被信任去做它声称要做的事情(即适合于某个目的)。这涉及判断代码是否可以安全执行,并就接受执行代码所带来的风险做出明智的决定。
依赖关系:递归检查工件的依赖关系树,以确保其使用的工件的可信度和出处。
2.按活动阶段:
2.1预构建:主要关注源代码的开发和处理以及依赖项的收集和存储。
2.2构建:根据构建规范构建、测试和打包工件的过程。
2.3构建后:主要关注存储、交付、部署、持续验证。
作者观点
TAG认为,供应链安全是一个多方面的复杂挑战。虽然《软件供应链最佳实践指南》涵盖了广泛的软件供应链问题,但在这个参考架构中,缩小了对出处问题的关注,在论文中将其定义为“确保关于工件的来源和方式的现有假设是真实的,并且工件或其随附的元数据在构建或交付过程中没有被篡改。 原因有三,首先,现有工具提供了许多必要的组件,以在软件工厂中开发可靠的出处保证。其次,特别是软件工厂的功能(最终是构建管道)非常有利于收集证明构建来源的元数据。第三,最重要的是,出处为供应链安全中的其他关注领域提供了基础。对工件的出处和伴随它的元数据有强有力的保证是能够相信关于该工件的安全性的其他声明是有意义的必要先决条件。
安全玻璃盒观点
白皮书将安全软件工厂架构置于更大的系统交付生命周期过程中。在该过程中,SSF 具有上游和下游依赖性。在上游,SSF 依赖于人类用户和其他软件服务的身份和访问管理。在管道运行期间,SSF 依赖源代码控制来获取要构建的代码,并依赖 Artefact Storage 来获取构建所需的依赖项。在下游,SSF 依赖于提供有关工件的证明和签名,生产系统可以使用这些证明和签名来确定工件的出处并制定有关工件部署的政策决策。
现在的软件开发生产环境类似工厂结构。“软件工厂”以高效、可重复和安全的方式生产软件所需的工具、资产和流程的集合。这也意味着软件供应链上的每一个环节都可能产生安全威胁,包括软件设计与开发的各个阶段中来自所使用的研发工具、设备、本身的编码过程,或供应链上游的代码、模块和服务所带来的安全风险, 以及在软件交付渠道及使用过程所存在的安全风险。所以,在软件供应链中,以安全的方式执行软件工厂方法非常重要。
关注“安全玻璃盒”公众号,获取中英文参考文献