简介:
心脏滴血漏洞于2014年被爆出,攻击者可以通过构造特殊的数据包,远程读取特定服务器内存中64K的数据,获取内存中的敏感信息。因openssl应用广泛,故影响较大。
原理:
1、 什么是SSL?
SSL(Secure Socket Layer)安全套接层是Netscape公司率先采用的网络安全协议。它是在传输通信协议(TCP/IP)上实现的一种安全协议,采用公开密钥技术。SSL广泛支持各种类型的网络,同时提供三种基本的安全服务,它们都使用公开密钥技术。SSL协议的三个特性:
① 保密:在握手协议中定义了会话密钥后,所有的消息都被加密。
② 鉴别:可选的客户端认证,和强制的服务器端认证。
③ 完整性:传送的消息包括消息完整性检查(使用MAC)。
SSL介于应用层和TCP层之间。应用层数据不再直接传递给传输层,而是传递给SSL层,SSL层对从应用层收到的数据进行加密,并增加自己的SSL头。
2、什么是心跳协议?
心跳协议主要用于存活状态反馈,即在C/S模式中,客户端会定时向服务端发送一个心跳报文,告诉服务器自己的存活状态,并获取相应反馈。举个简单的例子,我们日常使用的手机会定时的向站点发送类似心跳报文的信息,告诉站点当前手机的状态,若手机正常关机,会先向服务站点发送一个自己要关机的信号,这样别人打电话给你时会有对方已关机的提示;而若手机非正常关机,如直接拔电池,此时别人打电话给你时会回到对方号码不在服务区的提示。
3、Heartbleed?
心脏滴血原因最本质的就是没有处理好边界问题:攻击者向服务端发送一个心跳报文请求,服务端会收到请求后会回应一个包含请求包内容的响应报文,当服务端读取请求包内容的数据长度字段时,会以该长度返回相应的信息长度,也就是说,只要攻击者发送一个实际长度只有100B心跳报,但数据长度这个字段却填65535,则服务端除了返回攻击者的100B,还会继续额外的放回内存中的65435B数据给攻击者。而这额外的数据则极有可能包含私钥、证书等敏感数据。

漏洞复现
环境:bee-box、kali
扫描存活的主机:

获取主机详细信息:

可以看到靶机8443端口开放,https服务
运行msfconsole,搜索heartbleed

两个辅助模块,选择1测试(set verbose true 是为了看到泄露的信息):

成功获取多余的反馈信息

到此也就结束了,这里的测试结果没有拿到敏感信息,体现不出其危害性,至于防御方法,n年前的漏洞咱就打补丁就好了。
漏洞详细分析,推荐大佬的文章(从源代码分析其产生原理,讲的还是可以的):
Openssl“心脏出血”漏洞分析及其利用_neo_will_mvp的博客-CSDN博客

















