OpenSSL心血漏洞分析「建议收藏」

OpenSSL心血漏洞分析「建议收藏」SSL是一种理论,而其具体实现,就有好多了,firefox有自己的实现,旧版本的chrome有自己的实现,Openssl也属于实现的一种。   该漏洞并不是协议上的漏洞,而是针对某个实现的漏洞,说简单点就是:代码写的烂或者考虑不全面。 受影响的OpenSSL版本:OpenSSL1.0.2-betaOpenSSL1.0.1-OpenSSL1.0.1f 

大家好,又见面了,我是你们的朋友全栈君。

    SSL 是一种理论,而其具体实现,就有好多了,firefox有自己的实现,旧版本的chrome有自己的实现,Openssl也属于实现的一种。

 

    漏洞并不是协议上的漏洞,而是针对某个实现的漏洞,说简单点就是:代码写的烂或者考虑不全面。

 

受影响的OpenSSL版本:

OpenSSL 1.0.2-beta

OpenSSL 1.0.1 – OpenSSL 1.0.1f

 

1:为什么叫 心血漏洞

    SSL有一个特性,相当于TCPkeepalive 特性,即一端发送特定的报文到对端,如果对端收到,并且回复,就表示对方未断开连接,并且自己也不会断开连接。

 

该功能的英文名叫做:Heartbeat ,发现漏洞的人称这个漏洞为Heartbleed,翻译成中文就叫心血漏洞。

 

该功能在RFC 6520中详细描述,主要讲解了一些报文格式。


2:心血漏洞原理

简要概述就是说,OpenSSL在解析 对端发送的Heartbeat 请求报文的时候没有判断边界值。

我们先来看看Heartbeat 请求报文格式:

OpenSSL心血漏洞分析「建议收藏」


第一部分 类型 Content type

第二部分 协议版本 Version 

第三部分 长度 Length

Length指定了后面数据的长度。


而Length 指定的数据(即上图中的Encrypted Heartbeat Mesaage) 包括2部分:
1:序号
2:填充
协议要求,Heartbeat 响应的序号,必须和Heartbeat  请求的序号相同,padding是随机值。

但是我们看看openssl是怎么解这个报文的:

OpenSSL心血漏洞分析「建议收藏」


    开始时,p 指向的是read_buf,OpenSSL的流程就是解析这个报文。

    提取 报文 中 Length 字段, 赋值到payload中,并未判断报文 后面的长度是否是 Length 指定的长度。因为客户端可能指定了payload 长度是0x4000,而后面的实际数据起始就1个字节。到目前为止,还未出现致命的信息泄露问题。

紧接着,准备构造Heartbeat 响应:

OpenSSL心血漏洞分析「建议收藏」


    上面说过,根据协议要求,Heartbeat 响应的序号,必须和Heartbeat  请求的序号相同
    OpenSSL为了图方便,直接把 Heartbeat 请求报文拷贝过来了(因为请求报文中存在自己需要的序号)!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

    P1 指向了read_buf的payload,OpenSSL直接从read_buf中的payload起始处拷贝了payload 长度的数据到字节的write_buf。

    read_buf一共也就16k长度,如果客户端故意写的payload 是64k,那么很显然,OpenSSL进程空间的(64k-16k)的内存(可能是会话结构体中的其他字段,包括存放私钥等其他私密信息的内存)透露给客户端了。


3:OpenSSL对该问题的修复如下

OpenSSL心血漏洞分析「建议收藏」

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/160511.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • js 实现纯前端将数据导出excel两种方式,亲测有效「建议收藏」

    由于项目需要,需要在不调用后台接口的情况下,将json数据导出到excel表格,参考了好多资料以及很多大佬写的博客终于实现,兼容chrome没问题,其他还没有测试过,这边介绍两种实现方式,并附上代码和gif动图,博主不才还望轻喷

    2022年4月17日
    59
  • 【已解决】org.apache.jasper.JasperException: java.lang.ClassNotFoundException: org.apache.jsp.index_jsp

    错误信息很明确,就是没有找到index_jsp这个class文件。Jsp本质上就是一个servlet,也就是一个java类,tomcat通过运行编译好的class文件来显示jsp页面,而翻译jsp文件为java文件的引擎也就是tomcat的jasper。但是我的tomcat内部是没有缺少这部分jar包内容的。于是便有了我的第一次尝试。观察是不是jar包冲突了。因为项目本身引入了servlet-api、jsp-api包可能会和tomcat自带的包冲突,当然不排除也可能是其他包冲突。利用mavenhe

    2022年4月6日
    89
  • Pyhton Cookbook 学习笔记 ch9_02 元编程[通俗易懂]

    Pyhton Cookbook 学习笔记 ch9_02 元编程[通俗易懂]【传送门】9.8将装饰器定义为类的一部分问题:想在类中定义装饰器,并作用在其他的函数上方案:在类中定义装饰器首先要确定它的使用方法,是作为一个实例方法还是作为一个类方法fromfunctoolsimportwrapsclassA:#作为一个实例方法defdecorator1(self,func):@wraps(func)…

    2022年6月3日
    35
  • idea2021.2.8激活码-激活码分享

    (idea2021.2.8激活码)这是一篇idea技术相关文章,由全栈君为大家提供,主要知识点是关于2021JetBrains全家桶永久激活码的内容IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.html83PVI25FMO-eyJsa…

    2022年3月27日
    75
  • 【企业】掌握理查德·费曼学习法,提高学习效率

    【企业】掌握理查德·费曼学习法,提高学习效率强大的学习能力,可以让你更好地应对复杂多变的世界!1、理查德·费曼理查德·菲利普斯·费曼(RichardPhillipsFeynman),美国犹太裔理论物理学家,量子电动力学创始人之一,纳米技术之父。1965年获得诺贝尔物理学奖,从没有人怀疑过他超强、早熟的学习能力:小学刚毕业,他就开始学习初等微积分,在中学,他就学习了狭义相对论——要知道爱因斯坦提出狭义相对论的《论动体的电动力…

    2022年5月21日
    41
  • spi,i2c,uart三种总线的区别_i2c接口是什么意思

    spi,i2c,uart三种总线的区别_i2c接口是什么意思一、SPI I2CUART通信速率比较:SPI>I2C>UART1、同步通信>异步通信;2、同步通信时必须有一根时钟线连接传输的两端;3、都是串行通信方式,并行通信用于内部存储间的通信,如flash;4、适合传输的距离和通信速率成反比关系;3-SPI:两条合一的数据线、1时钟线、1CS(设备片选线) SPI:2数据线、1时钟线、1CS(设备片选线)/串行同步通信…

    2025年11月15日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号