2天时间,聊今年最热的 Agent、上下文工程、AI 产品创新等话题。2025 年最后一场~ 了解详情
写点什么

五年了,Heartbleed 漏洞仍未修复

  • 2019-12-13
  • 本文字数:3036 字

    阅读完需:约 10 分钟

五年了,Heartbleed漏洞仍未修复


五年了,Heartbleed 安全漏洞补丁仍未全面普及。


Heartbleed 安全漏洞在 2012 年被正式引入 OpenSSL 加密库,但直到 2014 年才被发现并得到修复。但直到五年之后的今天,仍有众多系统未能有效安装修复补丁。


本文希望为 IT 团队提供必要的信息,帮助大家判断是否要使用 Heartbleed 漏洞的修复补丁。但这里要提醒一句:即使安装补丁,您的用户数据仍有可能受到其他攻击的影响。

Heartbleed 安全漏洞是怎么回事?

Heartbleed 是 OpenSSL 加密库中的一项代码缺陷,具体如下:


memcpy(bp, pl, payload);


2014 年,研究人员在流行密码库 OpenSSL 当中发现一项安全漏洞。顺带一提,OpenSSL 负责为开发人员提供用于实现安全套接字层(SSL)与传统层安全性(TLS)协议的工具与资源。


目前,各类网站、电子邮件、即时消息(IM)应用程序以及虚拟专用网络(VPN)都依赖 SSL 与 TLS 协议,用以保障互联网上通信内容的安全性与私密性。因此,只要使用 OpenSSL 组件,您的应用程序就会受到 Heartbleed 漏洞的影响。在漏洞曝光之时,已经有高达 17%的 SSL 服务器被划入影响范围。


在漏洞被发现之后,很快得到 CVE-2014-0160 这一官方漏洞编号。不过在民间,大家普遍将其称为 Heartbleed。实际上,这个朗朗上口的名号来自 Codenomicon 的一位工程师,同时也是此项漏洞的发现者之一。


Heartbleed 这个名称,表达的是该安全漏洞的源头——RFC 6520 Heartbleed 扩展的一项错误实现。该扩展当中封装有 OpenSSL 的 SSL 与 TLS 协议。

Heartbleed 安全漏洞的表现

Heartbleed 安全漏洞会削弱 SSL 与 TSL 两大常见互联网通信协议的安全性。受到 Heartbleed 影响的网站,允许潜在的攻击者读取用户的访问历史。换言之,精心谋划的网络罪犯可以借此找出用户的加密密钥。


一旦加密密钥外泄,恶意攻击者将能够获取入侵系统所必需的凭证(包括用户名与密码)。在系统内部,入侵者还能利用失窃凭证所对应的授权级别发动更多后续攻击、窃听通信内容、顶替用户并夺取数据。

Heartbleed 的工作原理

Heartbleed 漏洞会削弱 Heartbleed 扩展的安全水平,进而损害 SSL 与 TLS 服务器同客户端之间的通信安全。


在理想情况下,Heartbleed 扩展本应负责验证服务器请求,进而保护 SSL 与 TLS 协议。具体来讲,它允许通信端计算机发送 Heartbleed 请求消息。


每条消息中都包含有效载荷(一条包含已传输信息的文本字符串),外加一个代表有效载荷存储长度的数字(通常为 16 位整数)。在提供这些请求信息之前,Heartbleed 扩展首先需要进行边界检查,验证输入请求并返回所请求的有效载荷长度。


OpenSSL Heartbleed 扩展中的缺陷,导致验证流程中出现了一个漏洞。事实上,Heartbleed 扩展程序并没有进行边界检查,而是分配了一个没有经过验证的内存缓冲区。恶意攻击者可以借此发送请求,并接收最多 64 KB 的内存缓冲区内可用信息。


内存缓冲区是临时的内存存储位置,其存在的目标在于存储传输中的数据。缓冲区内可能包含多种不同数据类型,代表着不同的信息存储形式。在本质上,内存缓冲区会在信息被发送至指定位置之前,一直保留这部分信息内容。


内存缓冲区不会进行数据整理,而是对数据进行分批存储。因此,内存缓冲区内可能包含敏感与财务信息,外加凭证、Cookie、网站页面与图像、数字资产以及任何传输中的数据。当恶意攻击者利用 Heartbleed 漏洞时,他们会通过欺诈手段通过 Heartbleed 扩展获取内存缓冲区中的所有可用信息。

Heartbleed 的修复情况

谷歌公司的 Bodo Moeller 与 Adam Langley 为 Heartbleed 创建了修复程序。他们编写了代码,提醒 Heartbleed 扩展应忽略一切除有效载荷必要数据之外的 Heartbleed 请求信息。


下面来看 Heartbleed 修复代码示例:


if (1 + 2 + payload + 16 > s->s3->rrec.length) return 0; /* silently discard per RFC 6520 sec. 4 */

Heartbleed 漏洞给 OpenSSL 带来的影响

Heartbleed 安全漏洞的曝光在世界范围内引起了恐慌。在安装这一修复补丁之后,关注者们开始积极寻求事件的缘由。在对 OpenSSL 项目进行一番严格审查之后,人们意识到这套广受欢迎的加密库仅由两人负责维护,且相关预算少得可怜。


这一发现,给我们带来了两项积极的举措,甚至在一定程度上改变了开源的格局:


  • 组织意识到支持开源项目的重要性。因为 OpenSSL 的两名成员只能用自己的积蓄支持这项事业。另一方面,使用开源成果的组织完全可以提供保障项目安全所需要的资源。

  • 为了资助重要的开源项目,Linux 启动了核心基础设施设计(CII)。CII 选定那些最关键的开源项目,特别是对互联网以及其他信息系统具有重要影响的项目。CII 收取大型组织的捐款,并以规划及赔款的形式将其交付至各开源软件项目手中。


与以往引发变革的无数危机一样,Heartbleed 漏洞当然也带来了负面影响:漏洞品牌开始兴起。Heartbleed 漏洞就是由谷歌与 Codenomicon 两个实体同时发现的。


谷歌方面选择不公开披露这项漏洞,而仅与 OpenSSL 贡献者进行信息共享。但在另一方面,Condemonicon 则选择将消息发布给公众。他们命名了这一漏洞,甚至创建了徽标与网站,并开始以营销活动的思路投入大规模宣传。


在接下来的几年中,很多公开曝光的漏洞都得到了如同知名产品般的对待——公关公司为其树立品牌,营销机构部署品牌名称、徽标甚至是专门的网站。虽然这些作法在一定程度上提高了公众对于零日漏洞的关注度,但同时也引发了巨大的潜在混乱。


如今,安全专家与软件开发人员正忙着处理数以千计的漏洞。为了给系统提供适当保护,他们需要首先确定漏洞的优先级。以此为基础,他们才能断言哪些漏洞需要立即修复,哪些可能稍后再行处理。有时候,那些被标榜为高危的“知名”安全漏洞,其实并没有那么重要。


毕竟在面对安全漏洞时,相关各方不一定总有充裕的时间、技能以及资源来判断其确切危险程度。因此,专业人士们应该集中精力为那些有利于公众的方式开发修复补丁,而非将安全漏洞变成一种营销噱头。

Heartbleed 的现状

如今,距离 Heartbleed 漏洞的最初披露已经过去了五年,但它仍然广泛存在于众多服务器及系统当中。当然,OpenSSL 的最新版本已经做好了修复,但尚未(或者无法)升级至修复版本的 OpenSSL 系统仍会受到这项漏洞的影响,且极易受到攻击。


对于恶意攻击者而言,只要能找到 Heartbleed 漏洞,接下来就一切好办:他们可以自动进行检索,然后轻松完成入侵。在找到这类易受攻击的系统之后,利用过程相当简单,由此获得的信息及/或凭证也能帮助他们快速推进其他后续攻击。

装补丁,还是不装补丁,这是个问题

Heartbleed 漏洞属于因人为错误而出现的 OpenSSL 安全缺陷。由于 OpenSSL 的广泛普及,不少应用程序都受到直接影响,致使恶意攻击者能够轻松获取大量数据。


在发现漏洞之后,谷歌员工找到了解决方案,并向 OpenSSL 贡献者提供了相关代码。在此之后,贡献者又进一步引导 OpenSSL 用户进行版本升级。听起来一切都很美好。


但截至目前,即使是完成了 OpenSSL 版本升级,由于代码库本身未经编辑,我们仍然能够从众多应用程序、系统以及设备当中找到 Heartbleed 漏洞。如果大家担心自己可能受到影响,可以点击此处测试您的系统。万一结果显示您的设备无法支持修复补丁,大家应当尽快采取其他措施以缓解或者消除风险。


服务器或者云平台的修复工作一般比较简单,但物联网设备就麻烦一些,可能需要单独为其安装补丁,甚至配合更高级的风险处理技术。在这方面,建议大家尽快与系统管理员联系,确定如何消除 Heartbleed 这个老漏洞可能带来的新问题。


原文链接


Five years later, Heartbleed vulnerability still unpatched


2019-12-13 18:233908

评论

发布
暂无评论
发现更多内容

Harbor 2.0的飞跃: OCI 兼容的工件仓库

亨利笔记

Kubernetes 容器 k8s Harbor 镜像

如果你觉得学习 Git 很枯燥,那是因为你还没玩过这款游戏!

GitHubDaily

git GitHub 编程 程序员 开发者工具

松哥手把手带你入门 Spring Security,别再问密码怎么解密了

江南一点雨

Java spring Spring Boot spring security

业余前端的日常

顿晓

学习 大前端 日常 专家 知识体系

对于程序员,那些既陌生又熟悉的计算机硬件

架构师修行之路

微软 编程 程序员 cpu 架构师

聊聊我对技术一些性质的认识

Tanzv

技术 思考 新人

严选合伙人(二)

Neco.W

创业 重新理解创业 合伙人

从一次排查ES线上问题得出的总结——熔断机制

罗琦

elasticsearch 源码分析 circuit break 熔断

sync.Map源码分析

陈思敏捷

源码 源码分析 Go 语言

谈谈控制感(5):怎么破控制感损失的局

史方远

职场 心理 成长

松哥手把手教你定制 Spring Security 中的表单登录

江南一点雨

Java spring Spring Boot spring security

让你高效工作与学习的免费工具(1)

石云升

高效工作 效率工具 工具

Python 核心技术与进阶 list & tuple

Bonaparte

面试官:小伙子,听说你看过ThreadLocal源码?(万字图文深度解析ThreadLocal)

一枝花算不算浪漫

源码 并发编程 ThreadLocal

OpenResty部署配置和日志切割

wong

nginx centos openresty

MySQL常用权限说明

一个有志气的DB

MySQL 用户研究

更聪明地学习,而不是苦读——《如何高效学习》

mzlogin

学习

如何在一台计算机上安装多个 JDK 版本

mghio

Java jdk 版本管理工具

设计模式之观察者模式

设计模式

一文带你看清HTTP所有概念

苹果看辽宁体育

HTTP

Java新技术:封闭类

X.F

Java 架构 编程语言

Redis稳定性实践

心平气和

redis 缓存 稳定性

《零基础学 Java》 FAQ 之 7-Java 中的内存是怎么分配的

臧萌

Java JVM

Rust 与区块链四月月刊

Aimee 阿敏

区块链 rust 加密货币 crypto

回“疫”录(18):536公里的路

小天同学

疫情 回忆录 现实纪录 纪实 返程

Android | Tangram动态页面之路(二)介绍

哈利迪

android

Xtrabackup的安装使用

一个有志气的DB

MySQL 工具 数据的分片和备份

游戏夜读 | Scikit-learn迎来0.21之前

game1night

《后浪》产品经理篇(恶搞版)

静陌

产品经理 后浪

尽管HTTP/3已经来了,HTTP/2也得了解啊

清远

网络协议 HTTP

Mac 使用笔记

FeiLong

五年了,Heartbleed漏洞仍未修复_软件工程_Gilad Maayan_InfoQ精选文章