0x00 背景知识
传输层安全协议SSL
安全套接字协议SSL(Secure Sockets Layer),及其继任者传输层安全协议TLS(Transport Layer Security)是为网络通信提供安全及数据完整性的一种安全协议,它们在传输层与应用层之间对网络连接进行加密。
例如,常见的HTTPS协议,就是由HTTP加上SSL/TLS协议构建的可进行加密传输、身份认证的网络协议,实现互联网数据传输安全。当用户访问安全网站时,在URL地址旁会有一个“锁”,就表明我们与该网站之间的通讯信息都被加密。在 Microsoft Edge 中安全浏览 Web。
另外,这两种协议没有固定的端口。根据是否使用了传输层安全协议,应用层协议的端口会有不同。例如:http协议是80端口,https是443端口,常用的邮件服务器SSL/非SSL协议端口号。
OpenSSL
OpenSSL是一个开源的SSL安全软件包,是SSL协议的实现程序。网站的开发者要使用SSL,就会选择在自己的网站中导入openSSL软件包,实现网站数据加密。
0x01 漏洞介绍
漏洞成因
OpenSSL有一个叫Heartbeat(心跳检测)的拓展,它允许连接SSL一端的电脑发出一条简短的信息Client Hello问询来检测对方服务器是否正常在线,若服务器返回Server hello,则表明可以正常SSL通讯。
每次问询,A都会向服务器B发送请求包,其中含有包的类型(type)和数据长度(Length)等信息,而服务器B返回一个包含有请求包内容的响应包。OpenSSL心脏出血漏洞产生的主要原因是,OpenSSL的心跳处理逻辑没有检测心跳包中的长度字段值是否和实际长度相吻合,导致攻击者可以构造异常数据包,来直接获取心跳数据所在的内存区域的后续数据,于是形成了内存数据的越界访问(信息泄露)。通过不断进行心跳检测,就能一点点泄露服务器的数据,这就是心脏滴血(Heartbleed)漏洞。
漏洞危害
攻击者可以利用该漏洞,远程读取服务器内存中64K的敏感数据(OpenSSL分配的缓存为64KB),这些数据里可能包括用户的登录账号密码、电子邮件甚至是加密私钥,用户cookie等信息。
不同OpenSSL版本,Heartbleed漏洞存在情况
漏洞影响
由于互联网应用最广泛的安全传输方法就是SSL,而OpenSSL又是多数SSL加密网站使用的开源软件包,所以漏洞影响范围广大,一时间席卷全球各个互联网相关领域,网银、在线支付、电商网站、门户网站、电子邮件等无一幸免。
0x02 漏洞复现
环境搭建
漏洞扫描/检测
- URL“心脏滴血”漏洞检测网站
- 使用Nmap扫描脚本对靶机进行漏洞检测:
- 使用AWVS对目标服务器进行漏洞扫描
使用Vulnhub官方POC复现
Python2运行ssltest.py,拿到敏感数据:
使用MSF进行漏洞利用
- 搜索openssl_heartbleed
- 使用auxiliary/scanner/ssl/openssl_heartbleed模块,设置好常规选项后还要使用
set verbose true
设置verbose参数为真,才能显示详细信息看到获取到的服务器内存信息。 - 实际攻击需要多次获取内存信息并进行整理,提取有用信息。
0x03 漏洞修复
升级openssl,还可以配合措施:修改服务器密码、重新配置私钥、重新配置证书。