我国软件供应链安全现状学习分析整理分享 附完整下载地址

news2024/9/22 17:29:50

声明

本文是学习2021年中国软件供应链安全分析报告. 下载地址而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们

一、前言

数字化时代,软件无处不在。软件如同社会中的“虚拟人”,已经成为支撑社会正常运转的最基本元素之一,软件的安全性问题也正在成为当今社会的根本性、基础性问题。

随着软件产业的快速发展,软件供应链也越发复杂多元,复杂的软件供应链会引入一系列的安全问题,导致信息系统的整体安全防护难度越来越大。近年来,针对软件供应链的安全攻击事件一直呈快速增长态势,造成的危害也越来越严重。

2020年4月,Rubygems开源软件包生态系统被放入了数百个恶意软件包,这些恶意软件包的下载总量近10万次。例如,“atlas-client”是一个诱骗的诱饵程序包,用来仿冒“atlas_client”,被下载了超过2100次。

2020年5月,GitHub披露了针对 Apache NetBeans IDE 项目的开源软件供应链攻击Octopus Scanner,最终统计显示,有26个开源项目被植入了Octopus Scanner后门。

2020年12月,全球著名的网络安全管理软件供应商SolarWinds遭遇国家级APT团伙高度复杂的供应链攻击。该攻击直接导致包括美国关键基础设施、军队、政府等在内的超过18000家客户全部受到影响,可任由攻击者完全操控。

2021年2月,安全研究人员通过利用开源生态安全机制上的漏洞,成功侵入了微软、苹果、PayPal、特斯拉、优步等35家国际大型科技公司的内网,这种新颖的软件供应链攻击方式被定义为依赖混淆攻击。

2021年3月,PHP的Git服务器被攻击,攻击者向git.php.net服务器上的php-src存储库推送了两次恶意提交,在PHP代码中植入了一个后门,其目标是可以通过该后门获得运行PHP的网站系统的远程代码执行权限。

2021年4月,知名代码测试公司Codecov宣布其产品的bash uploader脚本被攻击者修改,导致用户在使用Codecov产品时,会向攻击者的服务器发送敏感信息,从而导致攻击者可以获取用户的软件源代码等机密信息。

攻击不断左移,针对软件供应链的攻击事件频发,系统性的研究软件供应链安全,防范软件供应链安全风险,已经迫在眉睫。2020年,奇安信代码安全实验室依托自身在软件安全领域十余年的技术积累,针对国内软件供应链的安全状况进行了大量的研究、实践和数据分析工作,形成本报告。报告内容主要包括国内企业自主开发源代码安全状况分析、开源软件生态发展与安全状况分析、国内企业软件开发中开源软件应用状况分析、典型应用系统供应链安全风险实例分析、总结及建议等五个方面,希望可以为相关单位开展软件供应链安全相关的研究和实践工作提供借鉴和参考。

二、国内企业自主开发源代码安全状况

源代码是软件的原始形态,位于软件供应链的源头。源代码安全是软件供应链安全的基础,其地位非常关键和重要。2020年全年,奇安信代码安全实验室对2001个国内企业自主开发的软件项目源代码进行了安全缺陷检测,检测的代码总量为335011173行,共发现安全缺陷3387642个,其中高危缺陷361812个,整体缺陷密度为10.11个/千行,高危缺陷密度为1.08个/千行。

1、编程语言分布情况

在被检测的2001个国内企业自主开发的软件项目中,使用数量排名前3的编程语言为Java、PHP、C/C++,对应的软件项目数量分别为1492个、204个和97个。可以看出,相关国内企业在进行软件开发时的首选语言是Java语言,占比高达75%。编程语言的总体分布情况如下图所示。

2、典型安全缺陷检出情况

输入验证、路径遍历、跨站脚本、注入、NULL引用、资源管理、密码管理、API误用、配置管理、日志伪造等十类安全缺陷是程序员在编写软件代码时经常会出现的典型安全缺陷。典型安全缺陷的检出率可以体现出软件源代码的基本安全状况(检出率指含有某类缺陷的软件项目数占软件项目总数的比例)。在被检测的2001个软件项目中,十类典型安全缺陷的总体检出率为77.8%,每类典型缺陷的检出率及排名如下表所示。

排名缺陷类型检出率
1输入验证50.8%
2路径遍历39.6%
3跨站脚本39.5%
4注入37.3%
5NULL引用31.8%
6资源管理31.6%
7密码管理31.0%
8API误用28.7%
9配置管理28.0%
10日志伪造18.2%

三、开源软件生态发展与安全状况

Gartner表示,现代软件大多数是被“组装”出来的,不是被“开发”出来的。据Forrester统计,软件开发中,80-90%的代码来自于开源软件。因此,现代软件的源代码绝大多数是混源代码,由企业自主开发的源代码和开源软件代码共同组成。开源软件是现代软件开发最基础的原材料,与企业自主开发的源代码所处的软件供应链环节相同,也位于软件供应链的源头,其代码自身的安全状况,会直接影响最终软件的安全性。

本报告从开源软件生态发展状况、开源软件源代码安全状况、开源软件公开报告漏洞状况、开源软件活跃度状况等四个方面对2020年开源软件生态发展与安全状况进行综合分析。

1、开源软件生态发展状况分析

据奇安信代码安全实验室监测和统计,2019年底和2020年底,主流开源软件包生态系统中开源项目总量分别为2841314个和3814194个,一年间增长了34.2%;截至2020年底,主流开源软件包生态系统中平均每个开源项目有10.2个版本。可以看出,2020年开源软件生态更加繁荣,整体发展非常迅猛。

本报告中对八个典型的开源软件包生态系统进行了进一步的分析和比较,这八个包生态系统为Maven、NPM、Packagist、Pypi、Godoc、Nuget、Rubygems、Swift,具体分析如下。

NPM包生态项目数量最多,Godoc包生态增速最快 。八个典型的开源软件包生态系统中开源项目数量和增长率情况如下图所示,其中开源项目数量最多的是NPM包生态系统,截至2020年底,其开源项目数量达到了1559835个;开源项目数量增速最快的是Godoc包生态系统,2020年一年间的项目总量增速达到了36.2%。

Maven、Nuget、NPM包生态系统的开源项目开发者比较“勤奋”,开源项目的平均版本数超过11个。 截至2020年底,八个典型的开源软件包生态系统的开源项目数量和版本数量如下表所示。其中,Maven包生态系统平均每个开源项目有18.0个版本,Nuget包生态系统平均每个开源项目有11.7个版本,NPM包生态系统平均每个开源项目有11.0个版本。

序号包生态系统2020年项目数2020年版本数平均版本数
1Maven487799878541618.0
2NPM15598351714811911.0
3Packagist30912530358159.8
4Pypi28711324195338.4
5Godoc23457911098334.7
6Nuget307336358888011.7
7Rubygems16339210941356.7
8Swift770154743146.2

2、开源软件源代码安全状况分析

奇安信代码安全实验室于2015年初发起了“奇安信开源项目检测计划”,该计划是一项针对开源软件项目的公益性安全检测计划,旨在让广大开发者关注和了解开源软件的安全问题,提高软件安全开发意识和技能。

2020年全年,“奇安信开源项目检测计划”对1364个开源软件项目的源代码进行了安全检测,代码总量为124296804行,共发现安全缺陷1859129个,其中高危缺陷117738个。2020年检测的1364个开源软件项目整体缺陷密度为14.96个/千行,高危缺陷密度为0.95个/千行。

(1)编程语言分布情况

2020年检测的1364个开源项目中,一共涉及到7种编程语言,分别是Java、C/C++、Python、OC、Go、JavaScript、PHP,编程语言的分布情况如下图所示。

(2)典型安全缺陷检出情况

输入验证、路径遍历、跨站脚本、注入、NULL引用、资源管理、密码管理、API误用、配置管理、日志伪造等十类安全缺陷是程序员在编写软件代码时经常会出现的典型安全缺陷。典型安全缺陷的检出率可以体现出软件源代码的基本安全状况(检出率指含有某类缺陷的软件项目数占软件项目总数的比例)。在2020年检测的1364个开源软件项目中,十类典型安全缺陷的总体检出率为56.3%,每类典型缺陷的检出率及排名如下表所示。

排名缺陷类型检出率
1输入验证34.9%
2路径遍历30.7%
3注入28.6%
4NULL引用24.8%
5API误用24.3%
6资源管理20.7%
7跨站脚本19.1%
8日志伪造17.9%
9密码管理13.8%
10配置管理12.9%

3、开源软件公开报告漏洞状况分析

据奇安信代码安全实验室监测与统计,截至2020年底,CVE/NVD、CNNVD、CNVD等公开漏洞库中共收录开源软件相关漏洞41342个,其中5366个为2020年度新增漏洞。

(1)大型开源项目漏洞总数及年度增长TOP20

截至2020年底,历史漏洞总数排名前20的大型开源项目信息如下表所示。

序号大型开源项目主页地址历史漏洞总数
1Linux Kernelhttps://www.kernel.org/4193
2Chromium (Google Chrome)http://www.chromium.org/Home2658
3Mozilla Firefoxhttps://www.mozilla.org/en-US/firefox/2093
4Thunderbirdhttps://www.thunderbird.net/zh-CN/1023
5MySQLhttps://www.mysql.com/997
6PHPhttps://www.php.net/653
7Wiresharkhttps://www.wireshark.org/597
8ImageMagickhttps://imagemagick.org/597
9WordPresshttps://wordpress.org/561
10GitLabhttps://about.gitlab.com/465
11Moodlehttps://moodle.org/412
12Xen Project (Hypervisor)https://xenproject.org/355
13QEMUhttp://www.qemu.org/333
14FFmpeghttps://ffmpeg.org/324
15Chakra Corehttps://github.com/chakra-core/chakracore279
16phpMyAdminhttps://www.phpmyadmin.net/265
17Oracle VM VirtualBoxhttps://www.virtualbox.org/262
18MediaWikihttps://www.mediawiki.org/231
19WebKitGTKhttp://webkitgtk.org/221
20Magentohttp://www.magento.com/188

2020年一年间,公开报告漏洞数量增长排名前20的大型开源项目信息如下表所示。

序号大型开源项目主页地址2020年漏洞增量
1Chromium (Google Chrome)http://www.chromium.org/Home261
2GitLabhttps://about.gitlab.com/237
3Linux Kernelhttps://www.kernel.org/235
4Mozilla Firefoxhttps://www.mozilla.org/en-US/firefox/157
5Mattermosthttp://www.mattermost.org/143
6MySQLhttps://www.mysql.com/139
7Thunderbirdhttps://www.thunderbird.net/zh-CN/81
8Oracle VM VirtualBoxhttps://www.virtualbox.org/70
9QEMUhttp://www.qemu.org/46
10Xen Project (Hypervisor)https://xenproject.org/43
11ImageMagickhttps://imagemagick.org/43
12FreeRDPhttps://www.freerdp.com/40
13Magentohttps://magento.com/40
14OpenJDKhttp://openjdk.java.net/39
15Nextcloudhttps://nextcloud.com/37
16TensorFlowhttps://www.tensorflow.org/35
17MediaWikihttps://www.mediawiki.org/35
18Chakra Corehttps://github.com/chakra-core/chakracore32
19Ghostscripthttps://www.ghostscript.com/27
20WordPresshttps://wordpress.org/24

(2)主流开源软件包生态系统漏洞总数及年度增长TOP20

截至2020年底,主流开源软件包生态系统中历史漏洞总数排名前20的开源软件信息如下表所示。

序号开源软件所属包生态系统历史漏洞总数
1TYPO3 CMSPackagist101
2Ruby on RailsRubygems98
3OpenSSLSwift95
4Exiv2Conan80
5PlonePypi79
6Apache StrutsMaven78
7DjangoPypi76
8Dolibarr ERP & CRMPackagist73
9SymfonyPackagist73
10PuppetRubygems70
11Drupal (core)Packagist65
12silverstripe-frameworkPackagist62
13Jackson-databindMaven55
14AnsiblePypi53
15keycloakMaven53
16OpenShift OriginGodoc45
17SQLiteSwift42
18Zend FrameworkPackagist39
19libxml2Conan36
20KubernetesGodoc35

2020年一年间,主流开源软件包生态系统中公开报告漏洞数量增长排名前20的开源软件信息如下表所示。

序号开源软件所属包生态系统2020年漏洞增量
1Jackson-databindMaven26
2keycloakMaven22
3Dolibarr ERP & CRMPackagist20
4AnsiblePypi18
5OpenfireMaven16
6Electron - Cross-platform desktop application shellNPM16
7CentreonPackagist14
8Drupal (core)Packagist14
9TYPO3 CMSPackagist13
10October CMSPackagist13
11KubernetesGodoc12
12SQLiteSwift12
13AirflowPypi12
14Vault by HashiCorpGodoc11
15Apache TomcatMaven10
16InfinispanMaven10
17Python PillowPypi10
18ConsulGodoc9
19PlonePypi9
20SubrionPackagist9

4、开源软件活跃度状况分析

活跃度也是衡量开源软件安全性的一个重要维度。不活跃的开源软件,无论是更新频率很低,或者被废弃,一旦出现安全漏洞,难以得到及时的修复,安全风险很高;活跃的开源软件中,如果其版本更新发布的频率过高,同样会增加使用者运维的成本和安全风险。在选择使用开源软件时,应该充分考虑这两个因素。本报告中分析了2020年主流开源软件包生态系统中开源软件的版本更新情况,可以一定程度上体现当前开源软件活跃度的整体状况。

(1)61.6%的开源软件项目处于不活跃状态

我们将一年内未更新发布过版本的开源软件项目定义为不活跃项目。2020年全年,主流开源软件包生态系统中不活跃的开源软件项目数量为2347794个,占比达到61.6%。

本报告中对八个典型的开源软件包生态系统进行了进一步的分析和比较,这八个包生态系统为Maven、NPM、Packagist、Pypi、Godoc、Nuget、Rubygems、Swift,其中NPM的不活跃项目数量最多,达到1018533个,Rubygems的不活跃项目比例最高,占比达到86.5%,具体数据见下表。

序号包生态系统项目总数不活跃项目数不活跃项目比例
1Maven48779927255555.9%
2NPM1559835101853365.3%
3Packagist30912520889067.6%
4Pypi28711317004459.2%
5Godoc23457914368561.3%
6Nuget30733618723861.0%
7Rubygems16339214125986.5%
8Swift770155952177.3%

(2)13000多个开源软件一年内更新发布超过100个版本

2020年全年,主流开源软件包生态系统中,更新发布100个以上版本的开源项目有13411个。前述八个典型的开源软件包生态系统中,一年内更新发布超过100个版本的项目数量见下表。

排名包生态系统对应的开发语言一年内发布超过100个版本的项目数量
1NPMJavascript8317
2MavenJava2264
3Nuget.NET1104
4PypiPython613
5PackagistPHP554
6SwiftSwift281
7GodocGo193
8RubygemsRuby38

延伸阅读

更多内容 可以点击下载 2021年中国软件供应链安全分析报告. 进一步学习

友情链接

青海省价格监督检查办法.pdf

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

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

相关文章

MATLAB | 绘图复刻(五) | 带树状图的环形热图

本期教大家如何绘制带树状图的环状热图,要复刻的图片长这样: 复刻效果: 需要安装Statistics and Machine Learning Toolbox即统计与机器学习工具箱!!! 需要安装Statistics and Machine Learning Toolbox即…

对DataFrame的数据进行指定运算的DataFrame.transform()方法

【小白从小学Python、C、Java】 【计算机等级考试500强双证书】 【Python-数据分析】 对DataFrame中所有数据实施指定运算 例如:df1.transform(np.abs) 选择题 关于以下python代码说法错误的一项是? import pandas as pd import numpy as np df pd.DataFrame({&…

上班摸鱼软件

上班摸鱼软件前言思路采集组合自动下单发QQ报告结语前言 疫情几年,在家时间多,上班时间少。没事多在网上闲逛,偶然在知乎上看到一篇文章,说是买球也能稳赚不赔。我研究了一下,还真是这么回事。 简单来说,就…

转换通达信分钟数据,包括5分钟和1分钟数据

目录 1 前言 2 操作演示 3 代码 4 软件下载 5 stockpy整体功能介绍 1 前言 真正的市场高手不但要熟练掌握日线,对分钟线也要进行深入研究。缠中说禅在他的博客中讲到,年、季、月、周、日、60分钟、30分钟、5分钟、1分钟研究道理是相同的。粒度越细&…

华为云之ModelArts+AppCube带你识别101种西式美食

目录 1.注册并实名认证华为云账号 2.AI Gallery 订阅模型及部署 3. 获取访问秘钥 4.使用示例安装包创建 AppCube 应用 5. 创建 ModelArts 连接器 6. 应用修改 6.1 修改脚本 6.2 修改标准页面 6.3 运行及测试 1.注册并实名认证华为云账号 未注册及实名认证的话&…

2023年1月1日生效:2023年火车高铁儿童票最新规则及高铁火车2023儿童票怎么购买?

原文来源:https://www.caochai.com/article-4108.html 2023年火车高铁儿童票最新规则: 自2023年1月1日起生效,儿童购买高铁火车票将执行最新规则:按购票儿童年龄执行票价阶梯。 1、【免费】儿童年龄小于6周岁,无需购…

十六、状态管理——Vuex(2)

本章概要 mapMutationsmapStategetter 16.4 mapMutations 继续完善购物车程序,为购物车添加删除商品功能。删除商品同样要修改 store 中保存的购物车商品数据,因此继续在 mutations 选项中定义一个 deleteItem mutation。编辑 store 目录下的 index.j…

介绍idea 几个常用的插件

介绍idea 几个常用的插件1. Lombok2. MyBatis Log Free3. Database4. jsonparser5. Restful Fast Request5.1 插件配置5.1.1 基础配置5.1.2 全局请求头配置5.1.3 String生成配置5.2 插件使用5.2.1 调式接口(测试看)5.2.2 快速配置token5.2.3 保存、搜索A…

集成分布式锁架包(MySQL、Redis、Zookeeper)

前言: 疫情当下,大环境不好,自己又去了一家令人非常失望的单位,一直在996加班忙于业务代码,技术方面几乎等于零成长。但是,作为一个Coder,必须要挤出时间去学习与总结,不然就会被无情…

Emmet 使用 lorem 快捷生成随机文本填充html页面

快速使用 在编程中,我们也可以使用Lorem ipsum来填充页面,测试显示效果。主要是通过编辑器中自带的 Emmet 插件,识别以 lorem 开头的短语,生成指定格式的内容。以下介绍均以 vscode 为测试载体。 注意:lorem 短语需要…

Java-String 类·下

Java-String 类下5. 字符, 字节与字符串5.1 字符与字符串5.2 字节与字符串5.3 小结6.字符串常见操作6.1 字符串比较6.2 字符串查找6.3 字符串替换6.4 字符串拆分6.5 字符串截取6.6 其他操作方法7. StringBuffer 和 StringBuilder补充大家好,我是晓星航。今天为大家带…

计算机网络体系结构

目录常见的计算机网络体系结构计算机网络体系结构分层的必要性计算机网络体系结构分层思想举例计算机网络体系结构中的专用术语常见的计算机网络体系结构 TCP/IP体系结构相当于将OSI体系结构的物理层和数据链路层合并为网络接口层。并去掉了会话层和表示层。 由于TCP/IP在网络…

Java爬虫 爬取某招聘网站招聘信息

Java爬虫 爬取某招聘网站招聘信息一、系统介绍二、功能展示1.需求爬取的网站内容2.实现流程2.1数据采集2.2页面解析2.3数据存储三、获取源码一、系统介绍 系统主要功能:本项目爬取的XX招聘网站 二、功能展示 1.需求爬取的网站内容 2.实现流程 爬虫可以分为三个模…

[Kettle] Kettle界面介绍

启动Kettle后,弹出Kettle的欢迎界面 有关界面的构成和说明如下所示 ①标题栏:显示界面标题名称 ②菜单栏:分别有【文件】|【编辑】|【视图】|【执行】|【工具】|【帮助】六个菜单栏 ③工具图标栏:显示图形化的常用和重要的菜单项…

SAP MM采购定价过程字段解析

下面我们针对每一个字段进行解释和用途分析 : 1、 步骤:代表了创建PO时,哪个条件类型放到前面,哪个放到后面,如果步骤号相同,那就以谁先选择出来谁就在前面。 2、 计数:没有任何实际意义&a…

DaVinci:神奇遮罩

调色页面:神奇遮罩Color:Magic Mask神奇遮罩 Magic Mask基于人工智能技术,在检视器中绘制一个笔画,就能识别出笔画所在的对象,并以此自动创建遮罩。先确定要对画面上的物体还是人体做遮罩。若是对人体做遮罩&#xff0…

【闲来无聊写个几个小特效——五角星,小光圈,探照灯】

五角星,见过吧,如果是你,你如何使用代码写一个五角星呢?思考一下,你会说,先这样在那样就好啦,可是真正上手的时候却修修改改磕磕绊绊来看一下今天的五角星如何用几行代码实现 1.绘制五角星 四行…

Pytorch进行自定义Dataset 和 Dataloader 原理

1、自定义加载数据 在pytorch中,数据集对象被抽象为Dataset类,实现自定义的数据集需要继承Dataset,并实现相应的方法。 在学习Pytorch的教程时,加载数据许多时候都是直接调用torchvision.datasets里面集成的数据集,直…

GO第 4 章:运算符

第 4 章 运算符 4.1 运算符的基本介绍 运算符是一种特殊的符号,用以表示数据的运算、赋值和比较等 运算符是一种特殊的符号,用以表示数据的运算、赋值和比较等 算术运算符 赋值运算符 比较运算符/关系运算符 逻辑运算符 位运算符 其它运算 4.2 …

Java开发环境安装

总步骤 第一步:安装JDK(Java Development Kit,Java软件开发工具包) 第二步:安装IDEA(是Java语言的集成开发环境) 一、安装JDK Windows下最简单的Java环境安装指南 - 大博哥VV6 - 博客园 (cnblo…