心脏滴血漏洞详解及利用--HeartBleed With OpenSSL_NoobMaster--CISSP的博客-程序员秘密

技术标签: 安全漏洞  

【事件规则】

OpenSSL“心脏出血”漏洞是一个非常严重的问题。这个漏洞使攻击者能够从内存中读取多达64 KB的数据。也就是说,只要有这个漏洞的存在,在无需任何特权信息或身份验证的环境下,我们就可以从我们自己的(测试机上)偷来X.509证书的私钥、用户名与密码、聊天工具的消息、电子邮件以及重要的商业文档和通信等数据。

OpenSSL漏洞分析

最初人们为了网络通信安全,就开始使用安全协议进行加密通信,SSL(Secure Socket Layer)就是一种安全协议。随着开源软件的流行,有人写了一款叫  OpenSSL  的开源程序供大家方便地对通信进行SSL加密,后来这款软件便在互联网中被广泛应用。我们在浏览器地址栏常见的 https 前缀的网址以及那把小锁图标,通常就是指该网站经过 SSL 证书加密。

 

OpenSSL 有一个叫 Heartbeat (心跳检测)的拓展,问题就出在这个拓展上,这也是漏洞被命名为“心脏出血”的直接原因。

 

所谓心跳检测,就是建立一个  Client Hello 问询来检测对方服务器是不是正常在线 ,服务器发回 Server hello,表明正常树立SSL通讯。就像我们打电话时会问对方 “喂听得到吗?”一样。

 

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

 

就这样,每发起一个心跳,服务器就能泄露一点点数据(理论上最多泄露  64K),这些数据里可能包括用户的登录账号密码、电子邮件甚至是加密秘钥等信息,也可能并没有包含这些信息,但攻击者可以不断利用 “心跳”来获取更多的信息。就这样,服务器一点一点泄露越来越多的信息,就像是心脏慢慢在出血,心脏出血漏洞的名字由此而来。

 

这里通过一张图来展现一下:

由于互联网应用最广泛的安全传输方法就是 SSL,而 Open SSL 又是多数 SSL 加密网站使用的开源软件包,所以漏洞影响范围广大,一时间席卷全球各个互联网相关领域,网银、在线支付、电商网站、门户网站、电子邮件等无一幸免。

 

通过以上分析我们可以看见,OpenSSL心脏出血漏洞(heartbleed)的产生主要由于OpenSSL的心跳处理逻辑没有检测心跳包中的长度字段是否和后续字段相吻合导致攻击者构造异常数据包,来直接获取心跳数据所在的内存区域的后续数据。主要特征有:

  • heartbleed漏洞主要存在于有心跳机制的OpenSSL协议中。
  • IANA组织把开启心跳扩展机制的SSL数据包type类型定义为24(0x18)。
  • heartbleed漏洞主要存在于TLS和DTLS两种协议中,在含有heartbleed漏洞的OpenSSL协议中需要开启心跳扩展机制(beartbeat),而含有心跳扩展机制的TLS版本主要包含在0(0x0301),TLSv1.1(0x0302),TLSv1.2(0x0303)三种版本中。
  • heartbleed漏洞攻击主要由于攻击者构造异常的心跳数据包,即心跳包中的长度字段与后续的数据字段不相符合,来获取心跳数据所在的内存区域的后续数据。

其一般的攻击流程如下图所示:

利用该漏洞,攻击者可以远程读取服务器内存中64K的数据,获取内存中的敏感信息。

漏洞利用
1)使用shodan搜索引擎搜索站点

在这里插入图片描述2)打开Metasploit,启动msf。然后使用 auxiliary/scanner/ssl/openssl_heart_bleed功能。

在这里插入图片描述3)执行run命令,运行扫描器,查看结果,可以看到有Heartbeat response with leak的字样,证明该站存在HeartBleed漏洞

在这里插入图片描述4)开启信息展示,进行利用。

在这里插入图片描述在这里插入图片描述

在这里插入图片描述4、漏洞修复

建议升级openssl。此外,做如下措施。

  1. 修改服务器密码
  2. 重新配置私钥
  3. 重新配置证书
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_35686185/article/details/104468439

智能推荐

程序员 送给 大学生 的一些话_计算机与软件考研的博客-程序员秘密

作者:子慕大诗人 点击原文链接,可进入原文前言:昨天一个大学生问了我一些问题,他是想赚点钱,因为读书嘛没什么钱,又谈了恋爱,想通过一些方式赚点外快。虽然平时也没怎么联系,但是作为大湿人,...

移动机器人——ros navigation_mbf move base_white_Learner的博客-程序员秘密

一、概述ROS navigation为移动机器人导航相关包的集合,实现定位规划避障等相关功能。整体工作流程为:加载地图navigation通过map_server加载现有地图。navigation无建图相关包,需另外实现后保存,默认只支持2维地图,其他包类似grid_map提供2.5维地图的加载。发布TF坐标变换navigation包内的AMCL提供map->odom的变换,AMCL实际为全局绝对定位,即map->base,但在应用时里程计会提供odom->base的变

IMX6ULL裸机学习----LED正点原子在韦东山开发板上实现_正点原子6ull移植韦东山_小鞋匠711的博客-程序员秘密

前言 一、IMX6ULL 启动流程? 二、使用步骤 1.引入库 2.读入数据 总结 前言 最近在学习IMX6ULL这个开发板,手边有韦东山老师的imx6ull全功能板子,为了练习学习的初步效果,采用了正点原子的视频课程进行学习。首先移植了一个基本的LED控制实验。提示:以下是本篇文章正文内容,下面案例可供参考一、IMX6ULL 启动流程? 我们手头上的开发板一般都有直接的拨码开关来控制IMX6ULL的启动方式,常见的有SD卡、USB...

Mysql学习总结(44)——Linux下如何实现mysql数据库每天自动备份定时备份_科技D人生的博客-程序员秘密

概述  备份是容灾的基础,是指为防止系统出现操作失误或系统故障导致数据丢失,而将全部或部分数据集合从应用主机的硬盘或阵列复制到其它的存储介质的过程。而对于一些网站、系统来说,数据库就是一切,所以做好数据库的备份是至关重要的!备份是什么?为什么要备份容灾方案建设存储介质光盘 磁带 硬盘 磁盘阵列 DAS:直接附加

获取北京时间时间戳_获取北京的时间戳_程序007的博客-程序员秘密

/// <summary> /// 获取北京时间时间戳 /// </summary> public static long GetBeiJingTimestamp(DateTime? dateTime) { if (dateTime == null) {...

随便推点

React Native移动开发实战-2-如何调试React Native项目_莫愁-三次元世界的博客-程序员秘密

本节来介绍另一个非常重要的调试选项:Debug JS Remotely选项。

请判断一个链表是否为回文链表20201218_Starry-的博客-程序员秘密

请判断一个链表是否为回文链表题目分析解法: 1ms 41.1MB题目请判断一个链表是否为回文链表。示例 1: 输入: 1->2 输出: false示例 2: 输入: 1->2->2->1 输出: true进阶:你能否用 O(n) 时间复杂度和 O(1) 空间复杂度解决此题?分析回文的概念:回文就是说链表对称。大体思路:找到链表的中间节点,把链表分成前后两部分;【通过快慢指针找到链表的中间节点,注意链表长度为奇数的情况】反转后半部分链表;

SparkSQL数据DataFrame向ElasticSearch写入的优化,亲测提高数倍_a904364908的博客-程序员秘密

前言最近sparksql写入elasticsearch数据量逐渐增大,所以需要优化写入的速度.先说一下集群情况.es集群:elasticsearch-6.2.4, 机器配置:5台4C*16G阿里云机器.spark: 2.1.3.优化方向从spark参数和es索引两个方向进行优化spark参数es提供了一套完整的hadoop生态支持.可以完整的支持spark读写es.在...

Guava缓存(一)基础_雪孤城的博客-程序员秘密

Guava缓存,谷歌开源的一种本地缓存,使用本节点的内存来存储的,实现原理类似于ConcurrentHashMap

重装 Mac 系统后的安装软件和个人配置[个人习惯]_偕臧x的博客-程序员秘密

文章目录常用软件配置PicGoistat menus 6.4.0Telegram 中文语言GitHub 加载图片丢失解决方案配置环境`Homebrew``zsh``Git``Git` 代理`vim``nvm``cnpm``Hexo`简 述: 每次重装 MacOS 后,自用安装软件清单。  常用软件必须V2rayU、Keka 压缩解压、BetterSnapTool 四个窗口、 istat menus 6.4.0 官网 + 秘钥、Xee³ 3.5.3 、MonitorControl 外接显示

【MATLAB】 circshift函数_十子木的博客-程序员秘密

a=[1 2 3; 4 5 6;7 8 9];b=[-1 -2 -3;-4 -5 -6;-7 -8 -9];c=[10 20 30; 40 50 60;70 80 90];YP6(:,:,1)=aYP6(:,:,2)=bYP6(:,:,3)=cYP_1=circshift(YP6,[0 0 -1])YP_2=circshift(YP6,[1 0 0])YP_3=circshift(YP6,[0 1 0])YP6(:,:,1) = 1 2 3 4