网站源码安全检测-超80%项目存在高危开源漏洞 《2021中国软件供应链安全分析报告》发布

近年来,针对软件供应链的安全事件仍呈快速下降趋势,造成的危害越来越大。 防范软件供应链安全风险已迫在眉睫;

开源软件漏洞频现:截至2020年底,CVE/NVD、CNNVD、CNVD等公开漏洞室共收录开源软件相关漏洞41342个,其中新漏洞高达13%(5366个) 2020 年;

研究发现:近90%的软件项目都存在已知的开源软件漏洞; 每个软件项目平均有 66 个已知开源软件漏洞; 影响最广泛的开源软件漏洞存在于 44.3% 的软件项目中; 多个软件项目中仍然存在漏洞。

根据《2020年迁信开源项目监测计划》对1364个开源软件项目源代码安全检查:开源软件项目整体缺陷密度为14.96个/千行,高风险缺陷密度为0.95个每千行;

近日,奇安信代码安全实验室发布了《2021年中国软件供应链安全综合分析报告》。 报告主要包括国外企业自主开发的源代码安全状况分析、开源软件生态发展及安全状况分析、开源软件在国内企业软件开发中的应用现状分析、典型应用系统供应链安全风险实例分析、总结及建议。 。

国外企业自主开发源代码安全状况

源代码是软件的原始形式,位于软件供应链的源头。 源代码安全是软件供应链安全的基础,其地位非常关键和重要。

2020年全年,奇安信代码安全实验室对2001个国外公司自主开发的软件项目源代码进行了安全缺陷检查。 共检查代码33,501,173行,共发现安全缺陷3,387,6​​42个,其中高危缺陷361,812个。 总体缺陷密度为10.11个/千线,高危缺陷密度为1.08个/千线。

1. 编程语言分布

在实测的2001个国外企业自主开发的软件项目中,使用排名前三的编程语言为Java、PHP、C/C++,对应的软件项目分别为1492个、204个、97个。 可以看出,国外相关公司进行软件开发的首选语言是Java语言,占比高达75%。 编程语言的总体分布如右图所示。

2、典型安全缺陷检测

输入验证、路径遍历、跨站脚本、注入、NULL引用、资源管理、密码管理、API滥用、配置管理、日志伪造等十类安全缺陷是程序员在编译软件代码时经常出现的典型安全缺陷。

典型安全缺陷的检出率可以揭示软件源代码的基本安全状况(检出率是指富含某类缺陷的软件项数占软件项总数的比例)。 2001年测算的软件项目中,十类典型安全缺陷的总重检率为77.8%。 各类典型缺陷的检出率及排名如下表所示。

开源软件生态发展与安全现状

根据 Gartner 的说法,大多数现代软件是“组装”的,而不是“开发的”。 据著名研究机构Forrester统计,在软件开发中,80-90%的代码来自于开源软件。 为此,现代软件的源代码大多是混合源代码,由企业自主开发的源代码和开源软件代码组成。 开源软件是现代软件开发最基本的原材料。 它与企业自主开发的源代码位于软件供应链的同一环节。 它也位于软件供应链的源头。 其代码本身的安全状况将直接影响最终软件的安全性。 。

报告从开源软件生态发展状况、开源软件源代码安全状况、公开报告的开源软件漏洞状况四个方面全面分析了2020年开源软件生态发展和安全状况。 ,以及开源软件活动的状态。

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

据奇安信代码安全实验室检测统计,2019年底和2020年底网站源码安全检测,主流开源软件包生态中开源项目总数分别为2,841,314个和3,814,194个,减少34.2%在一年里; 截至2020年底,主流开源软件包生态系统中平均每个开源项目有10.2个版本。 可以看到,2020年,开源软件生态系统将越来越繁荣,整体发展非常迅速。

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

NPM包生态项目数量最多,Godoc包生态增长最快。 八个典型开源软件包生态系统中开源项目的数量和下降率如右图所示。 其中,NPM包生态系统中开源项目数量最多。 截至2020年底,开源项目数量已达1,559,835个; 增长最快的是Godoc包生态系统,2020年项目总数增长36.2%。

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

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

奇安信代码安全实验室于2015年初启动了“奇安信开源项目监控计划”,该计划是针对开源软件项目的公共安全监控计划,让开发者能够关注和了解开源软件的安全问题。 提高软件安全开发意识和技能。

2020年全年,“迁信开源项目监控计划”对1364个开源软件项目的源代码进行了安全检查。 代码总数为12,429,6804行,共发现安全漏洞1,859,129个,其中高危漏洞117,738个。 2020年实测的1364个开源软件项目总体缺陷密度为14.96个/千行,高风险缺陷密度为0.95个/千行。

(1) 编程语言分布

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

(二)典型安全缺陷检测

输入验证、路径遍历、跨站脚本、注入、NULL引用、资源管理、密码管理、API滥用、配置管理、日志伪造等十类安全缺陷是程序员在编译软件代码时经常出现的典型安全缺陷。

典型安全缺陷的检出率可以揭示软件源代码的基本安全状况(检出率是指富含某类缺陷的软件项数占软件项总数的比例)。 2020年实测的1364个开源软件项目中,十类典型安全缺陷的总重检率为56.3%。 各类典型缺陷的检出率及排名如下表所示。

3. 开源软件公开报告的漏洞分析

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

(1)小型开源项目漏洞总数及年度下降量TOP20

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

2020年公开报告漏洞数量减少前20名的小型开源项目信息如下表所示。

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

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

2020年,主流开源软件包生态中公开报告漏洞数减少的前20名开源软件信息如下表所示。

4. 开源软件活动分析

活跃度也是判断开源软件安全性的一个重要维度。 不活跃的开源软件,无论更新频率很低还是废弃,一旦出现安全漏洞,无法及时修复,安全风险非常高; 在活跃的开源软件中,如果其版本更新发布的频率较低的话,也会降低用户运维成本和安全风险。 在选择使用开源软件时应充分考虑这两种激励因素。

本报告分析了2020年主流开源软件包生态中开源软件的版本更新情况,可以在一定程度上揭示当前开源软件活动的整体状况。

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

我们将一年内没有更新和发布的开源软件项目定义为非活跃项目。 2020年全年,主流开源软件包生态中不活跃的开源软件项目数量为2,347,794个网站源码安全检测,占比61.6%。

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

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

2020年全年,主流开源软件包生态中,已有13411个开源项目更新发布了100多个版本。 在上述8个典型开源软件包生态系统中,一年内发布超过100个版本的项目数量如下表所示。

开源软件在国外软件开发中的应用现状

现代软件的源代码大多是混合源代码,由企业自主开发的源代码和开源软件代码组成。 本章内容将分析国外公司在软件开发中使用开源软件的具体情况。 主要回答两个问题:一是国外公司在软件开发中是否以及使用了多少开源软件? 第二是它使用的开源软件是否存在安全问题?

2020年全年,奇安信代码安全实验室分析了2557个国外企业软件项目中开源软件的使用情况。 此类软件项目的应用领域涉及政府、金融、能源等重要行业。 分析发现,国外企业在软件开发中普遍使用存在已知漏洞的开源软件,这给软件供应链带来了巨大的安全风险。 具体分析数据如下。

1、开源软件整体使用情况分析

(1)国外企业软件项目100%使用开源软件

在分析的2557个国外企业软件项目中,无一例外都使用了开源软件。 使用开源软件最多的项目为3878个,平均每个项目使用126个开源软件。 使用开源软件的前 5 个项目如下表所示。

经过跟踪考察和采访,我们还发现,软件项目中开源软件的使用量已经大大超出了软件项目经理和程序员本身的认知。 由于开源软件之间的依赖关系复杂,而软件开发中依赖包的管理一般都是通过包管理器程序手动管理,软件开发者往往没有意识到自己使用了大量的开源软件,因此当某个时候开源软件 当安全漏洞爆发时,软件开发者往往会在不知不觉中“掏枪”,这意味着软件供应链存在巨大的安全风险。

(2)流行的开源软件被近1/4的软件项目使用

一些流行的开源软件将被许多软件项目使用。 这类开源软件一旦出现安全漏洞,影响将是巨大的。 对于小型企业来说,企业内部可能有数百个软件开发项目,越来越有必要对流行的开源软件保持足够的关注和重视,并应了解其在单位的使用情况。 据统计,在我们分析的2557个国外企业软件项目中,使用最多的开源软件是Apache Commons Lang,有622个项目使用,占比24.3%。 下表显示了最常用的 5 个开源软件。

2. 开源软件漏洞风险分析

(1) 近90%的软件项目存在已知的开源软件漏洞

分析发现,2557个国外企业软件项目中,已知开源软件漏洞的项目有2280个,占比89.2%; 已知开源软件高危漏洞项目2062个,占比80.6%; 已知超危开源软件漏洞的项目有1802个,占比70.5%。

(2)平均每个软件项目有66个已知开源软件漏洞

在2557个国外企业软件项目中,共检测出已知开源软件漏洞168604个(涉及4166个唯一CVE漏洞编号),平均每个软件项目已知开源软件漏洞66个,最大的软件项目已知漏洞1200个。 已知的开源软件漏洞。 已知开源软件漏洞数量排名前 5 名的项目如下表所示。

(3)影响最广的开源软件漏洞存在于44.3%的软件项目中

从漏洞影响分析来看,影响最大的开源软件漏洞为CVE-2020-5421,影响了44.3%的软件项目。 影响最大的前 5 个开源软件漏洞如下表所示。

(4)15年前开源软件的漏洞在多个软件项目中仍然存在

分析发现,部分软件项目中存在十多年前披露的旧开源软件漏洞。 最古老的漏洞是CVE-2005-3510,于2005年11月披露,一直存在于31个项目中。 一些旧的开源软件漏洞的影响如下表所示。

3、开源软件运维风险分析

开源软件运维风险复杂多样。 本报告主要分析旧开源软件的使用情况以及开源软件多版本的使用情况。

(1) 18年前的旧开源软件版本仍在使用

分析发现,不少软件项目使用十几年前发布的开源软件版本,运维存在很大风险。 在使用的老开源软件版本中,最古老的是2003年3月3日发布的Apache Xalan2.5.D1,已经有18年的历史了,但仍然被7个软件项目使用。 按年龄排名前 5 位的开源软件如下表所示。

(2)各种版本开源软件的使用十分混乱

分析发现,各个项目所使用的开源软件版本非常混乱,并非全部使用最新版本。 SpringData是使用版本最多的开源软件,有162个版本。 按照使用版本数排名,排名前 5 名的开源软件如下表所示。

总结和建议

软件供应链已成为网络空间攻防对抗的焦点,直接影响关键基础设施和重要信息系统的安全。 为应对软件供应链安全挑战,日本首相拜登于2021年5月12日签署《关于加强国家网络安全的行政命令》,明确提出提高日本软件供应链安全英国联邦政府并要求英国联邦政府任何转售软件的企业,除了提供软件本身外,还必须提供软件物料清单(SBOM),其中明确定义了软件的组件。 该行政命令还要求法国国家标准与技术研究所(NIST)在六个月内发布软件供应链安全手册,并在一年内发布最终手册。 该行政命令被认为是德国联邦政府迄今为止为保护德国软件供应链安全而采取的最强有力举措。

当前,我国软件供应链安全基础比较薄弱,亟待从国家、行业、组织、企业等各个层面建设软件供应链安全风险检测能力、分析能力、处置能力、防护能力。企业,从而提高整个软件供应链的安全性。 管理水平。 现代软件的供应链非常复杂,软件供应链的安全管理是一项系统工程,需要常年持续建设。 基于奇安信代码安全实验室的研究和实践,我们建议可以从以下几个方面入手开展软件供应链安全相关工作,并在此基础上不断完善和建设。

1、对国家和行业监管层面的建议:

2.给软件最终用户的建议:

3、对软件厂商的建议:

关于作者

奇安信代码安全实验室

奇安信代码安全实验室是奇安信集团旗下子公司,专注于软件源代码安全分析技术研究和二补码漏洞挖掘技术研发。 奇安信代码卫士和奇安信开源卫士推出的软件代码安全分析系统已在数百家小型企业和机构中应用,帮助客户构建自己的代码安全体系。

向上滑动查看

附件:《2021年中国软件供应链安全分析报告》官网地址(可下载)