Synopsys 公司近日发布了“2018 年开源代码安全和风险分析” Black Duck(黑鸭)报告,深入考察了商业软件中开源安全性,许可证合规以及代码质量风险的状况。

400076473_wx.jpg


本次报告是通过统计 1,100 多个商业代码库中的数据所得出的结果,行业包括汽车、大数据(主要是人工智能和商业智能)、网络安全、企业软件、金融服务、医疗保健、物联网(IoT)、制造业以及手机APP市场



应用安全


由于全球最大的信用报告机构之一的Equifax发生重大数据泄露,导致48亿美国消费者的信息遭到泄露;


2017年3月8日,美国国土安全部披露Apache Struts2(用于创建web应用程序的开源框架)存在远程命令执行漏洞,需要在某些版本中修补特定漏洞。被审计的代码库中有8%包含Apache Struts,其中33%仍然包含Struts漏洞。


多起重大数据泄露事件接踵而至,让开放源码的安全管理成为2017年的互联网的头等大事。



2018年开源安全与风险分析报告


保持软件“开源”的概念是30多年前就引入的,今天,开放源码的使用遍及各行各业,并被各种规模的企业所使用。原因很简单——开源降低了开发成本,加快了上市时间,加速了创新和开发人员的生产力。


据 Forrester Wave分析,“开发人员使用开源组件作为基础,创建一个应用程序使用新代码只有10%到20%。但开源并不比自定义代码更安全。并且开源的某些特性使得流行组件中的漏洞对攻击者更为有利。


正如黑鸭审计的结果所显示的,开源代码如今无论是在商业和内部应用程序中都很普遍,当漏洞被披露的同时,它也为攻击者提供了一个目标丰富的环境。漏洞以及漏洞的利用一般通过国家漏洞数据库之类的NVD漏洞库、邮件列表和项目主页进行披露。


与自动向用户推送更新的商业软件不同,开源有一个拉动支持(pull support)模式——用户需要自行跟踪开源软件的漏洞、修复和更新。进入开源代码库的方式有很多,不仅可以通过第三方供应商和外部开发团队,还可以通过内部开发人员。如果一个组织机构不了解其软件的所有开源代码,它就不可能抵御这些组件中已知漏洞的常见攻击,并且它自己也会陷入在许可证合规风险之中。


微信图片_20180717174724.jpg


此次调查中,96%的被审计的应用程序中发现了开源组件,每个应用平均有257个组件;


开源代码库的平均百分比从去年的36%上升到今年的57%,许多应用包含的开源代码多于专有代码,这表明现在有大量的应用程序包含的开源代码要比私有代码多得多。对于开发人员来说,有些开源组件非常重要,因此这些组件可以在很大一部分的应用程序中找到。


78%的被检查代码库中至少含有一个Bug,每个代码库平均包含65个Bug


今年,用于HTML、CSS和JavaScript开发的开源工具包Bootstrap,在所有被扫描的应用程序中占40%,紧随其后的是jQuery,36%的应用程序包括该开源组件。


还有一个十分常见的开源组件是Lodash,它是为编程任务提供实用函数的JavaScript库,是医疗保健、物联网、互联网、营销、电子商务和电信等行业应用中最常见的开源组件



开源组件中的安全问题


调查发现,每个代码库的开源漏洞数量增长了134%,其中,78%的代码库至少包含一个漏洞,平均每个代码库有64个漏洞。这种高增长率和2017年披露的漏洞数量有关。仅国家漏洞数据库(NVD)就披露了14700多个漏洞,而2016年只有6400个。还有其他报告披露的漏洞总数超过2万,其中近8000个在NVD没有列出的。


微信图片_20180717174801.jpg


这些数据中,超过4800个是开源漏洞,在过去的17年中,被披露的开源漏洞超过40,000个。此外,还发现另一个重要数据就是发现的漏洞平均年龄在不断增加。平均而言,审计中发现的漏洞是在近6年前就已经披露的——2007年报告显示的是4年——这表明那些负责修复的开发人员需要花费更长时间才能完成漏洞修复,这将导致在代码库中积累的漏洞越来越多



十大高危组件


微信图片_20180717174824.jpg


调查的所有代码库中超过54%的漏洞为高风险漏洞,这意味着它们更容易被利用。最常见的漏洞是CVE-2016-9878,这是关键的Spring框架中的一个漏洞,在被审计的代码库中有13%出现。


17%的代码库中包含一些备受关注的漏洞,诸如 Heartbleed, Logjam,Freak, Drown, Poodle等。


此外,还有一系列CVEsBug,包括CVE-2016-7103:跨站点脚本漏洞(在13%的代码库中);CVE-2014-3625:目录遍历漏洞(12%);CVE-2014-0050:拒绝服务漏洞(12%) CVE-2015-6420:远程代码执行漏洞(11%)。


微信图片_20180717174843.jpg



开源组件中的许可证问题


此外,这些开源组件还广泛存在许可证问题,开放源码组件由2500多个开放源码许可证管理,不同的许可证有不同的义务和不同程度的限制。只有识别了由这些许可管理的开源组件,才能管理和遵守这些许可要求。就像安全漏洞一样,只有发现了才能修复。如果不遵守开源许可会使企业面临诉讼和知识产权妥协的巨大风险。



行业许可冲突比例


微信图片_20180717174901.jpg


 74% 的被审计代码库中包含存在许可证冲突的组件,其中最常见的是违反 GPL 许可证协议,存在于 44% 的代码库中。该报告进行审计的代码库中,85% 或存在许可证冲突,或包含不具备许可证的组件。



跨垂直领域的开源安全和许可风险


微信图片_20180717174913.jpg


开源遍布各行各业,在不同行业中,开源组件的占比在11%到77%之间


互联网和软件基础设施的垂直领域所包含的高风险开源漏洞比例最高,达到67%,其次是互联网和移动应用,为60%。网络安全行业中包含的高风险开源漏洞的比例也高达41%,排在第四的高位。(详细行业高危漏洞占比见上表。)


事实上,所有垂直行业的企业都应该关注开源许可证问题,也应该关注由于未能遵守开源许可证协议而导致的代码知识产权诉讼或侵权(compromise)所带来的潜在风险。



不同行业中最常见的高危组件


微信图片_20180717174932.jpg



结论和建议


超过80%的网络攻击发生在应用程序,96%的应用程序包含了开源代码。如今,争论是否应该使用开源代码已经没有什么意义的,因为大多数应用程序代码都是开源的。统计的包含开源代码的代码库中,平均 57% 的代码都是开源组件。


但随着开源使用的增长,风险也随之而来,数据显示,2017年,被披露的开源漏洞将近5000个,自2000年以来,将近4万个开源漏洞被披露,78%的代码库至少包含一个漏洞,平均每个代码库有64个漏洞。


随着代码库的变化,目前是没有一种技术可以检测到每一个漏洞。静态分析(SAST)对于检测私有代码中的安全缺陷(sql注入、跨站点脚本编写、缓冲区溢出)是必不可少的。动态分析(包括DAST、IAST和fuzz测试)用于检测运行中的应用程序行为和配置问题导致的漏洞


随着开源使用的增长,企业应该制定策略、流程和自动化的解决方案集成到软件开发生命周期中,以便识别、管理和保护开源代码,企业才能够最大限度地发挥开源的优势,同时有效管理漏洞和许可风险。


开源最前线(ID:OpenSourceTop) 猿妹编译

链接:https://medium.mybridge.co/machine-learning-open-source-projects-of-the-month-v-june-2018-d87e2ca3e13f