声明
本文是学习2021年中国软件供应链安全分析报告. 下载地址 http://github5.com/view/1216而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们
四、国内企业软件开发中开源软件应用状况
如前所述,现代软件的源代码绝大多数是混源代码,由企业自主开发的源代码和开源软件代码共同组成。本章内容将针对国内企业在进行软件开发工作时,使用开源软件的具体情况进行分析。主要回答两个问题:一是国内企业在软件开发中是否使用以及使用了多少开源软件?二是其使用的开源软件是否存在安全问题?
2020年全年,奇安信代码安全实验室对2557个国内企业软件项目中使用开源软件的情况进行了分析,这些软件项目的应用领域涉及*、金融、能源等重要行业。分析发现,国内企业在软件开发中普遍使用存在已知漏洞的开源软件,存在巨大的软件供应链安全风险。具体分析数据如下。
1、开源软件总体使用情况分析
(1)国内企业软件项目100%使用开源软件
在被分析的2557个国内企业软件项目中,无一例外,均使用了开源软件。最多的项目使用了3878个开源软件,平均每个项目使用126个开源软件。使用开源软件最多的5个项目情况如下表所示。
项目名称 |
使用的开源软件数量 |
项目1 |
3878 |
项目2 |
3838 |
项目3 |
3536 |
项目4 |
3062 |
项目5 |
2637 |
经过后续的调研和访谈,我们还发现,软件项目中使用的开源软件数量大大超出了软件项目管理者和程序员自身的认知。由于开源软件之间的依赖关系错综复杂,且软件开发中依赖包的管理通常通过包管理器程序自动管理,软件开发者常常意识不到自己使用了数量巨大的开源软件,因此当某个开源软件曝出安全漏洞时,软件开发者常常“躺枪”而不自知,这中间隐含了巨大的软件供应链安全风险。
(2)流行开源软件被近1/4的软件项目使用
一些流行开源软件会被很多软件项目所使用,这些开源软件一旦出现安全漏洞,影响面将会非常巨大。对于大型企业来说,企业内部可能就有数以百计的软件开发项目,更加需要对流行开源软件保持足够的关注和重视,应该做到对其在本单位内的使用情况心中有数。经统计,在我们分析的2557个国内企业软件项目中,被使用最多的开源软件为Apache Commons Lang,被622个项目所使用,占比达24.3%。被使用最多的前5名开源软件如下表所示。
开源软件名称 |
使用它的项目数量 |
被使用率 |
Apache Commons Lang |
622 |
24.3% |
Apache Commons Collections |
620 |
24.2% |
dom4j: flexible XML framework for Java |
563 |
22.0% |
Simple Logging Facade for Java (SLF4J) |
510 |
19.9% |
Javax Inject |
472 |
18.5% |
2、开源软件漏洞风险分析
(1)近9成软件项目存在已知开源软件漏洞
分析发现,在2557个国内企业软件项目中,存在已知开源软件漏洞的项目有2280个,占比高达89.2%;存在已知高危开源软件漏洞的项目有2062个,占比为80.6%;存在已知超危开源软件漏洞的项目有1802个,占比为70.5%。
(2)平均每个软件项目存在66个已知开源软件漏洞
在2557个国内企业软件项目中,共检出168604个已知开源软件漏洞(涉及到4166个唯一CVE漏洞编号),平均每个软件项目存在66个已知开源软件漏洞,最多的软件项目存在1200个已知开源软件漏洞。存在已知开源软件漏洞数量排名前5的项目情况如下表所示。
项目 |
存在开源软件漏洞数量 |
项目1 |
1200 |
项目2 |
1013 |
项目3 |
649 |
项目4 |
517 |
项目5 |
426 |
(3)影响最广的开源软件漏洞存在于44.3%的软件项目中
从漏洞的影响度来分析,影响范围最大的开源软件漏洞为CVE-2020-5421,影响了44.3%的软件项目。影响度排名前5的开源软件漏洞情况如下表所示。
漏洞名称 |
CVE编号 |
影响项目数量 |
影响度 |
Spring Framework安全漏洞 |
CVE-2020-5421 |
1132 |
44.3% |
Google Guava访问控制错误漏洞 |
CVE-2020-8908 |
1021 |
39.9% |
Apache Log4j信任管理问题漏洞 |
CVE-2020-9488 |
1020 |
39.9% |
FasterXML Jackson-databind代码问题漏洞 |
CVE-2020-8840 |
905 |
35.4% |
FasterXML Jackson-databind代码问题漏洞 |
CVE-2020-25649 |
866 |
33.9% |
(4)15年前的开源软件漏洞仍然存在于多个软件项目中
分析发现,部分软件项目中存在十几年前公开的古老开源软件漏洞,最古老的漏洞是2005年11月公开的CVE-2005-3510,仍然存在于31个项目中。部分古老开源软件漏洞的影响情况如下表所示。
漏洞名称 |
CVE编号 |
发布日期 |
影响项目数量 |
Apache Tomcat目录列表拒绝服务漏洞 |
CVE-2005-3510 |
2005.11.06 |
31 |
Jetty URL编码的反斜杠源代码泄露漏洞 |
CVE-2005-3747 |
2005.11.22 |
41 |
Apache Tomcat跨站脚本攻击漏洞 |
CVE-2005-4838 |
2005.12.31 |
32 |
Apache Struts ActionForm拒绝服务漏洞 |
CVE-2006-1547 |
2006.3.30 |
32 |
Apache Struts 特定参数安全绕过漏洞 |
CVE-2006-1546 |
2006.3.30 |
32 |
3、开源软件运维风险分析
开源软件运维风险复杂多样,本报告主要从老旧开源软件的使用和开源软件多版本的使用角度进行分析。
(1)18年前的老旧开源软件版本仍在被使用
分析发现,许多软件项目中使用了十几年前发布的开源软件版本,存在很大的运维风险。被使用的老旧开源软件版本中,最老旧的一个是2003年3月3日发布的Apache Xalan 2.5.D1,已经有18年之久,但仍然被7个软件项目所使用。按老旧程度排名前5的开源软件如下表所示。
开源软件名称 |
版本号 |
版本发布日期 |
使用它的项目数量 |
Apache Xalan |
2.5.D1 |
2003.03.03 |
7 |
XML Pull Parsing API |
1.1.3.1 |
2003.06.17 |
273 |
JDOM |
1.0-FCS |
2004.09.03 |
25 |
SSLExt |
1.2-0 |
2004.10.04 |
17 |
Jboss J2se |
200504122039 |
2005.04.26 |
14 |
(2)开源软件各版本使用非常混乱
分析发现,各个项目中开源软件使用的版本非常混乱,并非使用的都是最新版本。Spring Data是被使用版本最多的开源软件,有162个版本在被使用。按照被使用版本的数量排序,排名前5的开源软件情况如下表所示。
开源软件名称 |
被使用的版本数量 |
Spring Data |
162 |
Jackson-databind |
141 |
Apache Tomcat |
132 |
Jetty |
126 |
Hibernate ORM |
121 |
延伸阅读
更多内容 可以点击下载 2021年中国软件供应链安全分析报告. http://github5.com/view/1216进一步学习
联系我们
DB1306-T 154-2019 冬小麦田间杂草综合防治技术规程 保定市.pdf