OpenSCA是国内最早的开源SCA平台,继承了商业级SCA的开源应用安全缺陷检测、多级开源依赖挖掘、纵深代码同源检测等核心能力,通过软件成分分析、依赖分析、特征分析、引用识别、合规分析等方法,深度挖掘组件中潜藏的各类安全漏洞及开源协议风险。

不同于传统企业版 SCA 工具,OpenSCA 轻量易用、能力完整,支持漏洞库、私服库等自主配置,覆盖IDE/命令行/云平台、离线/在线等多种使用场景,支持Java、JavaScript(Node.js)、PHP、Python、Go (Golang)、Rust、Erlang等多种主流编程语言并支持生成软件物料清单(SBOM),可灵活地接入开发流程,为企业、组织及个人用户输出透明化的组件资产及风险清单。

图1 OpenSCA支持的编程语言

一、OpenSCA使用方式和技术原理

1. 轻量级零成本安装使用

开发人员在写代码时需要全面思考、高效设计并快速迭代,因而希望工具易用性好、不拖慢开发节奏。

OpenSCA-cli是OpenSCA的命令行工具,支持在Windows/Linux/MacOS操作系统运行使用,部署简单,命令快捷。

云端在线检测:

可关联最新的漏洞数据,通过将本地解析的组件信息(不包含代码信息)上传至OpenSCA云平台进行漏洞库比对,识别组件的漏洞风险信息。

图2 在线检测命令示例

本地离线检测:

可以按照OpenSCA提供的漏洞库格式准备自己的漏洞库信息,无需将解析的组件信息传输到OpenSCA云平台,就可完成组件漏洞检测。

 图3 本地检测命令示例

检测结果格式:

支持将检测结果保存到指定文件,根据后缀生成不同格式的文件,默认为JSON格式;支持以SPDX格式展示SBOM清单,只需更换相应输出文件后缀。支持生成HTML格式的检测报告。

图4.1 检测命令示例

​图4.2 检测报告示例

2. 分析应用组件成分

引擎首先会检查项目是否有支持的特征文件,如果有特征文件,把需要的特征文件提取出来。解析jar包内的特征文件,如果包内无特征文件或特征文件解析不到有效数据则会尝试用jar包名检索获取组件名称和版本。如果通过jar包名检索失败则会按照"{组件名}-{版本号}.jar"的格式直接解析jar包名。

3. 分析开源组件依赖关系

开源软件包中80%的漏洞存在于传递依赖关系中,这意味着代码中的大多数漏洞都包含在复杂且正在使用的(嵌套)依赖项中。OpenSCA可以准确地检查代码中的所有依赖项,解析代码中使用的开源包的深度和复杂性,能够确保在各个级别都进行合适有效的漏洞检测。

在项目完整编译环境下,许多语言都会有比较成熟的包管理器,OpenSCA可以基于它的依赖配置文件去识别组件。例如mvn dependency:tree获取完整依赖树的过程,通过解析静态文件就可以获取非常完整的依赖关系。

OpenSCA后续新版本也将支持没有构建之前进行源代码层级的组件成分扫描,通过解析特征文件、组件文件、代码片段来识别成分。通过接入GitHub或Gitee的在线代码仓库,一旦仓库添加了新的组件信息,可以在早期检测并帮助开发人员识别潜在的风险。

但是对于本身组件体系完整而普适度高的语言,比如Java当中频繁使用了依赖引用链,这种引用关系往往可能存在2-3层以上,而这种依赖关系仅从静态的pom.xml中是没办法获取的。OpenSCA间接依赖可以从云平台组件库进行完整深度的递归解析所有层级的子依赖。

 图5 OpenSCA检测流程

4.分析实际依赖组件

由于已识别的组件漏洞数量庞大,很快就会掩盖了漏洞的可见性及其对企业构成的真实风险指数。但企业发现的实际漏洞中有70%-85%不是致命漏洞,因为企业的专有软件不会调用存在这些漏洞的组件。

如何检测并判断应用实际使用到的组件是不可或缺的关键能力。OpenSCA在解析文件依赖信息时首先会检查组件是否是生产环境的组件(生产/开发环境的组件一般会在依赖文件中标识)。

通过解析过滤掉并非实际使用到的组件,从源头上减少无效组件和漏洞信息带来的干扰。

5. 开源组件完整性分析

对于jar包文件,会计算其MD5值后与知识库中记录的组件MD5进行匹配,判断当前组件的完整性。

 图6 完整性校验流程

6. 检测开源组件漏洞风险

OpenSCA-cli提供了云平台漏洞库和离线漏洞库两种关联方式,来满足用户的在线和离线使用需求。

因此,OpenSCA的漏洞库的全面性和实时性可以起到重要的分析作用。依赖分析可以知道哪些项目或应用程序受到了漏洞的影响。

长期对知名开源组件追踪,大量漏洞源收集和独家漏洞的补充使得漏洞库快速全面的更新。

基于海量的组件库、漏洞库、许可证库、开源项目库等知识数据能够最大程度的匹配出正确的组件版本和对应的风险信息。通常,同一个漏洞可能存在于同一个组件的多个版本中,又或者同一个漏洞可能存在于不同的组件中,通过对关键漏洞的验证核实,OpenSCA能够最准确的给出修复推荐组件版本和安全的组件版本范围供用户选择。

7. 推荐修复方案

准确覆盖并识别了漏洞风险和优先级,但是如何进行有效修复?OpenSCA具备完善的漏洞修复方案和安全版本的开源组件推荐。

漏洞运营团队会对漏洞进行复现和修复验证。最大程度地完善漏洞修复信息,包括临时补丁、官方补丁、配置文件、缓解措施等。帮助用户快速评估修复影响和修复时间。

8. 提高许可证合规性

企业开发人员不能只是使用、复制、修改或分发开源依赖项。为了在软件中正确且合法地使用开源组件,必须了解在代码中使用的每个开源依赖项的协议权限、限制与使用条件。这将有助于企业创建定义和实施安全准则的策略。

OpenSCA能够从文件级别和代码级别,帮助企业深入了解开源组件的许可条款和条件,以及许可证的兼容关系。在制定安全策略时,企业可以在软件开发生命周期初期采用许可证合规性的规范。

9. 生成SBOM(软件物料清单)

软件物料清单(SBOM,Software Bills of Materials)是描述软件包依赖树的一系列元数据,包括供应商名称、组件名称、版本号、许可证信息、依赖关系等关键信息,通过SBOM技术和管理手段,可以帮助企业或团队梳理并透明化软件供应链资产。

通过使用OpenSCA自动化构建并生成应用程序的SBOM,在每次添加、删除依赖项或更改组件版本时可自动更新SBOM以确保SBOM的准确性。后续也将支持用户上传SBOM清单分析项目是否使用了存在已知漏洞的组件并构建完整的资产风险视图。当其它组件爆出漏洞时也可根据SBOM快速排查受影响项目,提高供应链的透明度和安全性。

.OpenSCA的优势

1. 先发优势

作为全球首款开源的企业级SCA技术产品,OpenSCA继承了源鉴OSS大量的企业实践落地技术沉淀,后续也将持续吸取商业实践,不断更新优化OpenSCA的服务能力。

2. 社区优势

依托于社区用户参与友好度以及以产品交付能力驱动的社区运营能力,OpenSCA荣获GVP(Gitee最有价值开源项目)年度荣誉与软博会“全球十大开源软件产品”。

和越来越多参与贡献的开发者一起共建,OpenSCA将会更快速成长。

3. 迁移成本优势

用户可以在初期使用OpenSCA来满足业务需求,后续需要更丰富的功能,可以平滑升级到商业企业版本。用户体验和使用习惯可以得到延续,降低迁移成本。

4. 技术优势

4.1 特征检测

对于包管理器的检测方式,支持两种方案,一种是传统的依赖包管理器环境,另一种支持模拟包管理器解析逻辑,具备高度定制化能力。

如何判断是否有版本冲突时的依赖,可以按照包管理器的排除机制处理(maven会采用依赖路径最短的依赖)。比如maven解析pom中的依赖、属性,需要获取pom时去仓库拉取,版本冲突时按照maven的规则进行处理。

4.2 同源检测

开发者可以直接、完整地引入开源组件,但可能在很多时候,只是发现某一个开源项目中某一个代码片段写得不错就选择copy。这个代码片段可能来自Github,行数不等,变量定义不明。此时传统SCA的依赖分析功能无法完成对这些代码片段的识别,需要更进一步的源代码同源分析。

OpenSCA即将发布版本可以检测不同语言的代码片段,识别代码级别引入的开源组件信息,及其关联的漏洞和许可证信息。通过同源检测,可以识别企业项目的代码自研率、代码溯源相似度分析、许可证风险兼容分析等。

4.3 二进制检测

C/C++这样的语言,没有像maven这样统一的包管理器,使得SCA识别起来会有困难。

OpenSCA即将发布版本通过导入二进制文件的方式引入依赖,能够对二进制文件进行扫描并收集其依赖信息。

OpenSCA二进制检测将拥有丰富的二进制分析经验和漏洞挖掘能力。使用数据流、控制流、污点分析等技术,从常见攻击面出发,提炼漏洞的二进制特征,提高版本匹配、漏洞匹配的准确性。无需源码,上传二进制文件,即可进行软件成分分析,生成完整安全报告,帮助客户快速获取软件风险。

4.4 强大的在线库

OpenSCA在线库集成了漏洞库、组件库、许可证库,并进行小时级别的实施更新和人工运营,既保证了数据的全面覆盖,也保证了风险信息的时效性。在检测过程中,引擎可在线调用云平台丰富的库资源进行比对,降低了系统漏报率,并对漏洞修复方案进行持续完善更新,帮助用户对风险进行有效闭环。

 图7 Gitee集成OpenSCA服务

OpenSCA的代码会在GitHub和Gitee持续迭代,欢迎Star和PR,成为我们的开源贡献者。有任何建议都可以发在评论区或者OpenSCA项目的Issues中。我们会参考大家的建议不断完善OpenSCA开源项目,敬请期待更多功能的支持。


GitHub:

https://github.com/XmirrorSecurity/OpenSCA-cli/releases 

Gitee:

https://gitee.com/XmirrorSecurity/OpenSCA-cli/releases 

OpenSCA官网:

https://opensca.xmirror.cn/

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

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

相关文章

旅游管理实训基地建设:筑牢文旅人才培养的实践基石

随着文旅产业的蓬勃发展,行业对高素质、强实践的旅游管理人才需求日益迫切。旅游管理实训基地建设作为连接理论教学与行业实践的关键纽带,既是深化产教融合的重要载体,也是提升旅游管理专业人才培养质量的核心抓手。一、旅游管理实训基地建设…

网络爬虫的相关知识和操作

介绍 爬虫的定义 爬虫(Web Crawler)是一种自动化程序,用于从互联网上抓取、提取和存储网页数据。其核心功能是模拟人类浏览行为,访问目标网站并解析页面内容,最终将结构化数据保存到本地或数据库。 爬虫的工作原理 …

【vue-6】Vue3 响应式数据声明:深入理解 ref()

在 Vue3 的 Composition API 中,ref() 是最基础也是最常用的响应式数据声明方式之一。它为开发者提供了一种简单而强大的方式来管理组件状态。本文将深入探讨 ref() 的工作原理、使用场景以及最佳实践。 1. 什么是 ref()? ref() 是 Vue3 提供的一个函数&…

HTML常用标签汇总(精简版)

<!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>简单标记</title> </head><body>&…

【.net core】支持通过属性名称索引的泛型包装类

类/// <summary> /// 支持通过属性名称索引的泛型包装类 /// </summary> public class PropertyIndexer<T> : IEnumerable<T> {private T[] _items;private T _instance;private PropertyInfo[] _properties;private bool _caseSensitive;public Prope…

【机器学习|学习笔记】详解支持向量机(Support Vector Machine,SVM)为何要引入核函数?为何对缺失数据敏感?

【机器学习|学习笔记】详解支持向量机(Support Vector Machine,SVM)为何要引入核函数?为何对缺失数据敏感? 【机器学习|学习笔记】详解支持向量机(Support Vector Machine,SVM)为何要引入核函数?为何对缺失数据敏感? 文章目录 【机器学习|学习笔记】详解支持向量机(…

Bicep入门篇

前言 Azure Bicep 是 ARM 模板的最新版本,旨在解决开发人员在将资源部署到 Azure 时遇到的一些问题。它是一款开源工具,实际上是一种领域特定语言 (DSL),它提供了一种声明式编写基础架构的方法,该基础架构描述了虚拟机、Web 应用和网络接口等云资源的拓扑结构。它还鼓励在…

命名实体识别15年研究全景:从规则到机器学习的演进(1991-2006)

本文精读NRC Canada与NYU联合发表的经典综述《A survey of named entity recognition and classification》&#xff0c;解析NERC技术演进脉络与核心方法论 一、为什么命名实体识别&#xff08;NER&#xff09;如此重要&#xff1f; 命名实体识别&#xff08;Named Entity Rec…

eNSP综合实验(DNCP、NAT、TELET、HTTP、DNS)

1搭建实验拓扑2实验目的学习掌握eNSP中的命令3实验步骤3.1配置连接PC和客户端的交换机(仅以右侧为例)[Huawei]vlan batch 10 20 #创建vlan Info: This operation may take a few seconds. Please wait for a moment...done. [Huawei]un in en [Huawei]interface e0/0/2 [Huawei…

无人系统与安防监控中的超低延迟直播技术应用:基于大牛直播SDK的实战分享

技术背景 在 无人机、机器人 以及 智能安防 等高要求行业&#xff0c;高清视频的超低延迟传输 正在成为影响系统性能与业务决策的重要因素。无论是工业生产线的远程巡检、突发事件的应急响应&#xff0c;还是高风险环境下的智能监控与远程控制&#xff0c;视频链路的传输延迟都…

go语言学习之包

概念&#xff1a;在Go 语言中&#xff0c;包由一个或多个保存在同一目录的源码文件组成&#xff0c;包名宇目录名无关&#xff0c;但是通常大家习惯包名和目录名保持一致&#xff0c;同一目录的源码文件必须使用相同的包名。包的用途类似于其他语言的命名空间&#xff0c;可以限…

pytorch学习笔记(五)-- 计算机视觉的迁移学习

系列文章目录 pytorch学习笔记&#xff08;一&#xff09;-- pytorch深度学习框架基本知识了解 pytorch学习笔记&#xff08;二&#xff09;-- pytorch模型开发步骤详解 pytorch学习笔记&#xff08;三&#xff09;-- TensorBoard的介绍 pytorch学习笔记&#xff08;四&…

数字IC后端培训教程之数字后端项目典型项目案例解析

数字IC后端低功耗设计实现案例分享(3个power domain&#xff0c;2个voltage domain) Q1: 电路如下图&#xff0c;clk是一个很慢的时钟test_clk&#xff08;属于DFT的)&#xff0c;DFF1与and 形成一个clock gating check。跑pr 发现&#xff0c;时钟树综合CTS阶段&#xff08;C…

2025 Data Whale x PyTorch 安装学习笔记(Windows 版)

一、Anaconda 的安装与基本操作 1. 安装 Anaconda/miniconda 官方链接&#xff1a;Anaconda | Individual Edition 根据系统版本选择合适的安装包下载并安装。 2. 检验安装 打开 “开始” 菜单&#xff0c;找到 “Anaconda Prompt”&#xff08;一般在 Anaconda3 文件夹…

mac OS上docker安装zookeeper

拉取镜像&#xff1a;$ docker pull zookeeper:3.5.7 3.5.7: Pulling from library/zookeeper 3.5.7: Pulling from library/zookeeper 3.5.7: Pulling from library/zookeeper no matching manifest for linux/arm64/v8 in the manifest list entries报错&#xff1a;由于时M3…

设备通过4G网卡接入EasyCVR视频融合平台,出现无法播放的问题排查和解决

EasyCVR视频融合平台作为支持多协议接入、多设备集中管理的综合性视频解决方案&#xff0c;可实现各类终端设备的视频流汇聚与实时播放。近期收到用户反馈&#xff0c;在EasyCVR平台接入设备后出现视频流无法播放的情况。为帮助更多用户快速排查同类问题&#xff0c;现将具体处…

板凳-------Mysql cookbook学习 (十二--------3)

第二章 抽象数据类型和python类 2.5类定义实例&#xff1a; 学校人事管理系统中的类 import datetimeclass PersonValueError(ValueError):"""自定义异常类"""passclass PersonTypeError(TypeError):"""自定义异常类""…

css flex 布局中 flex-direction为column,如何让子元素的宽度根据内容自动变化

在 display: flex 且 flex-direction: column 的布局中&#xff0c;默认情况下子元素会占满容器的宽度。要让子元素的宽度根据内容自适应&#xff0c;而不是自动拉伸填满父容器&#xff0c;你可以这样处理&#xff1a;✅ 解决方案一&#xff1a;设置子元素 align-self: start 或…

性能优化实践:Modbus 在高并发场景下的吞吐量提升(二)

四、Modbus 吞吐量提升实战策略4.1 优化网络配置选择合适的网络硬件是提升 Modbus 通信性能的基础。在工业现场&#xff0c;应优先选用高性能的工业级交换机和路由器。工业级交换机具备更好的抗干扰能力和稳定性&#xff0c;其背板带宽和包转发率更高&#xff0c;能够满足高并发…

上传ipa到appstore的几种工具

无论是用原生开发也好&#xff0c;使用uniapp或flutter开发也好&#xff0c;最好打包好的APP是需要上架appstore的。而在app store connect上架的时候&#xff0c;需要上传ipa文件到app store的构建版本上。因此&#xff0c;需要上传工具。下面分析下几种上传工具的优缺点&…