文/李伟明 徐佳
“心脏出血”漏洞分析及防范
文/李伟明 徐佳
OpenSSL漏洞可以通过读取网络服务器内存,而攻击者可以访问敏感数据,从而危及服务器及用户的安全。
福布斯网络安全专栏作家约瑟夫·斯坦伯格曾写道,“有些人认为,至少就其潜在的影响而言,Heartbleed是自互联网开始商业使用以来所发现的最严重的漏洞。” 因为OpenSSL做为互联网络的基础软件一旦出现重大漏洞,必定导致整个互联网出现系统性的安全风险。
SSL是一种流行的加密技术,可以保护用户通过互联网传输的隐私信息。当用户访问Gmail.com等安全网站时,就会在URL地址旁看到一个“锁”,表明你在该网站上的通讯信息都被加密。这个“锁”表明,第三方无法读取你与该网站之间的任何通讯信息。在后台,通过SSL加密的数据只有接收者才能解密。如果不法分子监听了用户的对话,也只能看到一串随机字符串,而无法了解电子邮件、信用卡账号或其他隐私信息的具体内容。很多大型网络服务都已经默认利用这项技术加密数据。如今,谷歌、雅虎和Facebook都在使用SSL默认对其网站和网络服务进行加密。
OpenSSL是由加拿大人Eric A. Young和Tim J. Hudson所写的一个开放源代码的SSL软件库,主要功能是为传输层数据提供加密服务,OpenSSL提供的功能相当强大和全面,囊括了主要的密码算法、常用的密钥和证书封装管理功能以及SSL协议。由于Apache和Nginx Web服务器都在底层使用了OpenSSL,因此OpenSSL被广泛地在互联网中使用。
Heartbleed漏洞(CVE-2014-0160 )是由Codenomicon和谷歌安全部门的研究人员独立发现的。漏洞具体出现位置是在实现OpenSSL的TLS/ DTLS(传输层安全协议)心跳扩展中,一旦这个扩展被使用时,就会导致内存信息从服务器向客户端泄露。漏洞被归为缓冲区过度读取,原因是在处理安全套接层(TLS)心跳扩展中缺乏边界检查。SSL标准包含一个心跳选项,允许SSL连接一端的电脑发出一条简短的信息,确认另一端的电脑仍然在线,并获取反馈。研究人员发现,可以通过巧妙的手段发出恶意心跳信息,欺骗另一端的电脑泄露机密信息。受影响的服务器可能会因此而被骗,并发送给客户端内存中的信息。总结起来,该漏洞具有四个特性:
广泛性:OpenSSL组件应用范围极其广泛;
核心性:OpenSSL组件主要提供SSL服务,该服务经常用于传输敏感信息如密码;
不可追踪性:黑客利用此漏洞后不会留下任何痕迹,永远无法知道黑客通过该漏洞获取了什么信息;
易攻击性:HTTPS协议是外层公开协议,没有防火墙或者其他保护措施,任何人都可以随意发动攻击。
该漏洞的出现主要是因为OpenSSL在实现TLS和DTLS的心跳处理逻辑时,存在编码缺陷。OpenSSL的心跳处理逻辑没有检测心跳包中的长度字段是否和后续的数据字段相符合,攻击者可以利用这点,构造异常的数据包,来获取心跳数据所在的内存区域的后续数据。这些数据中可能包含了证书私钥、用户名、用户密码、用户邮箱等敏感信息。该漏洞允许攻击者从内存中一次读取多达64KB的数据。这种类型的漏洞被归类为内存泄露问题,而根本上就是因为OpenSSL在处理心跳请求包时,没有对心跳请求包的length字段(占2byte,可以标识的数据长度为64KB)和后续的data字段做合规检测。
客户端发送心跳报文PacketClient给服务器端,服务器端生成心跳响应包PacketServer返回给客户端。服务器直接使用PacketClient中的length长度字段,申请了length长度的内存,作为PacketServer缓冲区。然后OpenSSL会把接收到的心跳包PacketClient的内容用memcpy复制到新分配的PacketServer缓冲区中,再发送出去。这里存在的bug是如果接PacketClient中的length字段长度比实际内容要长,那么OpenSSL的memcpy操作将越过原来的PacketClient报文边界,拷贝服务器内存中的隐私内容到PacketServer中,将不该泄露的隐私数据发回客户端。
引用一则来自OpenSSL的官方说明指出:“OpenSSL在Web服务器如Apache/ Nginx中使用,这两种服务器的全球份额超过66%。还在邮件服务如SMTP/POP/ IMAP协议,聊天服务如XMPP协议,VPN服务等多种网络服务中广泛使用。幸运的是,这些服务很多比较古老,没有更新到新的OpenSSL,所以不受影响,不过还是有很多使用的是新版本的OpenSSL,都受到了影响。”
该漏洞从2012年5月14日OpenSSL发布1.0.1版本时开始产生威胁(如果追踪代码更新的话应该是2011年11月),受影响的版本主要包括:1.0.1至1.0.1f以及1.0.2-beta至1.0.2-beta1。至今已经有两年的威胁周期,只是最近才被人发现并做出修正。在威胁期间,我们无法得知有多少黑客发现并利用这个漏洞进行大范围的网络攻击活动,因为这种攻击方式是非常难以被察觉到的。因此如果做最坏的估计,也许所有大网站的用户数据都已泄漏,影响与危害直接涉及个人利益和安全。
该漏洞通过读取网络服务器内存,攻击者可以访问敏感数据,从而危及服务器及用户的安全。漏洞还可能暴露其他用户的敏感请求和响应,包括用户任何形式的POST请求数据,会话Cookie和密码,这能使攻击者可以劫持其他用户的服务身份。在其被披露时,约有17%或50万通过认证机构认证的互联网安全网络服务器被认为容易受到攻击。
根据国内安全团队的测评,通过利用该漏洞可以获取到淘宝、微信、陌陌、12306等使用OpenSSL服务的支付接口的内存信息,其中包含有用户信息等敏感内容(有些重要网站含明文密码)。
更重要的是,可能大家目前把目光主要集中在HTTPS类的网站上,普通网民可能认为只有网站自身业务会受到该漏洞的影响,实际上只要使用了存在该漏洞的OpenSSL的libssl.so库的应用程序都存在安全漏洞。据有关数据得知,Hearbleed漏洞的辐射范围已经从开启HTTPS的网站延伸到了VPN系统和邮件系统,目前共发现国内共有251个VPN系统和725个邮件系统同样存在漏洞,其中不乏政府网站、重点高校和相关安全厂商。
首先,如果用户最近登录过这类带HTTPS的网站,应该及时修改密码。一般来说,一些知名的大网站,现在去修改密码会靠谱很多,因为这些大网站几乎修复完全了。在确认有关网站安全之前,不要使用网银、电子支付和电商购物等功能,以避免用户密码被钻了漏洞的黑客捕获。对于普通用户来说只要发现浏览器地址栏的网址是https开头的都应该警惕,因为这次OpenSSL漏洞影响的正是https网站,本来是安全传输的却也不安全了。通过开启相关互联网公司提供的漏洞扫描工具,一旦用户访问https站点时,这些工具的云端就会确认这个站点是否存在漏洞。如果用户访问有漏洞的站点,就出拦截页面提示用户,建议不要登录。这样也能帮助我们识别相关的网站是否存在漏洞进而谨慎访问。
Heartbleed攻击日志很难追查。不过可以通过IDS/IPS等设备来继续检测/防御。但是与用户的消极避险不同,相关互联网企业则应该尽快进行主动升级。升级到最新的OpenSSL版本,可以消除这一漏洞,这是目前企业最便捷的做法。但在升级后,理论上还应该通知用户更换安全证书(因为漏洞的存在,证书的密钥可能已泄漏),并通知用户尽可能地修改密码。
我们通过Heartbleed验证脚本ssltest. py进行 测 试(https:// gist.github.com/ RixTox/10222402),在命令行下输入python ssltest.py yourip >log.attack得到日志文件,然后根据日志文件中的提示可以分析到网站是否存在漏洞,这里以OpenSSL 1.0.1c为例来进行测试,漏洞修复前,得到的日志文件如图1所示。
图1 漏洞修复前得到的日志文件
可以看到,在日志文件中,捕获到了服务器端的大量数据,同时,在日志最后还有相关的服务器可能会被攻击的提示。当我们对漏洞进行修复后,再次运行上面的命令,得到的日志文件如图2所示。
图2 漏洞进行修复后得到的日志文件
可以看到,现在已经捕获不到服务器端的数据了,而且在日志文件最后对服务器是否可能被攻击性给出了提示。当然,检测网站是否具有Heartbleed漏洞除了可以通过脚本测试外,还可以通过部分在线网络工具进行测试,比如通过http:// possible.lv/tools/hb/可以进行检测,诸如此类的工具还比较多。
在互联网飞速发展的今天,一些协议级、基础设施级漏洞的出现,可能会打击人们使用互联网的信心,但客观上也使得问题及时暴露,在发生更大的损失前及时得到弥补。作为互联网用户主动应变、加强自我保护,可能比把安全和未来全部托付出去要更负责任。
(作者单位为华中科技大学网络与计算中心)