你在这里

墙、感染、信任和欺骗

最近XcodeGhost导致的严重安全问题,相信大家已经从各个渠道知道了。简单概括一下,有人在中国网盘和论坛上传播了一个修改过的Xcode,这个版本的Xcode会在编译出来的App上面加一些可以被远程控制的代码,并且发送数据到某个服务器上。这是iOS出现以来,未越狱系统遭遇的最大安全威胁,在此之前苹果的Sandbox模式几乎没遇到过挑战,iPhone用户甚至大量iOS开发者都认为系统固若金汤,不可能遇到问题。

在XcodeGhost开始被媒体报道的时,很多人大大低估了它的风险。我在乌云报道这个问题的当天,在朋友圈上建议大家先把中招的app都删掉,并且立刻修改iCloud密码,开两步验证。甚至遭到了不少人反对,还有好几位iOS开发者告诉我这件事没什么大问题,因为iOS有Sandbox,不会造成什么伤害。当时网易也发了一个关于云音乐被感染的说明,也是类似不痛不痒的口气。这些说法当然都是大错特错的,会有这种想法,是因为只会站在程序员角度看问题,如果对安全问题稍微有一点敏感性,就会立刻意识到这是极严重的威胁,稍微发挥一些想象力就会被吓着。

所谓安全威胁,大部分都是在获取到非常有限资源的情况下,利用社会工程学(俗称:骗)来达到目的。比如,你觉得让别人看到你的通讯录有什么问题吗?很多人会认为虽然不舒服,但不会有什么威胁。实际上,骗子会从通讯录里面挑出来你父母的电话,打电话去骗他们。所以,这和iOS有没有sandbox,能不能保护系统安全没关系,只要我获得了一个机会,能控制你信任的app上弹出对话框,我就可以利用这个对话框来骗你输入系统的重要密码。程序员应该想象力再丰富一点,不要把目光局限于‌‌“系统给了我什么权限‌‌”,而是要扩展到‌‌“如果我被完全信任了,我能进行什么样的欺骗‌‌”。

我不打算在这里讲太多直接的安全问题,毕竟已经很多人分析过了,在好几篇非常不完善,极大低估这次事件威胁的分析文章之后,腾讯给出了一篇相当详细的分析,比较符合我的观点,也把问题的严重性说的非常清楚。在腾讯的分析里面,说可以利用OpenUrl来操作用户拨打电话,同样又有iOS开发者说‌‌“OpenUrl不能控制iPhone打电话‌‌”。事实上,OpenUrl可以弹出一个带有固定电话号码的弹窗,上面有‌‌“拨打‌‌”和‌‌“取消‌‌”两个按钮,这确实不算直接拨打了电话,但如果给一千万个用户在某个特定环境下弹出一个这样的窗口,其中有多大比例的人会去点‌‌“拨打‌‌”呢?如果程序员不去提高想象力,总把安全问题和功能局限在系统文档提供的‌‌“能做什么‌‌”这个范围内,软件的安全性实在让人难以信任。

Ken Thompson (sitting)and Dennis Ritchie working together at a PDP-11 是Ken和Dennis两位大神在PDP-11计算机上工作时的合影,当年Ken就是在PDP-11上搞出本文提到的恶作剧的。来自Wikipedia

具体的安全问题有更专业的人去普及,本文不多说,在这里我更想谈谈关于信任的问题。在这次事件中,也有一些人想起了Ken Thompson大神(Unix系统/C语言的前身B语言/Go语言的直接贡献者,称作Unix之父也不过分)在1984年的一次演讲,在那次演讲中中,Ken讲了他在70年代在贝尔实验室捉弄同事的一次恶作剧,在那段时间里面,实验室里面所有的Unix系统,Ken都可以随便以最高权限登录,而同事反复检查用户,权限,甚至是当时使用的Unix代码,都没查不到后门,百思不得其解。14年之后,Ken在这次演讲里面才公开,后门其实隐藏在他写的编译器中,当用编译器编译Unix系统的时候,后门就被放在了编译出来的系统里面,但Unix本身的代码是干净的,所以同事无论如何也查不到问题。Ken的演讲所提到的核心问题并不是如何入侵一个操作系统,而是信任。其标题‌‌“Reflections on Trusting Trust‌‌”(我翻译为‌‌“深入思考我们信任的可信‌‌”,以下简称RoTT)开宗名义,明确强调这一点。

在80年代曾经有很多人用这样的办法给开发工具加各种外壳和后门,但当时联网条件并不好,很难产生大规模影响。很多案例是发生在相对封闭的企业内网和教育网中,Ken捉弄同事的原始案例也可以看作是企业内网上的传播。可以说,RoTT能产生的影响一直被人们低估,因为在现实世界想要具备适合它的条件,实在是太难了。历史上,虽然有很多底层代码Bug导致的安全事件(比如之前的OpenSSL心脏出血漏洞,可以参考我的另外一篇文章,点阅读原文可见),但直接通过这种在基础工具上制造的后门,从而衍生的大规模安全事件,从来没有真正发生过。这种手法一般是用在有限范围的网络上,比如在早年的教育网上或者企业网络里面,那时候在内网上传递一个被下了毒的软件,很容易传播开。

在互联网上,如果要重现Ken的案例,首先需要找到一个可信的源头感染,这本身就已经是极其困难的事了。用这次的事件做例子的话,在正常情况下,用户是通过Mac App Store来下载Xcode的,在下载安装的过程中,OS X本身会替用户进行加密签名校验,保证下载的东西确实是苹果原始分发的软件,这样才能被安装到用户的机器上。如果想把在Xcode中嵌入一个后门,你得先找到Apple服务器的漏洞,才能有机会把自己改过的包上传上去,而且还要弄到苹果的私钥去进行签名,才能装到用户计算机上。但如果同时具备了这两个条件,已经是荣华富贵唾手可得,有的是更可靠,获利更大的做法,谁又肯去舍近求远感染一个Xcode呢?

所以,只有在相对封闭的网络环境下,才有可能玩这个把戏。80年代,网络远远没有今天发达,人们更多的下载和网络活动是分布在各大机构自己的网络里面的,比如大型企业的内部网络,相对于互联网,这些内部网络网络速度会快的多,人们通常更倾向于从内部网络获得软件。这就给了入侵者(通常是商业间谍)通过替换内容软件来侵入公司内部的机会。但内网又造成了另外一个问题,在封闭网络下,入侵者获得的数据也没这么容易拿走,必须还要回到内网才有机会拿到之前的战果。这些特性造成了这种做法始终在小范围内有效,在公众网络上性价比不高。

这次XcodeGhost事件会给很多人启发,中国目前的网络环境类似于80年代的企业内网,但规模又比当年的内网大的多,而且不像那么难以进入。于是,一些80年代流行但没造成大规模影响的办法,有机会可以在中国环境下重新应用了,并且造成巨大影响。以前的创业是Copy to China,现在同样可以复制30年前的安全问题。

Ken的演讲最后指出,你没办法信任那些不是自己写的代码。80年代达到这个目标尚且有可能,那时候的软件规模还很小。而今天,任何工作都需要建立在大量的现成软件基础之上,换句话说,你必须去信任其他人,才有可能制作出产品。如今的可信任环境就变得更加重要。

但在中国,因为GFW和相关政策的存在,要获得一个可信环境变得非常困难。在这个环境里面,大量国外网站不能访问或者难于访问,非常多怕麻烦的人会使用国内替代品,这次的事件之所以影响巨大,就是因为通过苹果官方渠道升级Xcode速度太慢,少则10多个小时,多则几十个小时,其间还有可能中断和重新下载。从国内随便下载一个Xcode用当然是错的,但在这样的环境下也不是完全不能理解,考虑一下互联网的下载速度只有50K,企业内网速度能高达10M的时候,谁会不从内网下载呢?

用一个现实世界的例子做个比喻吧,前面说了骗子拿到你父母的电话之后,会打电话去骗他们,比如跟你父母说你出了车祸,急需用钱。要让这个骗术成功,一个前提条件是要阻止你父母去找你验证真假,所以骗子同时会用各种办法来骚扰你的电话,迫使你不堪其扰关机或者始终占线。这样你父母和你的联系就断开了,他们没法找你验证了,此时骗子的话就更容易被相信。在这次事件里面,GFW让人们无法访问国外的可信网站,或者访问速度极慢,它起的作用就如同迫使你占线或者关机,从而让人们只能从不可信的地方获取软件。

GFW让中国本来开放的互联网环境,变成了一个巨大的企业内网,或者叫做中国局域网。除了速度和难以访问的影响,各种各样的DNS投毒,电信运营商干扰也是严重问题,你拿回来的DNS结果往往也未必是可信的,而运营商试图在HTTP请求中插入广告的行为,又经常会导致正常的应用表现不正常,而这些乱七八糟的毛病还经常变化,今天你可以这样对付,下周可能就需要换一个办法。要维持一个可信的软件环境,需要付出巨大的精力,能愿意付出这个代价的人越来越少。

在这个环境中,我们能信任的什么呢?网络链接不可信,运营商不可信,DNS不可信,大企业不可信。最后这一点更荒唐,如果是在正常的网络环境下,你很难相信苹果或者Google会坑害自己的用户,因为这和他们的利益直接相关,他们总是要尽量保护自己的用户。但在中国,如果你敢信任百度,基本意味着你生活各方面都会出问题,用百度查个搬家公司,骗死你没商量,用百度查个快递电话,骗死你也没商量,用百度查个医院,你猜会怎么样?那是真要骗死你没商量,这里的骗死都不再是比喻了。你要信任百度的软件,更好玩了,它莫名其妙就给你把百度出的所有软件都装在你机器上了,人们管这个不请自来的大礼叫做百度全家桶。如此致力于坑害自己用户的大公司,在中国之外还真是罕见。

在中国的网络环境下,这次事件产生的危害本身也更加危险。事件发生时,我告诉朋友们立刻删除所有被感染的软件,直至问题被修复。有人说,黑客自己的网站已经关闭了,没什么危险。这么说当然是错的,因为遍布中国各处的DNS投毒和劫持,创造一个一样域名的网站再简单不过了。比如到游客聚集的区域,带一个路由器,创建一个没有密码的WIFI热点,等着人们连上来,在这个热点上劫持XcodeGhost使用的域名,就可以利用已经中毒的app来骗iCloud密码了。这些都是非常容易实现的办法,千万不要低估安全问题能造成的后果,尤其是在中国特殊的网络环境下。

目前中国的网络环境和食品安全有诸多共同之处,你没法信任路边的小饭馆,但同时你也没法信任昂贵的大饭馆。你没法信任菜市场买的肉,但超市买的肉也并不那么可靠。在一切的背后是土壤和水的全面污染,可能一家好的饭馆未必打算毒害自己的顾客,但他们也很难保证自己原材料的供货商可靠,要保证使用的所有材料可靠,这是一家饭馆不可能具备的能力。比如,奶粉的三聚氰胺事件之前,一家有追求的饭馆大概会觉得,我不用来路不明的奶粉,我用大品牌的三鹿,伊利,这算是对顾客负责了吧?可惜,这些大品牌一样出问题。这绝非饭馆所希望的,他们也是受害者,就像是这次事件中的网易云音乐,他们确实没打算坑自己的用户,不过网易、腾讯这样的大公司一样中招了。

相对封闭的iOS尚且如此(单一开发工具,单一软件分发渠道,独家封闭系统iOS,独家硬件iPhone)尚且能出这么大问题,想想Android会怎么样?Android官方网站几年前就被封了无法访问,大部分开发者都是从国内渠道下载的开发工具。App的安全可靠吗?国内无数家忙着改Android皮肤就称自己是‌‌“操作系统‌‌”厂商,他们能保证自己的定制Android版本是安全吗?他们有真正的操作系统厂商级别的能力吗?进一步,他们能保证自己使用的开发工具安全吗?每家手机厂商都恨不得做自己的Android app下载渠道,他们能保证这些渠道上分发的app安全吗?甚至,他们能保证自己的下载市场安全吗?请大家继续联想吧。有朋友跟我说,你想多了,Android哪需要这么麻烦啊,本来国内环境就是木马遍地了。真实情况恐怕只能用惨烈来形容。顺便说一声,传说Google要把Play Store进入中国,提供一个受审查的版本,很多人说这是Google妥协了,我看这根本不是妥协了,是中国内部的Android环境太糟糕,已经威胁全球生态了,Google不得不自己出手解决这个问题。所以,一旦Google Play真的进了中国,请大家记得立刻把Play Store做为自己唯一的Android软件下载渠道,哪怕它不好用,不中国国情,甚至显得有点傻里傻气…千万记得,安全比方便更重要。

在这些前提下,重新认真考虑Ken的演讲提到的观点就显得更加重要,深入思考我们信任的可信。到底什么是可信的呢?开发工具可信吗?操作系统可信吗?你觉得下载来之后验证一下md5或者sha512总应该可信了,但你用来计算sha的工具是哪下载来的?你又如何知道这个工具本身是可信呢?在一个封闭的,难以和真正源头沟通的环境下,根本没办法谈所谓的信任。

在中国目前的环境下,难以直接套用成熟的软件开发和管理流程,除非保证团队所有人都必须翻墙,必须用Google查资料,必须不信任国内网站。你的团队中有一个习惯用百度查资料,顺着国内论坛的链接从百度网盘或者迅雷下载工具的人,就不知道会惹出来多大麻烦。这次事件充分证明了这一点,我起初认为腾讯应该不会有问题,因为我知道腾讯内部有极好的网络环境,但最终不幸的是微信也中招了。我们的恶劣环境已经改变了工程师的习惯,甚至改变了教育,就算是在腾讯内部这么好的网络环境下,仍然有人会去百度查资料,用百度网盘下载开发工具。就像很多留学生到了美国仍然用百度搜索一样,环境的改变并不能直接逆转已经完成的用户习惯。

比较讽刺的是,在中国特色的现实世界反而又制约了出现大规模安全灾难的可能性。比如,中国有相当严重的网络监控、审查和实名制、以及互联网公司必须保存(而且要向有关部门开放)的各种用户数据,并且互联网和世界半隔绝,在出现这种问题的时候,要抓到始作俑者又相对简单。现实世界中,只要在论坛发个贴,去你家查水表就是分分钟的事情。这大概算是‌‌“不幸+不幸‌‌”互相抵消之后产生了一点点微小的幸运吧。

很多年前,我说招聘工程师有几个原则,比如,必须使用Google而不是百度,必须翻墙而不是用国内替代品,必须优先使用国外的工具。经常有人认为这种要求过于苛刻,甚至认为是装逼。这次事件告诉了我们,这些良好的习惯确实是工程师的第一道防线,融入世界主流,可以让你少遭遇很多中国特色的麻烦。虽然保持这些良好的习惯需要付出不小的代价,但事实证明这些代价是值得的。

这样的网络环境,是我们这一代工程师的耻辱,但我们如此愤怒于此,又如此无能为力,这是这个时代最令人悲哀的事情。

我们对此有多么无能为力呢?我写这篇文章的时候就在想,大家应该赶快传播它,因为我觉得它很快会被删掉。这就是无能为力的具体表现。

顺便说一句,1996年,受Ken的案例启发,我写过一篇科幻小说,大意是一种病毒把编译器做为感染的源头,最终感染了操作系统。在这个操作系统上,它会判断用户指令对它是否会造成伤害,如果是有害的指令,就假装执行一下,实际并不真执行,从而可以躲过杀毒软件和人工清除。这同样是信任问题,在这个环境下,没有任何可信的东西,这种病毒将会在操作系统中永存,并且把自己附着于任何在这台计算机上制造的软件中。在一个计算机一开机就无线联网的时代,病毒可以借此高速传播,最后人类已经找不到一台干净的计算机可以去编写真正干净的操作系统了。(90年代还没有无线网络,那时候甚至连有线网络都没普及,Sun还在号称网络就是计算机,那时候一台随时联网的计算机简直太奢侈了,但如今看来…世界确实已经发展到了这样,想找一台不联网的计算机倒是不容易了)。

不知道这种幻想中的病毒什么时候会真正出现…其实,前几年工信部推行绿坝的时候,我当时就觉得那简直是创造这种病毒的一个非常好的机会,还好最终绿坝计划被放弃了。中国网络和政策环境的特殊性,将来真的有可能制造出适合这种病毒生存的环境,就像这次因为GFW的正面和潜在影响,让70年代Ken设想的RoTT在2015年大规模流行,40多年的时间跨度…著名科幻作家韩松说过:‌‌“中国的现实变得比科幻还要科幻‌‌”。深以为然。
 

延伸阅读:

到底谁才是真正的隐形战友开源软件和OpenSSL的真实故事

前 几天,在朋友圈看到转来的原发于‌‌“界面‌‌”关于OpenSSL和开源项目的‌‌“隐形战友‌‌”一文。开始觉得不过是炒冷饭,‌‌“心脏出血‌‌” 这个OpenSSL严重漏洞,从去年(2014)4月初被公众知道,到现在已有将近一年了,这件事已经算告一段落。尽管这篇文章充满了误解、硬伤和企业宣 传,我也没太在意。结果,今天看到界面的网站上竟然还在用支付宝给OpenSSL募捐,这就荒唐了。之前有一些朋友说,无论怎么样,多一些关注总是好的, 从现在的结果看,界面的文章造成的坏影响更大,这篇文章扭曲了开源社区的本来状况,对其他组织和企业也不公平。开源软件、安全、隐私确实是大部分普通用户 不了解的领域,但记者要写一篇文章,总应该对历史有个基本了解。

界面网络的创始人何力先生,曾经创建了经济观察报和第一财经,都是不错的 媒体,再次创业界面,也备受关注。可惜界面这篇文章,给我带来的失望比较大。更好笑的是,当年罗永浩对战王自如的时候,罗粉说王自如的公司是雷军投资的, 所以王自如一定是倾向小米的。而今天,界面,这个小米参与投资的媒体,登了一篇锤子的软文。这两者之间对比,实在让人哭笑不得。

我想聊聊开源软件的模式和OpenSSL存在的问题,以及到底谁在捍卫我们的隐私,这些都是界面的文章弄错的地方。我也会写到在‌‌“心脏出血‌‌”这个漏洞从发现到公布的过程中,惊心动魄和争分夺秒的故事,这个过程暴露出OpenSSL严重的管理问题,

先从开源说起。

1 开源是一种商业模式

界 面一文,把OpenSSL描述成没有捐款就没法生存的组织,但开源组织并不是这样,开源和免费一样,是一种商业模式,他们之间有诸多不同,但有一个基本的 相同点,就是都希望尽量多的人免费使用它。大家已经免费使用了很多互联网服务,对于免费模式应该非常理解,我们从未给Google付款,从未为我们每一次 搜索买单。但我们搜索的行为,我们的注意力、数据,都会变成Google的广告收入。我们每一次使用Google搜索,都是在帮助Google赚钱,尽管 没直接付钱给他们。

开源软件也是如此。开源软件的世界是激烈竞争的,任何一个组织,都可以从当前代码分支一份继续开发新的版本,这个行为 叫做Fork。一个开源组织要想生存下去,最重要的基础就是普遍被使用,不然很快就会被竞争者替代。一个软件被普遍被使用之后,就会因此衍生出相关服务, 团队可以通过这些服务获得比较好的收入,商业模式就成型了。最著名的例子应该算是Red Hat Linux,中文叫做红帽,他们免费提供Linux发行版,企业可以通过付费订阅获得技术支持,他们收入相当不错,现在已经是一家市值100多亿美金的上 市公司。

OpenSSL采用的也是同样的开源和服务收费的方式运转,OpenSSL基金会的负责人Steve说他们最多一年有将近100 万美金的商业咨询项目(资金来源是美国国防部和美国国土安全部),这已经是相当不错的状况。开源软件的全职工作人员都不会太多,大部分项目的核心贡献者同 时也都会承担商业性项目,这是很正常的情况。在开源社区中,像Linux创始人Linus这样全职为开源项目工作的程序员,反而不是普遍现象,Linus 得以这么做,一方面是Linux基金会财力丰厚,另外一方面也是因为Linux衍生项目太多,影响力也太大,Linus本身又是精神领袖,他不得不全职为 Linux工作。同时从事商业服务和开源项目,并不是界面那篇文章描述的那么悲情。

再来个例子,最好的开源UNIX操作系统 FreeBSD,其核心开发者Poul-Henning Kamp(社区内叫他phk)到今天仍然承担商业性项目。即使从1994年到现在,他的一直在FreeBSD代码贡献的排行榜上排第一,也仍然不是 FreeBSD基金会的全职员工,他对自己的描述是‌‌“自雇‌‌”。phk在自己主页上公开了最近正在做的一个商业项目,报酬每月3000美金。以 OpenSSL的项目规模,有一个全职开发者已经是相当不错的状况了。

为什么有这么多人会放弃传统的卖软件的方式,转向免费软件和开源软 件?除了个人兴趣和理想之外,开源软件是一个成熟可靠的商业模式,这个商业模式有自己的收入方式和生态。界面这篇文章极力制造普通互联网用户对于 OpenSSL的愧疚感,指责普通用户从来没付钱给他们,这种一种道德绑架。任何一个用户,只要在使用OpenSSL,就是在帮助这个组织获得市场份额, 在竞争中获得更大优势,无论有没有直接捐款给他们,用户都已经做出了贡献。

2 为什么OpenSSL之前只能收到很少捐款?——基金会、捐赠和募资

虽 然开源组织可以通过商业服务来让自己生存的不错,但是一般也都很愿意接受捐款。有足够的捐款,可以少做一些商业项目,把精力往开源软件方面倾斜一些,这当 然是好事。大部分软件和IT企业,每年都有不小的一笔钱用来支持开源项目们,同时也争取自己在开源社区的影响力和发言权,开源组织们每年接受的捐款按照各 自项目状况,都不算少。但为什么一年前,OpenSSL这个项目每年只能收到几千美金的捐款呢?答案很简单,因为他们从来没有搞过募捐活动。

开 源组织通常会设立一个注册为非盈利机构的基金会,通过这个基金会募集资金、组织活动、推广自己的开源产品,视项目情况给专职或者兼职开发者付报酬,其中募 集资金是基金会相当重要的工作。如果经常使用维基百科的用户,应该会有印象。维基百科每年都有一个固定时段,会在网站上放置非常明显的筹资通告,设定好本 年度预算目标,让大家捐款。达到数额之后,捐款就停止,不再接受更多。几乎所有开源组织,都会通过这种方式募集捐赠。

OpenSSL基金 会从来没公开募集过资金,如果没有捐款目标,没公开募捐,就很难有成批的捐款进入,毕竟,需要资金的项目实在太多了。对于OpenSSL这种项目,募资相 当容易,他们只需公开发一份筹款通知,各大企业的钱就可以立刻到手。当‌‌“心脏出血‌‌”发生之后,诸多企业惊讶的不是只有一个全职开发者这件事,而 是,为什么你们一直没筹款。OpenSSL从来没公布过自己的财务状况,没有设置过募款目标,这让人们如何去捐款给他?

更有意思的 是,OpenSSL基金会并没有注册为非盈利机构,而是一个盈利性企业。捐助OpenSSL的人和企业无法从美国政府获得减税。按照他们自己的说法,是他 们没有时间维护一个非盈利组织,这不是个好理由。对于一个开源项目,注册一个非盈利组织比注册公司难不了多少,再说,基金会之所以成立,不就是为了去做这 些事吗?盈利性企业已经定义了他们是希望靠商业活动获得收入,而不是靠捐款生存。捐款给盈利性企业,钱的利用率就会变低很多,按照美国税法粗算,最多的情 况下要多交出30%~40%的税,是巨大的浪费。这也解释了为什么美国企业很少捐款给OpenSSL基金会。

不过,就算如此,事情也是在 快速好转的。‌‌“心脏出血‌‌”事件之后,Linux基金会在极短的时间内就成立了核心基础架构联盟(CII,Core Infrastructure Initiative),这个联盟和以往最大的区别是,他们主动挑选缺乏资金的重要开源项目进行资助,无论对方是否募款,OpenSSL是他们资助的第一 个项目。这个联盟集结了世界各国的科技企业共同出资,其中包括了Google、Amazon、Facebook、思科、富士、惠普、IBM…目前已经有了 10多家企业。其中中国企业只有一家,是华为。特别值得一提的是,除了给CII出资,华为也单独资助了OpenSSL基金会每年5万美金。可惜,界面的文 章似乎把华为忘了。参加CII联盟的企业每年出至少10万美金,按照2014年的数字,CII每年总共有170万美金基金可以使用,第一期资金主要用来资 助OpenSSL和OpenSSH,资金相当富裕。

上面这些事情都发生在去年5月,也就是‌‌“心脏出血‌‌”事件之后的一个多月时间 里。无论是各大科技企业,还是Linux基金会,他们的行动都非常迅速,这是开源世界的做事方式和效率。到去年5月,OpenSSL的资金问题就算解决 了。从这个结果看,之前OpenSSL没有得到足够捐款的直接原因就是其基金会失职。

做为对比,再看看去年OpenBSD募款的经历。 OpenBSD是最关注安全的开源Unix操作系统,他们同时也是OpenSSH的维护者(看到SS是不是觉得和加密也有关系?没错,这也是一种加密工 具,只不过不是给客户用的,是给服务器管理者和程序员用的),去年的募款目标仅仅是15万加币。相比起来,170万美金实在已经是太多了,如果CII给的 钱不够让OpenSSL变好,恐怕再多的钱也不会好了。

除了直接捐钱,各大企业支持开源项目的方式还有很多,比如捐献自己员工的时间。任 何一个开源项目中,都有来自各大公司工程师的贡献,这些公司给自己员工发薪水,他们写的代码会回馈给开源项目,比起捐款,这是更直接的支持。比如去年发现 ‌‌“心脏出血‌‌”漏洞的工程师,是Google员工,他在上班时间全职对OpenSSL代码做安全审计,找到了这个Bug。他确实不是OpenSSL 基金会的直接雇员,但这份由Google买单的全职劳动成果是贡献给了OpenSSL项目的,说所有大公司都没支持过这个项目,未免太不公平。而这种错误 言论,正是界面文章宣传的论调,按照这篇文章的说法,一个中国小公司救了全世界互联网用户,这是何等荒唐。

说到这里,再说说捐款问题。我 非常反对界面渲染的这种捐款情绪,这是利用人们的愧疚捐款。钱是非常宝贵的资源,需要用钱的地方太多了,正确的捐款是在捐款者对项目的充分了解后,基于对 其价值观和方向认同,按照自己的愿望进行长期而小额的固定捐助。在这个过程中,税务问题也是必须要考虑的,这直接决定了资金利用率,比如美国税务居民,捐 赠给OpenSSL,资金的利用率就很低,而捐款给CII再由他们资助OpenSSL,就可以得到一部分免税,利用率高了很多,如果是加拿大税务居民,想 对操作系统方面的项目捐款,应该首选OpenBSD,因为它是加拿大注册的非盈利组织。捐款是一个非常理性的行为,隐藏部分信息,利用人们对开源项目的不 了解,煽情,制造愧疚感,这是不可持续的,也是不公平的,这些都是界面的文章和之后的运营所做的事情。

3 OpenSSL的问题和未来

界 面的文章中说基层程序员批评他们的代码‌‌“令人作呕‌‌”,实际上,说这句话的人是Theo de Raadt,是OpenBSD项目的创始人,他可不是‌‌“基层程序员‌‌”,而是操作系统领域最好的计算机科学家之一。OpenBSD开发者们并没止步 于批评,而是立刻决定从当前OpenSSL版本创建一个叫做LibreSSL的独立项目,从清理OpenSSL的代码重新开始。他们在第一周就删除了9万 多行代码,OpenSSL整个项目只有38万行,相当于删减了近1/4的代码。可见Theo的批评并不是顺口胡说。几年来,OpenSSL出过各种漏洞, 在‌‌“心脏出血‌‌”之后,仍然有隐藏了10年以上的漏洞被发现,很多熟悉这个项目的人看法都是‌‌“除了重写别无办法‌‌”。

OpenBSD有一份文档说明了他们在清理过程中遇到的问题,去掉其中的技术细节,我把主要观点列在这里,这些也基本是业内主流看法:

OpenSSL的代码混乱不堪,难以阅读。开源软件一般通过让更多人看到代码来发现bug,如果代码难以阅读,这个办法就失效了。

他们使用了大量自己的代码封装和编程风格,这些代码有的有bug,有的不符合现代主流做法。这让常见的检测工具没法应用于他们的项目,更难以发现Bug。

他们的开发者更关心增加功能,而不是维护和修补。

其他开发者提供的修改和贡献,一般不会被合并到最终代码里。

很多用户指出的Bug,包括一些相当严重的,公开放在追踪系统里面长达几年,没被修补。

其中存留了大量无用的旧代码,比如给windows 2000之前的16位系统写的兼容代码,仍然包含在最新版本的OpenSSL中。

基 于以上原因,OpenBSD认为这个项目已经没法维护了,必须要重新开始。这就是他们创建一个分支,从清理代码这种基础工作开始的原因。可见,这个项目根 本不是钱的问题,而是管理方式和社区文化有问题。比起来其他项目,他们在有一个全职开发者和一个全职基金会主席的情况下还能响应如此缓慢,实在更令人沮 丧。顺便说一句,做清理代码这件事的OpenBSD开发者,也不是全职工作,他还在这份文档前面特别注明了‌‌“可以被雇佣‌‌”。一年之后的今 天,LibreSSL已经基本算可用了,除了清理和改变了原有代码风格,他们也增加了一些更先进的特性,看起来很有前途。另外,这个项目也很需要捐款,如 果更认同他们的做法,可以捐款给他们。

除此之外,OpenSSL公布‌‌“心脏出血‌‌”漏洞的过程也非常有问题。一般出现严重漏洞的流 程,是先不对公众公布,立即通知主流操作系统维护者和相关厂商,让大家先修改,之后一起发布安全公告和升级。之所以这样做,是因为如果操作系统不去打补 丁,很多普通用户知道漏洞也没办法修补,反而让黑客们更容易利用这些漏洞。OpenSSL不是这么做的,在Google告知了他们漏洞之 后,OpenSSL没有告知任何一家操作系统厂商,反而奇怪的被几家主要CDN厂商知道了,也就是说,在不知道哪个环节发生了泄密。之后开源社区中开始有 关于这个重大Bug的传言,直到这个时候,几大操作系统仍然没得到正式通知。又过了3天,OpenSSL才告知了Red Hat,当天,参与处理这件事的一位Red Hat员工在一个私密邮件组里面把这个消息分享给了SuSE/Debian/FreeBSD等几个重要操作系统相关负责人。多亏了他,因为此时 OpenSSL仍然表示没有任何细节提供,这是加州湾区的太平洋时间4月6日晚上,从Red Hat得到具体细节的几大操作系统,连夜开始忙着打补丁,到这个时候,Red Hat提供的消息是OpenSSL将在9号,也就是3天之后公开这个漏洞。可惜,转天,4月7日一大早,OpenSSL就直接发布了公告,媒体们知道了, 全世界都知道了。如果没有Red Hat提前放的消息,最后的影响恐怕还会大的多,就算如此,因为时差的原因(Red Hat那位员工在印度),很多在他夜里睡觉之后的邮件没来得及回复,仍然有很多厂商没能提前得知细节。关键厂商对于如此重大的漏洞比媒体知道消息还晚,近 年来恐怕这是第一次。这造成了不少损失,比如加拿大国税局CRA在漏洞被公开之后发现数据被盗,此时已经来不及打补丁了,所以干脆直接把电子报税系统关掉 了,当时是4月9号,加拿大2014年的报税截至日期是4月30日,正是电子报税系统最繁忙的日子,其间的尴尬可想而知。整个过程的时间线,在 theage的一篇文章有完整记载,我列在最后,供参考。

针对这个反常的流程,社区中有不少阴谋论的看法,我不转述这些看法,我只是想说,这是另外一个证据证明OpenSSL有严重的管理问题,而不是钱的问题,人们说他们把事情做的一团混乱绝对不是没理由的指责。

另 外,OpenSSL并不是凭空出现的项目,而是继承了另一个项目SSLeay的代码。在SSLeay的开发者去RSA公司工作,不能继续这个开源项目之 后,有好几个项目继承了它的代码继续开发,OpenSSL只是其中比较成功的一个。维基百科上列出了SSL库的实现,包括OpenSSL,现在还在使用的 也有10多个,其中开源的占了将近一半。

这也是我不赞成吹捧OpenSSL的原因,历史的选择往往存在偶然,具体到SSL软件上,就更复杂,这是混合了技术,商业,历史,政治复杂因素之后的偶然结果。现在OpenSSL暂时有最多的用户,以后则未必会如此,我相信,早晚会有一个新的替代者出现。

4 谁是真正的人类隐私捍卫者?——电子前线基金会的故事

界面这篇文章认为OpenSSL是人类隐私的捍卫者,事实上,OpenSSL只是同类加密软件中的一个,他们当不起隐私捍卫者这个头衔。今天,我们可以不知不觉获得加密软件的保护,背后有一些曲折的故事,那是真正的隐私捍卫者的故事。

曾 经,加密技术是被美国政府禁止出口的,就像很多武器禁止出口一样,其他国家的人,想要使用这些加密算法,就像要从美国买导弹一样,是不可能的。转机发生在 1995年,这一年,加州伯克利大学的研究生Bernstein在一个叫做电子前线基金会的律师帮助下,起诉美国政府。他的主张是自由发表加密算法,属于 言论自由的一部分,从而受美国宪法第一修正案保护,史称Bernstein v. United States。这个案子进行了4年,到1999年,美国联邦第九巡回上诉法院出了判决,依据第一修正案,判决美国政府禁止公开密码算法违宪。在这之后,各 种密码协议和开源算法才从美国流传出来,被自由使用。

电子前线基金会EFF(Electronic Frontier Foundation),创建于1990年,是一个法律援助组织,他们的使命是捍卫隐私,自由表达和公民权利。这也是一个基金会,而且是一个完全靠捐款运 作的非盈利组织。EFF创始人之一是Lotus公司创始人卡普尔,曾经是和比尔盖茨齐名的软件天才。80年代,Lotus是最大的独立软件公司,几年之后 微软才超过它。卡普尔是一个极具前瞻精神的奇才,1990年,卡普尔意识到未来技术、隐私、法律和政治的冲突,自己出资创建了EFF,后来的资助者中还有 著名的苹果联合创始人沃兹。当时,商业互联网尚未成型,可见他们前瞻性之强。关于EFF的传奇故事可以写很多篇文章,这里我们先说和OpenSSL有关的 部分。

曾经浏览器的领导者Netscape,于1995年开发了第一个SSL协议。SSLeay也在1995年完成了第一个实 现,1998年SSLeay中止开发,由社区接手。直到1999年美国政府败诉,加密技术终于可以自由流通。这才是人类隐私保护工程的历史脉络。在这个复 杂的故事里面,OpenSSL是受益者之一,也是整个故事中的一小段,界面的文章把OpenSSL开发者捧为人类隐私的捍卫者,不仅过誉,而且显得非常无 知。

EFF及其创始人卡普尔,是真正的理想主义者,他们没有商业收入,自己掏钱,做这一件事做了25年之久,通过一个又一个的诉讼案和对隐私相关案件的法律援助,他们成功推动了社会进步。这才是互联网时代真正的隐私的捍卫者。

5 媒体的责任

有 朋友说,写写文章,让大家捐点钱,怎么也不会有害,不应该被批评。我不这么认为。媒体传播是可以影响人群选择的。这在开源领域有先例,比如,BSD是最正 宗的UNIX继承者,但曾经的一场诉讼,让BSD应用广泛程度至今不及Linux,媒体在这个过程中起了相当重要的作用。直到今天,谈起开源软件,媒体都 更关注Linux,质量更可靠的BSD缺少关注,从而影响了人们的选择。界面文章中说‌‌“如果一个开源项目在商业世界获得了成功,那决不会是出于侥幸, 决不会是因为其它竞争者恰好被规章制度所累、被知识产权法约束‌‌”,BSD的历史正好是一个反例。(‌‌“决不会‌‌”此处错字为界面原文引用)

所 以,界面这篇文章的影响是很负面的。我在前面指出了不少他们在整体认知上的错误,其他的小错和不合理之处更是多的说不完。比如,界面的文章说‌‌“有了锤 子科技的那笔捐款‌‌”OpenSSL的开发者在德国Linux会议期间才终于有机会见了一次面。文章中有一张OpenSSL开发者的合影和人名,就算这 些人你之前完全不知道,现在立刻Google一下就知道,这些人里面有Debian开发者,也有Google全职员工,这些人都不是OpenSSL付薪 的,就凭这张照片,说大企业一分钱没出过也实在说不过去。再说OpenSSL开发者大部分在英国和欧洲,从伦敦飞德国法兰克福,往返机票也就300美元, 硬要说这些有工作,有正常收入的工程师连300美金机票都要等这笔捐款,未免太过夸张。

我想问问界面编辑部,你们认为这篇文章到底是不是 软文。如果作者是在写付费软文,那么是职业道德问题,如果没收费,而是作者出于对罗永浩的崇拜写了一篇软文,那么是公器私用,也是职业道德问题,如果作者 没收费又不是公器私用,仍然写出了一篇如此软,错误如此多的文章,那不仅仅是职业道德问题,还是能力问题。界面网络的编审流程看起来也不那么靠谱,让这么 一篇文章发表出来,还四处推广,恐怕编审团队没做什么背景调查,甚至都没去搜索点相关文章读读。另外,整篇文章连一个观点相反的平衡意见都没有,完全是单 方面的观点阐述,这也违背了平衡报道准则。一篇好的报道,应该兼顾各方意见,给读者展示各种观点,提供多方面信息,界面没能做到这一点。

互 联网的安全,不取决于一个特定的软件,即使这个软件是用来加密的。发现‌‌“心脏出血‌‌”漏洞的Google员工Mehta说过,libjpeg如果出 问题,可能会有极大影响。libjpeg用来生成和显示大部分网站和软件的图片,被普通人用到的范围比OpenSSL更广,威胁也会更严重。当人们被媒体 把关注转向OpenSSL上时,大量更重要的问题就会缺少关注。希望能有更多人关注更多的基础项目,而不是和汶川地震一样,盯着看各大企业谁给 OpenSSL捐款更多。一年了,炒作也应该结束了。

界面的这篇文章对华为、诺基亚,Google这样出钱出力,没自我炒作的厂商不公 平,对于其他开源组织也不公平。界面是一家有正规编审流程的机构,严谨程度还不如我这种完全靠个人爱好写作的非专业人员,虽然不严谨,但他们的煽情技巧确 实是出色而专业的,这篇文章被很多人称为精彩,这令人失望,也非常遗憾。

 

关键词: 
栏目: 

Theme by Danetsoft and Danang Probo Sayekti inspired by Maksimer