作者丨Gilad Maayan
译者丨核子可乐
策划丨Tina
五年了,Heartbleed 安全漏洞补丁仍未全面普及。
Heartbleed 安全漏洞在 2012 年被正式引入 OpenSSL 加密库,但直到 2014 年才被发现并得到修复。但直到五年之后的今天,仍有众多系统未能有效安装修复补丁。
本文希望为 IT 团队提供必要的信息,帮助大家判断是否要使用 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 安全漏洞会削弱 SSL 与 TSL 两大常见互联网通信协议的安全性。受到 Heartbleed 影响的网站,允许潜在的攻击者读取用户的访问历史。换言之,精心谋划的网络罪犯可以借此找出用户的加密密钥。
一旦加密密钥外泄,恶意攻击者将能够获取入侵系统所必需的凭证(包括用户名与密码)。在系统内部,入侵者还能利用失窃凭证所对应的授权级别发动更多后续攻击、窃听通信内容、顶替用户并夺取数据。
Heartbleed 漏洞会削弱 Heartbleed 扩展的安全水平,进而损害 SSL 与 TLS 服务器同客户端之间的通信安全。
在理想情况下,Heartbleed 扩展本应负责验证服务器请求,进而保护 SSL 与 TLS 协议。具体来讲,它允许通信端计算机发送 Heartbleed 请求消息。
每条消息中都包含有效载荷(一条包含已传输信息的文本字符串),外加一个代表有效载荷存储长度的数字(通常为 16 位整数)。在提供这些请求信息之前,Heartbleed 扩展首先需要进行边界检查,验证输入请求并返回所请求的有效载荷长度。
OpenSSL Heartbleed 扩展中的缺陷,导致验证流程中出现了一个漏洞。事实上,Heartbleed 扩展程序并没有进行边界检查,而是分配了一个没有经过验证的内存缓冲区。恶意攻击者可以借此发送请求,并接收最多 64 KB 的内存缓冲区内可用信息。
内存缓冲区是临时的内存存储位置,其存在的目标在于存储传输中的数据。缓冲区内可能包含多种不同数据类型,代表着不同的信息存储形式。在本质上,内存缓冲区会在信息被发送至指定位置之前,一直保留这部分信息内容。
内存缓冲区不会进行数据整理,而是对数据进行分批存储。因此,内存缓冲区内可能包含敏感与财务信息,外加凭证、Cookie、网站页面与图像、数字资产以及任何传输中的数据。当恶意攻击者利用 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 项目进行一番严格审查之后,人们意识到这套广受欢迎的加密库仅由两人负责维护,且相关预算少得可怜。
这一发现,给我们带来了两项积极的举措,甚至在一定程度上改变了开源的格局:
组织意识到支持开源项目的重要性。因为 OpenSSL 的两名成员只能用自己的积蓄支持这项事业。另一方面,使用开源成果的组织完全可以提供保障项目安全所需要的资源。
为了资助重要的开源项目,Linux 启动了核心基础设施设计(CII)。CII 选定那些最关键的开源项目,特别是对互联网以及其他信息系统具有重要影响的项目。CII 收取大型组织的捐款,并以规划及赔款的形式将其交付至各开源软件项目手中。
与以往引发变革的无数危机一样,Heartbleed 漏洞当然也带来了负面影响:漏洞品牌开始兴起。Heartbleed 漏洞就是由谷歌与 Codenomicon 两个实体同时发现的。
谷歌方面选择不公开披露这项漏洞,而仅与 OpenSSL 贡献者进行信息共享。但在另一方面,Condemonicon 则选择将消息发布给公众。他们命名了这一漏洞,甚至创建了徽标与网站,并开始以营销活动的思路投入大规模宣传。
在接下来的几年中,很多公开曝光的漏洞都得到了如同知名产品般的对待——公关公司为其树立品牌,营销机构部署品牌名称、徽标甚至是专门的网站。虽然这些作法在一定程度上提高了公众对于零日漏洞的关注度,但同时也引发了巨大的潜在混乱。
如今,安全专家与软件开发人员正忙着处理数以千计的漏洞。为了给系统提供适当保护,他们需要首先确定漏洞的优先级。以此为基础,他们才能断言哪些漏洞需要立即修复,哪些可能稍后再行处理。有时候,那些被标榜为高危的“知名”安全漏洞,其实并没有那么重要。
毕竟在面对安全漏洞时,相关各方不一定总有充裕的时间、技能以及资源来判断其确切危险程度。因此,专业人士们应该集中精力为那些有利于公众的方式开发修复补丁,而非将安全漏洞变成一种营销噱头。
如今,距离 Heartbleed 漏洞的最初披露已经过去了五年,但它仍然广泛存在于众多服务器及系统当中。当然,OpenSSL 的最新版本已经做好了修复,但尚未(或者无法)升级至修复版本的 OpenSSL 系统仍会受到这项漏洞的影响,且极易受到攻击。
对于恶意攻击者而言,只要能找到 Heartbleed 漏洞,接下来就一切好办:他们可以自动进行检索,然后轻松完成入侵。在找到这类易受攻击的系统之后,利用过程相当简单,由此获得的信息及 / 或凭证也能帮助他们快速推进其他后续攻击。
Heartbleed 漏洞属于因人为错误而出现的 OpenSSL 安全缺陷。由于 OpenSSL 的广泛普及,不少应用程序都受到直接影响,致使恶意攻击者能够轻松获取大量数据。
在发现漏洞之后,谷歌员工找到了解决方案,并向 OpenSSL 贡献者提供了相关代码。在此之后,贡献者又进一步引导 OpenSSL 用户进行版本升级。听起来一切都很美好。
但截至目前,即使是完成了 OpenSSL 版本升级,由于代码库本身未经编辑,我们仍然能够从众多应用程序、系统以及设备当中找到 Heartbleed 漏洞。如果大家担心自己可能受到影响,可以点击此处测试您的系统。万一结果显示您的设备无法支持修复补丁,大家应当尽快采取其他措施以缓解或者消除风险。
服务器或者云平台的修复工作一般比较简单,但物联网设备就麻烦一些,可能需要单独为其安装补丁,甚至配合更高级的风险处理技术。在这方面,建议大家尽快与系统管理员联系,确定如何消除 Heartbleed 这个老漏洞可能带来的新问题。
原文链接:
https://www.reddit.com/r/programming/comments/e9khc6/five_years_later_heartbleed_vulnerability_still/
InfoQ 读者交流群上线啦!各位小伙伴可以扫描下方二维码,添加 InfoQ 小助手,回复关键字“进群”申请入群。大家可以和 InfoQ 读者一起畅所欲言,和编辑们零距离接触,超值的技术礼包等你领取,还有超值活动等你参加,快来加入我们吧!
点个在看少个 bug 👇