回归本源

什么是Heartbleed错误,如何工作以及如何修复?

导致Heartbleed漏洞的错误可以追溯到开源代码库OpenSSL中的一行代码。这里 's what you need to know now.

回归本源

展示更多

Heartbleed是2014年4月发现的一个漏洞;它使攻击者能够以前所未有的方式访问敏感信息,并且该信息存在于数千台Web服务器上,包括那些运行Yahoo等主要网站的服务器。

令人流血的是由OpenSSL(一个实施了 传输层安全性(TLS)和安全套接字层(SSL) 协议。简而言之,恶意用户可以轻易诱使易受攻击的Web服务器发送敏感信息,包括用户名和密码。

TLS / SSL标准对于现代Web加密至关重要,尽管缺陷出在OpenSSL实现中,而不是在标准本身中,但OpenSSL的使用如此广泛-当该错误被公开时,它就会 影响了所有SSL服务器的17% -引发了安全危机。

Heartbleed如何运作

了解Heartbleed漏洞(CVE-2014-0160)的工作原理,您需要了解TLS / SSL协议的工作方式以及计算机如何在内存中存储信息。

TLS / SSL协议的一个重要部分是所谓的 心跳。 从本质上讲,这就是两台计算机相互通信的方式,即使用户当前未下载或上传任何东西,彼此也可以知道它们仍然处于连接状态。有时,其中一台计算机会发送加密的数据,称为 心跳请求 到另一个。第二台计算机将以完全相同的加密数据进行回复,证明连接仍然存在。至关重要的是,心跳请求包括有关其自身长度的信息。

因此,例如,如果您正在阅读Yahoo邮件,但一段时间没有做任何事情来加载更多信息,则您的网络浏览器可能会向Yahoo的服务器发送信号,说:“这实际上是一条40 KB的消息,即将得到。把这一切都还给我。” (请求的最大长度为64 KB。)当Yahoo的服务器收到该消息时,它们会分配一个 内存缓冲区 —可以存储信息的物理内存区域,其长度为40 KB(基于报告的心跳请求的长度)。接下来,它将来自请求的加密数据存储到该内存缓冲区,然后从中读取数据并将其发送回Web浏览器。

那应该是这样的。之所以出现Heartbleed漏洞,是因为OpenSSL对心跳功能的实现缺少一项关键的保护措施:接收到心跳请求的计算机从未检查过以确保该请求实际上与它声称的一样长。因此,如果请求说它是40 KB长,但实际上只有20 KB,则接收方计算机会留出40 KB的内存缓冲区,然后存储它实际收到的20 KB,然后发回该20 KB 接下来的20 KB内存中发生的一切。额外的20 KB数据是攻击者现在已从Web服务器提取的信息。

这是操作的关键部分。即使计算机完成了信息处理,它仍会保留在内存缓冲区中,直到出现其他情况将其覆盖为止。如果您是攻击者,则无法提前知道刚从服务器上抢走的20 KB中可能隐藏的内容,但是有一个 可能性数量。这可能是胡言乱语或无用的残骸。您可以获得SSL私钥,该私钥将允许解密与该服务器的安全通信(这不太可能,但这将是攻击者的圣杯)。更常见的是,您可以取回已提交给服务器上运行的应用程序和服务的用户名和密码,这将使您能够登录并获得访问权限。

兰德尔·芒罗(Randall Munroe)的网络漫画 xkcd 以使难于理解的科学概念而闻名,尤其是在Munroe的专业计算机科学领域。 2014年的漫画 在总结Heartbleed漏洞如何以简洁的方式工作方面做得很好。

流血的代码

导致Heartbleed的编码错误可能是 追溯到单行代码:

memcpy(bp, pl, payload);

memcpy() is the command that copies data. bp is the place it's copying it to, pl is where it's being copied from, and payload is the length of the data being copied. The problem is that there's never any attempt to check if the amount of data in pl is equal to the value given of payload.

这里最具有讽刺意味的是,OpenSSL是开源软件。任何人都可以查看该代码,大概有数百人可以查看,但是没有人注意到相当基本的编码错误。

令人流血的攻击

尚不清楚在广泛发布之前是否对Heartbeat漏洞进行了任何实际利用。安全公司可能检测到一些未遂攻击 早在2013年 正在探索该漏洞-有些人认为攻击者 政府安全机构.

2014年4月之后,当该漏洞公开时,公司争先恐后地更新其系统,但黑客在某些情况下仍能够利用它。一个 对偷窃患者数据的社区卫生系统的攻击 罪魁祸首归咎于Heartbleed, 来自加拿大税务局的数百个社会ID号码.

令人流血的修复

漏洞一经宣布,便立即为OpenSSL推出了补丁程序,并且很可能在此之前已更新了以前最易受攻击的服务器,但是如果不确定,可以毫无疑问地进行测试-某些服务器总是有可能的对于您来说很重要的一点是,在没有适当升级的情况下,您已经拼搏了多年。 Pentest-tools.com有一个 免费的基于网络的测试 允许您输入URL以发现服务器是否已正确打补丁。

解决Heartbleed漏洞的方法是升级到最新版本的OpenSSL。您可以在以下网址找到所有最新代码的链接: OpenSSL网站.

如果您对实现此修复程序的代码感到好奇,则可以查看一下-毕竟OpenSSL是开源的:

* Read type and payload length first */

if (1 + 2 + 16 > s->s3->relent)

return 0;

/* silently discard */

hbtype = *p++;

n2s(p, payload);

if (1 + 2 + payload + 16 > s->s3->rrec.length)

return 0;

/* silently discard per RFC 6520 sec. 4 */

pl = p;

该代码的第一部分确保心跳请求不是0 KB,这可能会导致问题。第二部分确保请求实际上与它说的一样长。

如果发现您控制下的服务器易受攻击一段时间,则除了更新OpenSSL代码之外,还有更多事情要做。例如,您应该更改服务器使用的SSL证书,因为它们可能已被泄露而没有留下痕迹。行人更多,但仍然很重要:在系统上拥有帐户的用户应更改其密码。

进一步了解Heartbleed:

版权© 2017 IDG通讯,Inc.