开源埋雷?一文带你看清安全风险!

news2024/11/26 0:41:35

导读

当前,国际形势中不稳定、不确定和不安全因素日益突出,各个行业中都存在没有硝烟的战争。在信息技术领域,由于去年俄乌冲突爆发,Oracle、SAP公司宣布暂停俄罗斯所有业务,Github考虑限制俄开发人员访问开源代码存储库的可能性。这也让我们意识到国外开源项目的地缘政治性,因此有关信息技术安全可控与开放创新的问题得到了国家的空前重视。

聚焦图数据库领域,国内大部分厂商均采用基于国外开源代码+自研的方式,由于搭建过程存在开源组件,因此研发的图数据库产品在商用过程中容易违反开源许可协议,产生知识产权侵权风险。 同时,安全管理企业Endor Labs发布报告指出“几乎所有(95%)开源漏洞都存在于可传递或间接依赖关系中”,我们也能了解到开源软件可能存在bug,易产生安全性或功能性漏洞,造成企业大量敏感信息与数据随着代码的共享而泄露。 此外,在软件部署后,一旦开源组件出现问题,则会牵一发而动全身,产生高昂的维护成本。

在此背景下,我们将以开源图数据库Neo4j为对象,分析其对开源软件的依赖关系和可能造成的影响。

依赖关系建模

Neo4j是一款流行的开源图数据库产品,包括沃尔玛、思科、eBay等国际知名企业都使用Neo4j创造业务价值,其在Github上也拥有庞大的开发者社群。在本文中,将以Github上Neo4j:5.9.0项目为例,分析其对开源项目的依赖关系。

首先解析该项目,可以发现其高度依赖于两百多个开源软件,而这些开源软件也存在嵌套依赖关系。我们将项目和开源软件抽象成点,并将开源许可协议设置成属性,它们之间的依赖关系抽象成边,具体图模型如下图所示。

图模型
▲ 图模型
项目一度依赖
▲ 项目一度依赖

Neo4j:5.9.0项目开源软件依赖关系中,包含ASF(Apache Software Foundation)、MPL(Mozilla Public License)、EPL(Eclipse Public License)、GNU(General Public License)等非Neo4j开源软件协议,其中遵循GPL(General Public License)类开源协议的组件,在软件商用过程中可能会引发企业知识产权风险,例如著作权侵权风险、专利侵权风险、商业秘密泄露风险等,从而产生法律纠纷。下面我们来看开源软件具体依赖链条可能会造成的风险情况。

依赖分析 - 关键节点

在一个网络中,最重要的节点不一定是权重最大、优先级最高的点,而是那些在群体间扮演着中介作用的节点。比如我们生活中的经纪人、中间商等,他们能够控制网络中的关键资源或信息流动。近似中介中心性(RABrandes Betweenness Centrality)算法常用于衡量顶点在网络中的重要性,即找到此类关键节点。在开源软件依赖网络中,可调用该算法寻找图中具备中介属性的开源软件,查看其开源许可协议,并分析这些节点对下游软件的影响,具体查询情况如下图所示。

近似中介中心性算法
▲ 近似中介中心性算法

Galaxybase Studio内置图算法引擎,通过CALL语句进行算法调用,并将查询结果按算法得分降序排序,剔除项目点neo4j:5.9.0,我们选取得分前三的节点,分别为org.junit.jupiter:junit-jupiter:5.9.3、com.vladsch.flexmark:flexmark-util:0.62.2和jakarta.ws.rs:jakarta.ws.rs-api:2.1.6三个开源项目。第一步,将这三个项目在图中找到,并将其双击展开。第二步,通过最短路径算法找到其与项目neo4j:5.9.0的依赖关系,以其中一条路径为例在画布上展示。

查询结果展示
▲ 查询结果展示

从画布上可以看到,依赖节点的分布密度符合算法执行结果。项目neo4j:5.9.0通过其它开源项目与上述三个项目产生依赖,而这三个项目在图上属于关键节点,其下游存在大量依附的开源组件。我们选取其中一项:org.junit.jupiter:junit-jupiter:5.9.3进行分析。查询可知该项目属于Junit,是一个Java语言的单元测试框架,遵循EPL(Eclipse Public License 1.0)许可协议。该协议规定将EPL下的源码混合进项目发布时,需做私人协议声明,声明的代码需继续遵守协议。而一旦由于开源许可协议或其它不可抗因素产生项目禁用,neo4j:5.9.0项目将无法进行内部单元测试,这对项目的稳定运行会造成重大影响。

依赖分析 - 近似中转节点

在开源软件的依赖网络中,不同软件包之间的功能存在差异,但当功能及接口兼容时,部分软件包可以实现平替。例如,针对日志文件会有不同的软件包提供支持,它们之间可以实现替换。此外,如果一个软件包开源协议由于变更导致不可用,那么该软件包的旧版依旧可以实现替换。紧密中心性(Closeness Centrality)算法是一种用于衡量顶点在图中的重要性的算法,它可以反映顶点的有效传播能力,具有最高紧密中心性得分的顶点到各个顶点的传播代价最小。在开源软件依赖网络中,可调用该算法寻找图中具备中转性质的开源软件,查看其开源许可协议,并分析节点周围依赖情况,具体查询结果如下图所示。

紧密中心性算法
▲ 紧密中心性算法

通过CALL语句调用gapl.ClosenessCentrality,并将查询结果按算法得分降序排序,剔除项目点neo4j:5.9.0。我们选择其中一项:org.apache.logging.log4j:log4j-core:2.20.0进行结果说明。

第一步,随机选取开源项目,比如javax.activation:activation:1.1,找到其通过中转节点与项目neo4j:5.9.0产生的依赖路径。

过中转节点最短路径
▲ 过中转节点最短路径

第二步,将中转节点移除,找到开源项目javax.activation:activation:1.1与项目neo4j:5.9.0产生依赖的最短路径。

移除后最短路径
▲ 移除后最短路径

从画布上可以看到,移除中转节点后,原始三跳就能产生的依赖路径需要增至四跳才能完成。而在实际开源项目中,是不存在真实中转节点的,每个需要依赖的开源软件均在项目中发挥重要作用。一旦由于不可靠因素产生软件禁用,往往导致项目不可运行。而通过开源组件的嵌套关系绕过禁用协议,也会增加项目开发的成本和不稳定性。

结语

通过上文两个图算法,我们能够直观地发现Neo4j的开源项目neo4j:5.9.0对开源软件高度依赖,导致该项目存在巨大的安全风险、知识产权风险、供应链安全风险。

因此,选择闭源项目以保证软件的安全性和可信性至关重要。 当前国内的图数据库厂商中,创邻科技7年磨一剑,成功自研出国内唯一成熟、商用、全自主知识产权的闭源Galaxybase图平台,已通过工信部中国软件评测中心《软件产品源代码溯源》评估,核心代码100%自研,能够完全满足各行业对国产数据库“自主可控”的诉求,完全避免因某个开源软件停止维护或出现严重的安全漏洞,而导致的业务中断可能与研发成本的浪费。

未来,我们也希望更多的用户能够最大程度地摆脱对开源软件的依赖,构建自主可控的防火墙。

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

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

相关文章

JS三座大山 —— 原型和原型链

系列文章目录 内容链接2023前端面试笔记HTML52023前端面试笔记CSS3 文章目录 系列文章目录前言一、原型是什么?二、原型链是什么?2.1 原型链全方面解析2.2 为什么构造函数也有原型? 总结 前言 理解原型和原型链可以帮助我们更好地理解 Java…

YOLOv5:解读general.py

YOLOv5:解读general.py 前言前提条件相关介绍general.pyclip_boxesscale_boxes ★ \bigstar ★xywh2xyxynon_max_suppression ★ ★ ★ \bigstar\bigstar\bigstar ★★★未完待续 参考 前言 记录一下自己阅读general.py代码的一些重要点,方便自己查阅。…

Java基础笔试题(一)

系列文章目录 Java基础知识题(一) Java基础知识题(二) Java基础知识题(三) Java基础知识题(四) Java基础知识题(五) 文章目录 系列文章目录 模块1 单选题1 单选题2 单选题2 单选题4 单选题5 模块2 单选题1 单选题2 补充一:理解is-a,has…

【python爬虫】5.爬虫实操(歌词爬取)

文章目录 前言项目:寻找周杰伦分析过程代码实现重新分析过程什么是NetworkNetwork怎么用什么是XHR?XHR怎么请求?json是什么?json数据如何解析?实操:完成代码实现 一个总结一个复习 前言 这关让我们一起来寻…

GraphQL渗透测试案例及防御办法

什么是GraphQL GraphQL 是一种 API 查询语言,旨在促进客户端和服务器之间的高效通信。它使用户能够准确指定他们在响应中所需的数据,从而有助于避免有时使用 REST API 看到的大型响应对象和多个调用。 GraphQL 服务定义了一个合约,客户端可…

【Linux系列】使用虚拟机安装Linux系统

首发博客地址 首发博客地址[1] 系列文章地址[2] 下载虚拟机 请从官网下载: https://customerconnect.vmware.com/en/downloads/info/slug/desktop_end_user_computing/vmware_workstation_player/17_0 如需不限速下载,请关注【程序员朱永胜】并回复 1018…

自研的外贸搜索工具

全球智能搜索 独有的VVPN技术有效绕过各种限制获取国外搜索引擎数据 1.支持全球所有国家搜索引擎,及社交平台,精准定位优质的外贸客户. 2.全球任意国家地区实时采集. 3.搜索引擎全网邮箱电话采集 4.社交平台一键查看采集(Facebook,Twitter,L…

基于Matlab实现频谱分析(附上源码+数据集)

Matlab是一个功能强大的数值计算和科学计算软件,可以用于频谱分析。频谱分析是一种信号处理技术,用于将时域信号转换为频域信号,以便更好地理解信号的频率特性。本文将介绍使用Matlab实现频谱分析的方法。 文章目录 部分源码完整源码数据集下…

Samba服务器

目录 一、什么是Samba? 二、Samba进程 三、Samba主要功能 四、Samba工作流程 五、Samba安全级别 六、Sam主配置文件/etc/samba/smb.conf 七、Samba服务配置案例 一、什么是Samba? Samba可以让linux计算机和windows计算机之间实现文件和打印机资源共享的一…

JavaWeb 速通Ajax

目录 一、Ajax快速入门 1.基本介绍 : 2.使用原理 : 二、Ajax经典入门案例 1.需求 : 2.前端页面实现 : 3. 处理HTTP请求的servlet实现 4.引入jar包及druid配置文件、工具类 : 5.Domain层实现 : 6.DAO层实现 : 7.Service层实现 : 8.运行测试 : 三、JQuery操作Ajax 1 …

Java:Stream流的使用步骤,中间方法,终结方法,收集Stream流

Stream流的相关知识 Stream流的使用步骤 1.获取Stream流 Stream流常见的中间方法 如果两个Stream流类型不一样,那么合并的时候就要变成Object类型 Stream流的常见的终结方法 转到数组中去

Angular安全专辑之四 —— 避免服务端可能的资源耗尽(NodeJS)

express-rate-limit是一个简单实用的npm包,用于在Express应用程序中实现速率限制。它可以帮助防止DDoS攻击和暴力破解,同时还允许对API端点进行流控。 express-rate-limit及其主要功能 express-rate-limit是Express框架的一个流行中间件,它允许根据IP地址或其他标准轻松地对请求…

中国智慧燃气行业市场需求

文章来源:中研普华产业研究院 关键词:智慧燃气、智慧燃气场站、智慧燃气平台、设备设施数字化、数字孪生、工业互联网 智慧燃气,是以城市输气管网为基础,各终端用户协调发展,以信息通信平台为支撑,具有信…

java spring cloud 企业工程管理系统源码+二次开发+定制化服务

工程项目各模块及其功能点清单 一、系统管理 1、数据字典:实现对数据字典标签的增删改查操作 2、编码管理:实现对系统编码的增删改查操作 3、用户管理:管理和查看用户角色 4、菜单管理:实现对系统菜单的增删改查操…

解决 .csv 文件上传到 pgsql 的字符报错问题

目录 背景问题解决办法 背景 上传 .csv 文件进行数据导入到 pg 时,报错显示如下: ods.tbl_inp_fee_detail.csv数据上传失败 报错信息:org.postgresql.util.PSQLException: ERROR: invalid byte sequence for encoding "UTF8": 0x00 Where: C…

NPDP认证|加班越多,产品经理的能力提升越快吗?

产品经理是现代企业中非常重要的职位,他们负责规划、设计、开发和推广公司的产品。为了使产品能够更好地满足市场需求,产品经理需要不断地提升自己的能力,以应对日益变化的竞争环境。有时,人们会认为加班是提高产品经理能力的途径…

链式栈StackT

C关键词:内部类/模板类/头插 C自学精简教程 目录(必读) C数据结构与算法实现(目录) 栈的内存结构 空栈: 有一个元素的栈: 多个元素的栈: 成员函数说明 0 clear 清空栈 clear 函数负责将栈的对内存释放…

[js逆向补环境专栏]过xhs的x2 x-s环境检测 -- part1

[补环境]过xhs的x2环境检测 – part1 Xhs的jsvmp用算法逆向确实容易头秃,扣代码对vmp而言也用处不大,此时补环境的重要性就出来了,通过把运行js的环境伪造得像浏览器一样,就能模拟出好像请求都是通过浏览器发起的一样。 这里要区…

光模块温度报警的原因及解决措施

光模块是数据中心网络中的关键组件,它们在高温环境下可能会受到影响。如果光模块的温度超过正常范围,可能会导致网络故障和光模块损坏。因此,了解光模块的温度报警并采取相应的解决措施非常重要。 一、光模块温度报警的原因 光模块温度报警通…

Linux之虚拟主机功能

目录 虚拟主机功能 概述 基于 IP 地址的虚拟主机 原理 案例 --- 增加多个IP地址,实现基于不同IP地址的虚拟主机功能 基于端口号的虚拟主机 原理 案例 --- 基于不同端口号的虚拟主机 基于域名的虚拟主机 原理 域名解析 案例 --- 使用2个域名建立虚拟主机网…