An image to describe post 欢迎来到0 day的黑暗丛林

如果你关注过信息安全相关的新闻,一定对0 day这个名词不陌生。它指的是软件(或系统)中的安全漏洞,这些漏洞已经被人发现,但并未被软件的提供商所知晓。

最早,x day这种计数法指的是软件已经公开发售的天数,比如发售的第1天,就叫1 day。被黑客团体借用之后,0 day的意思就成了“尚未公开发售的软件中包含的安全漏洞”。在软件的载体从光盘变成在线服务之后,0 day也顺理成章指称各种服务系统中的漏洞。

通常,漏洞曝光得越晚,软件或系统的提供商给出补丁的几率就越低,一旦给出了补丁,就会被越来越多的用户所应用,那么利用此漏洞进行攻击的成功率就会下降。而0 day类型的漏洞,因为尚未被提供商所知晓,所以就不存在修复的补丁(除非“凑巧”被其它补丁修复),那么被修复的几率就是零。

在软件已经定义世界的今天,许多人尚未认识到,我们在享受软件带来便利的同时,也处于0 day的黑暗丛林之中。这丛林伸手不见五指,又没有丝毫规则,在已知和未知的地方,无数人在摩拳擦掌、蠢蠢欲动,在他们眼中,小到你我这样的普通人,大到跨国公司、政府机构,都不过是待宰的羔羊。

不信?请看看下面这几个故事。

在过去很长的时间里,大家都不知道,找到软件的漏洞到底有什么用。比如一个电风扇控制程序,你大概可以找到某个漏洞,越过管理员,操纵风扇的挡位,甚至让风扇反转。但是,能做的也仅此而已,它更像某些爱好者的恶作剧,适合出现在肥皂剧中。

事实上也确实如此,在早年,寻找软件的漏洞更多是一种业余爱好,或者一种在某些极客群体中流行的亚文化现象。有一个现象可以说明这个例子,在那些年,欧洲技术人员发现的漏洞远远超过北美的技术人员,原因是欧洲有相对完善的福利制度,父亲也可以休很长的产假,于是,他们有大把的时间来钻研这回事。

在二十多年前的美国,有一家叫iDefense的公司,一直从事“网络安全”相关的业务,这家公司的员工都是“正经”的IT人员,穿圆领衫,喜欢在没有窗户的地下室工作,日常以三明治和能量饮料为饮食,技术也不错。

然而,这家公司一直在亏损,因为当时大家都不知道“网络安全”到底意味着什么,它的业务模式更像亡羊补牢,企业已经被黑客盗走资料之后,才想起找专门做这方面业务的公司来救急。但平时,如果有人找到软件或系统的漏洞,服务提供商并不重视,反而认为这是在给自己找麻烦——你知道就知道了,但不要大肆宣扬,不要敲诈我,就没事。

所以,经营惨淡的iDefense申请在2001年9月11日破产——这可真是一个好日子,如果恐怖分子劫持的飞机没有撞击世贸大厦,它可能就真的破产了。然而9·11袭击不但推迟了裁决的日期,而且改变了裁决本身。一个月后,一位法官裁定,美国需要更多这样的公司,所以iDefense不需要强行清算,而可以按照破产法相关条款清算重组。

iDefense等来了英国投资商的60万美元,用于清算重组。继而,他们也打电话给之前就表达过兴趣的德州买家John P.Watters,告诉他可以用五百万美元的价格买下公司。

“别做梦了,我跟你们一样清楚,你们的钱很快就会烧光,到时候再给我打电话吧。”

John预料的没错,十个月之后,英国人告诉他,公司马上就要关门大吉,除非John买下公司的股票。这次John松口了:“我愿意花10美元,买下这间公司。”

2002年8月,John来到iDefense的时候,这家公司已经是风雨飘摇,超过2/3的员工都被裁员了,剩下的二十多个人已经六个月没有薪水。他们好奇地盯着这个来自德州、不懂技术、满脑子都是商业的大块头,搞不清楚他到底要做什么。

John做的第一件事让大家松了一口气,他坐下来,逐个给大家开薪水支票。同时,他还给高级员工提供一个选择:要现金支票,还是要股权?结果,所有人都选择要现金,未来到底会怎么样,大家已经彻底丧失了信心。

当时,iDefense主营的是一套叫iAlert的系统。今天看起来,它其实很简陋,更像一个黑客与安全爱好者的论坛,大家发现了安全漏洞之后贴在上面,iAlert继而通知对应的软件开发商,并收取信息服务费用。当时市面上有很多这样的生意,价格压得很低,许多漏洞警报甚至都是免费提供的。在那个时候,指出系统的漏洞并不是什么好生意,甚至可能被大公司以损害名誉为理由告上法庭。对大公司来说,“这些人完全就是把自制炸弹丢进儿童乐园的恐怖分子”,必欲除之而后快。

市场行情如此,iDefense的生意当然不会好。

既然iDefense的员工都对未来不抱期望,John也就得到了大家的共识,你买下了公司,你可以按照自己的想法,随便折腾。

于是,John真的开始了,他把公司原有的生意做了个180度的大转折。从生意人的角度,他把问题想得很清楚:iDefense不赚钱,并不是因为技术不行,而是商业模式不对,软件漏洞的价值没有被充分发掘出来。在原来的游戏里一共有三个角色:

漏洞发现者,大多数是以安全为业余爱好的家伙,找到结果也是“义务”发在网上交流,博得一些虚名,这些人并没有得到太多物质回报;

漏洞受害者,也就是软件的使用者,他们其实并不清楚有哪些漏洞,这些漏洞的危害有多大,往往已经被攻击了还蒙在鼓里;

漏洞修复者,就是软件的提供商,对他们来说“多一事不如少一事”,只要漏洞没有火烧眉毛,就不必着急修复,所以,哪些漏洞应当以什么方式修复,哪些优先哪些落后,都由他们说了算;

所以到了2003年,John要改变整个游戏规则:

对于漏洞发现者,每次为iDefense提供一个漏洞,就可以获得75美元的奖励;

对于漏洞受害者,iDefense会把这些漏洞“包装”好,证明它们的危害性,并按严重程度排序,客户只要订阅这项服务,就能及时知道自己面临哪些威胁和隐患,有足够的时间和动力去督促软件提供商修复;

对于漏洞修复者,iDefense也会及时提供关于漏洞的最新信息,但形势已经不是“补不补随便你”了,不及时修复,就会面临客户的巨大压力;

除此之外,整个生意要玩起来,还有一个关键点,如果被发现的漏洞是直接卖给iDefense的,那么在被修复或者被其他人买下之前,它处于保密状态,iDefense不会公开细节,漏洞的发现者也不能继续传播。这样,订阅iDefense服务的客户才会相信,iDefense指出这些“高危漏洞”,至少在一段时间里是可控的。

就这样,“发现安全漏洞”的游戏,仅仅因为多了iDefense这样的“中介”,就陡然一变,生出了无数的花样。2003年,iDefense就把订阅费从1万8千美元提高到了3万8千美元,仍然挡不住热情的客户。一个客户不愿支付每年2万7千美元的费用,过了一年不得不以45万5千美元的价格重签合同。一家政府机构原本的订阅价格是2万5千美元,终止合同之后再次上门,可以承受的价格已经到了每年150万美元……

你或许会怀疑这个游戏的有效性,认为75美元实在不多,所以收集不来多少有价值的漏洞。事实也确实如此,iDefense收集的前1000个漏洞中,许多都是没什么价值的垃圾。

但是不要忘了,互联网是没有国界的。75美元对发达国家的人来说不算大钱,对于不发达国家的人却意义非凡,每天在电脑前敲敲键盘、点点鼠标,就可以让自己吃饱穿暖,甚至可以让家人过上优渥的生活。在这笔钱的刺激下,广大不发达国家涌现出的极具天赋的黑客,成为了iDefense重要的源头活水。

某种程度上,这有点像石油的故事。在很长的时间里,人类只会收集地面上溢出的原油,其用途也仅限于照明,完全没有“行业”的说法;一旦发现石油的价值,就会有人热衷油田钻探,有人热衷石油加工……整个行业应运而生,蓬勃发展。

作为这个行业的开拓者,iDefense的归宿也可以作为行业发展的见证。2005年7月,在John花10美元买下iDefense之后差不多三年,他以4000万美元的价格,把公司卖给了VeriSign。

在John还没有卖掉iDefense的时候,他就发现事情有点不对劲。除了软件的提供商和使用者,还有一些人也对漏洞有兴趣。这些人的行为比较古怪,他们愿意支付更高的价格,在每个漏洞的收购价只有400美元的时候,他们可以开出15万美元的价格收购,要求也颇为特意,“继续对漏洞保密,不要告诉软件的提供商和使用者”。

John改造iDefense的思路,是通过强调软件漏洞的重要性,最终减少它们。安全漏洞在没有被厂商知晓之前可以视为0 day,一旦它被知晓,被重视,它就不再是0 day,这样世界上的0 day就越来越少。但是,看起来还有一些人并不希望消灭0 day,相反,他们希望让这些0 day保密,在世界上一直存在。

这些人是谁?他们为什么要这么做?

好奇之下,John盘问他们的来历,这些人语焉不详,只愿意承认他们是某些承包商。而John拒绝了他们的要求之后,这些人马上改换说辞,声称“暴露漏洞会危害美国的安全,因为软件的漏洞可以用来监控美国的敌人与恐怖分子。”

原来,这些人是美国政府的承包商。

John始终没有同意他们的要求,因为在他看来,这属于“自砸招牌”。如果有朝一日,他的客户知道iDefense在提供安全订阅服务的同时,竟然还私藏了一些安全漏洞,信任就会坍塌,生意必然化为泡影。

但是John不知道,“收藏”各种0 day的游戏,其实政府早就已经在进行,甚至比iDefense早得多。

2007年,情报显示,伊朗正在部署能制造核武器的铀浓缩装置。迫于以色列的压力,美国不得不出手解决这个问题,虽然它在中东已经不堪重负了。

当时的布什政府有两个选择,第一,通过外交渠道,但基于美伊两国的关系,这条路显然希望渺茫;第二,通过军事手段,联合以色列进行军事打击,在预测完德黑兰会有怎样的反应之后,这条路也是困难重重。

布什告诉他的助手:“给我第三个选择!”这个选择既要能停止伊朗的核计划,消除以色列的忧虑,又不致引起第三次世界大战,堪称火中取栗,难度非同小可。

能“担此大任”的是美国国家安全局的专家Keith Alexander,他的计划名叫“圣母经(Hail Mary)”。

在布什提出要求之前,Keith他们就已经在着手对付伊朗的核设施。他们已经开发出专门针对AutoCAD文件的病毒,所以伊朗核工厂的大量设计图纸都传回了美国,也“事先收藏”了大量伊朗用到设备的0 day漏洞。但是,他们没有发动任何攻击行为,因为根据当时的美国法律,CNA(Computer Network Attacks,电脑网络攻击)必须有总统授权才可以发动。所以,当时他们的作为仅限于“获取信息”。

在总统要求获得“第三个选择”之后,Keith提出了他的建议:离心机是用于铀燃料浓缩的重要设备,其中最薄弱的环节是旋转轴,转速太快或者太慢,离心机都会报废。旋转轴是由PLC(Programmable Logic Controllers,可编程逻辑控制器)控制,控制软件来自德国西门子公司。如果能找到一种办法,让离心机的转速失去稳定,而电脑显示的数据又毫无异常,那么报废的离心机就不会引起任何怀疑,工作人员只会认为这是意外。

Keith的方案必须用到NSA已经收藏的“0 day武器库”中的7个安全漏洞,其中4个来自微软,3个来自西门子。微软的操作系统应用广泛,漏洞很容易找到,西门子的PLC控制软件广泛应用于世界各地的化工厂、汽车厂,所以也很不难发现漏洞。把这7个安全漏洞组合起来,就可以制作出攻击程序,按计划发动攻击。

为什么要同时动用7个0 day呢?0 day虽然是软件提供商所不知晓的安全漏洞,但每个0 day的前提、影响范围、安全隐患却各有不同。要想达到最终的目的,需要像下跳棋一样接力完成。打个不恰当的比方,为了成功地远程在民宅纵火,不但需要利用投影仪的漏洞,让它长期开着散发巨大的热量,还需要利用空调的漏洞,让它预先除湿加温,也别忘了操纵新风系统不停给室内供应新鲜空气,操纵扫地机器人把窗帘拽到投影仪旁边引燃……单独来看,每个漏洞似乎都不要命,协力组合之后就威力大增。

对伊朗核设施的攻击也是这样,中情局已经找到了“抵达彼岸”的路径,唯一的问题是,伊朗核设施的电脑都具有“空气闸门(Air Gap)”,也就是与外界互联网络完全断绝连接。那么,怎样把制作好的蠕虫病毒(攻击程序)注入进去呢?

到目前为止,外界都还不确切知道,美国和以色列到底是怎样做到这一点的,真相大概要等到2039年档案依法解密时才能揭晓。不过大家能确定的是,他们确实做到了。

蠕虫潜入电脑之后,一方面四处传播,尽可能扩大感染范围,另一方面会积极寻找西门子的Step7控制软件,一旦找到,它会尝试使用默认密码(比如admin或者password)——世界上相当多的人是不会修改默认密码的,就可以堂而皇之地登入控制系统。

登入控制系统之后,它并不会大肆作乱,而是专心寻找164这个数字,如果没有找到,蠕虫不会有任何作为。为什么要寻找164呢?因为根据情报,伊朗的离心机分为多个集群,每个集群都由164台机器组成。专心符合条件的集群,有利于保持攻击程序的隐蔽性,避免被其他人发现。

在找到特定的集群之后,蠕虫会首先静静观察十三天,验证离心机的转速是不是与之前情报获得的相符,如果相符,可以确认自己已经进入了伊朗核设施——毕竟这里的网络是与外界隔绝的,不能回传信息,也不能联系后方确认,蠕虫只能像过河卒子般“勇往直前”。

蠕虫的攻击逻辑并不复杂,先让离心机超速运转15分钟,然后正常运行27天,然后让离心机低速运转50分钟,再正常运行27天……周而复始,几轮之后,离心机就会报废。不过,最具匠心的一点是,蠕虫控制离心机异常运作时,还会向Step7发送伪信号,所以在控制台上看来,离心机的转速始终平稳,毫无异常。

攻击计划刚刚开始不久,美国就进行了新一轮的总统大选,奥巴马接班小布什入主白宫。相应的,小布什也把这个“绝密”信息告诉了奥巴马,而奥巴马也深入参与到这项计划中来。每次情报显示伊朗又报废了一批离心机,奥巴马就会打电话给小布什,让他知道“第三个选择”还在生效。

到2010年初,伊朗8700台离心机中已经有超过2000台报废,而伊朗方面始终找不出问题所在,毕竟从数据上看,一切都正常得不能再正常了。最终,伊朗的核计划受到严重影响,不得不暂停。

奥巴马在高兴的同时,也陷入了忧虑。他的第一重担心是,蠕虫会不会被发现?它有没有可能突破空气闸门,扩散到其它地方?如果是,那么它很快就会被发现。

奥巴马的担心是对的。2010年夏天,不知为何,美国和以色列专为伊朗量身定制的蠕虫从“与世隔绝”的环境中逃了出来,在互联网上大肆传播。据说是以色列人不满意蠕虫的传播速度,设法“加速”了这一过程。当时的副总统拜登也相信这一观点,据身边人回忆,当时拜登说“见鬼,肯定是那帮以色列人搞的,他们玩过火了”。

确实过火了,这个蠕虫病毒大肆传播,虽然没有造成破坏,但还是很快被全世界各地的安全人员发现。尽管一开始大家不清楚它的真正目的——它似乎在专心寻找某种PLC,同时对164这个数字特别感兴趣,找到之后却又长期无所作为,但蠕虫使用的安全漏洞已经被曝光,微软立刻发布了修复补丁和紧急通告。之后,有安全人员终于把它和伊朗核设施联系起来,并验证了它是为其“量身定做”的。这个之前默默无闻的程序也有了自己的名字,那就是“震网(Stuxnet)”病毒。Stuxnet,来自程序代码最开头几个字母的重新排序。

所以,现在轮到奥巴马的深层忧虑了:一国政府跨越主权边界,用蠕虫病毒攻击他国,不使用飞机、导弹,却达到了同样的效果,这是人类历史上第一次发生这样的事情。此事曝光,开了这种先例,其它国家会不会纷纷效仿?美国自己掌握了诸多0 day不假,但反过来,其它国家可能也掌握了大量的0 day,只是因为高度保密,谁都没有对外公布,也不会交流——但是,它绝对存在。

从这个意义上说,2010年堪称另一个1945年。1945年,美国在日本投下两颗原子弹,人类战争进入了新纪元,积极研究、制造、拥有核武器成了大家竞相追逐的目标。65年之后,所有国家都发现了,噢,原来游戏还可以这么玩!

长期以来,对于信息技术的攻防,美国国家安全局有一种策略,叫NOBUS(Nobody But Us“除了我们没有别人”)。简单说,它相信美国的信息攻防能力远超过其它国家,所以在发现安全漏洞时,简单的、初级的可以对外发布,交给软件开发商去修复,复杂的、高级的必须私藏在自己手里,以备不时之需。

然而他们很快发现,这是一个愚蠢的游戏,因为“私藏0 day”的玩家并不只有自己一个,大家都有自己的0 day武器库,谁也不比谁差多少。甚至,美国因为信息技术高度发达,连入互联网的设备和服务众多,反而最容易成为攻击目标。

2013年8月的某天,中情局局长John Brennan深夜打电话到白宫,询问“要不要把总统叫起来”。原来他们监测到,来自国外的黑客进入了“鲍曼水坝(Bowman Dam)”,试图打开闸门放水。这座大坝高75米,长244米,水库面积14.5平方千米。一旦攻击得逞,下游居民必然在睡梦中面临灭顶之灾。

“幸运”的是,他们最终发现黑客大概因为不熟悉美国的情况,所以搞错了目标,真正入侵的是“鲍曼大道水坝(Bowman Avenue Dam)”。这座水坝其实只是一座很小的水利设施,闸门宽不到5米,高不到1米。水坝建成于2013年,由计算机自动控制,根据上游传感器收集的水温、流速、水位等信息,自动调整闸门高度。控制程序通过调制解调器接入互联网,可以被外界访问。黑客正是在其中找到了一个安全漏洞,发送了开启闸门的指令。

与“黑客搞错了大坝”相比,更“幸运”的是,当天这座小小的水坝正在维护,没有联线,所以黑客即便发送了指令,也没有任何效果。但是,这已经足够让所有人倒吸一口凉气了——攻击美国的基础设施如此简单,如果得逞,效果又如此震撼。

2014年,索尼影业制作了电影《采访》,讲述了一个虚构的故事:两名记者以采访为名,行刺东亚某国的国家元首。电影准备上映的消息传出之后,网上有名为“和平卫士(Guardians of Peace)”的黑客组织告诫索尼影业:不要继续制作这部电影。但索尼影业不为所动。

结果,就在电影上映前夕,索尼影业遭到了黑客的大规模攻击,盗取了超过100TB的数据,内容包括尚未上映的多部电影的素材。不得已,索尼影业取消了《采访》的上映计划。

美国政府视之为对表达自由的危害,但也无可奈何。在网络安全的游戏里,0 day其实到处存在,谁的IT最发达,谁的网络最普及,谁受到危害的可能性也就越大。

更糟糕的是,本来进行网络攻击是违反朴素道德感的做法,但是今天,软件和网络已经定义了普通人的生活,相应的,也就具有极大的隐患。黑客不但盗取数据,也公布了新的一部007的剧本,以及员工的薪酬、社保等信息,当然引发了外界的关注。不止于此,黑客还公布了高层的往来电子邮件,外人可以看到,原来索尼影业的高层私下里大骂安吉丽娜·朱莉是“演技稀烂的宠儿”,并且因为奥巴马的看片爱好称他是“种族主义者”。这些八卦引起了轩然大波,索尼影业的联席董事长Amy Pascal不得不因此辞职。至于网络攻击是对是错,对不起,公众反而没什么兴趣。

美国人更没想到的是,自己的0 day武器库,有一天也会伤到自己。

美国国家安全局保留着许多0 day,并且为这些0 day定制了攻击程序——这很好理解,如果你的目标是进行网络攻击,那么发现一个安全漏洞之后,最好的办法是,一方面谁也不要告诉,这样没有人会察觉,另一方面,针对此漏洞开发攻击程序,需要的时候可以“一击致命”。在美国国家安全局的武器库中,有一款叫做“永恒之蓝(EternalBlue)“,它利用Windows自带的网络文件共享协议(SMB)发起攻击和传播。SMB协议的历史非常悠久,也就是说,所有使用Windows的电脑都可能“中招”。

2017年4月14日,黑客组织“影子经纪人(The Shadow Brokers)”在网络上公布了这一漏洞和攻击程序。有消息说,在此之前,“影子经纪人”曾以此为要挟,与美国国家安全局谈判,公开漏洞正是谈判破裂的后果。而美国国家安全局在预计谈判将要破裂之前,不得已把这个漏洞通知了微软,所以一直蒙在鼓里的微软在3月14日紧急发布了修复补丁。

严格来说,此时这个0 day已经名不副实,因为微软已经提供了安全补丁(据报道,微软对此颇有意见,国家安全局竟然把这个秘密保守了如此之久)。可惜为时已晚,毕竟微软的安全补丁层出不穷,普通用户谁会总绷着一根筋,第一时间下载呢?

2017年5月,以“永恒之蓝”为基础的“想哭(WannyCry)”病毒在网上大肆传播,病毒感染电脑之后会对整个硬盘的数据进行加密,要求支付比特币才能解锁(然而实际上,病毒的开发者似乎根本没有设置解锁的功能,所以支付了比特币也于事无补)。

24小时之内,全世界有超过150个国家被病毒波及,英国医疗系统、德国铁路系统、法国汽车制造商雷诺、西班牙电信、美国联邦快递逐一瘫痪。在中国国内,据公开报道,中石油的大批加油站、多所高校都受到严重影响,许多地方的公安和政府办公系统不得不被迫停工。

如果说0 day是黑幕之后的丛林游戏,心怀鬼胎的玩家各自为战,那么对抗0 day则是光明世界的“世界人民大联合”。“想哭”大规模爆发之后几小时,全世界的安全机构都开始行动。更让大家意外的是,安全专家、英国的大学肄业生Marcus Hutchins偶然发现,病毒会查询一个不存在的域名,以检测自己是否处在杀毒软件构建的虚拟环境中,如果发现身处其中,则会停止传播。所以,他花8.29英镑注册了这个域名,让病毒的域名查询无论如何都会得到回应,据此“认为”自己一直处在虚拟环境中,世界范围内的传播就此中止。

同时,安全人员Adrien Guinet发现,病毒用来加密数据的应用程序接口存在一个缺陷,所以用于加密的私钥会一直保留在内存中。如果电脑没有重启,则可以用程序读取到这个私钥,从而恢复数据。他的发现拯救了大批电脑和数据。

在软件的世界里,0 day无处不在。在人类的世界里,0 day更像黑暗丛林。

利用0 day发起攻击,开创了一种全新的,“(大部分时间)无害的攻击方式”。

各种影视作品和小说中的信息战,往往强调的是“攻击程序”,哪怕要提前准备,也要预置后门,或者提前埋伏好间谍程序,无论如何,都需要主动做一些事情。但是从上面的例子可以看到,尽管0 day作恶离不开最终的攻击程序,但整个游戏里最重要的部分,也是唯一要主动做的部分,其实只是观察、发现、验证、收集目标软件的安全漏洞。

然后,只需要严守秘密、静静等待,假装什么也没发生,既不要惊动对方,也不让其他人知道(用内行话说,要玩0 day游戏,必须做到可靠、持久、隐蔽)。直到攻击真正实施前的那一秒,攻击者的所有作为都是道德上无可指摘的。然而一旦攻击发起,结果又是致命的。

0 day市场有多大?

托iDefense的福,早已经有越来越多的玩家跻身这一市场。在正常的软件开发商、软件使用者、安全漏洞中介之外,还有大量人在苦心孤诣地寻找各种安全漏洞,有些人是为兴趣,有些人是政府使命,有些人则纯粹是为了赚钱。如今一个安全漏洞的售价早已不是750美元,随时有人愿意出价几十万甚至上百万美元购买它们。或许在某个第三世界国家偏远角落的地下室里,就有一双眼睛盯着电脑屏幕,绞尽脑汁寻找漏洞,只为赚钱改善自己的生活——阿根廷的经济经历了长期的衰退,但阿根廷的0 day市场却非常活跃。

这些安全漏洞被找到之后,有些会通知开发商,有些会被公开,有些会拿到中介市场上要价,有些则被偷偷私藏起来。在寻找安全漏洞的卖家时,有些人讲究“盗亦有道”,起码不卖给恐怖分子,有些人则唯利是图,只讲究“价高者得”,更有甚者,有些人会多次出售同一漏洞。

总的来说,0 day虽然有“市场”,其实更像黑暗丛林,各色人等在其中各自为战,你可以说他们受到各种规则约束,也可以说他们不受任何规则约束。

在这丛林里,许多问题大概和普通人想的不一样。实际上,美国政府一开始也低估了丛林的混乱程度,所以每次官方发动网络攻击都需要总统明确授权,但他们很快发现,这样做除了让自己更被动,所以取消了这项限制。

网上有一种流传的说法,美国安全机构会和微软等公司合作,在软件中“预留”各种后门,这是真的吗?

看过0 day的故事你就知道,这么做很不现实,因为如果微软真的这么做了,其实是给自己埋下了威力巨大的地雷:微软的产品是全世界普遍采用的,谁能保证世界上没有技术更强的技术团队?谁能保证这个后门不被发现?谁能保证这个后门不被其它“别有用心”的人利用来对付美国?谁能保证这个后门被其他人“恶意利用”了,美国境内的Windows用户能第一时间察觉?

如果美国国家安全局发现了0 day,它会第一时间通知软件开发商修复吗?

可能会,也可能不会,不必然会。因为一旦通知,哪怕对方没有及时修复,消息也可能走漏出去,自己的0 day武器库并不会因此变得更强大,日后想做些事情的手段反而不可能,所以,很可能它会假装什么也没发生,哪怕这样会置美国自身于威胁之中。

2016年,面对舆论压力,美国国家安全局做了迄今为止唯一一次公开声明,宣称它掌握的所有0 day中,91%已经通报给厂商,还有9%没有通报,其中一部分是因为厂商已经修复,另一部分是基于“国家安全理由”不通报。

而且美国国安局显然愿意承受“不通知”的风险。2017年肆虐全球的“想哭”病毒就是基于国安局的“永恒之蓝”攻击工具,以国安局长期以来私藏的0 day为核心的。“想哭”大规模爆发之后,美国政府和民间都遭受了惨重损失。但是,美国国安局并没有因此公开自己的0 day库存。

微软得知了一个0 day,它会通知国家安全局吗?

很可能不会。严格说起来,如果微软已经知道了安全漏洞,它就不再能被称为0 day,除非微软伪装成不知道,也不修复。这种情况下,通知国家安全局,告诉它们这个漏洞可以用来攻击,逻辑上似乎可行,实际上困难重重。

原因在于,第一,0 day的发现没有“赢家通吃”的特性,你发现了,不等于其他人不能发现,你最早发现,不等于其他人不能稍晚发现,甚至可能发现得更早只是没告诉你。第二,如果假装什么也没发生,任由这个漏洞继续存在,那么国家安全局当然可以扩充军备,但是另一方面,美国自己的用户也受到这个漏洞的威胁。对于国家安全而言,为未来对外的攻击私藏一个漏洞,却任由本国成千上万的用户面对这一隐患浑然不觉,到底划算还是不划算呢?

所以,虽然斯诺登揭露了美国国家安全局到处搜刮信息的丑恶现实,却激发了谷歌等公司提升安全性的决心——在斯诺登事件之后,对于美国政府的深度渗透和严密监视,谷歌公开表示“相当愤怒”:他们一面要与外部黑客作对,另一方面,本国政府却在背后捅刀子!接下来,公司大力扩张安全团队,寻找安全漏洞,升级系统安全性,甚至干脆自行悬赏征集谷歌系统的0 day。

虽然有证据表明,这些科技巨头与美国政府确实有某些秘密合作,但认为它们对政府门户大开、毫无保留,也不符合事实。

有些消息可以从反面证明这一点。大型科技公司和媒体在调查中发现,美国的安全机构也在为神秘黑客支付高额酬金,请他们寻找苹果、谷歌等公司的安全漏洞。据报道,联邦调查局曾公开承认,他们付了130万美元,请黑客找到绕开苹果公司安全系统的办法。面对媒体的采访,联邦调查局宣称他们“不知道黑客到底使用了什么漏洞,也不打算帮苹果修补这个漏洞”。

回到那句话,0 day的游戏是黑暗丛林,大家各自为战,看起来有规则可循,其实又没有规则可循。

“与世隔绝”的电脑,是不是可以高枕无忧?

“震网”病毒已经向我们展示了,“与世隔绝”并不等于“绝对安全”。恰恰相反,许多电脑因为处在“与世隔绝”的内网环境中,被虚拟的安全感所拥抱,因此反而放松了安全警惕,甚至取消了许多日常的安全措施。结果一旦空气闸门被突破,有任何一台电脑被感染,病毒就可以如入无人之境,野火燎原般传遍整个内部网络。

不用“外国”软件,是不是更安全?

凭直觉来说似乎是这样,然而逻辑的结果不是这样。是软件就一定存在漏洞,只不过有些漏洞被发现了,有些还没有被发现。通常来说,软件的应用越广泛、用户越多,漏洞被发现的几率就越高,也就越容易被修复。相反,通过行政手段,强行推广某些未经广泛使用和验证的软件,甚至让发现漏洞的人身陷囹圄,往往不过是鸵鸟政策,营造自欺欺人的安全感而已。这些软件有朝一日成为攻击目标,可能瞬间崩溃,毫无还手之力。

实际上,在iDefense发展的那些年,微软最先注意到了它。2002年,比尔·盖茨宣布微软的首要任务是加强安全性,更提出了“可信赖计算行动(Trustworthy Computing Initiative)”,专门为黑客设立了客户服务热线,并在每个月的第二个周二定期发布安全补丁。虽然微软的产品之前以漏洞百出著称,但是之后那些年,黑客圈公认“微软确实在努力改进安全性”,涉及到微软的0 day的数量和危害性有显著下降。

同样,谷歌也在重金悬赏自身系统的0 day漏洞并积极响应之后,大幅提升了安全性。尽管0 day不能彻底消灭,但0 day暴露的频率和危害性的下降是肉眼可见的。

一句话,软件的安全性不能靠行政命令来保护,只能顶着漫天炮火一点一滴做出来。

我们该怎么办?

day攻击可能来自任何方面,可能漏洞的发现者来自世界的这个角落,掮客来自世界的另一个角落,最终的攻击者又来自另一个地方。他们不需要彼此认识,就可以互相配合,完成一次严重的攻击。

但是,我们没有什么好办法。一方面,在开发软件时,大部分人想到的都是“如何实现这个功能”,而忽略了去思考“如果有人恶意使用这个功能该怎么办?”,所以其实留下了很多安全隐患——在追求“用户体验”、给用户提供各种便利的同时,更是如此。另一方面,软件的功能越来越强大,而我们真正用到的部分越来越少,即便是自己用到的功能,也更愿意图省事,而不想太多操心。这也就意味着,我们日常使用的软件,可能(甚至是“必然”)包含大量的安全隐患,具有巨大的作恶空间。

还有另一个因素也需要考虑,那就是软件行业提倡的“不要重新发明轮子”,它的潜台词就是“有现成的轮子就拿来用”。如今世界上已经有无数作为“轮子”的开源软件,大部分开发如果离开这些开源软件,基本是不可想象的。但是,就在广大程序员“放心”引入各种开源软件时,这些软件的安全隐患却往往无人问津。

2014年的“出血”事故就是一个绝佳的讽刺,通过这个漏洞,恶意攻击者可以获取服务器上的密钥、密码、聊天记录等等敏感信息。在这之前的若干年里,为保证信息安全,越来越多的网站都升级到加密传输协议(SSL)。但是,自己从头实现SSL无疑是不经济的,所以业界普遍把开源的OpenSSL组件“拿来就用”。可以说,OpenSSL为全球无数的网站、无数的生意提供安全保护,是互联网运行的重要基石,但是在很长的时间里,它的团队很小,只有一位全职开发人员负责维护,其他人都是志愿者,而且分散在世界各地。所以,OpenSSL的安全漏洞,就这样堂而皇之地“嵌入”了无数的网站、无数的生意。在它被安全团队曝光之前,或许早已在地下传播了很长时间。

所以,从过往经验来看,要确保信息安全,消灭0 day,只能摆脱黑暗丛林,暴露于阳光之下,靠安全人员和开发厂商的通力合作。因为软件的特性,0 day通常只能被拥有源代码的开发者所修复。所以一旦发现0 day,告知原开发者是最有效的办法。

实际上,开源世界也有应对0 day的办法,那就是CVE(Common Vulnerabilities and Exposures,公共漏洞及暴露)。它创建于1999年,是由美国国土安全部资助,由MITR Corporation(非营利组织)维护的,收集了所有已公开安全漏洞数据库,其中每一个都有自己的全球唯一标识符(CVE-ID),并且可以被引用。今天,CVE 这个术语已经被广泛接受,大家都会用“一个CVE漏洞”的说法。比如“想哭”病毒利用的0 day,对应的编号就是CVE-2017-0143,在CVE的数据库里可以清楚查到它相关的全部信息。

当然,单凭CVE是不够的。0 day暴露之前,可能有不少人在暗处密谋,而暴露之后,会有更多人想要从中渔利。那么,如何暴露漏洞,又不扩大损失,就需要一套做法。

在开源社区中已经摸索出了一整套做法,以前,它叫做“负责任的揭秘流程(Responsible Disclosure)”,现在叫做“多方协调的漏洞揭露流程(Coordinated Vulnerability Disclosure)”。简单说,就是在发现安全漏洞之后,所有利益相关方经过协调,商量出一个修复期限。

在漏洞修复之后,可以公开细节,但是在这之前,应当绝对保密——哪怕是对本国的安全机构也是如此,你可以说这是江湖规矩,但对于广大具有社会责任感的安全人员来说,这就是最大的“大是大非”。因为知道的人越多,安全漏洞被人用来作恶的可能性就越大,一旦自己发现的安全漏洞被人利用,某种意义上自己也就成了帮凶。

除此之外,还有更好的办法吗?我不知道。


参考资料:This Is How They Tell Me the World Ends: The Cyberweapons Arms Race. by Nicole Perlroth

An image to describe post 欢迎来到0 day的黑暗丛林