开源依赖项管理指南

news2024/11/30 8:37:51

就像人际关系中人与人之间的关系一样,软件生态系统中包含一个庞大的关系网络。其中一些联系非常深入,而有一些关系则更为表面。但实际上,现代基于开源的软件开发涉及一个极其庞大的依赖关系树,依赖关系层层叠加,同时涉及和包含已知或未知的风险。
 

Endor Labs 最近的一份报告发现,95% 的易受攻击的依赖项都是可传递的。这些传递性依赖项是深藏在软件供应链中的组件,使它们更难以评估和触及。这些易受攻击的软件包有些是已经过时,有些则是新发布的,根据报告结果发现2022 年发布的软件包中仍有 25% 存在 1 到 18 个已知漏洞
 

围绕开源依赖项的新漏洞每天都在产生。近期的软件供应链混乱(software supply chain chaos)为依赖项维护又增加了一层难度。尽管非营利组织和政府机构已寻求提高开源安全性并引入有关保护第三方软件的法规,但软件行业距离拥有必要的标准和技术来遏制开源依赖带来的安全隐患还有很长的路要走。
 

Endor 的2022年依赖管理状态报告着眼于现代基于开源的开发的复杂性并提供一些指导性建议。本文将总结该研究的要点,从而帮助大家更好地了解依赖管理的状态以及网络安全专业人员应如何应对
 

理解依赖传递

直接依赖是指应用程序直接依赖某个库或包来运行。另一方面,传递依赖是嵌入在包中的依赖。可以想象,应用程序开发人员可能会通过包含其他依赖项在不知不觉中将多个级别的传递依赖项插入到他们的应用程序中。报告中的图表 8 直观地描述了传递依赖项如何在下游应用程序中存在:
截屏2022-12-12 下午2.15.32.png
图片来源:EndorLabs

该报告发现依赖项平均深度相差两层,但在某些情况下可能达到七层之多。
 

对于这项研究,Endor Labs 从 Census II 报告中获取了一个数据集,该报告提供了一份最流行的免费开源软件 (FOSS) 列表,并使用其他来源对其进行了丰富。这些数据在 GitHub 上开源,代表了对涵盖 npm、maven、nugget、pipit 和 ruby gems 等发行版的生产应用程序的扫描。
 

在 Census II 数据集中提到的254个不同的 Maven 包中,大多数平均有 14 个依赖项。这可能看起来不是很高,但考虑到大多数应用程序有数十个(如果不是数百个)依赖项,应用程序拥有受影响的传递依赖项的可能性呈指数级增长。因此,随机的 Maven 包有 32% 的机会在其依赖树中隐藏一个或多个已知漏洞。一些离群值具有更多的依赖性,增加了潜在漏洞的可能性。例如,log4j-core v2.19.0 有 141 个依赖项,而更令人惊讶的是 aws-java-sdk v1.12.316 被发现存在 331 个依赖项。
 

如何管理依赖关系

在云服务提供商 (CSP) 的世界中,安全责任是共同承担的。CSP 保护基础设施,消费者保护构建在基础设施之上的应用程序。然而在开源世界中,安全责任很大程度上落在了软件消费者的身上。OSS消费者负全责,需要根据具体情况应对安全风险。话虽如此,我们已经看到监管机构采取了实质性行动,来建立更多关于第三方依赖性的标准。其中包括针对云服务的候选欧盟网络安全认证计划、白宫第 14028 号行政命令以及来自NIST、NITIA和ENISA的指南。此外,OpenSSF、CNCF 和 OWASP 等非营利组织继续传播最佳实践并开发相关的安全工具。然而,软件供应商仍必须自行确保其依赖树稳定且没有重大漏洞。以下是从报告中总结的一些关于如何应对的提示:
 

为开源项目做贡献。正如之前提到的,太多公司使用开放源代码而不回馈项目。开源需要集体努力来改进,但对比其高使用率,很少有企业组织真正支持它们并报告安全漏洞。
 

围绕软件采购和相关性管理构建更智能的文化。软件提供商需要更深入地研究依赖关系网,以审查依赖关系中的表面区域并发掘深层依赖。这也意味着需要更新依赖树中的旧组件,并在获取过程中更具选择性来避免恶意包。
 

删除未使用的依赖项。如果程序不调用上游项目中的依赖项,最好将其删除。这可以降低隐藏漏洞的可能性,并最大限度地减少相关安全风险。正如报告所说,软件组合分析 (SCA) 工具应优先分析实际会在生产中显示的依赖项,而不是仅用于测试目的的依赖项。
 

优先处理高风险和可触及的漏洞。企业可能更倾向快速修复CVSS评分更高的漏洞。此外企业还需要考虑漏洞的可达性(reachability)。黑客往往会选择那些容易被利用的低风险漏洞为目标,从而向企业发起恶意攻击。
 

合理安排更新时间。研究发现,只有 9% 的更新需要进行重大版本更改。然而,20.1% 的非主要版本会导致重大变更!依赖项更新可能需要花费时间和精力进行调试,但不进行处理可能会使主要漏洞利用容易受到攻击。因此,最好设置适合企业团队的定期更新节奏。
 

参考链接:
https://www.coreinfrastructure.org/programs/census-program-ii/
https://github.com/endorlabs/StateOfDependencyManagement2022
https://accelerationeconomy.com/cybersecurity/why-core-open-source-security-projects-need-more-resources/

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

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

相关文章

喜讯丨创新微MinewSemi的MS11SF1系列荣获2022中国IoT创新奖—产品金狮奖

北京时间2022年12月8日,由知名电子科技媒体“电子发烧友”举办的2022第九届中国IoT大会在深圳圆满落幕,创新微MinewSemi凭借高性能、低功耗的WiFiBLE Combo 模块—MS11SF1系列,在众多参会嘉宾和行业主流媒体的共同见证下,荣获2022…

卷积神经网络中卷积的作用与原理

目录 前言 卷积的作用 卷积的参数 卷积核大小(kernel_size) 填充(padding) same valid full 卷积核算子(operator) Robert 算子 Prewitt算子 Sobel 算子 Laplance 算子 卷积核深度与个数&…

【C++进阶】哈希(万字详解)—— 运用篇(下)

🎇C学习历程:入门 博客主页:一起去看日落吗持续分享博主的C学习历程博主的能力有限,出现错误希望大家不吝赐教分享给大家一句我很喜欢的话: 也许你现在做的事情,暂时看不到成果,但不要忘记&…

[附源码]Python计算机毕业设计电子工厂进销存管理系统Django(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程 项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等…

为什么要把测试环境的告警当成生产环境的告警处理?是一个哲学问题,还是一个技术问题?...

开发不愿意了一个后端服务通常有三个环境:测试环境,预发布环境,生产环境。运维在给测试环境增加告警规则和告警路由时,开发人员反对。这很容易理解,如果真把告警规则配置到测试环境,他们可能无时不刻地收到…

Web GIS开发教程

Web GIS开发教程 非程序员的基本 Web GIS 开发 课程英文名:Web GIS development course 此视频教程共4.0小时,中英双语字幕,画质清晰无水印,源码附件全 下载地址 课程编号:355 百度网盘地址:https://p…

杭州联合银行 x 袋鼠云:打造智能标签体系,助力银行大零售业务转型

“智能标签平台上线后,支行及业务部门已创建多个客群用于营销,为我行客户精细化管理打下了良好基础。” 2021 年,联合银行就已搭建了大数据基础平台,围绕平台搭建了数据研发平台、大数据调度平台及大数据服务平台,提高…

(附源码)Python飞机票销售系统 毕业设计 141432

摘 要 21世纪的今天,随着社会的不断发展与进步,人们对于信息科学化的认识,已由低层次向高层次发展,由原来的感性认识向理性认识提高,管理工作的重要性已逐渐被人们所认识,科学化的管理,使信息存…

Vue组件的嵌套关系,父组件传递子组件 ,事件总线,Provide,inject,作用域插槽,具名插槽非props的attribute ,子组件传递父组件

组件化 – 组件间通信 认识组件的嵌套 ◼ 前面我们是将所有的逻辑放到一个App.vue中:  在之前的案例中,我们只是创建了一个组件App;  如果我们一个应用程序将所有的逻辑都放在一个组件中,那么这个组件就会变成非常的臃 肿和难以维护;  所以组件化的核心思想应该是对…

【YOLOv5】记录YOLOv5的学习过程

以下记录的是Ubuntu20.04版本,其他Ubuntu版本也相差不大~ 一、安装pytorch GPU版本、显卡驱动、CUDA、cuDNN 下载pytorch GPU版本: 最新版本链接:Start Locally | PyTorch 历史版本链接:Previous PyTorch Versions | PyTorch…

MySQL——内置函数

文章目录内置函数日期函数字符串函数数学函数其他函数内置函数 日期函数 基本使用: 可以进行运算: 在日期基础上加时间 在日期基础上减时间 计算两个日期相差的天数 案例1: 建一张表,记录生日 案例2: 创建一…

设计有趣的轻巧真无线,体积小续航长,南卡小音舱上手

大家平时都会听听音乐、玩玩游戏,这时候就需要用到蓝牙耳机,特别是在户外接打电话时,戴上一副耳机都会方便很多。最近发现了一款南卡小音舱Lite2,这些天用过之后感觉它质量不错,做得十分小巧,日常携带特别方…

Postman带sessionId的post请求访问失败

Postman带sessionId的post请求访问失败1、Python 调用过程2、Postman 错误示例3、Postman 正确示例4、总结使用 Python 访问一个数据接口,调用是正常的,但是使用 Postman 进行访问时出错了,搞了两天,后面发现很简单,故…

如何理解FFT中时间窗与RBW的关系

作为一种常用的频谱分析工具,快速傅里叶变换(FFT) 实现了时域到频域的转换,是数字信号分析中最常用的基本功能之一。FFT 频谱分析是否与传统的扫频式频谱仪类似,也具有分辨率带宽(RBW) 的概念?如果具有RBW ,那么FFT 的…

前端食堂技术周刊第 63 期:Vite 4.0、State of CSS 2022、Rome v11、Web 性能日历、VueConf 2022 PPT

美味值:🌟🌟🌟🌟🌟 口味:霜糖山楂 食堂技术周刊仓库地址:https://github.com/Geekhyt/weekly 本期摘要 Vite 4.0State of CSS 2022 调查结果Rome v11HTMHell Advent Calendar 20…

虚幻引擎VR游戏开发基础教程

虚幻引擎VR游戏开发基础教程 了解如何使用 Oculus Quest 2 的蓝图在虚幻引擎 4 中从头开始构建基本的 VR 机制 课程英文名:Unreal Engine VR Development Fundamentals 此视频教程共4.0小时,中英双语字幕,画质清晰无水印,源码附…

推荐一些Python练手项目,了解完毕后才吃惊

前言 入门篇: 0.Python初学者一般都是那些根本没有编程基础的学生。做这个项目,你应该首先开始基本语法。教程中的几个实验可以让完全零基础的学生在一个下午学习Linux、python基础知识和GitHub命令。 1.Python-Python 图片转字符画50 行 Python 代码…

web前端期末大作业网页设计与制作 ——汉口我的家乡旅游景点 5页HTML+CSS+JavaScript

家乡旅游景点网页作业制作 网页代码运用了DIV盒子的使用方法,如盒子的嵌套、浮动、margin、border、background等属性的使用,外部大盒子设定居中,内部左中右布局,下方横向浮动排列,大学学习的前端知识点和布局方式都有…

JDBC 入门

目录1 JDBC 快速入门1.1 JDBC 的概念1.2 JDBC 快速入门2 JDBC 功能类详解2.1 DriverManager2.2 Connection2.3 Statement2.4 ResultSet3 JDBC 工具类4 SQL 注入攻击5 JDBC 事务5.1 JDBC 管理事务6 连接池6.1 数据库连接池的概念6.2 自定义数据库连接池6.2.1 DataSource6.2.2 归…

嵌入式:ARM存储器组织、协处理器及片上总线

文章目录ARM存储器组织ARM存储数据类型和存储格式ARM的存储器层次简介存储器管理单元MMUARM协处理器ARM片上总线AMBAARM存储器组织 ARM存储数据类型和存储格式 ARM处理器支持以下6种数据类型 8位有符号和无符号字节。16位有符号和无符号半字,它们以两字节的边界定…