心脏滴血漏洞理解

一、漏洞简介

  • OpenSSL“心脏出血”漏洞(CVE-2014-0160)。这个漏洞使攻击者能够从内存中读取多达64 KB的数据。只要有这个漏洞的存在,在无需任何特权信息或身份验证的环境下,我们就可以从目标机器获取到用户名与密码、电子邮件以及重要的商业文档和通信等数据。

  • OpenSSL 有一个叫Heartbeat (心跳检测)的拓展,所谓心跳检测,就是建立一个 Client Hello 问询来检测对方服务器是不是正常在线 ,服务器发回 Server hello,表明正常树立SSL通讯。就像我们打电话时会问对方 “喂能听见我说话吗?”一样。

二、漏洞分析

  • 每次问询都会附加一个问询的字符长度 payload length,如果这个 payload length 大于实际请求包的长度,服务器仍会返回payload length长度规模的字符信息,于是形成了内存里信息的越界访问。

  • OpenSSL“心脏出血”漏洞的问题出现在openSSL处理TLS心跳的过程中,TLS心跳的流程是:A向B发送请求包,B收到包后读取这个包的内容(data),并返回一个包含有请求包内容的响应包。请求包的内容(data)中包含有包的类型(type)和数据长度等信息。

  • 当B收到A的请求包后,并没有的验证A包的实际长度,而是简单的把请求包data中说明的长度当作data的实际长度,于是当请求包中说明的长度与请求包数据实际长度不同时,问题就产生了。假设A构造一个请求包,它的实际内容长度只有1,而却告诉B的它的长度是65535,那么B接受到这个包后就会把A的内容完全当作65535来处理,其实到这里,问题还并不严重,最严重的问题出在,心跳的响应包还需要附带请求包的全部内容,这就需要程序做一次将请求包的数据从它所在的内存拷贝到响应包的内存里的操作。

  • 当拷贝的时候,程序认为A包的内容长度是65535个字节,结果A包在内存里面实际只有1个字节,于是程序不仅拷贝出了A包的内容,还将A包数据在内存中位置后额外的65534个字节拷贝进了响应包里,并将这个响应包发还给了A,于是A获得了B内存中这65534个字节的数据。假如A可以简单地通过连续的发送心跳包,那么获取B机器内存中n个65534字节的数据,这个漏洞不愧是2014年“最佳漏洞”。

猜你喜欢

转载自blog.csdn.net/qq_43307937/article/details/123877019
今日推荐