文_苏化语
这世界上本不存在无懈可击的网络安全体系。漏洞是必然的,黑客是永恒的,差别只是危害大小和发现时间是早或晚。一般来说,每天都有数个小型漏洞被发现,除了黑客、白帽和安全专家们,根本无人关心。每隔一阵子,又会有一个稍微大一点的漏洞,可能会在科技媒体上占据一个角落。所以,当媒体突然铺天盖地地报道“心脏出血”(heartbleed)这个新漏洞时,你就能意识到,这个漏洞大得不一般。诚如密码学专家布鲁斯·施奈尔在博客中所言:“如果从1到10来打分,这次的严重程度应该是11分。”
施奈尔声称,这个漏洞造成的影响是“灾难性”的。那么,这场灾难的源头是什么?可能造成的危害又是什么?我们应该如何进行补救呢?
互联网的马奇诺防线
说起计算机安全漏洞,人们大多想起的是Windows Update、360和腾讯管家等诸多安全软件时常跳出来警告大家的电脑系统漏洞。然而“心脏出血”却不是这类系统漏洞,它是一种叫做OpenSSL的网络安全协议之中的漏洞;由于OpenSSL被全世界大多数网银、在线支付、电商网站、社交网络和电子邮件等重要网站所广泛使用,所以它一旦出现高危风险,所带来的后果便相当惊人。
所谓SSL(Secure Sockets Layer 安全套接层),及其继任者传输层安全(Transport Layer Security,TLS),即是为网络通信提供安全及数据完整性的安全协议,最早在1994年由网景公司推出,从上世纪90年代以来,已被所有主流浏览器采纳。TLS与SSL在传输层对网络连接进行加密,是当今互联网上应用最广泛的安全传输方法。当我们访问Gmail邮箱或者进入基金公司网上交易平台的时候,我们会看见URL地址旁边有一个“锁”,同时前缀是HTTPS,这就表明我们在该网站上的通讯信息都会被加密。
至于OpenSSL,则是基于SSL协议开发的一种开源软件包,它囊括了主要的密码算法、常用的密钥和证书封装管理功能以及SSL协议,并提供了丰富的应用程序供测试或其他目的使用。
在OpenSSL里面,又有一个“心跳机制”(heartbeat)。这个扩展套件主要是用来确认通信另一方是否处于联网状态。它的原理是,客户端发送一个“心跳包”给服务器,服务器将这个心跳包打开,提取出其中的有效负载,装入一个回馈包然后传回给客户端。用通俗的话来说,就是客户端朝服务器大吼一声“喂你还活着吗”,然后服务器回复“我还有心跳喔,快来找我玩吧”,这样一个过程。
理论上来说,客户端发送的有效负载是什么,服务器回馈给它的就应该是完全一样的复制品,大小和数据内容都应该一模一样。但是,在2012年5月14日OpenSSL发布1.0.1版本时,这个心跳机制就有一个漏洞。这个漏洞会让黑客们作弊,把小的有效负载伪装成很大的样子,这样服务器为了回馈同样的有效负载,就把其他信息装了进去。这就好比一个人在银行里存了100块钱,但存款单上写了1000块,这样他在取钱的时候,银行就只好把属于其他储户和银行自己的钱拼凑起来给他1000块了。
所以,攻击者可以通过这个方法看到随机的其他信息,实际上也就是窃听到其他用户的敏感数据,其中可能包括了用户名、密码、银行账号等等。更严重的是,服务器还可能把专用密钥一并在反馈包里交给了客户端,也就是说,攻击者可以直接得到进出服务器内部的钥匙,能够随意查看任何人的信息。
利用这个漏洞,攻击者每次最多可以得到64k的数据。然而,由于平均每台计算机每秒钟可以执行一到两次这样的攻击,所以黑客还是可以很轻松地大面积抓取用户的敏感信息。所以,当谷歌和科诺康(Codenomicon)的工程师发现这个漏洞时,他们很形象地将之命名为“心脏出血”,一个心跳机制上的致命漏洞。
两年潜伏
科诺康的工程师安蒂·卡嘉莱宁是最早发现这个安全漏洞的人之一,他表示,这完全是一场偶遇的结果。
卡嘉莱宁说,他当时正在跟同事瑞库·希塔马基一起测试公司的新软件Safeguard,这是一个专门用来识别各种新型漏洞的安全软件。他们在测试到OpenSSL的心跳机制时,问题就出现了,他们注意到,回馈包可能会变得异常地大。随后,卡嘉莱宁和希塔马基又采用了不同的方法对心跳机制进行测试,并最终证明,这个功能存在漏洞,会秘密地泄露外部数据。这种外泄是不留痕迹的,也就是说,你将无法追踪谁从你的服务器中到底拿走了什么东西。“这个发现让我们不寒而栗,”卡嘉莱宁说,“我们意识到,这可能是一个非常非常严重的漏洞。”
第二天,科诺康的安全专家马克·拉克索发现了一个更大的问题——从这个漏洞中溜走的,可能不仅仅是信息数据,还包括服务器上的专用密钥。卡嘉莱宁说:“在互联网安全方面,专用密钥就是最要紧的东西,它就是你的身份证。所以,这个漏洞有潜力成为互联网历史上最糟糕最严重的漏洞。”
之所以如此糟糕,是因为OpenSSL的市场占有率着实可怕。由于它是一个免费的开源软件,社区完备,而且具有功能强大的支持库和密码工具,所以全世界大部分采用SSL加密的网站都乐于采用OpenSSL。在它的客户群体中,光是Apache/Nginx这样的Web容器,就占据有全球66%的份额,加上即时通讯用的XMPP协议、邮件用的SMTP/POP/IMAP协议和VPN服务等等,覆盖面相当惊人。
根据检索网络空间节点的搜索引擎ZoomEye(钟馗之眼)的统计显示,在4月8日该漏洞爆发当天,中国国内有33303个443(HTTPS服务)端口受到本次漏洞影响,全球受影响的443端口数量应该达到71万以上。在这个漏洞被公布之后,谷歌和Twitter等大型公司已经率先宣布进行了漏洞修复,而微软和苹果公司则干脆宣称自己核心业务不受影响(作为两个崇尚封闭的公司,微软和苹果很可能并未采用OpenSSL这样的开源软件)。百度、360、微信和淘宝等国内重量级网络产品也在第二天进行了修复。在这些网站修复完成之后,用户再进行修改密码的工作,就可以在相当程度上保证自己的安全。
然而,修复漏洞并不等于其影响就不再存在。我们知道,这个漏洞最早存在于2012年发布的1.0.1版本,距离现在已经有将近两年之久。我们很难想象在长达两年的时间中,没有黑客发现并利用这个漏洞偷取信息;而且,由于这种攻击方式非常难以察觉,所以如果真的有人利用了这个漏洞,我们也不知道到底是谁对哪个网站做了什么。它的波及面实在太广了,影响也实在太大。以最坏的打算来看,很有可能所有大型网站的信息都遭到了泄露,其中的每一个用户都会受到影响。
不仅如此,它的余波也将会非常长。因为很多系统的专用密钥或许已经在漏洞被修补之前被窃取。其中有些密码又是无法被简单修改的,所以对于这样的网站来说,黑客们大可利用之前得到的管理员权限轻松获取客户信息;万一网站保存的是明文密码,那就更糟糕了,黑客们还可以看见用户设定的密码,无论修改多少次都没有用。
谁的阴谋
这个漏洞并不是恶意的“后门”。根据OpenSSL日志显示,这个漏洞来自于德国开发者罗宾·希格尔曼在2011年12月的一次更新,当时他的任务是包括修复代码中存在的几个漏洞并增添新的功能。在接受《悉尼先驱晨报》的采访时,希格尔曼遗憾地表示,漏洞的起因完全是他当时“忘记验证一个包含字符串长度的变量”。任何一个有编程经验的人都能理解这样的疏忽,只不过,这一次他的疏忽影响确实大了一点。
不过,编写者没有恶意,却并不代表其他人没有恶意。在“心脏出血”漏洞被公布之后不久,彭博社爆出重磅消息:NSA(美国国家安全局)早在两年前该漏洞刚刚出现的时候就已经获知了它的存在;不仅如此,NSA还以国家安全为由,利用这个漏洞用来获取密码和用户数据,也就是说,NSA借此获取了整个互联网超过2/3的数据。
报道同时还指出,“心脏出血”绝非个案,事实上NSA手中至少拥有上千个相似的漏洞,而该机构则一贯以情报收集为由为其辩护。“NSA养了一千多个专家,用各种先进的分析技术,专门去追寻这些漏洞,”报道称,“据知情人士介绍,这已成为NSA用来窃取账号密码和执行其他任务的基本手段之一。”
这并非没有可能。在斯诺登提供的材料中,有一项被《华盛顿邮报》完整揭露出来的“黑预算”,其中显示,NSA每年花费16亿美元在数据处理和发掘上。如此巨大的人力物力投入,让他们确实有能力早早领先整个互联网世界去发现并利用这样重大的漏洞。
在彭博社这篇报道出炉之后,NSA官方予以了否认。他们声称,在科诺康和谷歌宣布这个漏洞之前,他们都不知道有这样一个漏洞。至于白宫方面,也同样通过一份国家安全委员会的声明对这一指控予以否认,并称“如果联邦政府,包括情报机构在内,在上周之前已经发现这一漏洞,那么我们一定会报告给负责OpenSSL的社区”。
然而问题在于,斯诺登揭示出来的NSA与白宫本身就扮演着两个彼此矛盾的角色,他们一方面保护美国政府及各产业的计算机网络不被黑客侵犯,另一方面又要扮演黑客去侵入其他国家政府和敌对组织的网络。加之我们已经知道,NSA曾以国家安全为由,用“棱镜计划”对谷歌和Facebook等多家企业进行监控,他们的否认真的还有可信度吗?
微妙的是,在做出否认的几天之后,美国国家安全委员会发言人凯特琳·海登又披露了美国总统奥巴马关于网络安全的一些政策细节,确认奥巴马已授权NSA“出于国家安全或执法需要,可以利用某些漏洞来破解网络加密、设计网络武器”。这又似乎印证了NSA曾经利用心脏出血漏洞的报道。“如果这是真的,那么NSA将会面临网络社区的彻底反噬。”美国海军一位安全专家说。
答案在未来
“心脏出血”漏洞带来的影响很大,媒体报道也吸引了很多平时并不关心这方面信息的人,于是很自然地,也有了很多恐慌的言论。
比如说,有人说,HTTPS并不比HTTP安全,所以HTTPS根本没必要存在。我们需要知道的是,尽管OpenSSL这次的漏洞使得攻击者可以绕开会话加密协议而得到敏感信息,但HTTP协议本身根本不涉及加密。如果说“心脏出血”是让黑客找到了放在门口脚垫下的钥匙以闯入家门窃取信息,那么HTTP就是把信息大剌剌摆在了马路上,哪一个更为不安全可想而知。
其次,“心脏出血”也不代表SSL协议本身出现了漏洞。因为SSL安全协议本身并未出现问题,这一次的漏洞是OpenSSL这款软件在实现时的疏漏所造成的,并不会对SSL的存在造成动摇。
再者,尽管微软和苹果乃至于国内不少大公司因为采用的是商业性SSL软件而非OpenSSL而逃过一劫,但事实上,开源软件的优越性并不应该经此一事便遭到抹杀。因为密码学是非常专业而且需要极大投入的学科,像OpenSSL这样的开源软件,其社区已经非常完备,有无数人投入了多年的精力去探索分析和研究,实力不逊于任何商业公司。另外,从开发的角度上来说,开源便意味着源代码需要经过所有人的审查,它出现漏洞的概率也会比较小。当然,开源软件在修补漏洞时可能会被黑客打“时间差”,但考虑到开源软件在修复漏洞的效率上也远远高于闭源软件,这一点小瑕疵也算瑕不掩瑜。
真正应该提倡的,或许是混合多种加密方式,尤其涉及金融服务时,不要单单依赖于SSL协议来完成保密工作。如同支付宝绑定手机短信验证一样,这样的双重验证方式,可以进一步减少因为软件漏洞带来的风险。
未来或许会更好。美国LaserLock科技公司的首席技术官保罗·唐弗里德说,或许人们可以尝试采用生物识别技术的验证方法。“虽然无法保护存在漏洞的SSL代码片段,但能够避免身份盗窃和重复攻击。”他说,“现在我们的面部和语音识别技术已经非常强大,能够在用户的现有设备上运行,所以我们不禁要问,为什么我们的网站还要继续依赖于传统的密码呢?”