下一代 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是一个不定问题,没有确定解,所以存在各种不同先验假定下的求解 ...
随机推荐
- 3种web会话管理的方式(session)
阅读目录 https://www.cnblogs.com/lyzg/p/6067766.html 1. 基于server端session的管理 2. cookie-based的管理方式 3. tok ...
- JAVA 类显式加载
类显式加载 1.Class.forName("classloader.Dog"); 方式加载 Example1 1 package classloader; 2 3 publ ...
- nginx 配置 proxy_next_upstream 会出现未预期 502 错误问题排查
当使用nginx代理多个网关实例时, 当被请求服务的get 接口异常时,如 error timeout invalid_header http_500 http_502 http_503 http_5 ...
- 龙芯发布 .NET 8 SDK 8.0.100-rc2 LoongArch64
随着.NET 8的发布的临近,国内的社区朋友们也很关心龙芯.NET 团队对于Loongarch .NET 8的发布时间,目前从龙芯.NET编译器团队的可靠信息,Loongarch .NET 8的发布会 ...
- 神经网络入门篇:神经网络的梯度下降(Gradient descent for neural networks)
神经网络的梯度下降 在这篇博客中,讲的是实现反向传播或者说梯度下降算法的方程组 单隐层神经网络会有\(W^{[1]}\),\(b^{[1]}\),\(W^{[2]}\),\(b^{[2]}\)这些参数 ...
- 解密Spring Cloud微服务调用:如何轻松获取请求目标方的IP和端口
公众号「架构成长指南」,专注于生产实践.云原生.分布式系统.大数据技术分享. 目的 Spring Cloud 线上微服务实例都是2个起步,如果出问题后,在没有ELK等日志分析平台,如何确定调用到了目标 ...
- PX4安装环境测试
1.ROS环境测试 安装ROS版本:melodic roscore // 注意下面是打开一个新的终端,roscore一直在运行 rosrun turtlesim turtlesim_node // 再 ...
- DevOps|研发提效-敏捷开发之每日站立会
对于研发效能团队建设和组织,本文不再赘述,可以参考之前的文章,已经讲得很透彻了.本文重点讲我们日常是怎么开站立会,怎么让团队跑起来,高效能产出的.每日站立会,15分钟到30分钟,看似非常短的一个会,但 ...
- 基于DotNetty实现自动发布 - 项目的配置与发现
前言 上一篇,我们实现了基于 DotNetty 的通信基础模块的搭建,本篇,主要实现待发布 Web 项目的集成. 创建待发布项目 为了测试, 我创建了一个基于 .NET 4.8 的 Web 项目 Op ...
- 【UniApp】-uni-app-内置组件
前言 好,经过上个章节的介绍完毕之后,了解了一下 uni-app-全局数据和局部数据 那么了解完了uni-app-全局数据和局部数据之后,这篇文章来给大家介绍一下 UniApp 中内置组件 首先不管三 ...