7.7 S2C2F 实践
如前所述,S2C2F包括一系列解决方案和供应商无关的实践,这些实践可以帮助组织确保其开源软件供应链的安全使用。合规、安全、工程管理人员以及首席信息安全官(CISO)等领导者可以参考这些实践,以识别其组织在安全使用和治理开源软件方面存在的差距。现在让我们逐步了解这些实践,以理解它们包含了哪些内容。
第一个被引用的实践是摄入(Ingestion)。正如S2C2F指出的那样,安全保障软件供应链的第一步是控制工件输入,包括打包和源代码工件。这里的实践旨在使组织能够在外部开源软件源可能被 compromised 或不可用的情况下仍能够交付资产。打包工件包括诸如Linux软件包仓库或Open Container Initiative(OCI)注册表等内容。组织需要代理这些外部来源并保存所需的副本。在源代码工件方面,该实践提倡在内部镜像外部源代码仓库,并在本地缓存软件包,以使组织能够在不利情况下继续运作,从而展示业务连续性。这还允许组织进行安全扫描,甚至在需要时向上游贡献修复程序,或在本地修复代码而不是向上游贡献。
在摄入(Ingestion)之后,下一个实践是扫描(Scanning),其目标是确保消费组织和个人能够看到与开源软件组件相关的漏洞。正如S2C2F所述,通过扫描摄入的开源软件组件,组织可以识别配置错误、易受攻击的代码、已知漏洞或增加潜在攻击面的额外代码,从而建立对组件安全状况的可见性,进而构建信任。
组织可以利用众多开源软件和专有的扫描工具来执行这一实践。一旦组织摄入并扫描了开源软件组件,它们需要对其进行清单管理,以便了解这些开源软件组件存在于生产环境中的位置。S2C2F使用的一个完美例子是Log4J事件。那些准确记录开源软件组件清单的组织,比那些缺乏这种清单的组织在应对事件时表现得更加从容。随着其他重要漏洞在开源软件组件中的出现,有清单的组织可以通过修复或优先处理易受攻击或已被入侵的组件和系统来快速响应。
经过扫描和编制清单的开源软件组件是一个很好的开始,但众所周知,软件像牛奶一样会老化——这意味着生产环境中的组件必然需要更新和修补。因此,接下来的实践是具备根据需要更新组件的能力。众所周知,当漏洞被公开披露时,通常是组织修补或处理漏洞与恶意行为者利用漏洞之间的竞赛。
因此,跨企业的开源软件覆盖面,对于在规模上更新和修补易受攻击组件的能力至关重要。另一个考虑因素是,开源软件组件通常由志愿者维护,并没有与漏洞处理相关的服务级别协议(SLA)。因此,如果开源软件维护者未直接提供补救措施,消费者必须准备实施虚拟修补和其他缓解控制措施。
拥有围绕开源软件摄入和使用制定的标准化流程是一回事,但你必须能够审计你的环境,以识别那些偏离流程或对你的组织构成风险的组件。
因此,指南中的下一个做法是审计。这意味着组织可以对其开放源码软件组件进行审计,并验证它们是否经过了摄取、扫描和清点的标准化流程;否则,治理就会开始崩溃。
审计固然重要,但组织必须能够对发现的不受治理的开放源码软件组件采取措施。因此,执行是指南中的下一个实践。如果开发人员绕过既定流程,从不受信任的来源引入不受管理的开放源码软件组件,那么组织必须能够纠正这种偏差。指导意见提供的例子是,如果引入未经验证的开放源码软件组件,则强制执行 DNS 流量重路由或在构建流程中建立关卡,以中断构建。越来越多的恶意行为者试图破坏构建流程或基础架构,从而导致二进制文件和工件受损。
指南中的下一项内容是,能够从源代码中重建部署的每个开放源码软件工件。如果恶意行为者能够插入带有后门的恶意开放源码软件包,或在构建过程中对生成的二进制文件进行未经授权的更改,这一点就变得非常关键。
S2C2F 强调,对于关键工件或关键业务的高价值资产,可能有必要为用于创建生产服务或应用程序版本的每个工件创建从原始源代码开始的监管链。本实践的重点是使依赖于关键开放源码软件组件的开发人员能够获取源代码、重建源代码、在需要时修改源代码(如通过签名),然后缓存重建后的工件供内部使用。
这种做法直接指向可重现构建,即软件开发中创建从源代码到二进制代码的独立可验证路径的做法 (https://reproducible-builds.org/docs/definition)。这将导致所有相关工件的比特位完全相同的副本。您会注意到这一实践在其他新兴指南(如 SLSA)中也很普遍,尤其是在成熟度较高的情况下。
S2C2F 的最后一项实践是能够修复问题并向上游反馈。S2C2F 规定:"我可以在接到危害通知后 3 天内私下修补、构建和部署任何外部工件,并将修复结果秘密贡献给上游维护者。这是一种非常成熟的做法,因为它将责任从严格依赖维护者转移到了软件消费者作为开放源码软件项目或组件的积极贡献者。这正是我们在文中其他部分提到的研究人员所倡导的行为类型,例如 Chinmayi Sharma 题为 "数字公共资源的悲剧 "的研究。
尽管如此,该指南指出,这仅适用于极端情况,以及上游维护者无法在贵组织可接受的风险窗口内提供公共修复时的临时风险缓解。这体现了对允许维护者采取适当行动的认可,同时也愿意在适当的时候提供帮助,这正是开放源码软件社区的精神所在。S2C2F 还提倡组织为开放源码软件社区做出贡献的几种方式,如直接或通过基金会提供财政支持、参与赏金计划、倡导最佳实践,以及积极参与重要的开放源码软件项目。
No Comments