「 网络安全常用术语解读 」软件成分分析SCA详解:从发展背景到技术原理再到业界常用检测工具推荐

软件成分分析(Software Composition Analysis,SCA)是一种用于识别和分析软件内部组件及其关系的技术,旨在帮助开发人员更好地了解和管理其软件的构建过程,同时可帮助安全人员揭秘软件内部结构的神秘面纱。SCA技术的发展与软件行业的快速发展密不可分,下面将介绍SCA的发展背景、技术原理以及当前主流SCA工具。

1. SCA的发展背景及趋势

随着软件开发的复杂性不断增加,软件项目中使用的第三方组件和开源软件数量也大幅增加。然而,这些第三方组件往往存在潜在的安全漏洞和法律风险,因此对软件成分进行全面分析变得至关重要。SCA技术因此应运而生,成为软件开发生命周期中必不可少的一环。

Synopsys发布2024年开源安全和风险分析报告OSSRA中指出,有96%代码仓库包含开源代码,84%代码库包含至少一个已知开源漏洞,其中74%包含高风险漏洞。关于Synopsys 2024年发布的更详细的开源风险洞察报告可以点此下载(访问密码:6277)。

在这里插入图片描述

当前,越来越多的企业和开发团队开始重视软件成分分析,将其纳入到软件开发过程中,并寻求自动化和智能化的解决方案。SCA技术的趋势包括但不限于:

  • 更加精细化的组件识别和关系分析
  • 持续集成和持续部署(CI/CD)中的集成
  • 与软件漏洞数据库的整合

2. SCA技术原理

SCA技术的核心原理包括对软件源代码或二进制文件进行扫描,识别其中使用的第三方组件、库和框架,分析其版本、许可证、漏洞等信息,并生成报告以供开发人员参考。常见的分析方法包括静态分析、动态分析。

  • 静态分析通过检查软件源代码或二进制文件的组件依赖关系来进行分析,可以在早期发现潜在的问题。
  • 动态分析则是在软件运行时检查其实际行为,以获取更加全面的信息。

根据分析对象划分为两种SCA技术:源码SCA、二进制SCA。接下来具体介绍两种SCA技术的原理和优缺点。

2.1. 源码SCA

源码SCA分析的是软件的源代码,它通常需要访问项目的源代码仓库,对代码中的依赖关系进行分析。主要适用于开源项目、有完整源代码维护的项目,以及需要深入理解代码依赖关系的场景。

由于直接分析源代码,所以它可以更准确地识别出软件中使用的第三方库和它们的版本。具体来说,主要有以下三类分析方法:

  • 基于包管理器配置文件的分析:针对具有备包管理机制的语言,比如Java、Go、Python,可以通过解析开源软件包管理文件(如Java的POM.xml,Go语言的go.mod,Python的requirements.txt)来实现开源软件的关联分析,这种方法可以几乎可以100%准确的分析出引用的开源软件名称及依赖组件名称。
  • 基于文本相似度的分析:亦可称为源码文件级匹配,即根据源代码文件的相似度来判断待分析的源码文件属于什么组件和版本,文件相似度可以基于hash的严格匹配方法,也可以根据文本相似度匹配方法。
  • 基于语义的相似度分析:亦可称为源码片断匹配,即源代码依次通过词法分析、Token提取、语法分析、AST抽象语法树、语义分析过程来提取相应的关键特征,进一步融合机器学习、NLP、控制流图CFG、数据流图DFG等匹配算法进行代码相似度的检测。

源码SCA需要有可访问的源代码,因此对于没有源代码的二进制文件或封闭源代码的软件,这种方法不适用。

2.2. 二进制SCA

二进制SCA分析的是软件的二进制可执行文件或库文件,由于不需要访问源代码,二进制SCA可能无法像源码SCA那样精确地识别依赖关系,因为它依赖于二进制文件中的符号和字符串提取。具体分析过程通常涉及提取二进制文件中的函数名、常量字符串等信息(这些信息受CPU架构、编译选项的影响很少,几乎保持不变),然后与已知组件特征数据库进行比对即可识别二进制的成分。另,结合二进制代码的调用图CFG、数据流图DFG等信息可进行更加精准的检测,但由于这些分析涉及到二进制文件反汇编,分析时间非常长(50M大小的文件一般要2H左右),效率低,因此不适合对大量二进制文件进行扫描。

二进制SCA不需要源代码,适用于任何二进制文件,包括商业软件和封闭源代码的软件。

2.3. 源码SCA与二进制SCA的区别

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

对比项源代码SCA二进制SCA
分析对象源代码二进制文件
分析阶段开发阶段测试阶段
适用场景适合需要精确识别依赖关系和进行深入代码审计的场景适用于需要分析二进制文件,或者源代码不可用的场景
准确率中,检测准确率依赖于二进制中调用了多少开源软件的功能
检测绕过存在,源码在构建环境中引入或链接静态库引入的开源软件会绕过源代码SCA检测不存在
依赖组件检测能力弱,尤其是没有包管理机制的语言,很难检测到依赖组件强,二进制中包含所有引入的开源软件功能特征信息
人工确认分析难度低,源代码人工对比分析容易高,二进制人工很大对比分析,需要借助反汇编等多种工具,确认门槛高

3. 当前主流SCA工具

目前市面上有许多优秀的SCA工具,其中一些主流工具包括:

  • Black Duck: Black Duck 是一款知名的软件成分分析工具,当前已经被Synopsys(新思科技)收购,Black Duck一般被同行称为"黑鸭子"(直译),提供全面的开源软件扫描和漏洞检测服务,可同时支持源码及二进制SCA,是SCA界的Top1工具。它可以帮助用户识别软件项目中使用的第三方组件、版本信息,并检测这些组件是否存在已知的漏洞。Black Duck 还提供了丰富的报告和分析功能,帮助用户管理和降低软件安全风险。
  • Snyk: Snyk 是一款专注于开源组件安全的软件成分分析工具。它可以帮助用户发现项目中的漏洞、安全威胁和依赖关系问题,并提供实时的漏洞修复建议。Snyk 还提供了与开发工具集成的功能,方便开发团队在开发过程中及时解决安全问题。
  • WhiteSource: 已经于2023年改名为Mend,它是一款综合的软件成分分析工具,旨在帮助用户管理开源组件的合规性和安全性。它可以自动识别项目中使用的开源组件、版本信息,并提供实时的漏洞警报和修复建议。WhiteSource 还提供了与 CI/CD 工具集成的功能,支持持续集成和持续交付流程。
  • Nexus Lifecycle: Nexus Lifecycle 是 Sonatype 公司推出的一款软件成分分析工具,主要用于管理开源组件的安全和合规性。它可以帮助用户发现项目中的漏洞、许可证冲突等问题,并提供自动化的修复建议。Nexus Lifecycle 还提供了与开发工具集成的功能,支持开发团队在早期发现和解决安全问题。
  • Dependency-Check: Dependency-Check 是一款OWASP维护的开源软件成分分析工具,用于检测项目中使用的第三方组件是否存在已知的漏洞。它支持多种项目构建工具和编程语言,可以快速扫描项目的依赖关系,并生成漏洞报告。Dependency-Check 提供了易于集成和使用的功能,适合中小型团队和个人开发者使用。
  • 七彩棱镜FossEye:FossEye基于“左移安全”、DevSecOps及实时监控的安全理念,在软件生命周期中对开源软件和依赖组件进行持续、自动化的识别、安全分析、持续集成管理。FossEye的目标是能够适应敏捷开发,帮助企业解决因对开源软件维护、管理不善而产生的问题。

这些工具通过自动化的方式帮助开发人员进行软件成分分析,提高了软件开发过程中对第三方组件的管理效率和安全性。

4. 参考

[1] Synopsys发布2024年开源安全和风险分析报告OSSRA
[1] 源代码与二进制文件SCA检测原理
[2] 二进制SCA检测工具—技术短板及应对措施
[3] 基于源码的二进制SCA特征生成技术
[4] 漫谈软件成分分析(SCA)安全测试技术

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

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

相关文章

罗芬COHERENT pmb激光电源维修HPC830

Rofin激光电源 PMB高压电源维修:HPC625,HPC520,HPC210,HPC840,HPC830,HPC810,HPC818,HPC818 HPC814 HPC910等型号。 大型设备往往都配有功能较为故障诊断程序,我们可以充分利用软件的提示,缩小故障排查范围,但有时诊断软件提示的受损元件是否…

UE5 GAS开发P32,33 初始化状态并绑定在HUD上,拾取物品增加血量和减少蓝量

这节课主要是修改WidgetController和OverlayController,在EffectActor内新增了一个减少蓝量的代码,同时修复了一个bug,并且展示了为什么要写成单独的控制器,因为要考虑多人游戏的情况,每一个控制器都是一个单独的角色 首先修改AuraAttirbuteSet.cpp UAuraAttributeSet::UAura…

【C++】unordered_map unordered_set 底层刨析

文章目录 1. 哈希表的改造2. unordered_map3. unordered_set C STL 库中,unordered_map 和 unordered_set 容器的底层为哈希表,本文将简单模拟哈希表(哈希桶),unordered_map 和 unordered_set 只需封装哈希表的接口即可…

kylin Firefox Warning: Potential Security Risk Ahead

Warning: Potential Security Risk Ahead  Firefox detected a potential security threat and did not continue to 127.0.0.1. If you visit this site, attackers could try to steal information like your passwords, emails, or credit card details. 警告&…

java实现简单图书管理系统(附带源码)

项目要求 该项目会用到类和对象,封装、继承、多态、接口、等,会帮你巩固并加强这类知识 设计要求及思路 1.要求有两套系统分别给管理员和普通用户使用,经过开始的选择会有两个对应功能不同的菜单,这里两种角色我们可以放一个包…

华为ensp中nat地址转换(静态nat 动态nat NAPT 和Easy IP)配置命令

作者主页&#xff1a;点击&#xff01; ENSP专栏&#xff1a;点击&#xff01; 创作时间&#xff1a;2024年4月15日12点03分 实验拓扑 接下来我会分几个方面初步将静态nat和napt easy ip 首先基本的环境配置 AR1的基本配置 //基本的IP配置和默认路由指向外网 <Huawei&…

神仙级Python入门教程(超级详细),从零基础入门到精通,从看这篇开始

一、初聊Python 1.为什么要学习Python&#xff1f; 在学习Python之前&#xff0c;你不要担心自己没基础或“脑子笨”&#xff0c;我始终认为&#xff0c;只要你想学并为之努力&#xff0c;就能学好&#xff0c;就能用Python去做很多事情。在这个喧嚣的时代&#xff0c;很多技…

Java反序列化-(LazyMap)CC1链与CC6链

(LazyMap)CC1链 原版的CC1链&#xff1a; https://github.com/frohoff/ysoserial/blob/master/src/main/java/ysoserial/payloads/CommonsCollections1.java可以发现对比之前的 TransformMap版本的CC1链&#xff0c;从这里开始就不一样了 分析LazyMap.get() 直接进入到Laz…

OnlyOffice配置minio文件存储

OnlyOffice配置minio文件存储 一、部署minio测试环境 拉取minio镜像 为了快速验证&#xff0c;此处使用docker安装部署minio服务。先拉取minio最新版镜像资源。 -bash-4.2# docker pull minio/minio:latest -bash-4.2# docker images | grep minio minio/minio …

企业业务系统与呼叫中心话务系统的无缝对接实现方案

在当今的商业环境中&#xff0c;企业的业务系统与呼叫中心话务系统的对接显得尤为重要。这种对接不仅提高了企业的运营效率&#xff0c;还增强了客户服务的体验。本文将探讨如何实现企业业务系统与呼叫中心话务系统的无缝对接&#xff0c;并分析其带来的好处。 一、对接的必要性…

用html写一个有趣的鬼魂动画

<!DOCTYPE html> <html lang"en" > <head><meta charset"UTF-8"><title>一个有趣的鬼魂动画</title><link rel"stylesheet" href"https://cdnjs.cloudflare.com/ajax/libs/meyer-reset/2.0/reset.m…

2024第十五届蓝桥杯 JAVA B组

目录 前言&#xff1a;试题 A: 报数游戏试题 B: 类斐波那契循环数试题C:分布式队列 前言&#xff1a; 没参加这次蓝桥杯算法赛&#xff0c;十四届蓝桥杯被狂虐&#xff0c;对算法又爱又恨&#xff0c;爱我会做的题&#xff0c;痛恨我连题都读不懂的题&#x1f62d;,十四届填空只…

如何在Linux系统部署Joplin笔记并结合内网穿透实现无公网IP远程访问

文章目录 1. 安装Docker2. 自建Joplin服务器3. 搭建Joplin Sever4. 安装cpolar内网穿透5. 创建远程连接的固定公网地址 Joplin 是一个开源的笔记工具&#xff0c;拥有 Windows/macOS/Linux/iOS/Android/Terminal 版本的客户端。多端同步功能是笔记工具最重要的功能&#xff0c;…

简单粗暴解决 wampapache 突然无法启动错误1053

问题是因为没有安装:vc_redist_x64 导致的 全网最简单粗暴解决下 DirectX_v4.1修复

芯来科技、IAR和MachineWare携手加速符合ASIL标准RISC-V汽车芯片创新

支持软件开发团队在虚拟硬件平台上进行固件和MCAL开发 芯来科技&#xff08;Nuclei&#xff09;、IAR和MachineWare紧密合作&#xff0c;加速RISC-V ASIL合规汽车解决方案的创新。此次合作简化了汽车电子的固件和MCAL开发&#xff0c;提供了虚拟和物理硬件平台之间的无缝集成。…

SQL单表查询(2)

对查询结果排序 ◆使用ORDER BY子句 – 可以按一个或多个属性列排序 – 升序&#xff1a;ASC&#xff1b;降序&#xff1a;DESC&#xff1b;缺省值为升序 ◆ 当排序列含空值时 – ASC&#xff1a;排序列为空值的元组最后显示 – DESC&#xff1a;排序列为空值的元组最先显…

护眼台灯哪个牌子好?护眼灯十大品牌推荐,绝对真香!

对于有孩子的家庭&#xff0c;特别是阅读爱好者&#xff0c;晚上阅读时的光线问题至关重要。昏暗环境长时间阅读&#xff0c;会严重伤害孩子的眼睛。因此&#xff0c;选择一款合适的护眼台灯显得尤为重要。但市场上品牌众多&#xff0c;护眼台灯哪个牌子好?这往往让人难以抉择…

Linux 5.10 Pstore 学习之(二) 原理学习

目录 编译框架模块初始化pstore子系统ramoops模块初始化实例化注册回调数据结构 pstore_blk模块pstore_zone模块 测试扩展调试 编译框架 目标结构 linux_5.10/fs/pstore/ ├── blk.c ├── ftrace.c ├── inode.c // 核心1 ├── internal.h ├── Kconfig ├── …

(四)C++自制植物大战僵尸游戏启动流程

植物大战僵尸游戏开发教程专栏地址http://t.csdnimg.cn/ErelL 一、启动方式 鼠标左键单机VS2022上方工具栏中绿色三角按钮&#xff08;本地Windows调试器&#xff09;进行项目启动。第一次启动项目需要编译项目中所有代码文件&#xff0c;编译生成需要一定的时间。不同性能的电…

CentOS7使用Docker搭建Joplin Server并实现多端同步与公网使用本地笔记

文章目录 1. 安装Docker2. 自建Joplin服务器3. 搭建Joplin Sever4. 安装cpolar内网穿透5. 创建远程连接的固定公网地址 Joplin 是一个开源的笔记工具&#xff0c;拥有 Windows/macOS/Linux/iOS/Android/Terminal 版本的客户端。多端同步功能是笔记工具最重要的功能&#xff0c;…