OWASP发布十大开源软件安全风险清单

OWASP发布了“十大开源软件风险”TOP10清单,并针对每种风险给出了安全建议。

近年来开源软件安全风险快速增长,不久前曝光的XZ后门更是被称为“核弹级”的开源软件供应链漏洞。虽然XZ后门事件侥幸未酿成灾难性后果,但为全球科技界敲响了警钟:当今数字生态系统极其脆弱,亟需改进开源软件的使用和安全管控方式。

传统的漏洞管理侧重于已知漏洞,例如常见漏洞和披露列表(CVE)中的漏洞。然而,业界逐渐意识到,已知漏洞是滞后的风险指标。

开放式Web应用安全项目(OWASP)指出,为了更安全地使用开源软件,人们需要转变思维方式,更加关注风险的前瞻性指标。这些指标可以帮助我们识别特定开源软件库、组件和项目存在的潜在风险,并通过综合考量这些风险,制定更安全的开源软件使用策略,降低漏洞被利用的可能性。

为应对包括XZ后门事件在内的诸多新兴开源软件安全风险,帮助用户更安全地使用和管理开源软件,近日,OWASP发布了“十大开源软件风险”TOP10清单,并针对每种风险给出了安全建议,具体如下:

一、已知漏洞

此类风险指存在已知漏洞的开源软件组件,这些漏洞通常是由软件开发人员和维护人员在开发过程中无意引入,并随后由安全研究人员公开披露。

已知漏洞的可利用性取决于其在企业应用程序中的利用场景。虽然看似简单,但现实情况是,如果不向开发人员提供漏洞利用场景等信息,将导致大量无意义的安全告警,从而增加开发人员的工作量,浪费时间并引发挫败感。

为了降低已知漏洞风险,企业可采取多种措施,例如:扫描所使用的开源软件组件查找漏洞;根据漏洞的可利用性、利用可能性、可达性分析(可将误报率降低80%以上)等因素,对扫描结果进行优先级排序。

此外,业界还开发了一系列平台方案提高已知漏洞的管理效率,例如CISA的已知被利用的漏洞(KEV)目录和利用预测评分系统(EPSS)。

二、合法软件包被入侵

攻击者已经认识到劫持合法开源软件包的巨大价值和杀伤力,通过这种方式可大面积影响下游软件用户(包括个人和企业)。

攻击者可以采用多种方法实施此类攻击,例如劫持开源项目维护人员的账户,或利用开源软件包仓库中的漏洞。

他们还可以伪装成维护人员加入项目,伺机植入恶意代码。例如,最近的XZ后门事件正是如此,攻击者伪装成合法贡献者,经过长时间潜伏后在代码中植入后门。

为了降低此类风险,企业可以参考微软发布的(现已捐赠给OpenSSF)安全供应链消费框架(S2C2F)等资源和指导方针(业界还有其他一些类似的框架)。

三、名称混淆攻击

在名称混淆攻击中,攻击者创建恶意组件,其名称与合法的开源软件包或组件相似,希望受害者在不知情的情况下下载并使用这些恶意组件。此类攻击手法也出现在CNCF软件供应链攻击目录中,包括typosquatting(域名typosquatting)和brand-jacking(品牌劫持)等。

一旦这些被入侵的软件包被引入企业的IT环境,就会危及系统和数据的机密性、完整性和可用性(CIA)。

四、缺少维护

与专有软件不同,开源软件面临的一个严峻现实是没有“供应商”对代码安全负责。开源软件主要依靠无偿的志愿者进行维护,以“as is”(按原样)的方式提供软件,这意味着一些软件组件可能长期缺少积极的开发和维护,漏洞修复工作也可能无法及时完成。(即使能够完成,也可能无法满足软件用户对组件更新时间线的需求,也无法提供类似专有软件供应商的服务水平协议SLA承诺)

Synopsys发布的开源软件报告指出,在所评估的开源代码库中,85%使用了距今超过四年且过去两年没有更新的开源软件组件。

考虑到软件更新换代速度飞快,根据美国国家漏洞数据库(NVD)的年度数据,新的漏洞正以创纪录的速度出现,这对于经常使用未及时更新的开源软件组件的现代应用程序来说,风险正不断累积。

造成开源软件维护风险另一大原因是贡献者和维护者太少。约25%的开源项目只有一个开发人员贡献代码,94%的项目由10名或更少的开发人员维护,正如研究人员ChinmayiSharma在其著作《数字公共产品的悲剧》中所指出的那样。对于那些希望全面了解挑战的人来说,这是一本值得推荐的读物。

维护者过少的风险也被成为“公交车司机因素”,如果一个项目只有一个主要维护者,风险显而易见。即如果掌舵项目的某个关键人物突然去世或离开项目,会造成什么可怕影响?

60-80%的现代代码库由开源软件组成,我们的数字生态系统中很大一部分,甚至是最关键的系统,都运行在缺乏维护和支持的开源软件上,这构成了重大且亟待解决的系统性风险。

OWASP建议采取以下措施来降低此类风险:检查项目的活跃度和健康状况,例如维护者和贡献者的数量、发布频率和漏洞修复的平均时间(MTTR)。

五、组件/依赖项过时

开源软件的另一个风险是使用过时的组件版本(尽管这些组件可能存在更新的版本)。Synopsys的报告指出,这种情况实际上很普遍,发生在绝大多数代码库和存储库中。

今天,情况变得更加复杂,因为许多现代软件应用程序和项目都存在错综复杂且令人眼花缭乱的依赖关系。Sonatype和Endor Labs发布报告也强调了这个问题。后者发布了“依赖管理现状”报告,显示95%的漏洞与传递依赖项有关。

六、未跟踪依赖项

这种情况是指开发人员/企业根本没有意识到他们使用了特定的依赖项或组件。这可能是由于企业没有使用软件成分分析(SCA)等工具来了解其开源软件的成分和使用情况,或者没有使用软件物料清单(SBOM)等工具提高对所使用或分发的软件组件的可视性。

未跟踪依赖项风险正推动SBOM和软件供应链安全工具快速发展,正如业界通过SolarWinds和Log4j等事件所认识到的那样,SBOM能帮助企业掌握其组件库存,缓解相关风险。但是,尽管SBOM多年来一直是SANS/CIS的关键控制措施,但大多数企业仍然缺乏对组件/库级别的全面软件资产清单。

七、许可和监管风险

开源许可证监管风险是指开源组件或项目可能缺少许可证,或者许可证可能妨碍下游用户的使用。

OWASP指出,企业需要确保其使用的开源软件组件符合其适用许可条款,否则可能会导致许可或版权侵权,甚至导致法律诉讼。

随着越来越多的企业在其专有产品、服务和产品中更广泛地使用开源软件组件,开源许可证风险还可能会影响企业的业务目标、并购活动等。

企业可以通过以下措施来降低这些风险:识别其软件中使用的组件的适用许可证及其预期用途。OWASP建议企业避免使用完全没有许可证的开源组件,并识别具有多个或冲突许可证的组件。

八、成熟度低

并非所有软件都是生而平等的,成熟度方面也存在差异,部分原因是维护人员参与程度不同。

一些开源项目可能没有应用安全的软件开发实践(例如NIST安全软件开发框架SSDF)。具体示例可能包括缺乏文档、缺乏回归测试、缺乏审查指南以及许多其他最佳实践。

还有一个令人不安的现实是,许多开发人员对安全不感兴趣。Linux Foundation和哈佛大学创新科学实验室(LISH)的研究证实了这一点,他们发现开源软件开发人员只有2.3%的时间用于提高其代码的安全性。

业界正在努力提升开源软件的安全成熟度,并提供了相关工具,例如OpenSSF的Scorecard,它为Github上的开源项目提供了一套强大的检查标准,例如分支保护的存在、贡献者/组织数量、CI测试、模糊测试、维护、许可等。另一个类似的标准是CISA和OpenSSF提出的“软件包存储库安全原则”。

九、未经批准的更改

OWASP将“未经批准的更改”定义为:组件在开发人员没有注意到、审查或批准更改的情况下发生更改的情况。当下载链接发生更改或指向无版本控制的资源,甚至是被篡改的不安全数据传输时,可能会发生这种情况,这凸显了安全传输的作用。

建议的操作和缓解措施包括:使用资源标识符确保一致性并指向相同的不可变工件。用户还可以在实际安装和使用组件之前验证组件的签名和摘要。此外,为了降低组件在传输过程中被篡改的风险,应使用安全传输协议。

十、代码膨胀和代码不足

最后,还有一类开源软件风险是“代码过于臃肿或简陋”。一些开源组件提供的功能太少,有些则太多,而实际只使用了其中一部分。这通常被称为“代码膨胀”。

在代码不足的依赖项案例中,由于代码量太少,组件变得更加依赖于上游项目的安全。另一方面,如果用户遇到代码膨胀或指数级代码行数,最终会带来更大的攻击面和潜在的可利用代码/依赖项,尽管这些代码/依赖项实际上不需要或未使用。

OWASP建议在这种情况下,尽可能在内部重新开发所需的功能,以降低依赖体积过大或过小的风险。在云原生容器化环境中,安全基础镜像正被积极推广,例如Chainguard等领导者所倡导的,这些镜像是经过最小化加固的基础镜像,漏洞数量极少甚至为零。

参考链接:

https://owasp.org/www-project-open-source-software-top-10/

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

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

相关文章

Day99:云上攻防-云原生篇K8s安全实战场景攻击Pod污点Taint横向移动容器逃逸

目录 云原生-K8s安全-横向移动-污点Taint 云原生-K8s安全-Kubernetes实战场景 知识点: 1、云原生-K8s安全-横向移动-污点Taint 2、云原生-K8s安全-Kubernetes实战场景 云原生-K8s安全-横向移动-污点Taint 如何判断实战中能否利用污点Taint? 设置污点…

STM32学习和实践笔记(14):按键控制实验

消除抖动有软件和硬件两种方法 软件方法就是在首次检测到低电平时加延时,通常延时5-10ms,让抖动先过去,然后再来检测是否仍为低电平,如果仍然是,说明确实按下。 硬件方法就是加RC滤波电路,硬件方法会增加…

✌粤嵌—2024/4/3—合并K个升序链表✌

代码实现: /*** Definition for singly-linked list.* struct ListNode {* int val;* struct ListNode *next;* };*/ struct ListNode* merge(struct ListNode *l1, struct ListNode *l2) {if (l1 NULL) {return l2;}if (l2 NULL) {return l1;}struct Lis…

DNS服务器配置与管理(3)——综合案例

DNS服务器配置与管理 前言 在之前,曾详细介绍了DNS服务器原理和使用BIND部署DNS服务器,本文主要以一个案例为驱动,在网络中部署主DNS服务器、辅助DNS服务器以及子域委派的配置。 案例需求 某公司申请了域名example.com,公司服…

第七周学习笔记DAY.1-封装

学完本次课程后,你能够: 理解封装的作用 会使用封装 会使用Java中的包组织类 掌握访问修饰符,理解访问权限 没有封装的话属性访问随意,赋值也可能不合理,为了解决这些代码设计缺陷,可以使用封装。 面向…

vue快速入门(二十八)页面渲染完成后让输入框自动获取焦点

注释很详细&#xff0c;直接上代码 上一篇 新增内容 使用挂载完成的钩子函数用focus使输入框获取焦点 源码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name"viewport" content"width…

leetcode:739.每日温度/496.下一个更大元素

单调栈的应用&#xff1a; 求解当前元素右边比该元素大的第一个元素&#xff08;左右、大小都可以&#xff09;。 单调栈的构成&#xff1a; 单调栈里存储数组的下标&#xff1b; 单调栈里的元素递增&#xff0c;求解当前元素右边比该元素大的第一个元素&#xff1b;元素递…

(十一)C++自制植物大战僵尸游戏客户端更新实现

植物大战僵尸游戏开发教程专栏地址http://t.csdnimg.cn/cFP3z 更新检查 游戏启动后会下载服务器中的版本号然后与本地版本号进行对比&#xff0c;如果本地版本号小于服务器版本号就会弹出更新提示。让用户选择是否更新客户端。 在弹出的更新对话框中有显示最新版本更新的内容…

2024五一杯数学建模A题思路分析

文章目录 1 赛题思路2 比赛日期和时间3 组织机构4 建模常见问题类型4.1 分类问题4.2 优化问题4.3 预测问题4.4 评价问题 5 建模资料 1 赛题思路 (赛题出来以后第一时间在CSDN分享) https://blog.csdn.net/dc_sinor?typeblog 2 比赛日期和时间 报名截止时间&#xff1a;2024…

光学雨量计雨量传感器的工作原理与实时数据采集

光学雨量计雨量传感器的工作原理与实时数据采集 河北稳控科技光学雨量计是一种常用的雨量传感器&#xff0c;其工作原理基于光学原理和实时数据采集技术。它的主要作用是测量雨水的大小和强度&#xff0c;为气象、农业、水文等领域提供重要的数据支持。 光学雨量计的工作原理是…

单片机之ESP8266模块

目录 ESP8266简介 前言 ESP8266的工作模式 ESP8266引脚说明 ESP8266测试 步骤 单片机与esp8266交互 前言 收到数据的格式 AP模式 服务器模式 外部执行命令 代码内执行命令 代码部分 客户端模式 外部执行命令 内部执行命令 代码部分 STA模式 服务器模式 外…

10个常用的损失函数及Python代码实现

本文深入理解并详细介绍了10个常用的损失函数及Python代码实现。 什么是损失函数&#xff1f; 损失函数是一种衡量模型与数据吻合程度的算法。损失函数测量实际测量值和预测值之间差距的一种方式。损失函数的值越高预测就越错误&#xff0c;损失函数值越低则预测越接近真实值…

LUCF-Net:轻量级U形级联 用于医学图像分割的融合网络

LUCF-Net&#xff1a;轻量级U形级联 用于医学图像分割的融合网络 摘要IntroductionRelated WorkProposed MethodLocal-Global Feature ExtractionEncoder and DecoderFeature FusionLoss Function LUCF-Net: Lightweight U-shaped Cascade Fusion Network for Medical Image Se…

Android zxing库实现扫码识别

第一步 加库zxing库 //导入二维码识别库ZXingimplementation("com.journeyapps:zxing-android-embedded:4.2.0") 第二部获取摄像机权限 <uses-permission android:name="android.permission.CAMERA" /><uses-permission android:name="andro…

【日常记录】【CSS】利用动画延迟实现复杂动画

文章目录 1、介绍2、原理3、代码4、参考链接 1、介绍 对于这个效果而言&#xff0c;最先想到的就是 监听滑块的input事件来做一些操作 ,但是会发现&#xff0c;对于某一个节点的时候&#xff0c;这个样式操作起来比较麻烦 只看这个代码的话&#xff0c;发现他用的是动画&#x…

超详细!Python中 pip 常用命令

相信对于大多数熟悉Python的人来说&#xff0c;一定都听说并且使用过pip这个工具&#xff0c;但是对它的了解可能还不一定是非常的透彻&#xff0c;今天小编就来为大家介绍10个使用pip的小技巧&#xff0c;相信对大家以后管理和使用Python当中的标准库会有帮助。 安装 当然在…

【算法一则】编辑距离 【动态规划】

题目 给你两个单词 word1 和 word2&#xff0c; 请返回将 word1 转换成 word2 所使用的最少操作数 。 你可以对一个单词进行如下三种操作&#xff1a; 插入一个字符 删除一个字符 替换一个字符 示例 1&#xff1a;输入&#xff1a;word1 "horse", word2 "…

16 - Debian如何配置vsftpd(1)实现匿名上传下载

作者&#xff1a;网络傅老师 特别提示&#xff1a;未经作者允许&#xff0c;不得转载任何内容。违者必究&#xff01; Debian如何配置vsftpd&#xff08;1&#xff09;实现匿名上传下载 《傅老师Debian小知识库系列之16》——原创 前言 傅老师Debian小知识库特点&#xff1a…

微信小程序获取蓝牙信标

/*** 搜索设备界面*/ import Dialog from vant/weapp/dialog/dialog; Page({data: {list: []},onPullDownRefresh: function () {wx.request({url: https://wwz.jingyi.icu/app/Explain/index,data: {scenic_id: 3},method: POST,success: (res) > {console.log(res);let th…

重磅!国内首个基于单张图片的3D人脸重建课程

3D人脸重建在计算机视觉和图形学中一直是一个经典且热门的研究方向&#xff0c;在游戏、影视、娱乐等众多行业也有着广泛的应用。早期人脸重建主要基于多视角相机或深度相机&#xff0c;随着深度学习的兴起&#xff0c;基于单张图片的人脸重建成为可能&#xff0c;且重建的精度…