近日,软件和芯片设计公司 Synopsys 发布《2020 年开源安全和风险分析报告》,指出不安全的开源软件已无处不在。一方面,99% 的审计代码库中至少包含一个开源组件,另一方面,经过审核的代码库中有 75% 包含具有已知安全漏洞的开源组件,老化和废弃的开源组件也无处不在。
3 月,安全和许可证合规性管理解决方案提供商 WhiteSource 同样发布了一份《2019 年开源组件安全漏洞现状报告》。统计显示,2019 年公开的开源软件漏洞数量激增至 6000 多个,增幅达近 50%,原因包含开源软件应用的扩大。
两份报告指向同个现象——开源软件的应用已非常广泛,开源和“我们必须只使用专有代码”的想法间的战争已经结束了,取而代之的是对开源软件是否安全的讨论。
关注和应用的增加带来更多安全问题
WhiteSource 在报告中说明,开源软件漏洞数量的上升可以归因于开放源组件的广泛采用,过去几年开源社区的大量增长,以及媒体对最近一些数据泄露事件的报道,(使得人们)对开放源代码安全的关注提高。
正如 Synopsys 公司的报告中所提到的,开源组件和库是每个行业每个应用程序的基础。
Synopsys 公司的开源安全工具和审计团队——黑鸭审计针对 17 个行业的 1253 个代码库进行审计,具体包括企业服务/SaaS,保健,生命科学,金融服务,物联网,电信,计算机硬件等行业,其中 99% 包含开源组件,有 9 个行业的审计代码库中 100% 包含开源组件。此外,Synopsys 在 2015 年审计中发现,开源代码占比为 36%,这一比例到 2019 年几乎翻了一番,达到 70%。具体数量上,2019 年每个代码库平均有 445 个开源组件,较 2018 年的 298 个显著增加。
“开源(之前)一直被视为爱好者和修补者的领域,但它现在已经是现代经济的组成部分,是智能手机、汽车、物联网和许多关键基础设施等日常技术的基本组成部分”,Linux 基金会和哈佛大学年初也发布了一份开源软件安全性审查结果,其联合主任弗兰克·纳格尔表示开源应用已非常广泛。
同时,开源社区的力量也正在壮大。曾经极力反对开源的微软,2019 年已成为 GitHub 上开源贡献最多的企业,紧随其后的还有 Google、Red Hat、IBM、Intel 等科技巨头。国内企业阿里的开源贡献排名第 12,百度和腾讯分列第 21、23 位。
随应用一起扩大的还有风险。Synopsys 的报告显示,49% 的已审计代码库中包含高风险漏洞。
早在 2006 年的 LinuxWorld 大会上,Linux 内核维护人 Alan Cox 就强调,有相当数量的资金被用来攻击开放源代码系统,许多开放源代码项目远谈不上安全,“许多分析只关注知名度很高的项目,只有部分项目的‘高质量’是名副其实的。”
但开源软件安全引起广泛而激烈的讨论是由于 2014 年的一个安全漏洞。当时网景公司旗下开源密码库 OpenSSL 中的 Heartbleed 安全漏洞被发现。这个漏洞影响了近 20%,即 50 万的 Web 服务器,中国也有超过 3 万台主机受到影响。据搜索引擎商 Shodan 报告,该漏洞截至 2019 年底,引起了 91000 多起脆弱性事件。
Heartbleed 甚至直接导致 Linux 基金会启动了一项“核心基础设施计划”(CII),以支持开源软件项目安全性。而且 CII 在过去 6 年中,已为开源安全筹集了数百万美元。
另外,2017 年,Apache Sturts 的一个漏洞被发现。Struts 是一种开源的 MVC 框架,用于创建基于 Java 的 Web 应用。Apache Struts 团队很快打了补丁,并关闭了该问题。但 5 月,有人利用该漏洞开始攻击征信企业 Equifax,两个月后才被发现。期间,Equifax 有 20.9 万名客户的信用卡号被访问,数据泄露,最终涉及到 1.45 亿用户。事后,Equifax 被重罚 7 亿美元,时任 CEO 引咎辞职。
这两个漏洞被 Synopsys 的报告称为是“臭名昭著”的,因此他们也专门做了追踪,而在这次的审计中,两个漏洞都未出现,“尽管我们取得了成果,但心脏出血(Heartbleed)依旧是个全球问题……自 2015 年以来,经审计的代码库中发现漏洞的平均年龄略低于 4.5 年,存在超过 10 年的漏洞占比为 19%,审计中发现的最古老的漏洞已经存在 22 年,为 CVE-1999- 0061。”
该报告还显示,91% 的代码库中包含已经过时超过 4 年或者过去 2 年内都没有开发迹象的开源组件。除了增加安全风险外,在版本控制中落后太远的危险是——更新到最新版本的简单行为会带来不必要的功能更改,例如关键功能的消失。在过去两年中,有 88 个代码库的组件没有开发活动,面临更高的漏洞风险。
开源依旧被认为可提高软件安全性
不过,对于 Heartbleed 事件以及开源软件漏洞,有开发者认为,闭源软件如 Windows 系统及其 IIS 服务中,漏洞较之开源软件更多。有时,这些漏洞也更严重。开源并不会导致更多风险。
1 月,美国国家安全局公布了一个 Windows 10 的漏洞,该漏洞使全球约 10 亿多台 PC 易受攻击。这一漏洞被叫做“永恒之黑”,有人称其为微软又一“史诗级”漏洞。早在 2017 年 4 月 14 日,可以利用 Windows 系统的 SMB 漏洞获取系统最高权限的“永恒之蓝”网络攻击工具被发布,5 月 12 日,不法分子通过改造“永恒之蓝”制作了 Wannacry 勒索病毒,英国、俄罗斯、整个欧洲以及中国国内多个高校校内网、大型企业内网和政府机构专网被勒索,需支付高额赎金才能解密恢复文件。
上个月,Kenna Security 发布了《 Prioritization to Prediction: Volume 5: In Search of Assets at Risk》报告,分析 Microsoft、Linux 和 Mac 资产的风险状况。报告显示,微软资产的 70% 至少具有一个高风险漏洞,其余未修补的 3600 万个漏洞要高于 Max、Linux 和 Unix 资产的总和。微软还拥有最高的封闭式高风险漏洞百分比,为 83%,Linux 中这一比例仅有 40%。不过报告也指出,Microsoft 可以更快地修复漏洞。
在一些场景中,开源依旧被认为是保障安全的有效方式。开源“圣经”《大教堂与集市》中也提到开源可以保障安全的原因:开源社区最强大的一个强项是非中心化的同行评审,所有致力于细节不被疏漏的传统方法,都无法和它相比。
近期,特朗普称一些外国电力设备可能会利用美国大功率电力系统的漏洞进行攻击,因此他签署了一项电力设备禁令。对此,美国的一项开放源代码电力系统计划公司 LF Energy 的 CEO 表示,电力设备风险并不完全是硬件的问题,应该更加关注的是攻击面和风险点的所在,比如嵌入系统的固件问题。因此,应该开源设备中的硬件和软件,甚至直接对整个堆栈进行开源:“在未来,无论是民族国家还是大型能源公司,恶意攻击者都可以访问和攻击 OEM 的黑盒,而想要检验电网唯一的方法就是使用开源,在一个开放的社区中,具有开放的治理和完全的透明度。”
美国军方国防高级研究计划局年初推出“开放可编程安全 5G”(OPS-5G)新计划。计划承诺创建支持安全 5G 以及后续移动网络(比如 6G)的开源软件和系统。原因在于,开源软件在安全方面的一大优势就是提高了代码可见性,这意味着可以检查、分析和审核代码,这项工作可以手动进行,也可借助自动化工作进行。此外,开源的可移植性有助于硬件生态系统和软件生态系统相脱离,大大提高了供应链攻击的难度。
有观点认为,开源软件更方便使用者检查有无后门,这对一些国家级的大型项目来说,可保证高度可控。此外,软件可信性仅和分发途径有关,软件本身的质量与软件厂商关系更大,而开源开发在很多情形下,因为有“同行评审”,所以更加安全。
多份报告建议公司重视管理开源软件
开源软件安全问题多被认为是源于管理上的疏漏。多项研究在讨论开源软件安全问题的时候,都反复提到这一点。
“随着开源软件越来越受欢迎,识别和减轻已知的漏洞,是开放源码管理的一个关键因素”,Synopsys 在报告中表示。此外,Gartner 分析师 Dale Gardner 在分析软件组成现状时说,“成熟的组织正在扩大开放源码管理,以包括根据给定软件包的来源和支持,对软件整体‘健康’的评估。”
在 Synopsys 发布《2020 年开源安全和风险分析报告》和奇安信代码安全事业部发起“开源项目检测计划”,Linux 基金会联合哈佛大学 2 月发布的《开源软件供应链安全报告》,以及《提高开源软件信任与安全报告》中,均总结了一些开源软件出现安全问题的原因。撇去一些存在于所有软件中的通病,如开发人员的技术能力和安全知识问题等,大致可以归为以下几点:
- 开源软件使用者更新不及时。许多组织在使用任何给定的开源组建的最新版本放上面落后得惊人。开源社区对软件的更新更快,但是大量使用开源组件的公司没有应用他们需要的补丁,使得业务面临被攻击风险。
- 开源项目缺乏管理工具。大多数开源项目的开发缺少 SDL(安全开发生命周期)的流程和工具;许多开源项目关注少,资源有限;开源软件之间的关联依赖,导致开源软件的漏洞管理非常复杂;如果漏洞污染的是基本对象的原型,可能会影响应用程序中所有对象的行为。
- 攻击者对开源生态的攻击,比如向开源库中注入恶意代码、向包管理器仓库投放恶意组件等。如 2019 年 8 月,开源的系统管理工具 Webmin 被爆存在高风险远程命令执行漏洞,据 Webmin 开发人员透露,该漏洞不是编码错误的后果,而是“恶意代码注入受损的基础架构中”导致的。
- 开源项目分发不合规。如公共注册中心或开源软件市场没有对进入的开源项目进行代码审核,导致安全问题增多。
许多问题都指向公司对开源软件缺乏正确的管理。而这些报告也同样给出了一些防患开源软件漏洞的措施。
- 盘点自己的开源项目,做资产梳理。Synopsys 的报告中建议使用软件物料清单 BOM,为开源组件提供充分的可见性。也有建议公司可引入控制,建立开源软件安全引入和退出机制。
- 有效识别漏洞并警告。Synopsys 公司认为,只有小部分开源漏洞会被利用,在开源组建的生命周期内,需要设置漏洞修补优先级。同样,奇安信代码安全事业部总经理黄永刚建议,企业应及时发现存在漏洞的开源软件版本并进行升级。在软件运行阶段,企业需监控开源软件漏洞情报信息,及时响应。
- 组建专业团队。包括成立安全小组,监测外部威胁和脆弱性披露的变化;组织开发和法律团队;创建管理开源活动的策略等等。
开源开发往往被认为是“常发布”(Release often)以及“更少漏洞”的,但近期的几份报告将目光放到更广泛的开源应用中去,得出相反的结论——使用者往往不能及时更新软件,这可能造成安全风险。
关于开源比闭源安全还是更危险,一直以来都会引起激烈的讨论,你觉得开源能让软件中的漏洞得到更快修补,更好地保障软件安全吗?