聚焦源代码安全,网罗国内外最新资讯!

编译:奇安信代码卫士团队

当今,开源软件已经成为软件世界的重要组成部分。根据 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. 合理修复。绝大多数的开源软件是通过版本更新实现漏洞修复的。对于不能通过升级新版本或打补丁来修复漏洞,企业应引入专业的漏洞研究队伍,定制漏洞修复方案。

推荐阅读

奇安信开源卫士免费提供开源组件安全检测服务

Linux开源系统OpenWrt被曝RCE 漏洞已存在3年,数百万网络设备受影响

WhiteSource 发布《2019年开源组件安全漏洞现状报告》:哪种语言最安全?

原文链接

https://www.infoq.cn/article/7LxAlkslCBOgtdl8qITl

题图:Pixabay License

本文由奇安信代码卫士编译,不代表奇安信观点。转载请注明“转自奇安信代码卫士 www.codesafe.cn”。

奇安信代码卫士 (codesafe)

国内首个专注于软件开发安全的产品线。

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

  1. 让你少写 1000 行代码的正则全攻略来了!

    说起正则表达式,相信大家都不陌生.在很多程序员的认知中,这东西并不难,在工作中用的也不多,每次用的时候去 Google 搜一搜,然后复制过来改一改,问题就解决了,看起来效率特别高,好像完全没必要专门花 ...

  2. 1000行代码入门python-Python基础知识和工作环境

    Python基础知识和工作环境 第一堂课的教学目标是: [1]掌握Python的基础知识,比如,谁是Python的创始人,它有哪些特点: [2]Python的开发工具Anaconda的操作界面是怎样的 ...

  3. 1000行代码入门python-小白入门篇,Python到底是什么?

    原标题:小白入门篇,Python到底是什么? Python是一种计算机编程语言 他和英语,法语,韩语,猫语,狗语一样 很抱歉,说梦话不算 想一想,如果你会猫语,可以和猫咪对话,那是不是很有意思? Py ...

  4. FFmpeg+SDL,如何用少于1000行代码编写视频播放器

    此文档翻译国外dranger教程: An ffmpeg and SDL Tutorial or How to Write a Video Player in Less Than 1000 Lines ...

  5. FFmpegSDL教程:用不到1000行代码写一个播放器

    序 更新:本教程最近一次更新于2015年2月. FFmpeg是一个创建视频应用,甚至更通用程序的强大音视频工具库.FFmpeg能够完成视频处理过程中解码,编码,封装和解封装所有这些棘手工作.借助它,可 ...

  6. 1000行代码写小游戏(终)

    最后献上完整的1000行代码,基本功能已经完成,可以通过配置小怪和矿的位置和大小控制玩家时长和难度: ------------------------------------------------- ...

  7. python爬虫代码1000行-简单用14行代码写一个Python代理IP的爬虫

    相信用别的语言只用14行是写不出来这样的效果的!而我们的Python 只需要区区的14行代码就能写出来哦! 这就是Python为什么是全球现在比较流行的语言之一了!因为简单 容易学! 比较上手! 现在 ...

  8. GitHub 热榜:天才黑客开源新项目,不到 1000 行代码,1400 Star!

    点击上方"Github爱好者社区",选择星标 回复"资料",获取小编整理的一份资料 来自机器之心 在深度学习时代,谷歌.Facebook.百度等科技巨头开源了多 ...

  9. 1000行代码徒手写正则表达式引擎【1】--JAVA中正则表达式的使用

    简介: 本文是系列博客的第一篇,主要讲解和分析正则表达式规则以及JAVA中原生正则表达式引擎的使用.在后续的文章中会涉及基于NFA的正则表达式引擎内部的工作原理,并在此基础上用1000行左右的JAVA ...

最新文章

  1. windows命令行设置环境变量
  2. mysql 5.5.38_数据库的硬迁移和mysql 5.5.38源码安装
  3. java七大_Java 7七大新功能
  4. centos不能挂在ntfs
  5. 图层样式混合选项_图标设计,用PS的图层样式制作逼真的玉石图标
  6. 统计sql server数据库中所有表的记录数
  7. p70_域名解析系统DNS
  8. 关于web开发的一点理解
  9. [vba]快速更新表格标题序号
  10. 台式计算机有没有无线连接模块,台式机能不能连接wifi_台式机怎么连接wifi
  11. PyCharm vs VSCode 到底谁更牛?
  12. APMServ 使用
  13. Docker容器的数据卷(volumes)
  14. Xception实现动物识别(TensorFlow)
  15. 【收藏】六度分隔、六度空间(Six Degrees of Separation)理论
  16. 一键实现前程无忧(51job)简历不停刷新(selenium)
  17. GIS、ArcGIS 、WebGIS及Cesium的介绍
  18. 写System权限的APP
  19. 【安装版】Win8.1专业版系统资源_ISO_ESD格式镜像
  20. 亮剑“互联网+政务服务”,航天信息助力政府“最多跑一次”改革

热门文章

  1. WCF服务重构实录(中)
  2. 销售99绝招 成功没商量
  3. Windows平台内核级文件访问
  4. 详解promise、async和await的执行顺序
  5. 如何发布第一个属于自己的npm包
  6. Linux自学笔记——iptables
  7. Android从无知到有知——NO.6
  8. Spring容器启动时出现Failed to read schema document错误
  9. TransactionScope 事务使用说明
  10. select null and select 1