SCA 工具:开源安全威胁一手掌控

news2025/1/16 17:39:46

1、什么是 SCA

SCA(Software Composition Analysis)软件成分分析,通俗的理解就是通过分析软件包含的一些信息和特征来实现对该软件的识别、管理、追踪的技术。我们知道在当今软件开发中,引入开源软件(注 1)到你的项目中,避免重复造轮子是大家都再熟悉不过的了,比如开源库中开源软件按每年 21%速度在增长(来源 Forrester 报告),开源安全威胁成为企业组织无法回避的话题,而应用 SCA 技术对应用程序进行安全检测,实现安全管理是最行之有效的方法之一。

2、基本原理

SCA 理论上来说是一种通用的分析方法,可以对任何开发语言对象进行分析,Java、C/C++、Golang、Python、JavaScript 等等,它对关注的对象是从文件层面的文件内容,以及文件与文件之间的关联关系以及彼此组合成目标的过程细节。从 SCA 分析的目标程序形式上分,既可以是源代码也可以是编译出来的各种类型的二进制文件,分析的数据对象对程序架构,编译方式都是不敏感的,比如:类名称、方法/函数名称、常量字符串等等,不管目标程序运行在 x86 平台还是 ARM 平台,不管是 windows 程序还是 Linux 程序,都是一样的,简而言之 SCA 是一种跨开发语言的应用程序分析技术。

SCA 分析过程:首先对目标源代码或二进制文件进行解压,并从文件中提取特征,再对特征进行识别和分析,获得各个部分的关系,从而获得应用程序的画像—–组件名称+版本号,进而关联出存在的已知漏洞清单。

由于 SCA 分析过程中不需要把目标程序运行起来,因此具有分析过程对外部依赖少,分析全面,快捷、效率高的优点。

3、业界 TOP SCA 工具分析

根据 Forrester 最新 SCA 报告,Forrester 通过 10 个维度(注 3)对不同工具进行打分,最后根据综合得分评选出如下业界 TOP 10 SCA 工具魔力象限图:

3.1 工具概览分析

1. TOP 10 SCA 工具中有 5 款支持软件包(注 2)开源软件 SCA 检查能力(synopsys/Sonatype/Veracode/Jfrog/GitLab),其他工具只支持源代码 SCA 检查能力。

2. 5 款支持软件包 SCA 检查工具中,对 C/C++、Java、.Net 语言支持的比较好,但对 Golang、python、JavaScript 语言支持能力偏弱,比如:synopsys 支持的组件对象中前面 3 种语言占大头 90%+,相应的检测率也高,而 Golang 语言的组件检出率则低很多。

3. SCA 已从主要用作对开源软件的检测向应用程序的典型编码问题检测趋势扩展,比如 Veracode 工具,它能提供了对诸如缓冲器溢出、命令行注入、死锁、重复释放、整形数溢出、UAF、格式化字符串漏洞,SQL 注入等典型编码问题的检测能力。

4、影响 SCA 分析准确性的因素分析

1. 从 SCA 原理可以知道影响分析准确性的因素分两个方面:其一是 SCA 工具支持组件的数量和检测算法,其二是应用程序引用开源软件的方式。

2. 因为 SCA 工具是根据样本组件特征来匹配被测程序中的特征来判断应用程序是否引用该组件的,因此支持组件的数量越多,那么检测率也就越高,支持的组件数量越少,越会导致检测遗漏;另外检测算法和特征设计是否合理也直接影响到分析的准确性和分析效率,不同 SCA 工具厂商有不同的解决方案,就好比在手机上识别指纹/人脸一样,不同厂商识别的灵敏度和准确度都不一样。

3. 应用程序在引用开源软件时,不同的应用程序即使引用同一个组件也存在引用不同的功能,引用功能的多少也各不相同,这样带来的结果就是在应用程序中包含该组件的特征数量也是大小不同的,引用功能多包含的特征一般也多,引用的功能少包含的特征也少。而应用程序包含组件特征的多少直接影响到 SCA 工具的检测的准确性,组件特征越少 SCA 工具检测越困难,因此即使两个不同应用都引用了相同组件,可能一个应用可以检测到,另外一个应用则无法检测出该组件。这种场景对 SCA 工具检测二进制文件尤其明显。

4. 由于存在上述 SCA 分析准确性,在极限情况下如果无法检测出组件,那么也就无法知道应用程序中是否存在该组件的漏洞了。

5、总结:

1. 不管是源代码文件的 SCA 检测工具还是二进制文件的 SCA 检测工具,他们是一种互补的关系,各有各的优缺点,比如二进制文件的 SCA 检测能发现构建过程中工具链引入的安全问题,而源代码的 SCA 则不能,SolarWinds 事件就很好的说明了这一点。

2. 目前 SCA 工具检测开源软件的已知漏洞是基于组件名称+版本号来关联出已知漏洞的,对部分编译场景(只有部分组件代码被编译到二进制文件中)和 patch 打补丁场景(漏洞已修复),误报率高。

3. SCA 工具扫描效率和准确性是一对矛盾体,这是工具厂商需要权衡考虑的地方,而既能提升准确率又不会降低扫描效率的技术永远是 SCA 工具厂商研究的课题和追求的目标。

注 1:Top 10 开源软件编程语言:JavaScript(51%)、C++(10%)、Java(7%)、Python(7%)、Ruby(%5)、Go(4%)、C(4%)、PHP(4%)、TypeScript(4%)、C#(3%)、Perl(2%)、Shell(1%)

注 2:软件包是指产品用来安装、运行的发布包,里面包含了产品编译好的可以运行的二进制文件,比如.so/.jar/.exe/.dll/.pyc

注 3: a.License 风险管理;b.漏洞识别;c.主动式漏洞管理;d.策略管理;e.SDLC 集成;f.容器和无服务器扫描; g.审计报告;h.风险报告;i.修复速度报告;j.厂商自行分析

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/162176.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

线性DP-----(从某点走到某点求最值问题)

线性DP 线性dp问题是dp问题中比较简单的问题,通常一个状态转移方程就可以搞定,线性dp通常求最大值,最小值问题,下面介绍线性dp中从某点走到某点最值问题。 第一类问题(走一遍) 该类问题只走一遍,动态规划中用到的数组f(i,j)含义就是到达(i,j)点得到的最优解 例题1—数字三角形 …

分享88个JavaScript源码,总有一款适合您

JavaScript源码 分享88个JavaScript源码,总有一款适合您 JavaScript源码下载链接:https://pan.baidu.com/s/1guiYWOPKdP1zNW7T8P0caQ?pwd6666 提取码:6666 采集代码下载链接:采集代码.zip - 蓝奏云 下面是文件的名字&#xf…

jinja2 循环计数内置变量loop

变量内容loop.index循环迭代计数(从1开始)loop.index0循环迭代计数(从0开始)loop.revindex循环迭代倒序计数(从len开始,到1结束)loop.revindex0循环迭代倒序计数(从len-1…

【正点原子FPGA连载】 第十八章双目OV5640摄像头HDMI显示实验 摘自【正点原子】DFZU2EG/4EV MPSoC 之FPGA开发指南V1.0

1)实验平台:正点原子MPSoC开发板 2)平台购买地址:https://detail.tmall.com/item.htm?id692450874670 3)全套实验源码手册视频下载地址: http://www.openedv.com/thread-340252-1-1.html 第十八章双目OV5…

jsp题库管理系统Myeclipse开发sqlserver数据库web结构java编程计算机网页项目

一、源码特点 jsp 题库管理系统 是一套完善的web设计系统,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为TOMCAT7.0,Myeclipse8.5开 发,数据库为sqlserver,使…

Kafka集群安装

Apache kafka是由Apache软件基金会开发的一个开源流处理平台,由Scala和Java编写。Kafka是一种高吞吐量的分布式发布订阅消息系统,是消息中间件的一种,用于构建实时数据管道和流应用程序。Kafka官网:http://kafka.apache.org/安装环…

1-连续系统PID的Simulink仿真

以二阶线性传递函数。为被控对象,进行模拟PID控制。在信号发生器中选择正弦信号,仿真时取,,,输入指令为,其中A1.0,F0.20Hz。采用ODE45迭代方法,仿真时间为10s。PID控制器由Simulink下的工具箱提…

【Ansible】Ansible Jinja2 模板

Ansible Jinja2 模板 文章目录Ansible Jinja2 模板一、Ansible Jinja2 模板背景介绍二、JinJa2 模块1.JinJa2 是什么?2.Jinja2 必知会3.Jinja2 逻辑控制三、如何使用模板四、 实例演示一、Ansible Jinja2 模板背景介绍 目前 nginx 的配置文件在所有的服务器上都是相…

六种常见系统架构

六种常见系统架构 - 基础篇目录概述需求:设计思路实现思路分析1.URL管理2.微服务架构3.四、微服务架构4.多级缓存架构参考资料和推荐阅读Survive by day and develop by night. talk for import biz , show your perfect code,full busy,skip hardness,m…

【Unity学习笔记】[Unity中文课堂教程] C#中级编程代码

【Unity学习笔记】[Unity中文课堂教程] C#中级编程代码 最近想补一补C#基础,Unity官方的C#中级编程教程质量很高,于是开个帖子把跟着敲记录了部分价讲解和我自己的理解的代码存在这 原课程链接:添加链接描述 https://www.bilibili.com/video…

Java字符流(FileReader/FileWriter)

文章目录概念FileReader字符输入流相关方法和构造器FileWriter字符输出流相关方法和构造器为什么用完不close或flush,会写入不到数据?概念 在Java中,使用Unicode约定存储字符。字符流自动允许我们逐字符读/写数据,有助于执行16位…

2023年网络爬虫实训(第五天)

任务1:掌握re.match和re.search的用法,完成课堂代码.掌握基础通配符的用法如\w \s \d [] * ^ $.并完成作业4. 1.re.match() re.match()的是从头匹配一个符合规则的字符串,从起始位置开始匹配,匹配成功返回一个对象&…

1.力扣刷题之二分查找

题目: 704. 二分查找 - 力扣(LeetCode) 思路 解题 左闭右闭 左闭右开 题目: 704. 二分查找 - 力扣(LeetCode) 思路 这道题首先要找出关键词:有序数组,元素不重复;这些都是使用二分法的前提条件&#x…

使用Stable Diffusion和Pokedex的描述生成神奇宝贝图片

还记得我们以前使用GAN、Clip、DALL-E生成神奇宝贝的文章吗,现在是时候使用Stable Diffusion了 在本文中,我将展示如何从神奇宝贝系列不同游戏中的Pokedex条目中获取神奇宝贝描述,并使用Stable Diffusion根据这些藐视生成图片,这样…

【基数排序】 C++高效实现

题目描述 给定你一个长度为 nnn 的整数数列。 请你使用快速排序对这个数列按照从小到大进行排序。 并将排好序的数列按顺序输出。 输入格式 输入共两行,第一行包含整数 nnn。 第二行包含 nnn 个整数(所有整数均在 1∼1091 \sim 10^91∼109 范围内&…

Android架构演进 · 设计模式· 为什么建议你一定要学透设计模式?

“ 【小木箱成长营】设计模式系列文章(排期中): Android 架构演进 设计模式 Android 常见的 4 种创建型设计模式(上) Android 架构演进 设计模式 Android 常见的 4 种创建型设计模式(下) Android 架构演进 设计模式 Android 常见的 6 种结构型设计模式(上) An…

vue2 中组件的生命周期

目录 一、组件的生命周期 1、什么是组件的生命周期? 2、生命周期的阶段划分: (1)创建阶段:beforeCreate、created、beforeMount、mounted ​(2)运行阶段:beforeUpdate、updatev…

【顺序表】数据结构,java代码实现

前言: 大家好,我是良辰丫🍓🍓🍓,顺序表和数组有什么区别呢,我们带着这个疑问去接触顺序表,学习顺序表相关知识。🚀🚀🚀 🧑个人主页&am…

商城系统春节氛围营造

春节将至,无论是线上还是线下,都在紧锣密鼓的进行春节营销,线下商家可以通过布置店铺,来营造节日氛围,那对于线上商城来说,又能从哪些方面进行氛围营造呢?今天,我们就以CRMEB Pro版系…

Spring Boot Actuator详解与深入应用(一):Actuator 1.x

《Spring Boot Actuator详解与深入应用》预计包括三篇,第一篇重点讲Spring Boot Actuator 1.x的应用与定制端点;第二篇将会对比Spring Boot Actuator 2.x 与1.x的区别,以及应用和定制2.x的端点;第三篇将会介绍Actuator metric指标…