众人之眼——开源软件的安全状况

简介:

开源社区最引以为豪的透明、公开、众人参与等特性,也许很大程度上只是起到了掩饰开源生态系统中弱点的作用。那种人人以为开源才保持不间断的警醒氛围,实际上非常虚幻。

众人之眼——开源软件的安全状况

近期备受瞩目的多个漏洞让人开始怀疑“众人之眼”的正确性,但也实实在在地推动了开源生态系统在安全性上的实质性进展。

若说世上有直面开源安全挑战的标杆式人物,那可能得数维尔纳·科赫——编写了GnuPG并辛勤维护了这一开源软件生态系统支柱18年的德国开发者。

自1999年初版发行以来,GnuPG已成为世界上应用最广泛的开源安全工具之一,保护着每个人的电子邮件通信,从普通政府官员到爱德华·斯诺登。

不过,科赫发现自己最近几年很难做到收支相抵。自2001年起大约年均2.5万美元的捐款并不足以支撑他的工作。据独立的非盈利新闻工作室ProPublica报道,这位53岁的开发者在爱德华·斯诺登的中情局泄密事件震惊全球之时几乎已经游走在放弃GnuPG的边缘了,但泄密事件反而令他决定迎难而上,继续坚持下去。“我太理想主义了。”他说。

众人之眼——开源软件的安全状况

维尔纳·科赫

这件事结局还不错。ProPublica的报道出来后,全世界的捐赠者纷纷慷慨解囊援助科赫。他很容易就收到了比原定维持工作所需的13.7万美元还多的捐款,让他可以雇个兼职开发人员帮忙。Linux基金会的核心基础设施计划也给了他一笔6万美元的一次性拨款。脸书和在线支付处理商Stripe都承诺每年给科赫的项目注资5万美元。

资金不足的项目,就像之前的GnuPG一样的,组成了空前庞大的开源生态系统的一部分。开源代码的广泛重用支撑着今天技术的飞速发展,但巨大的代码量阻碍了安全审查。直到最近我们才开始直面这个问题,通常总在安全漏洞逼使业界采取行动之后。

码农也是要吃饭的

让科赫数年间处于困境的情况并不少见。

在谷歌研究员尼尔·梅塔揭示了OpenSSL组件的严重远程利用漏洞“心脏滴血”后,软件社区惊恐地发现这一项目很大程度上是Linux基金会执行理事吉姆·泽姆林所称的“两个名为史蒂夫的家伙”在负责。史蒂芬·亨森和史蒂夫·马奎斯博士利用业余时间更新代码,所得资金支持仅仅来自于每年几千美元的自愿捐款。

倚赖开源的技术经销商们很快介入,将OpenSSL项目导向正轨。给了GunPG的创造者6万美元拨款的核心基础设施计划是几个月前成立来资助亨森和其他人在OpenSSL上的工作的。财政支持由亚马逊、Adobe、思科、脸书和谷歌等硅谷巨头提供。

千万人盯着也有眨眼的时候

心脏滴血不是第一个杀手级开源漏洞。比如说,在它之前一年的阿帕奇Struts漏洞的严重程度就至少跟它一样。

不过,多亏了媒体炒作,心脏滴血可能永久性搞臭了埃里克·雷蒙德关于开源特性的名言:“只要有足够的眼睛盯着,所有的漏洞都很表浅。”绝大多数安全专家认为这句话更多在激励而非描述。

众人之眼——开源软件的安全状况

安全公司Sonatype首席技术官约书亚·柯曼说:“我从没喜欢过‘众人之眼’这个概念。‘很多眼球’并不意味着这些眼球都有足够的动力和能力去看去发现安全漏洞。”

例如破壳漏洞。它的代码被认为是经过仔细审查了的,但实际上根本不是那么回事。因为人人都假定它被人认真检查过了,因此没人再愿意去费力做重复工作。

当我们都倾向于假定开源代码完整性很高的时候,Sonatype的数据却揭示了相反的结果。这家公司对其托管代码库中开源组件的分析显示,开源组件中已知漏洞的修复率仅为41%,柯曼在Usenix杂志《;login:》中写道。而那些已修复的问题,平均修复时间是异常漫长的390天。

不过,即使抛开商业谈论“开源”,专有软件也是有误导性的。开源软件和专有软件之间或许曾经泾渭分明,但时至今日大多数应用程序已变成第三方软件组件集合体,所谓第三方,其中大多数来自开源项目。

代码安全为重中之重

该怎么做?不管怎样,答案在很大程度上是文化意识上的。安全漏洞披露平台HackerOne首席策略官和前微软高级安全策略师凯蒂·墨索利斯说。“我们必须打造安全思维。这对每个软件项目都很重要——无论是不是开源项目。”

墨索利斯的公司提供基于Web的平台用以整合漏洞披露,手段还包括了漏洞赏金计划。她提到,HackerOne已经向大量开源项目提供了漏洞赏金赞助,比如PHP、Ruby on Rails、Python和OpenSSL,他们为漏洞报告提供报酬。

开源项目需要对安全问题采取更为认真和系统化的方法,她说:“你至少得尝试将安全构建进去。”

Sonatype的柯曼建议采用更为严格的解决方案:类似于以高品质和高责任感著称的生产厂商所采用的供应链。

柯曼用福特生产线作为类比,说这家公司清楚其成车上每一块部件的来源,问题可以被追溯至特定的供应商、设备,甚至生产批次。

然而,当今的软件开发组织里,并没有这样的系统。几乎每个商业软件应用都利用了第三方公司出售的开源组件和专有组件,但软件公司对所有这些代码的品质和源头可能只有个粗略的概念。通常,只有在遭遇了灾难之后才会发现漏洞并感受到漏洞的威力。

比如说,Shellshock这个案例里,有问题的代码可追溯到1989年,且影响了很多不同种类的应用——从基于CGI(公共网关接口)的网页服务器到Qmail邮件服务器,到某些DHCP(动态主机配置协议)客户端。针对这一漏洞的攻击在漏洞曝光的数小时内就开始了。

跟着大咖走

孤儿项目(没人照看缺乏维护的项目)和松懈的检查不应该遮掩掉某些业界重要人物已踏上迈向安全代码的良性道路的事实。

商业Linux公司,如Canonical、红帽和谷歌,已在开源代码安全性和完整性上大举投入。有钱又亲开源的公司,如网飞(Netflix)和脸书,也已将可观的资源导向能改善开源代码质量的项目了。

在Mozilla,据其工程经理贾森·迪尔称,安全责任分属三个团队承担。一个团队在发现安全问题时对问题进行鉴别分类。第二个团队对编译代码进行“模糊测试(黑盒测试以找出漏洞)”,第三个团队则负责开发类似Mozilla内容安全策略的安全和隐私特性。

迪尔称,早自6年前在他到Mozilla之前,模糊测试和对代码的严格检测就已成为Mozilla软件开发文化的中流砥柱了。但随着对开源威胁认识的加深,Mozilla也对其他开发惯例作出了调整。

“我们已经调整了各种各样的开发惯例以适应敌人正紧盯我们公共代码库的每一次代码提交这一事实。”迪尔说。举个例子,Mozilla代码的安全补丁在版本更新发布之前就着手在做了,给攻击者留下更短的实施攻击的窗口期。重大新特性在发布之前都需要经过安全团队的审查。

在发行乌邦图(Ubuntu)Linux的Canonical,一支快速壮大的安全团队负责审计Canonical的代码——总共3.5万个通过各种渠道作为乌邦图的一部分进行发布的软件包。Canonical的云解决方案产品经理达斯汀·柯克兰如此说道。

与Mozilla类似,Canonical的安全动作横跨多个不同领域,从特性研发到代码审查。针对柯曼的观点,柯克兰认为供应链风险是需要重点关注的问题。Canonical投入了大量资源评估与其核心操作系统捆绑的开源组件的可行性。

作为有20年开源经验的老鸟以及20多个开源项目发布的维护者,柯克兰说:“对于开源技术,我们关心的是直接采用它更好,还是复制然后开发并扩展它更好。”Canonical公司在选择复制现有开源代码时候遭到了来自开源社区内部的谴责,但柯克兰认为复制恰是开源的一大优势。

“我们不打算创建自己的OpenSSL和GPG。但拥有备选的加密库非常重要。多样性是必须的,尤其是在我们认识到其中一些组件是多么脆弱的时候。”

开源时代

走回头路太痛苦了,所以专家们说,还是向前看吧。黑鸭子软件公司开源战略高级总监比尔·温伯格职业生涯的很大一部分时间里,他都作为所谓的“信仰守护者”与来自如微软之类的商业软件厂商对开源运动的诋毁做斗争。他说,曾经分隔“开源”与“闭源”的墙壁早在很久以前就被推倒了。

“已经没有所谓的专有软件这种东西了,因为几乎所有软件都或多或少地依赖于开源代码。某种形式上,整个世界都进入了‘社区开发’软件时代。”

“我真心认为这是大家共同的责任。只要想到我们大家有多依赖于那堆庞大的开源软件,你就不由得希望安全问题成为大家共同的责任而不是将之留给Linux基金会和红帽公司。”

换句话说,我们会对心脏滴血之类的漏洞咬牙切齿怒不可遏,但在2015年,所有生产、使用或倚赖软件的公司都是事实上的开源软件公司,无论他们自己有无意识到这一点。而这,令他们成为了开源安全问题及其解决方案的一部分。

作者:nana


来源:51CTO

相关文章
|
Kubernetes 容器
Kubernetes部署Dashboard(WEB UI管理界面)
Kubernetes部署Dashboard(WEB UI管理界面)
Kubernetes部署Dashboard(WEB UI管理界面)
|
3月前
|
缓存 安全 C++
C盘爆满电脑卡?3个简单技巧+1个便捷工具,小白也能轻松清理
电脑使用久了,C盘常因系统文件、软件安装和临时缓存堆积而空间不足,导致运行卡顿甚至蓝屏。本文教你识别C盘“隐形垃圾”,并提供3个手动清理技巧和1个实用工具(CCleaner),轻松释放空间,提升电脑速度,延长使用寿命。定期清理C盘,让电脑始终保持流畅运行。
685 0
|
6月前
|
设计模式 Java API
Java 高效开发实战之让代码质量飙升的 10 个黄金法则技巧
本文分享了10个提升Java代码质量的黄金法则,涵盖日志优化、集合操作、异常处理、资源管理等方面。通过参数化日志减少性能开销,利用Stream与Guava简化集合操作,采用CompletableFuture优化并发处理,运用Optional避免空指针异常等实战技巧,结合具体案例解析,助你写出高效、高质量的Java代码。
226 1
|
Java
(稳住心态的帖子)idea启动项目速度突然变慢
这是一篇偏向心态调整的帖子
468 0
|
前端开发 Devops 持续交付
【前端自动化新高度】Angular与Azure DevOps完美结合:从零构建持续集成与持续部署的全自动流水线,提升开发效率与软件交付质量!
【8月更文挑战第31天】Angular作为领先的前端框架,以强大功能和灵活性深受开发者喜爱。Azure DevOps提供一站式DevOps服务,涵盖源码管理、持续集成(CI)及持续部署(CD)。本文将指导你如何在Azure DevOps中搭建Angular项目的CI/CD流程,并通过具体示例代码展示整个过程。首先,我们将创建一个Angular项目并初始化Git仓库;然后,在Azure DevOps中设置CI流水线,定义YAML文件以自动化构建和部署流程。最终实现每次提交代码后自动构建并部署至Azure Web App,极大提升了开发效率和软件交付速度,使团队更专注于创新。
233 0
WK
|
机器学习/深度学习 运维 Java
Python 相对于 C++ 有哪些明显的优势
C++是一种强大且高效的编程语言,被广泛应用在系统软件、游戏开发、嵌入式系统等多个领域。然而Python在某些方面展现出显著优势:Python语法简洁直观,易于学习与使用,提高了代码的可读性和团队协作效率;拥有丰富的第三方库和框架资源,能有效提升开发效率;具备良好的跨平台性,无需大量修改即可适应不同操作系统;
WK
406 0
|
网络虚拟化 网络架构
|
前端开发 Java 应用服务中间件
C/S和B/S架构以及Web服务器
C/S和B/S架构以及Web服务器
447 0
|
存储 API 调度
深入理解操作系统:从内核到应用
【6月更文挑战第25天】本文将深入探讨操作系统的内部结构、功能以及它如何与应用程序交互。我们将从内核开始,逐步了解进程管理、内存管理、文件系统等关键组件,并讨论操作系统如何支持多任务处理和并发。最后,我们将探讨操作系统与应用程序之间的接口,以及操作系统如何影响应用程序的性能和稳定性。
|
网络协议 安全 网络性能优化