OWASP发布10大开源软件风险清单

news2024/11/25 15:26:05

3月20日,xz-utils 项目被爆植入后门震惊了整个开源社区,2021 年 Apache Log4j 漏洞事件依旧历历在目。倘若该后门未被及时发现,那么将很有可能成为影响最大的软件供应链漏洞之一。近几年爆发的一系列供应链漏洞和风险,使得“加强开源软件(OSS)安全”的呼声越来越高,以维护脆弱的现在数字生态系统。

基于此,OWASP发布了开源软件风险清单TOP 10,旨在解决帮助企业用户更好地解决开源软件组件安全问题,帮助安全从业者更成熟地治理和安全使用OSS。风险清单TOP 10由Endor Labs首创,该公司专注于OSS安全、CI/CD管道和漏洞管理、软件供应链安全等。

传统漏洞管理获取已知漏洞的渠道,CVE漏洞库通常是重点关注来源之一,但越来越多的网安从业者都意识到,已知漏洞是风险的滞后性指标。

为了更好地应对风险,管理开源软件漏洞,网安人必须关注风险的先行指标,以便更快发现特定OSS库、组件和项目之间存在的威胁。

以下OWASP发布10大开源软件风险清单。

1. 已知漏洞

这部分内容涉及已知漏洞的OSS组件,如软件缺陷,这些缺陷通常是软件开发者和维护者无意中引入,然后由社区中的安全研究人员公开披露。

这些漏洞是否可被利用取决于它们在组织和应用程序中的使用环境。虽然这一点可能看起来微不足道,但实际上并非如此——未能为开发者提供这种环境会导致大量辛苦工作、浪费时间、挫败感,以及常常对安全部门产生抱怨。

针对这些风险,美国网络安全与基础设施安全局(CISA)会公布已知被利用漏洞(KEV)目录和漏洞预测评分系统(EPSS)。

组织可以采取措施来减轻已知漏洞OSS组件的风险,例如扫描企业已使用的OSS组件中的漏洞,基于已知利用、利用概率、可达性分析(这可以减少80%的无效发现)等方法来确定优先级。

2. 伪装合法软件包

越来越多的恶意行为者发现,通过伪装成合法维护人员,以看似合法实则恶意的软件包来影响下游企业和用户非常好用。具体来说可以使用多种方法来实现这种攻击途径,例如劫持项目维护者的账户或利用仓库中的漏洞。

他们还可以自愿成为开源社区的维护者,只是为了在将来某个时候发起恶意攻击,最近爆发的XZ Utils事件就是其中的典型例子。攻击者伪装成合法的社区维护人员,利用长达数年的时间在系统中植入了后门。

那么该如何减少上述风险?安全专家建议使用类似微软的(现已捐赠给OpenSSF)安全供应链消费框架(S2C2F)等典型框架。

3. 名称混淆攻击

在名称混淆攻击中,攻击者创建的恶意组件名称与合法的OSS包或组件相似,希望它们会被潜在受害者在无意中下载和使用。这种攻击在CNCF软件供应链攻击目录中也有体现,包括拼写错误、抢注和品牌劫持。当这些恶意的包被带入组织的IT环境时,可能会影响系统和数据的机密性、完整性和可用性(CIA)。

4. 未维护的软件

0SS与常用软件不同,它没有“确定的供应商”,OSS维护者提供的软件是“原样”,这意味着无法保证软件会被维护、更新或持续。Synopsys发布的OSS报告数据显示,85%的代码库超过四年未更新OSS组件,且在两年内没有任何新的开发。

考虑到软件的老化速度极快,新漏洞正在以创纪录的速度出现,许多未能积极更新OSS组件的软件存在极大的不安全性,这点从国家漏洞数据库(NVD)发布的数据中可见一斑。

这也是无法避免的现状。由于OSS主要依靠无偿的志愿者维护,那么其组件不被积极开发、更新、修复缺陷等也在情理之中。即使有一定的维护,可能也存在较大的滞后性,不符合下游企业用户的期望,更不会像供应商那样向下游客户提供漏洞修复的服务级别协议(SLA)。

导致OSS组件未维护的另一个关键因素是,有25%的OSS项目只有一个开发者贡献代码,94%的项目维护者/开发者低于10人。如果一个项目只有一个维护者,风险是显而易见的。考虑到60-80%现代代码库由OSS组成,人们开始意识到当下数字生态系统的相当一部分,甚至我们最关键的系统都运行支持和维护最少的软件上。这也代表潜在的系统风险无比巨大,且很容易被攻击者利用。

处理这种风险的建议包括检查项目的活力和健康状况,如维护者和贡献者的数量、发布频率以及修复漏洞的平均时间(MTTR)。

5. 过时的软件

一个项目正在使用一个过时的组件版本,可能存在低版本的安全风险。据Synopsys发布的报告数据显示,在开源软件领域这种情况是常态,在绝大多数代码库和仓库中都会发生。

另外,许多现代软件应用和项目的依赖关系错综复杂,令人眼花缭乱,并且直接提升了漏洞安全风险。Sonatype和Endor Labs联合发布的《依赖管理现状》指出,95%的漏洞与传递依赖关系有关。

6. 未跟踪的依赖关系

开发者/组织有时未意识到使用了特定的依赖关系或组件的情况,其原因可能是企业没有使用软件组成分析(SCA)等工具来了解他们所使用的OSS软件;或者是没有采用新兴工具如软件物料清单(SBOM)进行检查分析,这些工具为企业提供已使用的软件/组件可见性。

经过SolarWinds和Log4j等事件,网络安全行业深刻意识到,大多数企业的软件资产清单多年来一直是SANS/CIS的关键控制,但仍缺乏全面的软件资产管理,更别提细化到组件/库级别。因此我们更需要SBOM等工具,为企业进一步了解所使用的组件清单,以便打造更安全的软件供应链。

7. 许可和法规风险

许可和法规风险是指组件或项目在实施过程中缺乏相应的授权许可,那么可能会导致下游企业违规使用组件的风险。

OWASP指出,组织需要确保他们对OSS组件的使用符合适用许可条款,不然很有可能因此引发侵犯风险,造成大量财产损失甚至是法律诉讼。这也可能会影响组织的商业目标、并购活动等,因为在其专有产品、服务和产品中可能广泛地使用OSS组件。

组织可以采取措施来减轻这些风险,例如确定他们在软件中使用的组件具有授权,同时当授权许可存在冲突或风险时,需避免使用这类组件,及时规避可能发生的损失。

8. 不成熟的软件

不成熟的软件风险在于并非所有的开源软件都能保持较高的成熟度,这是由开发者和维护者的个人技术能力决定。例如一些OSS项目可能没有应用安全软件开发实践(NIST安全软件开发框架(SSDF)),具体来说可能没有文档、缺乏回归测试、没有审查指南以及其他最佳实践。

另外一个无法回避的现实是很多开发者并不重视安全性,更关注使用性和便捷性。Linux Foundation和哈佛大学的创新科学实验室(LISH)研发后发现,自由和开源软件的开发者投入在代码安全性的比例仅仅只有可伶的2.3%。

企业可以通过一些工具来对开源软件的安全性进行检查,例如OpenSSF发布的Scorecard就可以为Github的OSS组件提供安全性分析,包括安全保护、贡献者的数量、CI测试、模糊测试、维护措施、授权许可等。目前市面上也有其他类似的工具可以实现上述功能。

9. 未经批准的变更

OWASP将未经批准的变更的风险定义为,OSS组件可能发现变化但开发者没有注意到,因此未能及时审查或批准变更的情况。这可能发生在下载链接变化或指向未版本化资源的情况下,甚至是被篡改的不安全数据传输,该风险强调了安全传输的作用。

缓解措施包括使用资源标识符以确保并指向不可变工件,在实际安装和使用组件之前,还可以验证组件的签名和摘要。此外,为了减轻组件在传输中被妥协的风险,组织应使用安全协议来传输和网络流量通信。

10. 依赖关系过小/过大

最后的风险是依赖关系过小/过大,例如开源软件具有很少或大量的功能,而实际上企业只使用了其中的一部分,这通常被称为“软件膨胀”。

在依赖关系过小的例子中,由于代码行数有限,组件变得依赖于上游项目的安全。另一方面,当代码膨胀或代码行数成倍增加时,会引入更多的攻击面和潜在的可利用代码/依赖关系,给企业带来不可知的安全风险,且不符合既定预期。

因此企业应尽可能重新开发内部所需的功能,以此来减轻依赖过小或过大的风险。安全专家也发现,可在云原生容器化环境中利用“安全基础镜像”进行推广,例如Chainguard一直倡导具有有限漏洞甚至没有漏洞的最小加固基础镜像——"安全基础镜像 "。

参考来源:

https://www.csoonline.com/article/2088471/owasp-top-10-risks-list-attempts-to-establish-more-mature-approach-to-open-source-software-consumption.html

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

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

相关文章

Web3与社会契约:去中心化治理的新模式

在数字化时代,技术不断为我们提供新的可能性,而Web3技术作为一种基于区块链的创新,正在引领着互联网的下一波变革。它不仅改变了我们的经济模式和商业逻辑,还对社会契约和权力结构提出了全新的挑战和思考。本文将深入探讨Web3的基…

Spring、SpringMVC、SpringBoot核心知识点(持续更新中)

Spring、SpringMVC、SpringBoot核心知识点(持续更新中) Spring Bean 的生命周期Spring 的 IOC 与 AOPSpring Bean 循环依赖Spring MVC 处理请求的过程Spring Boot 自动装配原理Spring Boot 启动流程 Spring Bean 的生命周期 参考文章:一文读…

vagrant 安装虚拟机,docker, k8s

第一步:安装虚拟机 1、安装 vagrant 本机是 mac, 但是这一步不影响,找对应操作系统的安装方式就行了。 vagrant 下载地址 brew install vagrant 2、下载 VirtualBox 虚拟机 VirtualBox 下载地址 找到对应系统下载,安装就可以。 尽量把…

CSS基础:最详细 padding的 4 种用法解析

你好,我是云桃桃。 一个希望帮助更多朋友快速入门 WEB 前端的程序媛。 云桃桃,大专生,一枚程序媛,感谢关注。回复 “前端基础题”,可免费获得前端基础 100 题汇总,回复 “前端工具”,可获取 We…

java通过maven导入本地jar包的三种方式

一、引入lib下加载(加载过后打包,以后再次使用不用再次导入) 首先创建一个用于创建jar包的项目,并测试能否成功运行 讲项目打包 在需要引入的项目中创建lib目录 并把刚才打包的jar复制进去 通过dependency引入jar包 groupId、art…

Hive-Sql复杂面试题

参考链接:hive sql面试题及答案 - 知乎 1、编写sql实现每个用户截止到每月为止的最大单月访问次数和累计到该月的总访问次数 数据: userid,month,visits A,2015-01,5 A,2015-01,15 B,2015-01,5 A,2015-01,8 B,2015-01,25 A,2015-01,5 A,2015-02,4 A,20…

使用 code-server 搭建在线的 VS Code 编辑器

文章目录 前言安装体验后记 前言 VS Code 是一个非常流行的代码编辑器,安装各种拓展下也可以当作全功能的IDE使用。VS Code本身是基于Web方案构建的,完全可以搭建服务器,然后通过浏览器访问。事实上官方就是这么设计的。现在打开任何一个Git…

010Node.js自定义模块通过exports的使用,两种暴露的方法及区别(二)

module/request.js var obj{get:function(){console.log(从服务器获取数据);},post:function(){console.log(提交数据);} }exports.xxxxobj;//方法一 { xxxx: { get: [Function: get], post: [Function: post] } }//module.exportsobj;//方法二 //{ get: [Function: g…

2.3 iHRM人力资源 - 路由、左侧菜单栏、处理token失效、退出登录、修改密码

iHRM人力资源 - 处理token失效、退出登录、修改密码 文章目录 iHRM人力资源 - 处理token失效、退出登录、修改密码一、退出登录1.1 处理token失效1.2 调整下拉菜单1.3 退出登录 二、修改密码2.1 弹出层dialog2.2 表单结构2.3 表单校验2.4 表单提交 三、路由3.1 清理多余组件和路…

Flink CDC在阿里云DataWorks数据集成应用实践

摘要:本文整理自阿里云 DataWorks 数据集成团队的高级技术专家 王明亚(云时)老师在 Flink Forward Asia 2023 中数据集成专场的分享。内容主要为以下四部分: 阿里云 DataWorks 数据集成介绍基于 Flink CDC 数据集成新版引擎架构和…

为硬刚小米SU7,华为智界S7整出了「梅开二度」操作

如今国产中大型新能源轿车市场,在小米 SU7 加入后,可算彻底活了过来。 过去几年,咱们自主新能源品牌在 20-30 万元级轿车上发力明显不足,老牌车厂比亚迪汉几乎以一己之力扛起销量担当。 随着新能源汽车消费升级、竞争加剧&#x…

盲人安全导航技巧:科技赋能让出行更自如

作为一名资深记者,长期关注并报道无障碍领域的发展动态。今日,我将聚焦盲人安全导航技巧,探讨这一主题下科技如何赋能视障人士实现更为安全、独立的出行。一款融合了实时避障、拍照识别物体及场景功能的盲人出行辅助应用叫做蝙蝠避障&#xf…

4月16号总结

java学习 网络编程 1.网络分层 网络分层是将网络通信划分为不同的逻辑层次,每一层负责特定的功能,从而实现网络通信的模块化和标准化。常用的网络分层模型包括OSI(开放系统互联)模型和TCP/IP模型。 特点和作用: 分…

计算机网络的七层模型

序 OSl(Open System Interconnect),即开放式系统互联。一般都叫OSI参考模型。在网络编程中最重要的模型就是OSI七层网络模型和TCP/IP四层网络模型 一、OSI七层参考模型以及功能概述 二、各层的具体职能以及实际应用 1.应用层: OSI参考模型中最接近用…

MathType安装导致的Word粘贴操作出现运行时错误‘53’:文件未找到:MathPage.WLL

MathType安装导致的Word粘贴操作出现运行时错误‘53’:文件未找到:MathPage.WLL 解决方案 1、确定自己电脑的位数; 2、右击MathType桌面图标,点击“打开文件所在位置”,然后找到MathPage.WLL ,复制一份进行…

ES源码二:集群启动过程

命令行参数解析 Elasticsearch:在main里面创建了Elasticsearch实例,然后调用了main方法,这个main方法最终会调用到父类Command的main方法 这里做了几件事: 注册一个 ShutdownHook,其作用就是在系统关闭的时候捕获IO…

配置路由器实现互通

1.实验环境 实验用具包括两台路由器(或交换机),一根双绞线缆,一台PC,一条Console 线缆。 2.需求描述 如图6.14 所示,将两台路由器的F0/0 接口相连,通过一台PC 连接设备的 Console 端口并配置P地址(192.1…

基于栈求解迷宫的单条路径和所有路径

数据结构与算法课的一个实验,记录一下。 单纯想要了解利用栈求解迷宫的算法可以直接跳转到相应的小标题。 完整代码链接code_2024/mazeLab LeePlace_OUC/code - 码云 - 开源中国 (gitee.com) 文章目录 要求栈的实现MazeType类型的组织迷宫的初始化和销毁打印路径…

死磕GMSSL通信-java/Netty系列(二)

死磕GMSSL通信-java/Netty系列(二) 在上一篇文章中,我们探讨了如何利用C/C++实现国密通信。而本文将聚焦于Java环境下,特别是基于Netty框架,如何实现与国密系统的安全通信。为了确保新项目遵循最新的国密标准,我们将优先推荐使用GB/T 38636-2020(TLCP)协议。对于Java开…

python 如何使用windows系统自带的定时功能运行脚本

亲测此定时可以在电脑重启后,仍会自动运行 1.搜索栏搜索‘任务’,打开任务计划程序,点击创建任务 2.写一下任务名称和描述 3.选择触发器,点新建,可以创建定时计划 4.默认只有一次,每天,每月&am…