小错误引发大危机——心脏出血到底是什么?

心脏出血漏洞可以追根溯源到开源代码库OpenSSL里的一行代码上。本文将告诉你心脏出血的工作原理、利用状况以及怎样修复未打补丁的服务器

[[205279]]

2014年4月,心脏出血漏洞进入了公众视野,该漏洞为攻击者提供了前所未有的敏感信息获取途径,并且成千上万的网络服务器上存在心脏出血漏洞,就连雅虎这样的网络巨头也在此列。

开源代码库OpenSSL中的一个漏洞是引发心脏出血的罪魁祸首,该漏洞使用了传输层安全协议(TLS)和加密套接字协议层(SSL)协议。通过这个漏洞,简而言之,恶意用户可以很容易地诱骗一个脆弱的网络服务器发送用户名和密码等敏感信息。

心脏出血漏洞的工作原理

要了解心脏出血(CVE-2014-0160)的工作原理,你必须对TLS/SSL协议的运作模式和内存存储信息的方式有些许的认识。

TLS / SSL协议的一个重要组成部分被称为“心跳”。从本质上讲,心跳就是两台电脑互相通信从而让对方知道它们仍然相连,即使用户没有下载或上传任何东西。每过一段时间,一方会发送一个加密的数据到另一台电脑上,这被称为心跳请求。第二台电脑会回复同样的加密数据,来证明连接仍然存在。至关重要的是,心跳请求里包含自己的长度信息。

举个例子,如果你正在翻阅你的雅虎邮箱,但是在一段时间内没有进行加载信息到操作,网页浏览器可能会给雅虎的服务器发送一个信号,该信号本质上是“这是一个40KB的消息,你如果能获得它,把它发回给我”(请求信号可以最多可以达到64KB)。雅虎的服务器收到消息时,会分配一个内存缓冲区(一个物理内存区域用以存储信息),该区域的存储空间和心跳请求信号里的长度一致,即40KB。接下来,它会存储请求信号的加密数据到内存缓冲区,然后读取数据并将其发送回你的浏览器。

这是“心跳”的理想工作方式。心脏出血漏洞的出现是因为,OpenSSL的心跳功能缺少了一个至关重要的安全维护手段:计算机接受心跳请求时从不检查该请求和它声称的内容是否一致。如果请求说自身的长度是40KB,但其实只有20KB,接收电脑会预留40KB的内存缓冲区,然后只存储实际接受的20KB数据,然后发送回20KB的原数据和接下来20KB的未知内容内存。这额外的20KB的数据就是攻击者从网站服务器中提取的信息。

这是操作的关键部分。即使计算机处理过某些信息,这些信息会留在内存缓冲区直到新的信息出现并覆盖它。如果你是攻击者,你没有办法提前知道刚刚从服务器获取的20KB里究竟有什么,但是你可以推测出一些可能。这些信息有可能是胡言乱语或者无用而繁琐的东西,也有可能是SSL私钥,这会把服务器的安全通信暴露给攻击者(这个可能性很小,但是却是攻击者的最高追求)。更常见的是,攻击者可能会获得用户名和密码,服务器上的应用或服务收集并保存了这些信息,这将给予攻击者登录和访问渠道。

兰德尔·门罗的网络漫画xkcd因为将复杂的科学概念通过浅显易懂的形式表达而出名,门罗尤其擅长就计算机领域的问题作画。这个2014年诞生的漫画很好地总结了心脏出血漏洞是怎样简单而高效地运作的。

心脏出血错误代码

导致心脏出血漏洞的编程错误可以归于一行代码:

  1. memcpy(bp, pl, payload); 

memcpy()是复制数据的命令。bp是被复制的数据的存储区域,pl是被复制的数据的来源,payload是被复制的数据长度。问题在于,该命令没有检验pl复制的数据是否和payload给予的长度相符。

讽刺的是,OpenSSL是开源软件。任何人都可以查看代码,大概几百人曾访问过这段代码,但是没有人注意到相当基本的编码错误。

心脏出血的利用状况

我们至今不知道,在心脏出血广为人知前,是否有利用该漏洞的现实攻击。很可能早在2013年被某些安全公司侦测到的攻击就是基于该漏洞的,有人甚至认为这些攻击是由政府安全部门发起的。

在2014年4月心脏出血漏洞被公开后,企业争先恐后地更新了系统。但是黑客仍然能够在一些情况下利用该漏洞。一起对社区卫生系统的攻击被归咎于心脏出血漏洞,结果是病人数据被大量窃取,与之类似的是加拿大税务署数以百计的社会身份号码被盗。

如何修复心脏出血漏洞

心脏出血刚被揭露不久,OpenSSL就发布了补丁,而且百分之八九十的受影响服务器及时更新了补丁,但是,总会有些对你来说至关重要的服务器多年来从未进行合适的升级,因此,在你不明了某个服务器是否已经安全的情况下,不妨做个测试。Pentest-tools.com有一个免费的网络测试,你可以输入一个URL来检测服务器是否已经正确地修复了该漏洞。

修补心脏出血漏洞的方式是更新最新的OpenSSL版本,你可以在官网上获取相关链接。

因为OpenSSL是开源的,以下是修复过的代码,感兴趣的话你可以读一下:

  1. * Read type and payload length first */ 
  2.  
  3. if (1 + 2 + 16 > s->s3->relent) 
  4.  
  5. return 0; 
  6.  
  7. /* silently discard */ 
  8.  
  9. hbtype = *p++; 
  10.  
  11. n2s(p, payload); 
  12.  
  13. if (1 + 2 + payload + 16 > s->s3->rrec.length) 
  14.  
  15. return 0; 
  16.  
  17. /* silently discard per RFC 6520 sec. 4 */ 
  18.  
  19. ppl = p; 

代码的第一部分的功能是确定心跳请求的大小不是0KB,不然可能会出错。第二部分用来检验心跳的长度是否和它声称的相符。

如果你发现自己控制的某台服务器已经暴露在该漏洞下有一段时间,你需要做的就不仅仅是更新OpenSSL的代码了。例如,你应该改变SSL证书服务器,因为它们可能已经被无声无息地渗透了。此外,较为麻烦但重要的是:服务器上保有账户信息的用户应该更改密码。

【本文是专栏作者“”李少鹏“”的原创文章,转载请通过安全牛(微信公众号id:gooann-sectv)获取授权】

戳这里,看该作者更多好文

文章来源网络,作者:管理,如若转载,请注明出处:https://shuyeidc.com/wp/134044.html<

(0)
管理的头像管理
上一篇2025-02-28 23:34
下一篇 2025-02-28 23:35

相关推荐

  • 云服务器和云虚拟主机怎么选?云服务器和虚拟主机区别

    云服务器适合业务增长快、需弹性扩展的场景,而云虚拟主机适合预算有限、技术门槛低的小型静态网站或测试环境,二者核心区别在于资源独享性与运维复杂度,核心差异解析:从底层架构到使用体验很多人容易混淆这两者,觉得它们都是“买空间建站”,它们的底层逻辑完全不同,云服务器(ECS)就像是你租了一整栋别墅,水电网络独立,你想……

    2026-06-29
    0
  • 赣州智慧旅游招聘是真的吗?赣州旅游人才招聘信息

    中级岗位(3-5年经验)月薪范围通常在6000-10000元,这类岗位需要独立负责项目模块,如独立运营一个抖音账号,或维护一个景区小程序的功能迭代,具备成功案例的候选人议价能力较强,高级岗位(5年以上经验)月薪范围通常在10000-20000元,部分核心管理岗可达更高,这类人才需要具备战略规划能力,如制定整个景……

    2026-06-29
    0
  • 赣州智能物联网车位锁如何管理?智能车位锁管理系统多少钱

    赣州智能物联网车位锁管理的核心在于通过云端平台实现远程控锁、状态实时监控及自动计费,彻底解决传统车位“被占难管”与“找位难”的痛点,在赣州这样的城市,随着机动车保有量的持续增长,老旧小区、商业综合体以及私人固定车位的资源矛盾日益凸显,传统的机械地锁或简易遥控锁,不仅操作繁琐,更无法实现数据化管理,引入智能物联网……

    2026-06-29
    0
  • 赣州智能消防栓好用吗,智能消防栓多少钱一个

    赣州智能消防栓通过物联网技术实现实时监测与远程报警,能显著降低火灾响应时间并提升城市消防安全管理水平,是目前智慧城市建设中不可或缺的基础设施,赣州智能消防栓的核心价值与应用场景传统消防栓往往存在“看不见、摸不着、用不了”的痛点,在赣州这样地形复杂、老城区与新城区并存的区域,传统设施的管理难度极大,智能消防栓的出……

    2026-06-29
    0
  • 云服务器和物理机到底有啥区别?

    云服务器本质上是虚拟化资源池中的弹性实例,而传统物理服务器是独占的硬件实体,前者胜在弹性与运维便捷,后者强在物理隔离与性能稳定,具体选择取决于业务对成本、扩展性及安全合规的权衡,很多人初次接触服务器时,容易把“云服务器”和“传统物理服务器”混为一谈,觉得它们都是用来跑网站或存数据的盒子,这两者的底层逻辑完全不同……

    2026-06-29
    0

发表回复

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