本次报告讨论的是从 2017 年审计的超过 1,100 个商业代码库中的匿名数据所得出的结果,行业包括汽车、大数据(主要是人工智能和商业智能)、网络安全、企业软件、金融服务、医疗保健、物联网(IoT)、制造业和移动应用市场。
开源软件与定制代码相比,既不是更不安全,也不是更安全。但是,开源软件的某些特性使得流行组件中的漏洞对攻击者非常有吸引力。Black Duck(黑鸭)审计结果显示,现在,开源代码在商业应用和内部应用中无处不在,这在漏洞被披露时为攻击者提供了目标非常丰富的环境。漏洞以及对漏洞的利用通常是通过全国漏洞数据库(NVD,National Vulnerability Database)、邮件列表和项目主页等来源进行披露的。
商业软件把更新自动推送给用户,而开源软件与之不同,后者采用一种拉动支持(pull support)模式,即:用户自行负责跟踪他们所使用的开源软件的漏洞、修复和更新。开源代码可以通过多种方式进入代码库,不仅可以通过第三方供应商和外部开发团队进入,也可以通过内部开发人员进入。如果一个组织机构不了解其所使用的所有开源代码,它就不可能抵御针对这些组件中已知漏洞的常见攻击,并且它自己也会暴露在许可证合规风险之中。
2017 年,Black Duck On-Demand(黑鸭按需)审计在每个代码库中发现了 257 个开源组件。到 2018 年,每个代码库中开源组件的数量增长了约 75%。审计发现,96% 的被扫描应用中存在开源组件,这一比例与去年的报告相似。而在被扫描的应用的代码库中,开源代码的平均比例从去年的 36% 增长到 57%,这表明开源代码的使用量在持续大幅度增长,同时也表明,目前大量的应用所包含的开源代码要多于专有代码。
某些开源组件对开发人员来说非常重要,以至于这些组件在极大部分的应用中都能找到。今年,用于开发 HTML、CSS 和 JavaScript 的开源工具包 Bootstrap 出现在 40% 的全部被扫描应用中;紧随其后的是 jQuery,有36%的应用包括该开源组件。在各行业常见的组件中,值得注意的是 Lodash,这是一个为编程任务提供实用函数的 JavaScript 库。Lodash 是诸如医疗保健、物联网、互联网、市场营销、电子商务和电信等
行业所采用的应用中最经常使用的开源组件。
审计还发现,每个代码库中开源漏洞的数量增长了 134%,而 78% 的被检查代码库中包含至少一个漏洞,每个代码库平均包含 64 个漏洞。这一高增长率部分归因于2017年报告的创记录的漏洞数量。仅美国国家漏洞数据库(NVD,National Vulnerability Database)就列出了超过 14,700 个漏洞,而 2016 年仅列出 6,400 个漏洞。其他报告给出的漏洞总数超过 2 万个,其中近8000 是 NVD 报告未列出的。这些数字说明了 2017 年所报告的所有已知漏洞的情况,但其中超过 4,800 个是开源漏洞,这延续了已知开源漏洞为期五年的增长趋势。过去 17 年来,已经有超过 40,000 个开源漏洞被报道。
扫描揭示的另一个重要数据点是,所发现的漏洞的平均年龄正在增加。平均而言,审计中发现的漏洞大约在六年前已经被披露了,而在 2017 年报告则显示是四年前被披露。这表明,负责修复工作的人员需要花费更长时间才能完成修复(如果他们确实正在着手修复的话),这就使得越来越多的漏洞在代码库中积累起来。
此外,这些开源组件还广泛存在许可证问题,企业不太可能使用传统的电子表格方法来跟踪这么大量的许可证义务,而如果没有一套自动化流程的话,这可能就是件不可能的工作。这也导致 74% 的被审计代码库中包含存在许可证冲突的组件,其中最常见的是违反 GPL 许可证协议,存在于 44% 的代码库中。该报告进行审计的代码库中,85% 或存在许可证冲突,或包含不具备许可证的组件。
其中,互联网和软件基础设施垂直行业的应用包含高风险开源漏洞的比例最高,为 67%;其次是互联网和移动应用行业,比例为 60%。具有讽刺意味的是,网络安全行业的仍然被发现存在很高比例的高风险开源漏洞,虽然低于去年的59%,但依然高达41%,这使得该垂直行业处于第四高的位置。
在金融服务和金融科技市场中,34% 的被扫描应用包含高风险漏洞,而医疗保健、健康技术和生命科学垂直行业中的应用紧随其后,有 31% 的应用包含高风险漏洞。制造业、工业和机器人技术在这方面的比例最低,为 9%,这可能是由于 OEM(制造商)对整个软件供应链上的供应商施加压力,要求后者提供经过审查的、干净的代码。相反,制造业垂直行业在所有垂直行业中占据了第三大许可证冲突的位置,比例高达 91%。
事实上,根据黑鸭按需审计集团(Black Duck On-Demand)提供的审计数据,所有垂直行业的企业都应该关注开源许可证问题,也应该关注由于未能遵守开源许可证协议而导致的代码知识产权诉讼或侵权(compromise)所带来的潜在风险。存在许可证冲突的应用在各个行业分布情况互不相同:在零售和电子商务行业中低至 61%,而在电信和无线行业则很高 – 他们 100% 的被扫描代码都存在某种形式的开源许可冲突。
负责分析此报告的由 Synopsys 开源研究与创新中心(COSRI)表示,再争辩是否应该使用开源代码已经没有什么意义了。可以证明的是,目前,大多数应用程序代码都是开源的。在经过审计的包含开源代码的代码库中,这些代码库中平均 57% 的代码都是开源组件,这就证明,目前许多应用中所包含的开源代码要多于自有代码。随着开放源代码使用量的增长,风险也如影随形,主要原因在于企业缺乏适当的工具来识别他们内部的以及面向公众的应用程序中使用了多少或者什么样的开源组件。通过将策略、流程和自动化的解决方案集成到软件开发生命周期中,以便识别、管理和保护开源代码,企业才能够最大限度地发挥开源的优势,同时有效管理漏洞和许可风险。