国家互联网应急中心(英文简称为"CNCERT")近日发布了《2021年开源软件供应链安全风险研究报告》。
报告共分为五部分
- 第一部分,介绍开源漏洞的发展现状及趋势;
- 第二部分,聚焦开源组件生态库的安全风险;
- 第三部分,重点围绕组件按依赖层级漏洞传播范围分析;
- 第四部分,对文件级漏洞潜在安全风险及波及范围进行讨论;
- 第五部分,对开源使用者和关注者如何在开源领域蓬勃发展下,更安全的拥抱开源生态提出了建设性意见。
下面引用报告的部分内容进行简单介绍。
一、开源漏洞发展现状及趋势
发现一:开源软件漏洞整体呈增长趋势,2020 年增长率略有下降
根据调查结果,相比 2015 年漏洞数据,近 5 年的漏洞数量均有不同程度增长。2018 年是开源项目快速增长的一年,根据 GitHub 官方数据显示,GitHub 代码仓库中超过 1/3 的开源项目创建于 2018 年,2018 年新增开源漏洞数也创下近 6 年新高,新增 7563 个漏洞,相较于 2015 年翻了 2.85 倍;2017 年漏洞增长速度最快,环比增长率为 92.86%;2019 年与 2020 年增长率略有下降,2020 年发布的漏洞数较 2019 年发布漏洞数少了 1746 条。
▲开源漏洞时间分布
发现二:CVE 官方未收录的开源软件漏洞数逐年递增
根据对 CVE 官方网站的统计,2020 年发布的开源漏洞中未被 CVE 官方收录漏洞有 1362 个,占 2020 年发布漏洞总数的 23.78%;CVE 官方未收录数据呈上长趋势,增长率逐年递增,2018 年环比 2017 年增长速度达 133.52%。
▲CVE 官方未收录开源漏洞情况
发现三:开源软件漏洞由 POC 披露到 NVD 首次公开时间长达 11 年
2020 年发布的开源漏洞中,编号为 CVE-2009-4067 的 Linux 内核的 Auerswald Linux USB 驱动程序的缓冲区溢出漏洞由 POC 披露到 NVD 首次公开时间长达 11 年。
开源软件的使用者仅关注官方漏洞库(如 NVD 等)可能无法及时获取漏洞信息,需综合考虑更多渠道的漏洞数据。
发现四:近 4 年,高危及以上开源漏洞占比均超 40%
▲含高危以上漏洞占比
▲2020 年漏洞危害等级占比
发现五:2020 年,最主要缺陷类型为 CWE-79
调查结果显示,缺陷类型 CWE-79 数量最多,占 2020 年新增开源漏洞的 14% 左右。
▲2020 年开源漏洞 TOP10 CWE 缺陷类型
二、开源组件生态安全风险分析
发现六:开源组件生态中的漏洞数呈上涨趋势,2020 年环比增长 40%
根据调查结果,近 6 年开源组件生态中漏洞数逐年递增。其中,2020 年新增漏洞数为 3426,环比去年增长 40%;2017 年增长速度最快,环比增长 49%;近 3 年增长速度呈上升趋势,2020 年新增漏洞数是 2015 年的 4.48 倍。
▲开源组件生态漏洞时间分布
发现七:近 6 年中 Maven 仓库漏洞数量最多
调查结果显示,近 6 年中漏洞数量最多是 Maven 仓库,漏洞数量为 3533 个;Go 仓库漏洞数量最少,漏洞数量为 348 个;平均每个仓库漏洞数量为 1413 个。
▲近 6 年中各组件仓库漏洞情况
发现八:超半数仓库的漏洞数均较上年有所增长
调查结果显示,近 6 年,Composer、 Go 、Maven、npm、PyPI、Rubygems 6 种仓库的漏洞数均有不同程度的上涨;Rubygems 仓库漏洞增长速度最快,相比去年翻 10.5 倍;Go 仓库和 PyPI 仓库增长率其次,环比增长率分别为 252% 和 132%;Maven 仓库 2020 年新增漏洞数基本与去年持平。
▲近 6 年各仓库漏洞分布图
发现九:2020 年高危漏洞占比最高,相比去年增加 2.6 倍左右
▲近 6 年新增漏洞风险等级时间分布
▲近 6 年新增漏洞各风险等级占比
发现十:2020 年,含高危以上漏洞占比最多仓库是 Rubygems
调查结果显示,超八成组件含高危以上漏洞占比均超过 40%。2020 年,Rubygems 仓库含高危以上漏洞占比最多,占 Rubygems 仓库新增漏洞的 96%;Go 仓库含高危以上漏洞占比最少,占 2020 年 Go 仓库新增漏洞的 39%。
▲2020 年各仓库中含高危以上漏洞占比
发现十一:平均每版本漏洞最多的 TOP 25 组件约五成来自 Composer 仓库
平均每版本漏洞数=组件全版本漏洞数/组件版本数。
研究发现,平均版本漏洞最多的 TOP25 中,Composer 仓库的组件数占比最多,共计 12 个,占比约 5 成左右;PyPI仓库的组件数排名第二,共计 7 个;平均版本漏洞数最多的组件来自 Maven 仓库,漏洞数量为 47 个。下图列示各仓库中平均版本漏洞 TOP25 组件分布:
▲平均版本漏洞最多 TOP25 组件仓库分布
三、组件漏洞依赖层级传播范围分析
发现十二:一级传播影响范围扩大 125 倍,二级传播影响范围扩大 173 倍
调查结果显示,原始样本中 6,416 个组件,受组件依赖关系的影响,一级传播一共波及 801,164 个组件,其影响范围扩大 125 倍。第二轮实验中,发现二级传播一共波及 1,109,519 个组件,影响范围相比原始样本 6,416 个组件扩大 173 倍。
▲组件漏洞依赖层级传播范围
发现十三:npm 仓库中的组件经 2 轮传播,影响组件数量最多
调查结果显示,Maven、npm、Rubygems 、PyPI、Composer、Nuget 6 个仓库选取样本中,npm 仓库原始含漏洞组件数量为 1,962 个,npm 仓库漏洞组件数量在原始样本中仅次于 Maven 仓库,排在第二位。经 2 轮模拟传播实验,发现 6 组仓库中波及范围最广是 npm 仓库。npm 仓库原始样本中共有 1,962 个含有漏洞的组件,经过一级传播共波及 459,876 个组件,漏洞的影响范围扩大了 234 倍;二级传播共波及 601,574 个组件,范围比最初 1,962 个组件扩大了 307 倍。
▲各仓库组件漏洞传播范围
发现十四:一级传播影响范围最广的仓库是 Composer
调查结果显示,Composer 仓库原始含漏洞组件数量为 380 个,为 6 个仓库中原始样本中含漏洞组件数量的第 5 位。经 1 次传播,一级传播波影响范围最广的仓库是 Composer。经过一级传播共波及 99,611 个组件,漏洞的影响范围扩大了 262 倍。
▲各仓库一级传播影响范围
发现十五:二级传播影响范围最广的仓库是 Nuget
调查结果显示,Nuget 仓库原始含漏洞组件数量为 172 个,为 6 组中含漏洞组件数量最少的仓库。经 2 次传播,二级传播波影响范围最广的仓库是 Nuget。经过一级传播共波及 23,240 个组件,漏洞的影响范围扩大了 135 倍;二级传播共波及 84,995 个组件,范围比最初 172 个组件扩大了 494 倍。
▲各仓库二级传播影响范围
发现十六:传播影响范围最小的仓库是 Maven
调查结果显示,Maven 仓库原始含漏洞组件数量为 2,289 个,经过 2 次传播,6 组仓库中受漏洞影响范围最小是 Maven 仓库。经过一级传播共波及 94,724 个组件,漏洞的影响范围扩大了 41 倍;二级传播共波及 145,827 个组件,范围比最初 2,289 个组件扩大了 64 倍。
▲两轮漏洞传播组件漏洞影响范围分布图
四、开源文件潜在漏洞风险传播分析
发现十七:超 80% 漏洞文件在开源项目具有同源文件
调查结果显示,选取的 17,570 个含漏洞的开源文件中有 80.35% 的文件可在开源项目中找到同源文件,共计 14,118 个,其余的 3,452 个文件未找到同源文件。
▲漏洞文件同源占比分布
发现十八:漏洞文件在开源项目中传播范围扩大 54 倍
通过对含同源文件的 14,118 个含有漏洞的开源文件进行分析,在不考虑同一开源项目不同版本的前提下,这些漏洞文件被 766,877 个开源项目所引用,漏洞文件在开源项目中传播范围扩大 54 倍。如果考虑同一开源项目的不同版本,这些漏洞文件被 2,410,476 个开源项目所引用,漏洞文件在开源项目中传播范围将扩大 171 倍。
▲漏洞文件在开源项目中传播范围分布
五、开源安全风险建议
(一)建立开源管理领导组织
(二)识别开源成分
(三)修复已知开源漏洞
(四)建立开源威胁情报体系
(五)弃用过老的开源组件和版本,及时安全更新
(六)使用左移安全工具
猜你喜欢: