下一代 SCA:流水线成分分析

百眼魔君
• 阅读 671

软件成分分析(SCA)是检测开源库等依赖项中漏洞的重要工具。随着现代应用程序的组成从以自定义代码为主的转变为高达70-90%的开源,管理来自第三方的依赖项的漏洞比以往任何时候的重要性都高出许多。然而现有的 SCA 解决方案专注于应用程序代码中的依赖,但它们不涵盖软件交付流水线中的许多其他依赖项,比如构建模块(如 GitHub Actions)、开发工具(如 Jenkins)、开发工具插件(如插件生态系统)等。

到目前为止,保护整个流水线包含的依赖很少受到关注。根据之前的 SolarWinds 事件发现,攻击者通过突破过时和易受攻击的构建服务器版本,从而扩大攻击的规模和影响。易受攻击的依赖无论是在应用程序的代码中还是软件交付流水线中,都能构成漏洞风险。

为了使解决方案与漏洞风险保持一致,不仅需要将依赖项的定义扩展到应用程序代码之外,还必须考虑优先级和修补。由于了解交付流水线或运行时环境在本质上限制了可使用的范围,传统的 SCA 工具目前还无法实现这些动作。

本文将会讨论 SCA 的不足之处,并探索和分析流水线成分分析(Pipeline Composition Analysis, PCA)这一概念在现代 SDLC 保护依赖的能力,以及未来趋势。

为什么 SCA 落后了?

传统的 SCA 始于2002年。从2011年到2016年,这期间的 SCA 供应商把更多重心放在将 SCA 嵌入开发人员的工作流程中,而产品核心本身是没有变化的。但与此同时, SDLC 发生了巨大的变化,随着现代开发实践的变革,对开发速度要求更高,团队也需要更紧密地合作,企业在整个开发流水线中使用了更多的工具和第三方组件。这就导致现代应用程序使用的依赖比以往任何时候都多。

而 SCA工具本身只关注应用程序代码。应用程序代码可能包含漏洞,但依赖不仅仅存在于应用程序的源代码。今天,整个软件交付流水线中通常存在易受攻击的依赖,包括:

  • 开发工具(如Jenkins)
  • 开发工具插件(如Jenkins插件)
  • 构建模块(如 Github Action)
  • 构建模块依赖(如GitHub Action libiaries)
  • IaC 依赖

传统的 SCA 对这些组件并不具备良好的可见性,因此无法确定它们是否易受攻击。此外,传统 SCA 无法判断易受攻击的组件部署的具体位置,甚至无法判断这些组件是否已部署。

PCA 将是 SCA 二代吗?

PCA 是一种概念上的进化和变革,重新思考 SCA 并使其适应依赖对现代开发流水线构成的实际风险。PCA 通过深入了解交付流水线每个阶段使用的工具、配置、流程、活动、组件和依赖,从而改进 SCA。

PCA 对 SDLC 本身的洞察在几个关键方面打破了 SCA 的局限性,包括依赖覆盖的广度、通过部署位置进行快速修补以及基于运行时可利用性的优先排序。

覆盖范围的广度:保护应用程序代码之外的依赖

软件依赖是应用程序所依赖的第三方编写的任何代码,现代应用程序使用的依赖的数量和种类大幅增加。除了应用程序代码中的依赖外,现代应用程序依赖还包括以下内容:

1. 开发工具

构成软件交付流水线的工具和基础设施是关键的依赖。源代码控制管理系统、构建系统、注册表、容器和云环境都是支持应用程序的第三方软件。这些工具中的漏洞是 AppSec 团队常见的漏洞来源。

2. 开发工具插件

不仅是开发工具依赖,而且许多开发工具提供的生态系统也是必须被保护的依赖。比如最近 Jenkins 宣布了数十个需要更新的易受攻击的插件。

3. 构建模块

随着 GitOps 的趋势走高,也提高了 GitHub Actions 和 GitLab Runners 等构建模块的受欢迎程度。这些是第三方代码,能够以难以捉摸的方式将漏洞引入软件供应链。

4. 构建模块引入依赖

不仅构建模块本身可能很易受攻击,而且一些构建模块还引入了其他依赖,这些依赖也需要保护。

5. IaC 引入的依赖

与构建模块一样,IaC文件还可以引入 AppSec 团队需要管理和监控的其他依赖。

快速响应易受攻击的依赖

漏洞依赖比自定义代码具有更大的风险,因为一旦常见的软件漏洞公开,漏洞利用就会随之而来,这给了攻击者可乘之机。PCA 的一个关键功能是跟踪 SDLC 所有阶段(从代码到云)依赖的部署路径。PCA 不仅可以确定哪些依赖易受攻击,还可以确定其是否已经部署以及部署到对应位置。

鉴于 Log4Shell 事件,快速响应新的易受攻击的依赖显得至关重要,但这并不是件简单的事,因为修复根本问题常常需要多次更新。需要明确的是,确切了解易受依赖的部署位置,对于提高应用修复的速度和确保所有易受攻击实例被修复都非常重要。虽然传统的 SCA 能够在源代码中找到缺陷,但在确定漏洞部署到生产中的位置存在盲区。

优先级:运行时中的可利用性

修补速度至关重要,但并不是所有的漏洞都可以在部署它们的每个运行时环境中被利用。开发人员时间很宝贵,因此了解依赖是否可以在部署的运行时环境中被利用也格外关键。

虽然 Log4Shell 是需要快速修补的漏洞的例子,但 Spring4Shell 是大多数生产环境中可能不需要修复的漏洞的一个例子。为了利用 Spring4Shell,运行时环境必须包括:

  • JDK 9 或更高
  • Apache Tomcat 作为 servlet 容器
  • 作为传统 WAR 打包,并部署在独立的 Tomcat 实例中(使用嵌入式 servlet 容器或响应式 Web 服务器的典型 Spring Boot 部署不受影响)
  • spring-webmvc 或 spring-webflux
  • Spring Framework版本5.3.0至5.3.17、5.2.0至5.2.19及更早版本

Spring4Shell 的复杂可利用性凸显了了解构成运行时环境的所有组件的重要性。由于很少有组织修复过所有漏洞,因此确定优先级是降低 AppSec 风险的关键。

总 结

PCA 代表了下一代 SCA。它有着强大的安全洞察力,是软件供应链安全平台的支柱。与未能考虑整个部署流水线的工具相比,企业能够很大程度受益于PCA,通过使用 PCA 作为在整个开发流水线中检测和修补漏洞的手段,SDLC 更加安全,开发人员效率更高。

参考链接:

https://cycode.com/blog/multi...

https://www.cisa.gov/uscert/a...

https://cycode.com/blog/pipel...

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
美凌格栋栋酱 美凌格栋栋酱
6个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Wesley13 Wesley13
3年前
FLV文件格式
1.        FLV文件对齐方式FLV文件以大端对齐方式存放多字节整型。如存放数字无符号16位的数字300(0x012C),那么在FLV文件中存放的顺序是:|0x01|0x2C|。如果是无符号32位数字300(0x0000012C),那么在FLV文件中的存放顺序是:|0x00|0x00|0x00|0x01|0x2C。2.  
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Stella981 Stella981
3年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Stella981 Stella981
3年前
DevOps世界中的软件开发
!(https://oscimg.oschina.net/oscnet/f40e68cbfe8148deb00f040b4e917a0a.jpg)在整个软件开发过程中,开发人员通常需要花费大量时间来修复错误和漏洞,以便一切按计划进行交付。但是,通过DevOps实践,可以更轻松地管理和保护这些问题。这是由于以下事实:使用DevOps实践的软
Stella981 Stella981
3年前
DevOps 安全威胁,你值得关注!
随着开源软件被大量引用,线上运行的代码中超过80%的部分是开源代码。软件安全的重点已经从内部代码转移到所引用开源部分上。DevOps安全需要关注内部研发团队的自研代码以及外部第三方开源软件的安全,对于内部代码,所使用的依赖必须清楚,如果底层依赖有风险,还必须快速反向分析哪些其他软件受到同样的威胁;目前DevOps安全团队和持续交付团队往往独立运行,信息交
为什么mysql不推荐使用雪花ID作为主键
作者:毛辰飞背景在mysql中设计表的时候,mysql官方推荐不要使用uuid或者不连续不重复的雪花id(long形且唯一),而是推荐连续自增的主键id,官方的推荐是auto_increment,那么为什么不建议采用uuid,使用uuid究
Python进阶者 Python进阶者
1年前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这