阿里、蚂蚁、晟腾、中科加禾精彩分享 AI 基础设施洞见,现购票可享受 9 折优惠 |AICon 了解详情
写点什么

每 1000 行代码有 14 个安全缺陷,开源软件的安全令人堪忧

  • 2020-04-08
  • 本文字数:2732 字

    阅读完需:约 9 分钟

每1000行代码有14个安全缺陷,开源软件的安全令人堪忧


当今,开源软件已经成为软件世界的重要组成部分。根据 Gartner 统计,99%的组织在其 IT 系统中使用了开源软件。


今年 3 月,安全公司 WhiteSource 发布了一份《开源安全年度报告》。报告表明,2019 年,公开披露的开源安全漏洞数量再创新高,总数为 6100 个。与 2018 年相比,开源安全漏洞的数量增长近 50%。这份报告表明,开源软件的安全问题非常严重。


更关键的是,开源软件的安全不仅关系自身,而且影响整个现代软件开发。“可以说,现代软件大多数是被‘组装’出来的,不是被‘开发’出来的”。事实上,现代软件开发越来越像工业生产和制造,原材料就是开源软件,加上自己写的业务代码,最后“组装”出一个软件系统。


在奇安信代码安全事业部总经理黄永刚看来,开源软件已经成为构建网络空间最基础的“砖头瓦块”,无处不在。“开源软件已经成为信息系统开发和建设的核心基础设施,开源软件安全问题应该上升到基础设施安全的高度来对待。”他说。

从 OpenSSL“心脏出血”漏洞说起

2014 年,开源软件OpenSSL Heartbleed(心脏出血)漏洞席卷全球。该漏洞不仅让整个中国互联网为之一颤,而且导致全球超过三分之二的网站“心脏出血”,可谓影响深远。据悉,这个 bug 非常严重,导致全球互联网大量私钥和其他加密信息处于暴露危险下,受影响严重的系统甚至可以从服务器中直接获取用户密码。



2017 年,美国征信巨头Equifax发生数据泄露,涉及近 1.45 亿用户。事后,该公司不仅被重罚 7 亿美元,而且 Equifax CEO 也引咎辞职。据悉,这起数据泄露事件的原因是黑客利用 Struts 开源软件的漏洞实施攻击。


无论是 OpenSSL“心脏出血”漏洞,还是 Equifax 数据泄露,都是因为开源软件出现安全问题。近年来,开源软件漏洞造成的安全事件越来越多,影响巨大,让人们开始认识到开源软件安全的严重性。


奇安信代码安全事业部总经理黄永刚表示,从另一个角度看,行业客户对安全的思考越来越系统化,很多客户开始关注信息系统全生命周期的安全。“安全开始左移,大家开始重视从源头上做好安全工作。开源软件是软件开发的原材料,是我们进行信息系统开发和建设要把住的第一道安全关口。”他说。

两个重大发现

发现 1:每 1000 行开源软件代码中就有 14 个安全缺陷,每 1400 行开源软件代码中就有 1 个高危安全缺陷。


发现 2:开源软件之间的关联依赖,导致开源软件的漏洞管理非常复杂。


2015 年,奇安信代码安全事业部发起“开源项目检测计划”。目前,该项目已经对 3000 多款开源软件进行了安全检测,并帮助许多开源项目修复了代码安全缺陷,包括 Google、Facebook、腾讯、阿里等旗下的开源项目。


据悉,通过开源项目检测计划,团队发现开源软件的安全问题确实非常严重。相关数据分析和统计显示,开源软件的代码安全缺陷密度是 14.22/KLOC,高危安全缺陷密度为 0.72/KLOC。换句话说,每 1000 行开源软件代码中就有 14 个安全缺陷,每 1400 行开源软件代码中就有 1 个高危安全缺陷。


黄永刚说,“另一个发现是,开源软件之间的关联依赖,导致开源软件的漏洞管理非常复杂。如果不用系统化的工具来做这件事,几乎不可能完成。”


2019 年,其团队检测了 935 个最新的物联网设备固件,并针对这些固件中所使用的开源软件和安全问题进行了分析。经过分析,他们发现:最新出厂的物联网设备中,还有 5%的设备使用了存在 Heartbleed(心脏出血)漏洞的 OpenSSL 版本,5 年前的超级漏洞,依然存在于最新的物联网设备中。


因此,对开源组件的梳理和漏洞分析,一定需要系统化的方法和自动化的工具,才能做到可管理、可持续,不留死角。


而开源软件最值得关注的安全问题是其放大作用。简言之,一个开源软件出现漏洞,会导致依赖它的其他开源软件受到影响,而且层层关联依赖,这就导致非常隐蔽和复杂的攻击面。


举个例子,Log4j 有一个安全漏洞——CVE-2017-5645。由于直接依赖 Log4j 的开源软件有 4000 多个,那么这 4000 多个开源软件也会受到 CVE-2017-5645 漏洞的影响。更恐怖的是,还有 46000 多个间接依赖 Log4j 的开源软件,它们则是更隐蔽的受害者。

三大原因

在软件开发上,无论是技术方面,还是流程和管理方面,任何一点疏忽都会导致开源软件出现安全问题。


具体说来,奇安信代码安全事业部总经理黄永刚总结出三方面的原因:


1.开源软件开发者自身的技术能力和安全开发知识存在问题,导致开发的代码中有安全缺陷;


2.大多数开源项目的开发缺少 SDL(安全开发生命周期)的流程和工具。并且,很多开源项目能使用的资源很有限,缺乏专业的代码安全分析工具,而大部分专业的代码安全分析工具都是收费的,价格昂贵;


3.攻击者对开源生态的攻击,比如向开源库中注入恶意代码、向包管理器仓库投放恶意组件等。


如何提高开源软件的安全性?黄永刚认为,从技术上,开源项目需要更系统地引入保障应用安全的流程、方法和工具,比如基于 SDL 的流程和理念管理开源项目的开发过程,并对开源项目开发者进行安全开发知识的普及。其次,使用源代码静态分析、动态安全测试、交互式安全测试等工具,并对开源项目开发者提交的代码进行全面的安全测试等。


从非技术角度来说,“我觉得,开源技术社区和安全技术社区可以加强交流和合作,形成互动和反馈,互相促进。开发和安全的良性互动,是解决软件安全问题非常重要的前提。”他说。

五条安全建议

针对软件开发者和企业,黄永刚建议从引入控制、资产梳理、风险识别、漏洞告警和合理修复五个方面加强开源软件的安全治理。


1.引入控制。企业应规范开源软件的引入流程,建立开源软件安全引入和退出机制。同时,对开源软件的引入需要加入安全评估因素,不仅需要评估项目团队引入的开源软件是否存在公开的漏洞,是否存在开源法律风险,而且企业应进行完整性验证,开源软件是否来自官方,避免使用被篡改的开源软件。


2.资产梳理。无论是软件开发者,还是企业,它们在软件开发过程中会引入大量开源软件。然而,企业的安全管理者和开发管理者常常不清楚自身的信息系统到底引入多少开源软件,引入了哪些开源软件。开源软件有着层层嵌套的依赖关系,软件开发者或企业很难通过人工方式进行梳理。因此,建议使用专业的自动化工具识别软件系统中含有哪些开源软件以及开源软件之间的关联关系,形成企业开源软件可视化资产清单。


3.风险识别。软件中使用的开源软件可能存在已知漏洞,且这些开源软件背后调用或依赖的其他开源软件也可能存在已知安全漏洞。在软件开发过程中,企业应及时发现存在漏洞的开源软件版本并进行升级。


4.漏洞告警。在软件运行阶段,企业应监控开源软件漏洞情报信息,及时发现开源软件的最新漏洞信息,并进行应急响应。


5.合理修复。绝大多数的开源软件是通过版本更新实现漏洞修复的。对于不能通过升级新版本或打补丁来修复漏洞,企业应引入专业的漏洞研究队伍,定制漏洞修复方案。


2020-04-08 07:005105
用户头像
万佳 前InfoQ编辑

发布了 677 篇内容, 共 335.0 次阅读, 收获喜欢 1794 次。

关注

评论 1 条评论

发布
用户头像
的确开源软件的维护和安全性在一些方面不及专业性的软件,着体现了开源软件社区的重要性,我们应该推动社区的建设和运营。

2020-04-08 17:46
回复
没有更多了
发现更多内容

2面技术+HR面+offer,从头到尾,都是精华

Java 程序员 后端

30岁以后搞Java已经没有前途,Java经典排序算法

Java 程序员 后端

2021百度Java岗面试真题收录解析,Java开发者必看避坑指南

Java 程序员 后端

2021阿里Java高级面试题总结,Dubbo高频面试题+解析

Java 程序员 后端

21年Java面经分享,Java面试知识点总结宝典助你通关

Java 程序员 后端

2021最新Java算法相关面试大,Java程序员技术路线

Java 程序员 后端

2021最新中高阶Java面试题总结,牛笔了

Java 程序员 后端

2021最新网易Java面试题目,华为Java面试题及答案

Java 程序员 后端

2021最新大厂Java面试集合,java基础入门视频教程,重磅来袭

Java 程序员 后端

2021网易Java高级面试题总结,初级Java程序员面试题

Java 程序员 后端

25K大牛甩出的超详细面试总结,给班出身的程序员一些建议

Java 程序员 后端

2面技术+HR面+offer,成功入职头条月薪35K

Java 程序员 后端

30岁以后搞Java已经没有前途,java自学编程入门教程,大V推荐

Java 程序员 后端

2021最新Java知识体系总结,上个月成功拿到阿里P7offer

Java 程序员 后端

2021最新Java知识体系总结,史上最全

Java 程序员 后端

【内含福利】得物、B站技术大佬分享系统稳定性保障干货,邀您共赴上海交流!

TakinTalks稳定性社区

运维 性能测试 系统稳定性 压力测试

2021最新Java面试真题解析,mysql汉化教程,全网首发!

Java 程序员 后端

2021最新Java高频精选面试题讲解,开源新作

Java 程序员 后端

027云原生之服务网格应用

穿过生命散发芬芳

云原生 10月月更

一图看懂云栖大会「云原生」重磅发布

阿里巴巴云原生

容器 云原生 云栖大会 ACK Anywhere

推荐两款工具给爱做实验的人

Java 开源 编程 架构

2021最新Java开发面试大全,马士兵java入门教程,美团Java面试

Java 程序员 后端

云栖·追踪云原生|Serverless入围阿里云十大核心技术

阿里巴巴云原生

阿里云 Serverless 云栖大会 技术代表

2021最新中高级Java面试题目,一份字节跳动面试官给你的Java技术面试指南

Java 程序员 后端

2021最新网易Java面经,裸辞奋战25天三面美团

Java 程序员 后端

2021金九银十面试季,java零基础入门视频教程,成功入职腾讯

Java 程序员 后端

先行一步,7大技术创新和突破,阿里云把 Serverless 领域的这些难题都给解了

阿里巴巴云原生

阿里云 Serverless 云原生 云栖大会

2021最新Java开发面试解答,Java编程教程入门

Java 程序员 后端

2021最新网易Java面经,还在等机会

Java 程序员 后端

云栖大会第二天:ACK Anywhere 来了

阿里巴巴云原生

阿里云 容器 云原生 ACK Anywhere

2021最新Java面试笔试,尚硅谷linux笔记文档,Java中级工程师面试题

Java 程序员 后端

每1000行代码有14个安全缺陷,开源软件的安全令人堪忧_开源_万佳_InfoQ精选文章