下一代 SCA:流水线成分分析
软件成分分析(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://www.cisa.gov/uscert/apache-log4j-vulnerability-guidance
https://cycode.com/blog/pipeline-composition-analysis-the-next-generation-of-sca/
下一代 SCA:流水线成分分析的更多相关文章
- 软件成分分析(SCA)完全指南
上一篇文章中,我们讨论了 DAST 的概念.重要性及其工作原理.那在开发过程中如何查找开源软件包中的漏洞并学习如何修复?本指南带你一起了解 SCA 工具及其最佳实践. 如今,绝大多数代码驱动的应用程序 ...
- 漫谈SCA(软件成分分析)测试技术:原理、工具与准确性
摘要:本文介绍了SCA技术的基本原理.应用场景,业界TOP SCA商用工具的分析说明以及技术发展趋势:让读者对SCA技术有一个基本初步的了解,能更好的准确的应用SCA工具来发现应用软件中一些安全问题, ...
- 斯坦福ML公开课笔记15—隐含语义索引、神秘值分解、独立成分分析
斯坦福ML公开课笔记15 我们在上一篇笔记中讲到了PCA(主成分分析). PCA是一种直接的降维方法.通过求解特征值与特征向量,并选取特征值较大的一些特征向量来达到降维的效果. 本文继续PCA的话题, ...
- 机器学习 —— 基础整理(四)特征提取之线性方法:主成分分析PCA、独立成分分析ICA、线性判别分析LDA
本文简单整理了以下内容: (一)维数灾难 (二)特征提取--线性方法 1. 主成分分析PCA 2. 独立成分分析ICA 3. 线性判别分析LDA (一)维数灾难(Curse of dimensiona ...
- Topographic ICA as a Model of Natural Image Statistics(作为自然图像统计模型的拓扑独立成分分析)
其实topographic independent component analysis 早在1999年由ICA的发明人等人就提出了,所以不算是个新技术,ICA是在1982年首先在一个神经生理学的背景 ...
- PCA主成分分析 ICA独立成分分析 LDA线性判别分析 SVD性质
机器学习(8) -- 降维 核心思想:将数据沿方差最大方向投影,数据更易于区分 简而言之:PCA算法其表现形式是降维,同时也是一种特征融合算法. 对于正交属性空间(对2维空间即为直角坐标系)中的样本点 ...
- [学习笔记] numpy次成分分析和PCA降维
存个代码,以后参考. numpy次成分分析和PCA降维 SVD分解做次成分分析 原图: 次成分复原图: 代码: import numpy as np from numpy import linalg ...
- ICA (独立成分分析)
介绍 独立成分分析(ICA,Independent Component Correlation Algorithm)简介 X=AS X为n维观测信号矢量,S为独立的m(m<=n)维未知源信号矢量 ...
- 机器学习--近邻成分分析(NCA)算法 和 度量学习
1.近邻成分分析(NCA)算法 以上内容转载自:http://blog.csdn.net/chlele0105/article/details/13006443 2.度量学习 在机器学习中,对高维数据 ...
- 独立成分分析 ICA 原理及公式推导 示例
独立成分分析(Independent component analysis) 前言 独立成分分析ICA是一个在多领域被应用的基础算法.ICA是一个不定问题,没有确定解,所以存在各种不同先验假定下的求解 ...
随机推荐
- 批处理(Batch或离线计算)和流计算(Streaming或实时计算)
大数据处理流程 课程:https://developer.aliyun.com/learning/course/432/detail/5385 流程 发 批处理(Batch或离线计算) 基础:goog ...
- JAVA多线程(2)——锁(对象锁和类锁)
1.如下代码 1 public class TestSync1 implements Runnable { 2 Timer1 timer = new Timer1(); 3 public static ...
- or等价改写union SQL案例
同事找我优化一些SQL,其中有个SQL比较经典,拿出来分享给大家,从原来执行2分钟,到1.4S出结果. -- 原SQL SELECT count (*) FROM ( SELECT DISTINCT ...
- WebSocket魔法师:打造实时应用的无限可能
1.背景 在开发一些前端页面的时候,总是能接收到这样的需求:如何保持页面并实现自动更新数据呢?以往的常规做法,是前端使用定时轮询后端接口,获取响应后重新渲染前端页面,这种做法虽然能达到类似的效果,但是 ...
- Java SPI机制总结系列之万字详细图解SPI源码分析
原创/朱季谦 我在<Java SPI机制总结系列之开发入门实例>一文当中,分享了Java SPI的玩法,但是这只是基于表面的应用.若要明白其中的原理实现,还需深入到底层源码,分析一番. 这 ...
- window.onload 触发时机问题
.markdown-body { line-height: 1.75; font-weight: 400; font-size: 16px; overflow-x: hidden; color: rg ...
- logstash 配置文件语法介绍
大家好,我是蓝胖子,之前在构建服务监控实践那个系列里,有提到用logstash来做日志的收集,但是对于logstash的配置文件语法没有做很详细的介绍,今天就来详细聊聊logstash配置文件的语法. ...
- 分享一个LCD驱动框架
首先需要说明的是本篇文章不是关于如何点亮一块LCD屏的教程,而是介绍一个LCD开发框架,更准确的说是介绍一个LCD的中间件(Middlwware),用来连接UI和不同类型的LCD屏.笔者本人的工作内容 ...
- Mybatis-Flex核心功能之@Id
1.是什么? 在 Entity 类中,MyBatis-Flex 是使用 @Id 注解来标识主键的 2.怎么玩? public @interface Id { /** * ID 生成策略,默认为 non ...
- Oracle-lsnrctl监听进程控制
LSNRCTL> help The following operations are available An asterisk (*) denotes a modifier or extend ...