下一代 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是一个不定问题,没有确定解,所以存在各种不同先验假定下的求解 ...
随机推荐
- 产品代码都给你看了,可别再说不会DDD(九):领域事件
这是一个讲解DDD落地的文章系列,作者是<实现领域驱动设计>的译者滕云.本文章系列以一个真实的并已成功上线的软件项目--码如云(https://www.mryqr.com)为例,系统性地讲 ...
- QT(9)-QStyleOption及其子类
1 QStyleOption QStyleOption及其子类包含QStyle函数绘制图形元素所需的所有信息. 出于性能考虑,成员函数很少,对成员变量的访问是直接的(即使用.或者->运算符).这 ...
- html-0
选择器 (一):first-child和:first-of-type :first-child第一个元素 <!DOCTYPE html> <html> <head> ...
- Idea单窗口导入多个项目模块
现在我们比较流行微服务,但是服务一旦多了,项目打开也是很麻烦的,运行内存16个G的电脑,基本上打开4,5个项目模块就顶不住了.那么,我们怎么把多个项目导入到一个idea窗口中呢? 实现效果 导入步骤 ...
- [C++]二叉链-二叉树存储
二叉链存二叉树 预备知识 指针的熟练掌握 Bolg template模板的知识 Bolg 二叉树的基本知识 感谢: 代码参考:CSDN博主「云雨澄枫」的原创文章 链接 代码解析 结构体 BiNode ...
- 04Java学习_DOS原理和路径详解
DOS原理和路径详解 目录 DOS原理和路径详解 DOS原理 路径详解 DOS常用命令 DOS原理 Dos:Disk Operating System 磁盘操作系统. 路径详解 相对路径:从当前目录开 ...
- Educational Codeforces Round 104 (Rated for Div. 2) A~E题解
写在前边 链接:Educational Codeforces Round 104 (Rated for Div. 2) A. Arena 链接:A题链接 题目大意: 给定一个长度为\(n\)的数组,表 ...
- .NET领域性能最好的对象映射框架Mapster使用方法
Mapster是一个开源的.NET对象映射库,它提供了一种简单而强大的方式来处理对象之间的映射.在本文中,我将详细介绍如何在.NET中使用Mapster,并提供一些实例和源代码. 和其它框架性能对比: ...
- 龙芯发布 .NET 8 SDK 8.0.100-ea1(试用版)
随着.NET 8的发布,国内的社区朋友们也很关心龙芯.NET 团队对于Loongarch .NET 8的发布时间,目前从龙芯.NET编译器团队已经在龙芯.NET 官网上发布龙芯.NET 8 SDK-8 ...
- 前端学习-html-1
html常用标签 h1-h6:标题 p:段落 strong/em: 对文本进行设置 strong--加粗,强调作用 比如:商品价格 em--斜体,对文本内容修饰成斜体 hr/br: hr ...