微软宣布 S2C2F 已被 OpenSSF 采用
开源供应链安全对大多数 IT 领导者来说是个日益严峻的挑战,围绕确保开发人员在构建软件时如何使用和管理开源软件 (OSS) 依赖项的稳健策略至关重要。Microsoft 发布安全供应链消费框架 (S2C2F) 是一个以消费为中心的框架,它使用基于威胁的风险降低方法来缓解开源软件 (OSS) 中的安全威胁。近日,S2C2F 已经被 OpenSSF 采用。S2C2F 与以供应商为中心和以工件为中心的框架相结合(例如 SLSA),为软件生产者和消费者提供了安全创建和使用软件的能力。
S2C2F 基本概念
S2C2F 是一个安全保证和降低风险的流程,专注于保护开发人员使用开源软件的方式。自2019年以来,作为微软范围内的一项计划,S2C2F在整个开发人员内部循环和外循环流程中提供安全指导和工具,这些流程在 Microsoft 中使用开源软件来防御和防止供应链攻击方面发挥了关键作用。
使用基于威胁的风险降低方法,S2C2F 的目标是:
- 提供强大的 OSS 治理计划
- 缩短平均修复时间(MTTR)以解决 OSS 中的已知漏洞
- 防止使用已泄露和恶意的 OSS 软件包
S2C2F 三大核心概念
S2C2F 基于三个核心概念来建立模型,即控制所有工件输入、持续过程改进和规模。
控制所有工件输入
开发人员今天有无数种方式使用 OSS:gitclone,wget,复制粘贴源代码,将二进制文件签入存储库,直接从公共包管理器,将 OSS 重新打包为.zip,curl,apt-get,git 子模块等。如果开发团队不遵循使用 OSS 的统一流程,那么想要保障开源软件供应链安全几乎是不可能完成的任务。实施有效的安全开源软件供应链策略需要在整个组织的各个开发人员团队中标准化企业的 OSS 使用流程。
持续流程改进
为了帮助指导组织进行持续流程改进,将 S2C2F 组织为成熟度模型。这有助于企业确定应首先实施哪些要求的优先级。由于安全风险是动态的,新威胁随时可能出现,因此S2C2F 非常重视了解 OSS 供应链面临的新威胁,并要求定期评估 S2C2F 控制措施并引入变化以应对新技术进步或新威胁。
规模
S2C2F 框架工具在设计时考虑了规模。某些组织可能会尝试通过企业中央内部镜像仓库来保护其 OSS 提取过程。但是如果开发人员选择直接从 pypi.org 或 npmjs.com 中提取该如何阻止?企业中央内部镜像仓库还存在需要团队管理流程和工作流的问题。因此,开发 S2C2F 工具是为了保护如今大规模使用 OSS 的工作方式。

图片来源:Microsoft
S2C2F 八大实践
S2C2F自 2019 年以来一直在Microsoft内部使用和完善。它被构建为一个以消费为中心的框架,使用基于威胁的风险降低方法来减轻现实世界的威胁。该框架列举了现实世界供应链对 OSS 的威胁列表,并解释了框架的要求如何减轻这些威胁。该框架还包括分为 8 个不同的实践领域:

图片来源:Microsoft
由于所有 8 个实践无法同时合理实施,因此以下成熟度模型将 8 个实践中每个实践的需求组织成 4 个不同的级别。它允许组织从其现有的安全功能集逐步发展到更安全的防御态势。此外,成熟度模型在每个成熟度级别考虑不同的威胁和主题。
S2C2F 成熟级别
根据项目及其条件,企业可以跨项目实现多个框架级别。此外,与风险/回报相比,成熟度模型的第 4 级具有较高的估计实施成本,因此应被视为企业最理想的模式。虽然很难在整个组织中大规模实施 Level 4,但在最关键项目的最关键依赖项上实施级别 4 是可行的。
Level 1 – 改级别代表许多企业已经应用的一组基本治理实践,使用包管理器、执行 OSS 清单以及扫描和更新 OSS 依赖项。
Level 2 – 此级别在第一级的基础上构建,侧重于通过提高引入配置安全性、减少平均修复时间以修补 OSS 漏洞以及响应事件来进一步实现“安全左移”。2020 年的 SaltStack 漏洞就很好地证明,攻击者能够在宣布 CVE-2020-11651 后的 3 天内开始利用它。即使有补丁可用,企业也无法足够快地修补他们的系统。因此,此级别的一个关键组件利用自动化来帮助开发人员保持其 OSS 安全和更新。理想的目标是让企业能够比攻击者更快地进行修补。
Level 3 – 该级别侧重于主动安全分析与预防性控制相结合,主动对企业最常用的 OSS 组件执行安全分析并降低使用恶意包的风险。在下载软件包之前扫描 OSS 中的恶意软件是防止泄露的关键。然后,要对 OSS 进行主动安全审查,企业可以将源代码克隆到内部位置。主动安全审查可帮助企业查找尚未发现的漏洞,以及识别其他威胁类别,例如检测后门。
Level 4 – 此级别代表可减轻最复杂攻击但难以大规模实施的控制措施。在受信任的构建基础设施上重建 OSS是确保OSS在构建时不会受到威胁的防御步骤,这种成熟级别是防御最复杂的攻击时所需要的。此外,重建 OSS 还有许多刁钻的技术挑战,例如如何命名包以防止与上游发生冲突?如何确保所有开发人员都使用内部包而不是外部包?

图片来源:Microsoft
使用 S2C2F,团队和组织能够根据成熟度模型更有效地确定他们工作的优先级。在框架内针对特定级别的合规性的能力意味着团队可以在降低供应链风险方面取得有意和渐进的进展。S2C2F 包括评估组织成熟度的指南,以及推荐来自整个行业的工具以帮助满足企业的框架要求的实施指南。
微软宣布 S2C2F 已被 OpenSSF 采用的更多相关文章
- 解决Linux c语言运行时候“段错误 (核心已转储)”问题-采用gdb 解决
编译没有警告,没有错误,运行就打印 段错误 (核心已转储) 网上找了一下,都是各种问题,都推荐用gdb 调试解决,咱也来趁机学习gdb一下. gcc+gdb)输入命令行 运行 sudo apt-g ...
- 微软发布了开发社区采用.NET Standard的最新信息
最近,微软发布了开发社区当前采用.NET Standard的最新信息..NET Standard是API的正式规范,现有.NET实现在不同平台的是通用的(从而允许跨平台开发).当前规范(版本2.0)在 ...
- 在数据库访问项目中使用微软企业库Enterprise Library,实现多种数据库的支持
在我们开发很多项目中,数据访问都是必不可少的,有的需要访问Oracle.SQLServer.Mysql这些常规的数据库,也有可能访问SQLite.Access,或者一些我们可能不常用的PostgreS ...
- 那些年黑了你的微软BUG
本文为 Dennis Gao 原创技术文章,发表于博客园博客,未经作者本人允许禁止任何形式的转载. 前言 炎炎夏日,朗朗乾坤,30℃ 的北京,你还在 Coding 吗? 整个 7 月都在忙项目,还加了 ...
- 纳德拉再造微软:市值如何重回第一阵营(思维确实变了,不再是以windows为中心,拥抱其它各种平台,敢在主战场之外找到适合自己的新战场)
有人说,现在的美国硅谷充满了“咖喱味”.也有人说,硅谷已经变成“印度谷”.原因就在于,以微软CEO萨提亚·纳德拉.谷歌CEO桑达尔·皮查伊为代表的印度人,近年以来掌控了全世界最令人望而生畏的科技巨头. ...
- CSS3与页面布局学习总结(八)——浏览器兼容与前端性能优化
一.浏览器兼容 1.1.概要 世界上没有任何一个浏览器是一样的,同样的代码在不一样的浏览器上运行就存在兼容性问题.不同浏览器其内核亦不尽相同,相同内核的版本不同,相同版本的内核浏览器品牌不一样,各种运 ...
- CSS3与页面布局学习笔记(八)——浏览器兼容性问题与前端性能优化方案
一.浏览器兼容 1.1.概要 世界上没有任何一个浏览器是一样的,同样的代码在不一样的浏览器上运行就存在兼容性问题.不同浏览器其内核亦不尽相同,相同内核的版本不同,相同版本的内核浏览器品牌不一样,各种运 ...
- FlasActionScript3随学随机
1.跳转页面代码.下载代码(new URLRequest(下载地址)): var request1:URLRequest=new URLRequest("http://www.baidu.c ...
- COM思想的背后
最近看公司的一些新产品和框架 , 发现清一色的“COM思想架构 ”, 这里说的“COM思想架构”是指不完全是标准COM组件的方式,而是指在设计上用到了COM思想. COM组件技术大概在1993年产生, ...
- 快速入门系列--WCF--01基础概念
转眼微软的WCF已走过十个年头,它是微软通信框架的集大成者,将之前微软所有的通信框架进行了整合,提供了统一的应用方式.记得从自己最开始做MFC时,就使用过Named Pipe命名管道,之后做Winfo ...
随机推荐
- Elasticsearch基础但非常有用的功能之一:别名
文章转载自: https://mp.weixin.qq.com/s?__biz=MzI2NDY1MTA3OQ==&mid=2247484454&idx=1&sn=43e95a2 ...
- CentOS使用yum方式安装yarn和nodejs
# 使用epel-release.repo源安装的nodejs版本是6.17.1,有些前端项目使用的话会提示版本太低,具体下图 # 命令执行后的详细情况:curl -sL https://rpm.no ...
- Maven+SpringMVC+Dubbo 简单的入门demo配置
转载自:https://cloud.tencent.com/developer/article/1010636 之前一直听说dubbo,是一个很厉害的分布式服务框架,而且巴巴将其开源,这对于咱们广大程 ...
- 从应用访问Pod元数据-DownwardApi的应用
对于某些需要调度之后才能知道的数据,比如 pod 的 ip,主机名,或者 pod 自身的名称等等,k8s 依旧很贴心的提供了 Downward API 的方式来获取此类数据,并且可以通过环境变量或者文 ...
- Goland Socket 服务
客户端发送消息 并接收服务端消息 package main import ( "fmt" "net" ) func main() { // conn, err ...
- Filter 筛选器(二)之 ExceptionFilter
public class MyExceptionFilter : IAsyncExceptionFilter { private readonly ILogger<MyExceptionFilt ...
- 代码块及final关键字的使用
1.代码块的作用:用来初始化类.对象 2.代码块如果有修饰的话,只能使用static. 3.分类:静态代码块 vs 非静态代码块 4.静态代码块 内部可以有输出语句 随着类的加载而执行,而且只执行一次 ...
- 上传数据、下载模板文件解决方案(前端:antd;后端:.Net Core WebAPI)
一.Excel 模板下载 通过静态文件下载. 将模板文件放在根目录的 public 文件夹下备用. 下载事件方法如下:(通过临时生成一个 a 标签,触发后再移除) downLoadExcelModel ...
- 每日算法3:随机生成五个不同整数,将数字转换为RMB格式
随机生成五个不同整数 点击查看代码 /* 题目解析: 1.采用Math对象的random()方法, 2.将每次生成的数跟之前的数判断相等则此次生成无效i-- */ function randomNum ...
- DHorse系列文章之镜像制作
DHorse系列文章之镜像制作 制作镜像常用的工具 使用Docker制作镜像 1.使用docker commit制作 该命令使用比较简单,可以自行网上搜索教程. 2.使用Dockerfile制作 这种 ...