什么是心血漏洞
2014年4月7日,什心安全研究员斯蒂芬·托马斯在开源加密库OpenSSL里发现了一个要命的血漏漏洞。这个漏洞允许攻击者直接从服务器内存里读取数据——包括私钥、什心密码、血漏会话令牌,什心甚至用户发过的血漏聊天记录。因为它读取的什心是内存中随机64KB的数据,就像从保险柜里偷走一把钥匙,血漏而保险柜主人浑然不觉。什心
这个漏洞被命名为“心血”(Heartbleed),血漏因为问题出在OpenSSL实现的什心TLS心跳扩展(Heartbeat Extension)上。心跳机制本意是血漏让通信双方确认对方还活着——客户端发送一个“心跳请求”,里面包含一段数据和长度,什心服务器收到后原样返回。血漏但OpenSSL的什心实现有个致命缺陷:它只检查了收到的数据包是否包含足够长的长度字段,却从未验证这个长度是否与实际数据相符。
攻击者可以发送一个长度声明为65535字节、但实际只包含1字节数据的请求。服务器收到后,会按照声明的长度去内存里读取响应数据,于是那额外的65534字节就来自服务器进程的内存空间。这些内存里可能存着别的用户请求、数据库密码、SSL私钥——全被当作“心跳响应”打包发给攻击者。整个过程悄无声息,服务器日志里不会留下任何异常痕迹。
更糟的是,这个漏洞潜伏了整整两年。OpenSSL是互联网加密的基础设施,全球超过三分之二的网站服务器用它来保护HTTPS连接。从雅虎到Stack Overflow,从加拿大税务局到美国联邦政府网站,几乎无一幸免。攻击者可以反复发送心跳请求,每次读取64KB内存,日积月累就能拼凑出完整的私钥。有了私钥,他们就能解密所有历史流量,伪装成合法服务器,甚至篡改网页内容。
我印象最深的是,当时有个安全专家在博客里打了个比方:这就像你住在一家酒店,房门锁质量很好,但门框上有个洞,任何人路过都能伸手进去摸走你房间里的任何东西。酒店管理员(OpenSSL维护团队)完全不知道这个洞的存在,直到有个客人(研究员)无意间发现了它。
修复本身很简单——补丁只改了几行代码,增加了一个长度校验。但真正的教训在于,如此核心的软件竟然依赖少数几个志愿者维护。OpenSSL团队当时只有两名全职开发人员,每年预算不到一百万美元,却守护着全球互联网的信任基石。心血漏洞曝光后,Linux基金会成立了核心基础设施倡议组织,大公司们才开始认真掏钱资助这些“数字地基”项目。
现在回看,这个漏洞的名字起得恰如其分——它确实让整个互联网行业感到一阵刺痛,仿佛心脏被猛地揪了一下。但讽刺的是,绝大多数普通用户根本不知道发生过什么,他们只是看到一些网站要求改密码,然后照做了。技术世界里的惊涛骇浪,落到现实生活里,往往只是一条不起眼的通知。
(责任编辑:时尚)













