2天时间,聊今年最热的 Agent、上下文工程、AI 产品创新等话题。2025 年最后一场~ 了解详情
写点什么

2018 年开源状况:代码贡献超 310 亿行,而漏洞超 16000 个

  • 2019-03-04
  • 本文字数:2609 字

    阅读完需:约 9 分钟

2018年开源状况:代码贡献超310亿行,而漏洞超16000个

几年前,“开源”还是点点星火,如今已成燎原之势。在过去的 2018 年,企业都在积极加强自己在开源方面的实力,IBM 大手笔 340 亿美元收购了 RedHat,微软 75 亿美元收购了 GitHub。


开源软件蓬勃发展的同时,安全漏洞风险也在增加。SNYK 不仅向 500 多名开源用户和维护人员分发了调查报告,同时也监控了 SNYK 内部监控和保护的数十万个项目的漏洞数据,并结合外部研究,发布了 2019 年开源安全状况报告。


首先,我们先来看几个关键性结论:


  • 2017 年到 2018 年,包管理工具索引的开源包数量呈爆炸式增长,其中 Maven Central 增长了 102%,PyPI 增长了 40%,NPM 增长了 37%,NuGet 增长了 26%,RubyGems 增长了 5.6%。

  • 应用程序的漏洞在短短两年的时间内增加了 88%,其中 SNYK 跟踪的 Rhel、Debian 和 Ubuntu 的漏洞数量,2018 年是 2017 年的四倍多。

  • 最受欢迎的默认 Docker 映像 Top 10 中的每一个都至少包含 30 个易受攻击的系统库,其中 44%可以通过更新 Docker 映像来修复已知漏洞。

  • 调查显示,37%的开源开发人员在 CI 期间不会进行任何的安全测试,54%的开发人员不会进行 Docker 映像的安全测试,而从漏洞出现在开源包中到漏洞修复的时间可能会超过两年。

  • 调查显示,81%的调查者认为开发人员应该负责开源安全,68%的调查者认为开发人员应承担 Docker 容器镜像的安全;但只有十分之三的开源维护人员认为自己应该具备较高的安全知识。

开源应用

开源软件对现代软件开发产生了深远的影响,并且这种影响力还在每年递增。据 GitHub 报告称,2018 年新用户的注册量超过了之前六年的总和,且平台上创建的新组织和新存储库增加了 40%。另外,开源软件同时也推动了语言和平台的发展,影响了行业增长,Forrester 报告称,开源软件是业务技术战略的重要组成部分。


前文我们曾提到,科技公司都在大量使用开源,每个编程语言生态系统中都有越来越多的开源库被索引,且有的增长率实现了两位数,甚至是三位数的增长(Maven Central 实现了 102%的三位数增长。)


开源的使用正走在高速路上,2018 年 Java 包增加了一倍,NPM 增加了大约 250000 个新包。



据 Linux 基金会报告称,2018 年开源贡献者提交了超过 310 亿行的代码,这些代码一旦要在实际的生产环境中使用,那么拥有、维护和使用此代码的人就必须承担一定的责任,规避风险。


据 CVE 列表报告显示,2017 年总共有 14000+个漏洞,打破了 CVE 一年内报告的漏洞记录,而 2018 年,漏洞数量继续上升,超过了 16000 个。


我们在调查中关注了不同生态中不同软件包的下载数量,同时也关注了这些开源软件包如何转化为用户采用。


根据 Python 注册表显示,PYPI 在 2018 年的下载量超过 140 亿,相比于 2017 年报告中的 63 亿,下载量增加了一倍。从下表中我们可以看到在 8 月份的时候,下载量出现了激增的情况,这是由于 LineHaul(PYPI 的统计收集服务)出现故障造成的,该故障导致在 8 月之前大半的下载量丢失。


另外,开源软件消费也取得了巨大的飞跃,从 PYPI 中下载 python 包的数量是原来的两倍,从 NPM 下载 javascript 包的数量更是惊人,达到 3170 亿个。



NPM 注册表是整个 JavaScript 生态系统的核心。在过去的几年中,无论是添加还是下载的软件包数量都稳步增,仅 2018 年 12 月的一个月时间就有 300 多亿次。


而 Docker 的采用也促进了开源软件的增长,据悉,Docker 公司在 2018 年每两周就有超过 10 亿个容器下载,截止到目前,数量约有 500 亿个。仅 2018 年一年就有超过 100 万个新的应用程序添加到 Docker Hub 中。


风险和影响

而伴随着软件包数量的增加,是漏洞的增加,前文我们提到了 2018 年新漏洞数量再创新高,超过 16000 个。


在 GitHub 发布的 Octoverse 报告中,Security 成为了最受欢迎的项目集成应用程序。而 Gartner 的行业分析师在最近的一份应用程序安全报告中也表示企业应该在应用程序生命周期中尽早测试安全性。


开源软件使用的越多,代码中自然就包含了更多其他人的代码,累积的风险就会越大,因为这些代码目前或者是将来可能会包含漏洞。当然,这里的风险并不单单是指代码的安全性,同时也包括了所采用代码的许可以及该代码是否违反了许可证本身。


在接受调查的受访者中,43%至少有 20 个直接依赖关系,这无疑就需要增强对这些引入库的源码的监控。而事实上,只有三分之一的开发人员可以在一天或更少的时间内解决严重性漏洞。


“企业应定期使用 SCA 工具来审计包含软件资产(如版本控制和配置管理系统)的存储库,以确保企业开发和使用的软件符合安全和法律标准、规则和法规。另外,应用程序开发人员也可以使用 SCA 工具来检查他们计划使用的组件。


如今,没有开源依赖的情况下写代码几乎是不可能完成的任务,所以正确跟踪所依赖的库就成为了一个难题。采取何种措施才能既消除漏洞,同时还能保持依赖项之间的兼容性?


NPM、Maven 和 Ruby 中的大多数依赖项都是间接依赖项,由少数明确定义的库请求。在调查中,Snyk 扫描了 100 多万个快照项目,发现间接依赖项中的漏洞占整个漏洞的 78%,这说明我们需要进一步增强对依赖树的洞察,并突出脆弱路径的细微差别。


开源维护者的安全状况

虽然在大多数开发人员和维护人员都认同在构建产品和编写代码时,安全性是非常重要的,但是对他们而言,在构建开源项目时没有“教科书式”的规则可供他们参考,因此安全标准可能有很大的不同。


在今年的调查中,大部分用户(平均每 10 个用户中就有 6.6 个)都将他们的安全技术选择在中等水平,7%的受访者认为目前的安全技术水平较低。


相应的专业知识排名,2019 年的排名发生了一些变化,尤其是 High 和 Low,其中 High 占据了 30%,Medium 占据了 63%,而 low 占据了 7%,而在 2017 年,High 只占了 17%,low 占了 26%。


在调查过程中,我们还发现了维护人员通常都会将时间和经历放在项目的功能性方面,而往往忽视了安全性。


安全审计

安全审计作为代码审查的一部分,其中需要双方确保遵循安全代码最佳实践,或者采取另一种方式,即通过运行不同的安全审计变体,如静态或动态应用程序安全测试。


无论是手动审计还是自动审计,它们都是检测和减少应用程序中漏洞的重要组成部分,并且应该在开发阶段尽可能早地定期执行,以降低后期暴露和数据泄露的风险。



去年,有 44%的受访者表示他们从未进行过安全审计,而今年,这一数字要低得多,只有 26%的用户表示他们没有审计源码。与去年的报告相比,今年重复审计也呈现出了积极的趋势,以季度和年度为单位,有 10%的用户会经常的审计代码。


2019-03-04 00:075520

评论

发布
暂无评论
发现更多内容

个人/团队/企业/组织申请计算机软件著作权的流程

不脱发的程序猿

程序人生 专利 软著申请 计算机软件著作

数据中心太耗电,送你一个节能神器

华为云开发者联盟

数据中心 节能 电费 NAIE 制冷

Serverless:这真的是未来吗?(一)

Serverless Devs

运维 云原生 服务器 #Serverless

python变量、运算符

若尘

变量 运算符 Python编程 5月日更

智能家居商业模式:To C向左,To B向右

不脱发的程序猿

IoT 智能家居 智能家居商业模式

ELK协议栈基本介绍

五分钟学大数据

大数据 5月日更

Spark RDD详解

大数据技术指南

大数据 spark 5月日更

cornerstone 基础概念篇(一)

Lazy

cornerstone 脑科学 脑科学软件工程 脑影像

据说学会这款数据分析工具,会被各大名企高薪哄抢!

博文视点Broadview

夯实信任基础 区块链正在成为价值互联网的新代言

CECBC

解读SSDB、LevelDB和RocksDB到GaussDB(for Redis)的迁移

华为云开发者联盟

数据仓库 华为云 数据迁移 GaussDB(for Redis) PB级数据库

打破固有思维(九)

Changing Lin

☕【Java技术之旅】走进线程池的世界(基础篇)

码界西柚

Java 线程 线程池 线程池工作原理 5月日更

Flutter Tab

Geek_7e907c

如何防止抄袭PCB电路板

不脱发的程序猿

嵌入式 如何防止抄袭PCB电路板 PCB电路板 硬件开发

css与less,sass的奇妙之旅

less SASS

情场失意的我,幸获师兄捞了一把,助我拿到6个大厂offer,Java岗

Java架构师迁哥

带你彻底搞懂高性能网络模式Reactor 和 Proactor

华为云开发者联盟

reactor Proactor 网络编程模式

区块链创新包含基础技术和应用场景两个层面

CECBC

最强阿里巴巴历年经典面试题汇总:C++研发岗

linux大本营

c++ Linux epoll 服务器开发

CRUD程序员勿进!全身心投入才能读懂腾讯大佬亲码的“Java微服务”学习笔记

Java架构师迁哥

区块链技术如何助力构建新能源系统

CECBC

深入浅出,Andorid 端屏幕采集技术实践

拍乐云Pano

android 音视频

如何从Docker镜像提取Dockerfile?

运维研习社

Docker Dockerfile 5月日更

【LeetCode】整数转罗马数字Java题解

Albert

算法 LeetCode 5月日更

canvas从零到一,实际案例

Vue 海报 js ts canvas

区块链新基建时代 看欧科云链如何助力数字经济产业升级

CECBC

数字经济

WAVE SUMMIT 2021 深度学习开发者峰会定档5月20日

百度大脑

深度学习 飞桨

iOS 面试策略之系统框架-UIKit

iOSer

ios 面试 语言 & 开发 系统框架

Kubernetes入门——Kubernetes日志采集与监控告警

百度开发者中心

百度 Kubernetes 云原生 kubernetes入门 技术课程

Windows后渗透之权限维持

Thrash

2018年开源状况:代码贡献超310亿行,而漏洞超16000个_语言 & 开发_甜梨整理_InfoQ精选文章