北大软件工程中心 北京北大软件工程股份有限公司 马森 曹向志
导语:随着软件开源文化的盛行,以github网站为主的开源项目在全球范围内广泛应用。根据权威组织数据分析给出,99%的企业和个人在其IT系统中采用开源软件。开源软件为系统开发提升效率的同时,也给软件埋下了安全隐患。一旦引用的开源代码中存在着病毒、木马、后门等,则可能随时爆发软件安全事件,给企业带来巨大经济损失,同时降低客户对企业的信任度,给企业带来不可挽回的损失。例如著名的OpenSSL水牢漏洞事件、心脏滴血事件、Equifax数据泄露事件、Gmail、yahoo和Hotmail账号泄露事件等等事件层出不穷。这些事件中有很多跟引用开源软件有关。
2017 年,Black Duck On-Demand(黑鸭按需)审计在每个代码库中发现了 257 个开源组件。到 2018 年,每个代码库中开源组件的数量增长了约 75%。审计发现,96% 的被扫描应用中存在开源组件,这一比例与去年的报告相似。而在被扫描的应用的代码库中,开源代码的平均比例从去年的 36% 增长到 57%,这表明开源代码的使用量在持续大幅度增长。审计还发现,每个代码库中开源漏洞的数量增长了 134%,而 78% 的被检查代码库中包含至少一个漏洞,每个代码库平均包含 64 个漏洞。这一高增长率部分归因于2017年报告的创记录的漏洞数量。仅美国国家漏洞数据库(NVD,National Vulnerability Database)就列出了超过 14,700 个漏洞,而 2016 年仅列出 6,400 个漏洞。其他报告给出的漏洞总数超过 2 万个,其中近8000 是 NVD 报告未列出的。这些数字说明了 2017 年所报告的所有已知漏洞的情况,但其中超过 4,800 个是开源漏洞,这延续了已知开源漏洞为期五年的增长趋势。过去 17 年来,已经有超过 40,000 个开源漏洞被报道。
GitHub是一个开源及私有软件项目的托管平台,是开源代码库集散地,超过150万个组织,2400万个人用户使用该平台。
北大软件工程中心网络安全团队长期对开源软件、开源项目等代码安全进行大数据分析,截止发稿之日,对GitHub上的180,153个开源项目的123,062,391代码提交版本、338,742,218个文件、2,202,026,682个函数、23879个二进制安装包以及618,932个二进制文件进行跟踪,发现总计有漏洞15,722个,只有部分被CVE收录。统计分析出9种常见安全漏洞如下面图一,这些安全漏洞影响项目数统计见图二。
存在安全漏洞最多的是Memory leak,3737个,占总数的23.77%。其中2370个被CVE收录提供查询,只占漏洞总数15.07%,可见绝大多数安全漏洞并没有被收录,存在着很大风险。Null pointer、buffer overflow和off by one三种安全漏洞累计占总数的19.16%。在180,153个项目中,各种开发预研占比如图三:
从图上可以看出,开发网站主要采用的Java和JavaScript语言占项目总数的61.87%。使用这些开源网站源代码存在更广泛的风险。
北大软件工程中心网络安全团队对CVE自1999年成立到2017年为止收录的所有的风险漏洞了进行了统计和分析,如下面图四。开源漏洞收录自2014年快速增长,到2017年是成倍增长,这也说明开源软件安全风险正在快速蔓延,波及和影响越来越大。通过公开漏洞项目漏洞数统计图图五可以看出,这些安全漏洞主要存在于各种Linux开源操作系统、andriod和苹果操作系统、firefox、chrome和safari浏览器中。这些都是与企业和个人工作、生活息息相关的系统和设备,可见其影响范围之广。
下面从北大软件安全大数据平台中摘取一个案例进行分析:
对CVE所发布的93303个公开漏洞进行了收集和分析,其中通过对CVE-2015-0374原文翻译如下:
Oracle MySQL Server 5.5.40及更低版本、5.6.21及更低版本中存在未公开漏洞,远程认证用户可以通过与服务器相关的未知向量影响服务器安全、特权、外键。
其影响工程项目包括:mysql 5.5.40、mysql 5.6.21、solaris 11.3、ubuntu_linux 12.04、ubuntu_linux 14.04、ubuntu_linux 14.10、debian_linux 7.0、fedora 20、enterprise_linux 7.0。
这种安全漏洞已经是被CVE公开的漏洞,采用这些工程项目的企业需要及时更新版本,防止这些公开的漏洞被利用。
在github上由使用开源工程项目的人提交的缺陷,北大软件安全大数据平台整理到私有漏洞列表中,共收集了45005个专有漏洞。其中对Bootstrap工程项目跟踪收集到的漏洞有6个,见图七。Bootstrap是来自于Twotter,一款简洁、直观、强悍、移动设备优先的开源前端开发框架,目前比较流行。在其总计发布的60个版本中,找到6个已修复安全漏洞,这些安全漏洞修复公布后,采用该开源框架的应用系统需要及时修复,防止0Day漏洞发生。
打开序号为1的漏洞,其描述如下:
修复(tooltip):确认tooltip.scope 从缓存中释放
这次修复确认是当 d e s t r o y 取 消 时 , 把 t o o l t i p . destroy 取消时,把tooltip. destroy取消时,把tooltip.scope从angular.element.cache中清除,防止内存泄露。
本次修复是对应的是#484缺陷关闭。提交ID为:9246905acc7a41956e1879242617a7421530619c,提交时间为2015年5月31日。对应两个文件的修改,增加了45行代码(+号行代码),删除了4行代码(-号行带代码)。请参考下面的修改的代码段。
在GitHub上数十万个开源项目,这些开源软件被全世界的软件研发企业和研发人员所采用,这些开源软件中,或多或少的都存在一些安全漏洞,有的漏洞已经被发现和修复,有些还没有被发现,引用这些开源软件的应用系统或设备潜在很多风险,这些开源软件中的漏洞一旦被发现并恶意运用,则引用开源软件的企业应用系统或产品面临着巨大风险。
通过上面对开源项目中的安全漏洞统计分析,让我们认识到开源软件的安全漏洞潜在的风险是越来越大,一旦安全漏洞爆发,影响范围将是一个行业、一个国家甚至全世界。研发企事业单位一定提高重视程度,根据国家相关安全标准,制定开源软件和开源代码的使用风险防范措施,落实到软件研发工具链的各个环节。主要的防范措施建议如下: