漏洞描述
OpenSSL Heartbleed模块存在一个BUG,问题存在于ssl/dl_both.c文件中的心跳部分,当攻击者构造一个特殊的数据包,满足用户心跳包中无法提供足够多的数据会导致memcpy函数把SSLv3记录之后的数据直接输出,该漏洞导致攻击者可以远程读取存在漏洞版本的OpenSSL服务器内存中多达64K的数据。
漏洞原理
OpenSSL 是一个安全协议,它可以对用户与大多数网络服务所提供的服务器之间的通信进行加密。因为很多网站(例如google等)采用的是 OpenSSL 来保护敏感的用户信息,但是OpenSSL在实现TLS和DTLS的心跳处理逻辑时,存在编码缺陷。OpenSSL的心跳处理逻辑没有检测心跳包中的长度字段是否和后续的数据字段相符合,攻击者可以利用这一点,构造异常的数据包,来获取心跳数据所在的内存区域的后续数据。这些数据中可能包含了证书私钥,用户名,用户密码,用户邮箱等敏感信息。该漏洞允许攻击者从内存中读取多达64KB的数据。
影响版本
- OpenSSL 1.0.2-beta, OpenSSL 1.0.1 - OpenSSL 1.0.1f
Nmap验证
命令 nmap -sV -p 443 --script ssl-heartbleed.nes xxx.com(域名或者IP)
-sV:探测打开端口对应服务的版本信息
-p :指定端口扫描
–script ssl-heartbleed.nes:验证CVE-2014-0160 OpenSSL Heartbleed bug
扫描后显示有ssl-heartbleed VUNERABLE,证明存在该漏洞。
修复建议
OpenSSL官方已经发布补丁,可以通过升级修复漏洞,或者使用-DOPENSSL_NO_HEARTBEATS参数重新编译受影响版本的OpenSSL以禁用Heartbeat模块。