Heartbleed漏洞(CVE-2014-0160)FAQ
(2014年4月13日首次发布第8次更新) 安天实验室安全研究与应急处理中心编辑整理
目录
一、关于Heartbleed本身和相关的背景知识
二、关于Heartbleed的起源
三、关于Heartbleed的威胁和影响范围
四、关于应对Heartbleed漏洞和目前安全团队的工作
五、关于这个漏洞的误解
参考资料列表
一、 关于Heartbleed本身和相关的背景知识
1.1 什么是Heartbleed漏洞?
答:2014年4月7日,开源软件OpenSSL发布安全公告[1],公告内容主要阐述了在OpenSSL1.0.1版本中存在严重漏洞,该漏洞会导致内存越界,攻击者可以远程读取存在漏洞版本的OpenSSL服务器内存中64K的数据。此漏洞的CVE编号为CVE-2014-0160。
此漏洞同时被谷歌研究员尼尔·梅塔(Neel Mehta)与网络安全公司Codenomicon的研究员发现(Codenomicon的研究员将此漏洞命名为Heartbleed,即:心脏出血),发现后通知OpenSSL组织进行漏洞修补工作。漏洞公告发布时已发布了修补漏洞的新版本OpenSSL 1.0.1g,但此次漏洞存在于OpenSSL中已有两年之久,所造成的损失还有待后续评估。
该漏洞可以被用于获取内存中的用户名、密码、个人相关信息以及服务器的证书等私密信息。此漏洞公布后,多数应用OpenSSL搭建服务的众多互联网厂商、机构、组织等投入了漏洞修补竞速,以避免更多的敏感数据被泄漏。同时网络攻击者们也开始疯狂地获取数据,获取大量有价值信息。
OpenSSL是在全球互联网应用最广泛的安全认证和传输服务之一,几乎被所有的主流网站所应用,包括Google、Facebook、Yahoo等。因此这一漏洞对全球网络影响空前,涵盖范围还包括网银、电商网站、网上支付、门户网站、电子邮箱等。
1.2 Heartbleed漏洞的原理是什么?
答:Heartbleed发生于OpenSSL的HeartBeat(心跳)服务;“心跳”是一种常见的运维设计思想,即连接一端的计算机发出一条简短数据,协议另一端的计算机是否仍然在线,并获取反馈数据。由于这种用于运维的链接可能是周期性的,因此被称为心跳。Heartbleed漏洞产生条件便源于此,当构造一个恶意的心跳数据进行欺骗SSL协议另一端的计算机时,其便会受到欺骗并发送服务器内存中的数据。[2]
具体原理为:OpenSSL漏洞的产生代码片段在OpenSSL代码memcpy内存拷贝函数上,因为在拷贝调用之前没有将参数做正确的边界检查,导致攻击者能够获取OpenSSL分配的64KB缓存,通过重复的获取操作,便可能有机会使受害服务器的内存以每次64KB的速度进行泄漏,进而导致用户的大量敏感信息外泄。
1. 漏洞出处 导致此漏洞的代码在OpenSSL的TLS HeartBeat扩展中,问题存在于ssl/dl_both.c文件中的心跳部分,具体函数为:
int dtls1_process_heartbeat(SSL *s) |
2. 漏洞触发 首先说一下SSLv3记录包括内容:类型域type,长度域length,数据域data。P是指向SSLv3记录中数据的指针。
/* Read type and payload length first */
hbtype = *p++;n2s(p, payload);pl = p; | Hbtype:心跳包的类型;
payload:心跳包的长度;
pl:访问者提供的心跳包的数据。
unsigned char *buffer, *bp;int r;
buffer = OpenSSL_malloc(1 + 2 + payload + padding);bp = buffer; | buffer:分配访问者指定大小的内存块,此内存块最大可为:[1+2+65535+16]字节;
bp:分配内存块的指针。
/* Enter response type, length and copy payload */
*bp++ = TLS1_HB_RESPONSE;s2n(payload, bp);memcpy(bp, pl, payload); | 先后将类型、长度存入bp指向的buffer,长度与访问者提供的长度相同,从pl复制payload长度到bp指向的buffer中。
而漏洞便发生在此处,当恶意构造的心跳包没有提供足够多的数据,且payload的长度与实际不符,memcpy便会把SSLv3记录后的数据均复制出来,数据每次至多64KB。下面针对漏洞触发的分析给出利用Heartbleed漏洞的原理图。
图1 利用Heartbleed漏洞的原理图
3. 漏洞修补的原理 修复围绕的还是边界的检查,边界没有问题后,memcpy便不会出现数据越界问题。OpenSSL 1.0.1g版本中便完成了此项工作。
/* Read type and payload length first */ if (1 + 2 + 16 > s->s3->rrec.length) return 0; /* silently discard */ hbtype = *p++; n2s(p, payload); if (1 + 2 + payload + 16 > s->s3->rrec.length) return 0; /* silently discard per RFC 6520 sec. 4 */ pl = p; |
第一个if判断将长度为0的心跳包过滤掉,第二个if判断保障了心跳包有足够的长度。
1.3 什么是OpenSSL? 答:OpenSSL是一套开放源代码的SSL密码库,核心功能为密码算法库、密钥和证书封装管理、SSL协议、相关应用程序,其主要实现了基本的传输层数据加密功能。OpenSSL是以C语言开发,支持Linux、Windows、BSD、Mac、VMS等平台,因此OpenSSL具有良好的跨平台性与适用性。SSL协议位于应用层与传输层之间,在通信双方建立加密通道,以保障传输数据的安全性。OpenSSL作为具体的SSL协议实现,在应用层协议通信之前便完成数据加密,充分的保证通信与数据的私密性。
图2 OpenSSL应用位置图
1.4 OpenSSL是如何维护的? 答:OpenSSL早期由Eric A. Young和Tim J. Hudson自1995年开始开发,并开放软件包的所有源代码。1998年,OpenSSL项目组接管了OpenSSL的开发工作,并推出了OpenSSL的0.9.1版,到目前为止,OpenSSL的算法已经非常完善,对SSL2.0、SSL3.0以及TLS1.0都支持。OpenSSL的主体开发维护工作现今仍由OpenSSL项目组进行。[3] 因OpenSSL是开放源码,所以众多互联网厂商也依照其为蓝本,对其进行功能开发,漏洞补丁开发等。这也是在Heartbleed漏洞官方发布后,Google没有受到任何影响的原因,因为其早已自行开发补丁并进行了所有相应服务器的部署。
二、 关于Heartbleed的起源
2.1 为什么漏洞的名字叫Heartbleed? 答:该漏洞位于OpenSSL的TLS HeartBeat扩展实现中,会导致服务器到客户端的内存内容泄漏。因受HeartBeat启发,Codenomicon的研究员将CVE-2014-0160漏洞随后命名为"HeartBleed"(心脏出血),喻指畸形的Heartbeat请求导致用户隐私如血液般涌出。
2.2 是谁导致了这个漏洞? 答:由于OpenSSL是一个开源项目,因此项目成员都可以提交代码,当然OpenSSL也有审计机制。造成这个漏洞的相关代码的编写者是德国工程师Robin Seggelmann,时间是2010年底,他向OpenSSL项目递交了一系列bug修正和新增功能。但在Heartbeat中,他遗留下了相关Bug,这就是Heartbleed漏洞的产生经过。遗憾的是,对应代码的审查人Stephen Henson博士,审查中没有注意到这个错误,这个bug随后就被包含在了相关版本的OpenSSL中。[2]
三、 关于Heartbleed的威胁和影响范围
3.1 这个漏洞影响范围大么? 答:来自密歇根大学的一个安全研究团队利用开源网络扫描工具ZMap对网络进行了扫描,并在文档中公布了截至4月10日下午2时(应为美国东部时区)Alexa排名前百万网站和IPV4全域空间的检测结果。图3与图4据此结果绘制。[4]
图3 截至4月10日Alexa排名前百万网站检测结果
图4 截至4月10日完整IPV4空间扫描检测结果
国内安全团队知道创宇发布了OpenSSL漏洞国内的每日情况数据(统计针对443端口),漏洞爆发首日国内有33303台服务器存在漏洞,随着修补工作的持续进行,到15号减少到12100台。
图5 知道创宇公布的各日国内带有漏洞主机的数量
3.2 这个漏洞影响哪些版本、系统和服务? 答:这个漏洞在OpenSSL各版本中分布影响如下: 1. 根据已经公开的信息,该漏洞影响分布情况如下: · OpenSSL1.0.1f (受影响) · OpenSSL1.0.2-beta (受影响) · OpenSSL 1.0.1g (不受影响,系修补后的版本) · OpenSSL 1.0.0 branch (不受影响) · OpenSSL 0.9.8 branch (不受影响)
2. 一些发行的操作系统中带有的OpenSSL存在潜在漏洞: · Debian Wheezy(stable), OpenSSL 1.0.1e-2+deb7u4 · Ubuntu 12.04.4 LTS,OpenSSL 1.0.1-4ubuntu5.11 · CentOS 6.5, OpenSSL1.0.1e-15 · Fedora 18, OpenSSL1.0.1e-4 · OpenBSD 5.3 (OpenSSL1.0.1c 10 May 2012) and 5.4 (OpenSSL 1.0.1c 10 May 2012) · FreeBSD 10.0 - OpenSSL1.0.1e 11 Feb 2013 · NetBSD 5.0.2 (OpenSSL1.0.1e) · OpenSUSE 12.2 (OpenSSL1.0.1c) 主要的网络服务器Apache和Nginx都使用OpenSSL,并且这两种服务器约占全球网站总数的三分之二,OpenSSL不只应用于WEB服务上,一些网络软件中也有很多应用了OpenSSL。
3.3 这个漏洞对手机端有影响么? 答:为手机客户端提供认证的服务,大量是以OpenSSL为基础进行搭建的,所以用户凭证甚至包括服务器的证书可能被窃取,因此如果用户在之前用手机登陆过网银或进行过网购等操作,则需要在漏洞得到修补后,更改自己的密码。[5] 同时一些安全团队认为,此漏洞可能会利用心跳对等的特点,反过来攻击客户端,加之这个漏洞会窃取站点证书,导致可以构造攻击手机端。对此,Google安全博客称只有Android 4.1.1受到影响,这个说法显然没有包括到前文所提对手机应用的广泛影响。Google安全博客表示补丁信息正分发给合作伙伴。由于Android 系统更新的复杂性,许多Android 4.1.1用户可能永远不会更新修复Heartbleed漏洞的补丁。安全专家警告说,攻击者可能对网络连接发动中间人攻击或跨站伪造请求攻击等方法窃取用户的安全凭证,所以使用受影响设备的用户仍然要小心。[6]
四、 关于应对Heartbleed漏洞和目前安全团队的工作
4.1 网络管理者和普通用户都应该如何应对这个问题? 答:针对网络管理者,应对策略包括: Ø OpenSSL版本升级到最新的1.0.1g; Ø 如不能进行上述操作,可以使用-DOpenSSL_NO_HEARTBEATS参数重新编译低版本的OpenSSL,以禁用HeartBeat模块; Ø 重新生成私钥,请求和替换SSL的证书; Ø 一定要通知用户重置密码(遗憾的是大部分网络服务者没有做到这一点)。 针对普通用户,应对策略包括: Ø 鉴于本漏洞的严重程度,在不能确定对应网站和服务修补了本漏洞的情况下,不进行登陆,不操作是一种较好的应对策略(这些操作包括网购、网银支付等)。从数据跟踪上来看,国内外全部主流应用已经完成了漏洞修补; Ø 一些手机客户端登陆服务也是基于OpenSSL搭建的,因此使用手机客户端登陆过的用户也需要保持同样的谨慎; Ø 相关安全团队已经公布目前仍有问题的站点和对应站点修补情况,请予以关注; Ø 在确定登陆环境没有问题的情况下,或已经收到服务商的密码更改提醒后,立即修改密码,鉴于这个漏洞的严重程度,有可能你需要修改所有密码。
4.2 针对此漏洞的响应分析中国内各安全团队做了哪些工作? 答:首先还是要肯定,国内多数的网络服务企业、金融机构等都做出了较为快速的响应,国内各安全团队基本都投入到了对这个漏洞的分析响应中。
知道创宇
Ø 4月8日起投入分析研究力量,并陆续完成了一些工作和提供了成果:测试了淘宝、微信、陌陌、某些支付类接口、某些比特币平台、12306等各大使用OpenSSL服务的网站,证明了可以Dump出一些内存信息,信息中存在用户的敏感内容(有些重要网站含明文密码)。随后知道创宇专门针对OpenSSL漏洞制作了一份受本次漏洞影响的数据趋势分析曲线与受影响的网站地图,并进行每时追踪更新。[7] Ø 4月11日,发布了“当安全协议不安全了:OpenSSL漏洞”博客[8],分析了漏洞原理并给出了安全防范建议,同时SCANV发布了在线检测工具。 知道创宇在本次漏洞响应中做出的贡献令人称赞,并有未公开披露的深度发现。
360
Ø 4月8日,投入了相关分析研究力量,并陆续提供了下列成果; Ø 4月9日,发布了题为“OpenSSL爆“心脏出血”漏洞 可致两亿网民密码泄露”的公告;[9] Ø 4月9日,推出了在线OpenSSL“心血”漏洞检查工具[10] Ø 4月11日,360安全浏览器拦截存在OpenSSL漏洞网站[11] Ø 4月11日,OpenSSL漏洞转攻个人电脑 360首推修复方案[12] Ø 4月12日,发布了“OpenSSL心脏出血漏洞影响报告”[13] 360团队在一些技术点上(如是否可以获取私钥方面)做了非常深入的验证工作。
安天
Ø 4月8日,投入了相关分析研究力量,并陆续提供 了下列成果。 Ø 4月9日, 发布了“CVE-2014-0160(TLS心跳读远程信息泄露)漏洞简述与网络侧检测建议”[14],并提供基于Snort的检测规则。 Ø 4月11日,安天移动安全团队基本完成了对手机端主流的网银、网购、证券、航旅软件的登陆入口的安全检查,发现漏洞广泛影响到了多个手机应用,并跟踪了修补情况,并在验证中发现部分手机应用存在不使用加密协议登录,口令HASH也未作加盐处理的问题,发布了移动端的登陆漏洞检测插件。[5]
图6 移动端登陆漏洞检测插件(依托AVL PRO诊断工具工作)
因安全相关厂商较多,不再一一叙述,根据各家的可以检索公开信息我们做出如下总结。 | | | | | | | 安恒信息推出在线检测、WEB应用弱点扫描器、漏洞批量检测工具 | | | 百度安全发布帖子“OpenSSL曝高危漏洞 用户网银密码等敏感数据恐被泄露” | | | | | |
| | | | | | | | 腾讯电脑管家联合安全联盟上线“心脏出血”(OpenSSL)漏洞预警专题,详细介绍其相关背景知识、防范措施,以提醒广大网站及网民远离危害 | | | | | | 发布“针对OpenSSL TLS安全漏洞应急产品解决方案” | | | 发布OpenSSL(CVE-2014-0160)漏洞分析报告 |
在应急组织与政府机构方面,CNCERT/CC紧急发布了2014年第11期(总第207期)漏洞公告,《关于OpenSSL存在高危漏洞可被利用发起大规模攻击的情况通报》,并公布了支持电话和邮箱。
五、 关于这个漏洞的误解
5.1 有报道说“这个漏洞不是SSL协议级的漏洞,只是其中一个应用系统的,因此影响不大”这种观点对么?[15] 答:不对!此漏洞虽不是SSL协议级的漏洞,但OpenSSL的应用及分布十分广泛,大部分使用OpenSSL的重要服务都是开源的Web服务,如Apache和Nginx。OpenSSL用于保护邮件服务器(SMTP、POP和IMAP协议)、聊天服务器(XMPP协议)、虚拟个人网络(SSL VPN)、网络设备及各类客户端软件等。OpenSSL在客户端软件的应用也非常广,而且还有大量网络设备采用OpenSSL搭建升级维护服务。迄今为止,存在漏洞的版本已应用两年多时间,是否有攻击者已经发现并长期利用,目前无法考证。在漏洞爆发后,更多攻击者利用网络服务者的修补时间差获取了大量信息,甚至更有一些设备相关漏洞无法修补。这个例子也清晰的说明,没有安全开发过程和系统安全层面的保障,算法和协议层面的安全都会是一种伪安全。
5.2 有报道说“攻击者其实只可以获取固定的某一块内存数据,所以获取到什么样的数据完全是凭运气,有可能那一部份内存始终是存放不变的且无用的信息,攻击将会无效;如果该内存数据是变动的,那攻击者可以反复获取,直到获取到完整的敏感数据为止,要达到这样的结果是不容易的。综合看,被利用的几率很低,约在百万分之一以下。”因此攻击者很难获取有价值的数据这种观点对么?[16] 答:不对!攻击者能够读取的内容没有限制在64K,这个上限仅是针对一次心跳的结果。而且64K内存块是在OpenSSL的地址空间,而并非内存中的任意一块随机数据。而由于OpenSSL承载登录认证等关键服务,因此其对应内存地址空间中保留了大量的登陆凭证、安全Cookie、还可能包括自身私钥等信息,获取成功率是较高的。同时此漏洞并不是用来偷取文件,而是可以对用户名、密码、安全Cookie等关键信息进行获取,这些信息都很短小,相对这些信息的长度,64KB已经是非常长的信息块,同时相关内存区域的数据也会因用户频繁登陆操作而不断刷新。而且攻击者肯定不是一次性获取,而是高频持续获取,甚至对重要的目标分布式的高频持续获取,之后其再根据数据的标识与结构进行整理和挖掘。据说,某些知名站点被获取了T级的数据。这些数据中可以整理出多少关键信息,自己可以想象。
5.3 有报道说“将OpenSSL文件里的一个源码页面加上了一段大学计算机课上常用的一个if语句,就把日前在网上疯传的OpenSSL漏洞,轻松给补上了。所谓的OpenSSL现惊天大漏洞,各大媒体争相报道,其实大可不必担心。”因此不会有太大影响。[16] 答:不对!修补原理简单,不等于修补过程容易。对于大的机构,其并不是单点的OpenSSL部署,而是大规模分布式部署,需要进行多点修补,同时还要考虑到不影响用户登陆使用体验。而如果采用第三方补丁式的代码修改的方式,虽然可以短时间起到屏蔽漏洞的作用,但其代码的质量、可靠性在短时间内难以保证,之后依然要和官方修订版本同步。这个漏洞影响的服务器之多、关联用户规模如此之大,作用位置之关键,可堪称是近年来最严重的漏洞之一,因此说“大可不必担心”是一种不负责任的说法,其后续次生危害还将会逐步显现。
5.4 既然OpenSSL漏洞导致HTTPS存在安全问题,是否使用HTTP做登陆认证会更安全? 答:不对!HTTP是明文协议,如果在登陆认证过程中不使用加密协议是高度危险的,非常容易被监听获取。一些网站虽然对口令做了散列计算,但也非常容易依靠彩虹表快速破解。特别是手机应用如果对应HTTP登陆威胁更大,手机经常连接各种Wi-Fi热点,而当前钓鱼Wi-Fi广泛存在,无线Sniffer也大行其道。即使是家中的Wi-Fi也不安全——此前有新闻报道,全球目前已经有数百万台无线路由器,遭到了入侵和控制。因此如果手机应用基于HTTP协议登陆,用户名、密码被攻击者获取到的风险极高,因此使用HTTP协议做登陆认证是不负责任的行为。当然如果全程使用HTTPS确实会给服务提供者带来一定的计算资源成本开销,因此采用HTTPS登陆,而使用HTTP进行内容传输是一些厂商选择的这种方案。另外,针对此漏洞,有专家建议临时换用HTTP,目的是在不影响用户体验的情况下,为修补此漏洞争取时间,属于是不得已而为之,并不是要长期换用。
5.5 如何看待少数媒体强调“这次关于该漏洞的报道,因为各种原因,渲染得很吓人,其实普通网民不用担心。”。[16] 答:新闻报道可以无知者无畏!但误导他人等于害人!
鸣谢和说明:
感谢安全业界同行数日来的携手奋战以及对本文档的支持。 本文精简版已经授权《程序员》杂志发表。
参考资料列表:
【1】 OpenSSL Security Advisory [07 Apr 2014] TLS heartbeat read overrun (CVE-2014-0160) 【2】 心脏出血漏洞 【3】 OpenSSL 【4】 研究人员发现上万存在Heartbleed漏洞的网站 【5】 心脏出血漏洞波及手机应用 安天推出检测插件 【6】 百万Android手机面临安全风险 【7】 知道创宇zoomeye针对OpenSSL漏洞趋势分析 【8】 当安全协议不安全了:OpenSSL漏洞 【9】 OpenSSL爆“心脏出血”漏洞 可致两亿网民密码泄露 【10】 推出在线OpenSSL“心血”漏洞检查工具 【11】 360安全浏览器拦截存OpenSSL漏洞网站 【12】 OpenSSL漏洞转攻个人电脑 360首推修复方案 【13】 OpenSSL心脏出血漏洞影响报告 【14】 CVE-2014-0160(TLS心跳读远程信息泄露)漏洞简述与网络侧检测建议 【15】 OpenSSL漏洞对大众影响几何? 【16】 “心脏出血”漏洞能补上 安全“地震”被夸大?
|