张廷龙 张浩东 唐青
前言:目前,随着网络数据传输的规模不断扩大,出现的漏洞和风险也越来越繁复。其中的漏洞之一OpenSSL的心跳处理逻辑没有检测心跳包中的长度字段是否和后续的数据字段相符合,攻击者可以利用这一点,构造异常的数据包,来获取心跳数据所在的内存区域的数据。这些数据中可能包含了证书私钥,用户名,用户密码,用户地址等敏感信息。本篇文章就对OpenSSL协议在实现TLS和DTLS的心跳处理逻辑时存在编码缺陷称为Heartbleed漏洞的原理作初步的研究。
关键词:Heartbleed漏洞;SSL;TLS
1. Heartbleed漏洞原理
SSL(Secure Socket Layer)安全套接层及其继任者传输层安全TLS(Transport Layer Security)是为网络通信提供安全及数据完整性的一种安全协议。TLS和SSL在传输层对网络连接进行加密。所以通过SSL或TLS协议加密后的数据包再通过WireShark软件进行对数据包的抓取时,抓取到的数据也是经过加密处理的数据。
DTLS(Datagram Transport Layer Security)数据包传输层安全协议。TLS不能用来保证UDP上传输的数据的安全,因此Datagram TLS试图在现存的TLS协议架构上提出扩展,使之支持UDP,即成为TLS的一个支持数据报传输的版本。
心脏出血漏洞主要通过攻击者模拟向服务器端发送自己编写的Heartbeat心跳数据包,主要是HeartbeatMessage的长度与payload的length进行匹配,若payload_lenght长度大于HeartbeatMes sage的length,则会在服务器返回的response响应包中产生数据溢出,造成有用数据泄露。
2.Heartbleed漏洞的发现与验证
心脏出血漏洞必须在含有心跳扩展和漏洞没有被修复的版本中存在,目前存在OpenSSL心血漏洞的OpenSSL版本有OpenSSL1.X等多个版本。心脏出血漏洞主要存在于OpenSSL的心跳机制里,判断OpenSSL有没有开启心跳扩展,并开启心跳扩展机制。在客户端对虚拟机中搭建的靶场页面进行访问,同时在客户端中通过POC程序对靶场进行攻击,最后通过wireshark对攻击的请求包和响应包进行捕获。
TLS数据请求包如下图所示:
分析由于SSL记录协议位于某个传输协议,例如TCP上面由于数据通过SSL加密处理后显示乱码,我们抓取的数据包主要通过16进制显示,所以像heartbeat_Request的数据包主要分为四部分:(1)数据包帧头部分;(2)IPv4(IPv6)网络层部分;(3)TCP传输层部分;(4)图片中方框标注的部分即为通过SSL加密的心跳数据包部分。payload和padding都为空,下面利用漏洞将后面内存中的数据dump下来。TLS数据响应包如下图所示:
上图中为通过wireshark抓取的heartbeat_Response数据包的模块化展示,同样数据包分为帧头部分,IPv4网络层部分,TCP传输层部分以及SSL返回的数据部分。
0x4000表示返回的数据包长度为16384。0x02表示返回的心跳消息类型。0x4000表示返回的payload_length(16384)。剩余的数据即为通过心脏出血漏洞从内存中dump下来的数据。
由于请求包的长度为3。但是要返回的payload_length为0x4000(16384),所以响应包返回的数据长度為0x4000(16384)即漏洞攻击成功。
3.结束总结
OpenSSL心脏出血漏洞(heartbleed)的产生主要由于OpenSSL的心跳处理逻辑没有检测心跳包中的长度字段是否和后续字段相吻合导致攻击者构造异常数据包,来直接获取心跳数据所在的内存区域的后续数据。主要特征有:heartbleed漏洞主要存在于有心跳机制的OpenSSL协议中。
IANA组织把开启心跳扩展机制的SSL数据包type类型定义为24(0x18)。 heartbleed漏洞主要存在于TLS和DTLS两种协议中,在含有heartbleed漏洞的OpenSSL协议中需要开启心跳扩展机制,而含有心跳扩展机制的TLS版本主要包含在TLSv1.0,TLSv1.1,TLSv1.2三种版本中。heartbleed漏洞攻击主要由于攻击者构造异常的心跳数据包,即心跳包中的长度字段与后续的数据字段不相符合,来获取心跳数据所在的内存区域的后续数据。
综上所述我们可以通过对线网中的数据首先进行判断是否为含有OpenSSL的数据包,同时通过对数据包中的type类型判断数据包是否为心跳数据包,然后对TLS的版本进行匹配找到相应的含有心跳扩展机制的心跳数据包,最后通过对心跳包中的数据实际长度与长度字段定义的值比较,如果实际长度小于定义的长度则该数据包即为含有heartbleed漏洞的数据包。
参考文献:
[1]石一鸣,马利民.基于OpenSSL的程序完整性度量方案设计与实现[J],电子世界. 2020,(02).
[2]周兴晖,王朝,金鑫. 生成对抗机制的密码算法组件化设计[J]. 北京电子科技学院学报. 2020(04)
[3] 谢东良.基于国密算法的OpenSSL安全性优化研究[D].哈尔滨工程大学 2016
资助项目:国家级大学科技创新项目(基于Spark的校园网蜜罐系统的研究与设计,项目编号:023220076 )。