汉澳sinox不受openssl心血漏洞影响并分析修复其漏洞代码

汉澳sinox不受openssl心血漏洞影响并分析修复其漏洞代码OpenSSL心血(HeartBleed)漏洞是openssl在2014-04-07发布的重大安全漏洞(CVE-2014-0160)这个漏洞使攻击者可以从server内存中读取64KB的数据,甚至获取到加密流量的密钥。用户的名字和password。以及訪问的内容。主要影响版本号OpenSSL1.0.1到OpenSSL1.0.1f以及OpenSSL1.0….

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

OpenSSL 心血(HeartBleed)漏洞 是openssl 在 2014-04-07 发布的重大安全漏洞(CVE-2014-0160)这个漏洞使攻击者可以从server内存中读取64 KB的数据,甚至获取到加密流量的密钥。用户的名字和password。以及訪问的内容。

主要影响版本号 OpenSSL 1.0.1 到 OpenSSL 1.0.1f 以及 OpenSSL 1.0.2 Beta1

不受此漏洞影响的 OpenSSL版本号信息:
OpenSSL 1.0.1g 已修复该漏洞 ,以及g以上预计也修复了
OpenSSL 1.0.0 分支版本号不受此漏洞影响
OpenSSL 0.9.8 分支版本号不受此漏洞影响 ///汉澳sinox系统使用的openssl版本号
OpenSSL 1.0.2 Beta2 不受此漏洞影响

root@www:~ # openssl version
OpenSSL 0.9.8y 5 Feb 2013

可是假设用户升级到OpenSSL 1.0.1 到 OpenSSL 1.0.1f。就会面临漏洞攻击。用户编译安装定义了OPENSSL_NO_HEARTBEATS。也能够避开此漏洞。

引入心跳这个功能应该是为了保持client与server的连接。事实上这个不是必须的。

#ifndef OPENSSL_NO_HEARTBEATS
int
dtls1_process_heartbeat(SSL *s)
{

unsigned char *p = &s->s3->rrec.data[0], *pl;
//rrec是心跳包ssl3结构,用户发来的数据包

/×typedef
struct
ssl3_record_st
    
{
        
int
type;              
/* type of record */
        
unsigned
int
length;    
/* How many bytes available */
        
unsigned
int
off;      
/* read/write offset into 'buf' */
        
unsigned
char
*data;    
/* pointer to the record data */
        
unsigned
char
*input;  
/* where the decode bytes are */
        
unsigned
char
*comp;    
/* only used with decompression - malloc()ed */
        
unsigned
long
epoch;    
/* epoch number, needed by DTLS1 */
        
unsigned
char
seq_num[8];
/* sequence number, needed by DTLS1 */
    
} SSL3_RECORD;

*/
unsigned short hbtype;
unsigned int payload;
unsigned int padding = 16; /* Use minimum padding */

if (s->msg_callback)
s->msg_callback(0, s->version, TLS1_RT_HEARTBEAT,
&s->s3->rrec.data[0], s->s3->rrec.length,
s, s->msg_callback_arg);

/* Read type and payload length first */
if (1 + 2 + 16 > s->s3->rrec.length) //patch
return 0; /* silently discard */             //patch
//这个是补丁,长度为0的心跳包,就返回不要处理
hbtype = *p++;//运行后就是心跳包用户设置的payload,用户能够随意设置
n2s(p, payload);//宏n2s从指针p指向的数组中取出前两个字节,并把它们存入变量payload中,p是client的数据。能够设置0xFFFF,最大65535
if (1 + 2 + payload + 16 > s->s3->rrec.length)   //patch
return 0; /* silently discard per RFC 6520 sec. 4 */  //patch
//这个是补丁,用户设置payload长度+19超过心跳包实际长度,就返回不要处理

pl = p;

if (hbtype == TLS1_HB_REQUEST)
{

unsigned char *buffer, *bp;
unsigned int write_length = 1 /* heartbeat type */ +
2 /* heartbeat length */ +
payload + padding;
int r;

if (write_length > SSL3_RT_MAX_PLAIN_LENGTH)
return 0;

/* Allocate memory for the response, size is 1 byte
* message type, plus 2 bytes payload length, plus
* payload, plus padding
*/
buffer = OPENSSL_malloc(write_length);
bp = buffer;

/* Enter response type, length and copy payload */
*bp++ = TLS1_HB_RESPONSE;
s2n(payload, bp);//宏s2n与宏n2s干的事情正好相反:s2n读入一个16 bit长的值,然后将它存成双字节值,所以s2n会将与请求的心跳包载荷长度同样的长度值存入变量payload
memcpy(bp, pl, payload);
//假设用户并没有在心跳包中提供足够多的数据,会导致什么问题?比方pl指向的数据实际上仅仅有一个字节,那么memcpy会把这条SSLv3记录之后的数据——不管那些数据是什么——都复制出来。

后面那些数据可能存有其它用户的密钥。username和password。

这个就是c语言的内存指针。编写者没有考虑到payload会超过数据实际长度的情况。要检查才行。

非常幸运,汉澳sinox没有碰上这个漏洞。这是程序设计者添加新功能引入的新漏洞。而bash漏洞则是非常久就有的一直没有被发现。所以新版本号不意味就更好,由于没有充分測试修复可能产生的新bug.

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

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

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


相关推荐

  • Servlet之HttpServletRequest「建议收藏」

    Servlet之HttpServletRequest「建议收藏」概述:1、HttpServletRequest接口来自于Servlet规范中,在Tomcat中存在servlet-api.jar。2、HttpServletRequest接口实现类由Http服务器

    2022年7月3日
    25
  • WRS是什么?_WRS210L

    WRS是什么?_WRS210L全球参考系(WRS)是为卫星下行数据服务而建立的一种全球符号坐标系统,本文详细介绍了Landsat卫星的轨道特性,给出了相应的WRS网格坐标位置的估算方法,并给出了估算的结果。对该方法的研究为地面应用

    2022年8月4日
    5
  • 虚拟机lvm 扩容「建议收藏」

    虚拟机lvm 扩容「建议收藏」1.先在Vmware上,把虚拟机硬盘做扩展,如果有快照存在,磁盘可能是不可编辑状态,先删除快照后再扩展。2.现在打开虚拟机发现系统的磁盘空间已经扩了,但是硬盘分区可用空间没变,还是原来的30G[root@masterhome]#fdisk-lDisk/dev/sda:64.4GB,64424509440bytes,125829120sectorsUnits=…

    2022年6月20日
    30
  • Redis主从复制原理以及常见问题

    相信很多小伙伴都已经配置过主从复制,但是对于redis主从复制的工作流程和常见问题很多都没有深入的了解。咔咔这次用时俩天时间给大家整理一份redis主从复制的全部知识点。主从复制(一)什么是redis主从复制?(二)为什么需要redis主从复制?(三)主从复制的作用(一)什么是redis主从复制?主从复制就是现在有俩台redis服务器,把一台redis的数据同步到另一台redis数据库上。前者称之为主节点(master),后者为从节点(slave)。数据是只能master往slave同步单向。但.

    2022年4月8日
    60
  • Eureka集群原理

    Eureka集群原理问题:微服务RPC远程服务调用最核心的是什么?高可用,试想你的注册中心只有一个onlyone,它出故障了那就呵呵o( ̄︶ ̄)o了,会导致整个微服务环境不可用。解决办法:搭建Eureka注册中心集群,实现负载均衡+故障容错Eureka集群的原理:互相注册,相互守望。一个Eureka集群包含7001和7002等许多服务,在这个集群中,7001指向其他所有服务…

    2022年5月28日
    41
  • devtools工具如何使用_devtool制作插件

    devtools工具如何使用_devtool制作插件7devtool快速参考目录7devtool快速参考7.1获得帮助7.2工作区层结构7.3向工作区层添加新配方7.4提取现有配方的来源7.5同步一个配方的提取源树7.6修改现有配方7.7编辑现有配方7.8更新配方7.9查看配方升级状态7.10升级配方7.11重置配方7.12建立你的配方7.13建立你的形象7.14在目标机器上部署你的软件7.15从目标机器上删除您的软件7.16在替代位置创建工作空间层7.17获取工作区中配方的状态

    2022年10月5日
    2

发表回复

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

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