近日,微软发布“安全供应链消费框架(Secure Supply Chain Consumption Framework,简称S2C2F)”1.1版本。该框架已被OpenSSF供应链完整性工作组采用。至此,OpenSSF开源软件评价相关的项目和指南已覆盖使用安全、关键性、基础设施安全、漏洞披露机制等多个方面,它们公布出的相关框架流程、指标条目、实践工具等内容对我国的开源软件安全工作有一定的借鉴作用。

一、S2C2F V1.1解读

S2C2F自2019年提出后,一直作为微软的一项内部倡议,直至此次被OpenSSF采用,它专注于开发集成人员对开源软件(OSS)使用的安全。与其他开源软件安全框架或指南相比,S2C2F具有三个主要特点:

1、框架实践面向威胁且覆盖使用全过程

S2C2F V1.1共包含8项实践,即引入、扫描、库存、更新、审计、执行、重构建、修复(并通知上游),涵盖了组织在使用OSS过程中各个环节上的治理工作,每个实践又包括若干条具体的“要求”,例如,“扫描”实践的“要求”共有5条,如下表所示。

S2C2F的实践和要求是基于已知OSS安全威胁而设计的,包括战术和技术两方面的威胁,如漏洞、后门、恶意代码植入和欺骗、恶意依赖项、编译器破坏、依赖混淆、包完整性篡改、上游源代码删除、OSS组件停止修复、未按时修复漏洞、包管理器恶意代码上传等。

针对每种威胁类型,框架都列出了相应的可用来缓解的“要求”。例如,针对“构建恶意OSS包欺骗使用者”的威胁,框架建议采用的要求包括:验证OSS的来源(AUD-1)、强制使用策划的OSS入口控制器以增强对OSS的信任(ENF-2)、扫描OSS中的恶意软件(SCA-4)等。

2、成熟度等级便于组织建立进阶路线图

S2C2F是一个成熟度模型,将针对OSS使用安全的25条要求划归4个不同的成熟度等级,组织可以对照评价自己当前所处的等级,并明确未来改进的方向。下表是各等级的主要描述及对应的要求,其中L4被定义为理想级,实现成本较高,估计难以在整个组织中大规模实施,但可以考虑在关键项目中的关键依赖项上应用。

3、各条要求对应的工具列表展现实操性

S2C2F还有一大特点是聚焦OSS安全治理的落地,框架针对各成熟度等级中对应的具体实践和每条要求,列出了自动化免费工具和付费工具,供开发集成人员参考。例如,针对L1中的要求SCA-1(需扫描依赖的已知漏洞。选择一款可从更多渠道而不仅仅是CVE获取漏洞的工具,对于确保从多个漏洞来源获得信息非常重要),S2C2F推荐的工具包括:免费工具GitHub Dependency Graph和付费工具Snyk Open Source、Mend SCA。

当然,由于微软的背景,S2C2F推荐的工具以美国厂商生产的产品为主。国内用户在参考时可考虑使用相同功能的国产工具,例如,在OSS已知漏洞扫描、许可证风险扫描等方面,奇安信开源卫士可提供同等优良的能力。

此外,S2C2F每条要求的制定也充分参考了NIST SP 800-161、SSDF、CIS软件供应链安全指南、OWASP SCVS、SLSA、CNCF软件供应链最佳实践等已有框架指南的内容。

二、OpenSSF开源软件安全评价方法体系分析

1、开源软件安全评价方法体系

OpenSSF单独或联合其成员发布的项目、指南、框架已覆盖开源软件的使用安全、关键性、基础设施安全、漏洞处理等多个方面,形成了针对开源软件的安全评价方法体系,如下图所示。基础设施安全包括网站、版本控制、构建、加密、包管理器等涉及OSS开发、存储、发布等环节设施的安全。部分指南内容可参见https://mp.weixin.qq.com/s/NyVxcJmUol-2X1kH5r_pvA。

上述分类仅反映这些项目、指南、框架的侧重点,并不代表它们之间是完全没有交集的。例如,OpenSSF记分卡中有一个指标是“被维护的”,其中重要的一项是考虑OSS项目每周的提交次数,而OpenSSF开源项目关键性评分中也有类似指标。《评估开源软件的简明指南》(以下简称《简明指南》)中也有“持续维护”方面的内容。

2、开源软件的使用安全

作为软件开发中最重要的第三方原材料之一,OSS的使用安全对于使用者来说,无疑是最值得关注的。OpenSSF记分卡、S2C2F和《简明指南》虽然都侧重于OSS的使用安全,但它们之间也有明显的差异。

· 关联关系

OpenSSF记分卡是一款基于19项评价指标的OSS项目安全指数自动生成工具。S2C2F为“扫描”实践的SCA-3要求(扫描OSS生命是否已终结)推荐的免费工具就是OpenSSF记分卡;《简明指南》中“开发者增强安全性的证明”方面的评价也包括“是否检查了开源软件的OpenSSF记分卡值和已知漏洞”的指标。因此,记分卡可以看做是基础。

另一方面,三种评价方法中的指标有许多也是相同的。例如,三者都有“扫描已知漏洞”的指标或要求,这也是OSS使用安全中最核心的内容之一,可借助软件成分分析(SCA)工具方便的实现。

· 主要差异

首先,OpenSSF记分卡是从OSS自身的角度考虑的,而S2C2F和《简明指南》则是从开发集成人员的操作层面考虑的。

在具体指标方面,三者也存在不小的差异,主要体现在两个方面。一是名称或技术内涵相同但实施环节或方式不同的指标,例如,OpenSSF记分卡和《简明指南》中都有代码审计的指标,但记分卡中指的是“合并之前,项目是否要求代码审计”,而《简明指南》中的代码审计指开发集成人员使用静态分析工具发现首要问题;二是各自特有的指标,如OpenSSF记分卡的“项目是否有分支保护”、《简明指南》的“是否尽量减少依赖的数量(使用现有的依赖关系,不再增加)”、S2C2F的“强制使用策划的OSS入口控制器(ENF-2)”,这些都是各自特有的。

总体而言,三者各有优势。OpenSSF记分卡的优势在于其自动化工具的属性,有助于使用者对OSS的安全状况进行自动化分析和信任决策;S2C2F的优势是其框架结构和成熟度等级,符合使用者的理解逻辑,针对性的指导作用较强;《简明指南》给出了OSS使用安全9个方面的内容,可看做是一些基本原则,某些方面也列出了具体的示例。

三、对我国开源软件安全工作的启示

2021年10月,中国人民银行、中央网信办等五部门联合发布了《关于规范金融业开源技术应用与发展的意见》,就规范金融机构合理应用开源技术,提高应用水平和自主可控能力等方面提出了原则性要求,开源软件安全是其中的重要内容;2022年11月初,国家标准《信息安全技术 软件产品开源代码安全评价方法》完成立项。

这些都说明国家层面已意识到开源软件安全的重要性,并着手规范应对此类问题。结合前面的相关研究,本文建议可从以下三个方面考虑开源软件的安全评价方法:

· 从开源软件使用者角度确立指标体系框架。

S2C2F给出了一个很好的示范,该框架从开源软件使用者的角度梳理出8项安全实践,对应于使用过程中的8个环节。因为开源软件使用者同样也是评价方法的使用者和评价结果的决策者,所以从这个角度设计的框架更符合广泛的理解逻辑,能够产生更好的指导效果。

· 兼顾开源软件的自身安全和基础设施安全。

对于开源软件安全性的评价,既要考虑安全漏洞、后门、恶意代码、数字签名、SBOM等自身的安全因素,同时也应该兼顾诸如OpenSSF最佳实践徽章和《NPM最佳实践指南》之中明确的官方发布网站、版本控制、构建、加密、包管理器、漏洞共享披露机制等基础设施的安全。

· 统筹开源软件安全评价的指导性和落地性。

一方面,可参考目前已有的标准、指南和框架,并结合我国开源软件使用组织的实际状况,制定兼具指导性和完备性的开源软件安全评价指标体系;另一方面,可借鉴S2C2F工具列表的做法,推荐相关的自动化工具,并将国产优秀工具作为首选,以增强评价方法的落地性和实操性。

关于作者

董国伟,虎符智库专家,奇安信集团代码安全实验室高级专家,博士,从事网络安全、软件安全、代码审计和漏洞分析相关工作近20年。

声明:本文来自虎符智库,版权归作者所有。文章内容仅代表作者独立观点,不代表安全内参立场,转载目的在于传递更多信息。如有侵权,请联系 anquanneican@163.com。