术语表

Heartbleed (心脏滴血漏洞,CVE-2014-0160)

最后核实

定义

Heartbleed 是 2014 年公开的 OpenSSL 漏洞(CVE-2014-0160),出在 TLS 心跳扩展上,任何人都能借此读取服务器内存片段,甚至包括私钥。

Heartbleed 是 OpenSSL 在实现 TLS/DTLS 心跳扩展(RFC 6520)时漏掉的一处边界检查,影响 OpenSSL 1.0.1 至 1.0.1f,2014 年 4 月发布的 1.0.1g 修复了它。心跳请求包含一段载荷和一个声明的长度;有漏洞的版本不核对载荷实际有多长,而是按声明的长度回传数据,最多约 64 KB。每次请求都会泄露一块不同的进程内存,无需认证,也不会在常规日志里留下痕迹。它由 Google 安全团队的 Neel Mehta 和 Codenomicon 的工程师分别独立发现。

为什么重要

泄露的内存里可能有会话 Cookie、用户密码,某些情况下还有服务器私钥;漏洞公开后不久,就有研究者演示了从测试服务器中提取私钥。由于利用过程不留记录,运维者只能假定已被入侵。所以正确的处置远不止升级 OpenSSL:重新生成私钥,申请新证书并吊销旧证书,作废会话和 ticket 密钥,并提醒用户修改密码。Heartbleed 也让人们意识到,互联网大量依赖着资金匮乏的开源项目,Linux 基金会随后发起了核心基础设施计划(Core Infrastructure Initiative)等资助行动。

例子

openssl version
# 1.0.1 至 1.0.1f:受影响
# 1.0.1g 及之后,以及 0.9.8、1.0.0 分支:不受影响

nmap -p 443 --script ssl-heartbleed example.com

常见误区

  • Heartbleed 是 TLS 协议本身的缺陷。 它是 OpenSSL 的实现错误,自有代码的其他 TLS 库并不受影响。
  • 升级 OpenSSL 就处理完了。 补丁无法收回已经泄露的数据,可能泄露的东西,尤其是私钥,必须全部更换。
  • 今天它依然是常见风险。 现行系统多年前就不再带有漏洞版本的 OpenSSL,剩下的风险在于从未打补丁的老旧设备和嵌入式系统。

延伸阅读