我听说过更多关于OpenSSL Heartbleed 攻击的信息,它利用了 TLS 心跳步骤中的一些缺陷。如果您还没有听说过,它可以让人们:
- 窃取 OpenSSL 私钥
- 窃取 OpenSSL 二级密钥
- 从受影响的服务器中检索多达 64kb 的内存
- 因此,解密服务器和客户端之间的所有流量
修复此问题的 OpenSSL 提交在此处
我有点不清楚-我读过的所有内容都包含有关应该如何处理的信息,但没有说明它是如何工作的。那么,这种攻击是如何工作的呢?
我听说过更多关于OpenSSL Heartbleed 攻击的信息,它利用了 TLS 心跳步骤中的一些缺陷。如果您还没有听说过,它可以让人们:
修复此问题的 OpenSSL 提交在此处
我有点不清楚-我读过的所有内容都包含有关应该如何处理的信息,但没有说明它是如何工作的。那么,这种攻击是如何工作的呢?
这不是TLS 的缺陷;这是 OpenSSL 中的一个简单的内存安全漏洞。
到目前为止,我遇到的最好的解释是 Sean Cassidy的博客文章诊断 OpenSSL Heartbleed Bug和本周的攻击: Matthew Green 的 OpenSSL Heartbleed。
简而言之,Heartbeat 允许一个端点执行“我正在向您发送一些数据,然后将其回显给我”。您同时发送长度图和数据本身。长度数字可达 64 KiB。不幸的是,如果您使用长度数字声称“我正在发送 64 KiB 的数据”(例如),然后只真正发送,比如说,一个字节,OpenSSL 会发回您的一个字节 - 和 64 KiB(减去一)来自RAM的其他数据。
哎呀!
这允许其他端点使用 OpenSSL 从进程中获取随机部分的内存。攻击者无法选择哪个内存,但如果他们尝试了足够多的时间,他们的请求数据结构很可能会出现在一些有趣的东西旁边,例如您的私钥、用户的 cookie 或密码。
除非您记录所有原始 TLS 连接数据,否则不会在任何地方记录此活动。
不好。
上面的 xkcd 漫画很好地说明了这个问题。
编辑:我在下面的评论中写道,心跳消息是加密的。这并非总是如此。您可以在 TLS 握手的早期发送心跳,在打开加密之前(尽管您不应该这样做)。在这种情况下,请求和响应都将是未加密的。在正常使用中,心跳应该总是稍后发送,加密,但大多数漏洞利用工具可能不会费心完成握手并等待加密。(谢谢,红男爵。)