1.漏洞简介
CVE官网上有这个漏洞的简要介绍、影响范围以及相关文章的索引:https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2014-0160。大致的意思就是说openssl在接收到client发送的Heartbeat Packet(心跳包)的处理过程出现问题,导致了处理这个数据包指针之后的最大16KB内存信息泄露。如果是处理某些敏感数据的进程,那么会导致敏感信息的泄露。
2.Heartbeat Packet简介
Heartbeat扩展是TLS在1.0.1之后才引入的,目的是用于安全的长连接,不必要每次发送数据之前都需要重新建立连接。定义的RFC文档在http://www.rfc-editor.org/rfc/rfc6520.txt。Heartbeat的数据包结构为,分别为packet类型(request或response)、payload的长度,生成的payload,补充的padding:
struct {
HeartbeatMessageType type;
uint16 payload_length;
opaque payload[HeartbeatMessage.payload_length];
opaque padding[padding_length];
} HeartbeatMessage;
为了达到长连接的目的,客户端先自己生成一个payload(可以是任意字符串),然后构造对应的request包发送给服务器,接着服务器返回同样的payload表示目前还处于链接状态,这样一个来回之后客户端和服务端都能继续进行数据传输。知乎上余弦的回答http://zhi.hu/1pr9中的这幅图可以很容易了解这个过程:
3.漏洞测试
首先是搭建测试环境,服务器端:CentOS 6.0,openssl 1.0.1e,一个server进程;客户端:一个python poc文件。
服务器端首先需要生成证书,过程参考:http://blog.chinaunix.net/uid-20539097-id-64403.html。然