当前位置:首页 > 时尚

4什么是心脏流血漏洞

2014年4月,什心一个叫Heartbleed的脏流漏洞被公开,整个互联网像被人在心脏上扎了一刀。血漏名字起得够直白——心脏流血。什心当时全球约有50万台服务器受影响,脏流从雅虎到GitHub,血漏从银行到政府网站,什心全都中招。脏流你平时登录的血漏https小锁图标,那一刻形同虚设。什心

问题出在OpenSSL身上。脏流这玩意儿是血漏个开源加密库,几乎所有需要加密通信的什心网站都在用它。它负责处理TLS握手、脏流数据加密解密这些脏活累活。血漏但偏偏在实现TLS心跳扩展(Heartbeat Extension)的时候,程序员犯了个低级错误。

心跳扩展是干嘛的?简单说,客户端和服务器之间要确认对方还活着,就发个小包问一句“你在吗”,对方原样回一句“我在”。这个包很小,通常就几十个字节。但OpenSSL的代码里,接收方没有检查发送方声明的包长度是否和实际发送的长度一致。

攻击者可以发一个“心跳请求”,声称自己发了64KB的数据,实际上只发了1KB。服务器傻乎乎地照做,从内存里把后面63KB的数据一并读出来,打包发回去。那63KB里有什么?可能是用户的密码、会话密钥、私钥,甚至是其他用户正在传输的信用卡号。每次攻击能泄露最多64KB内存,反复攻击就能把服务器内存翻个底朝天。

我印象最深的是当时有个工具叫“心脏出血检测器”,输入域名就能测。那几天朋友圈和技术群全在刷这个,有人测出某电商网站泄露了用户手机号,有人测出某邮箱服务把别人的邮件内容吐了出来。更离谱的是,加拿大税务局因为漏洞被利用,900个社保号码被盗,直接关了报税系统好几天。

为什么影响这么大?因为OpenSSL太底层了。它不是某个网站自己写的代码,而是被无数网站、App、路由器、甚至工业设备嵌入使用的公共组件。你修不了它,只能等它自己修。而且漏洞存在了两年多才被发现,这期间有多少数据被偷走,没人说得清。

修复方式其实很简单,就几行代码的事——加上长度检查。OpenSSL在2014年4月7日发布了1.0.1g版本,补上了这个洞。但问题是,全球几十万台服务器,谁来升级?很多管理员根本不知道自己的系统里跑着OpenSSL,更别说主动打补丁了。有些老旧设备甚至没法升级,只能报废。

这件事之后,开源社区开始反思。一个被全世界依赖的加密库,长期只有两三个全职开发者,靠捐款维持。心脏流血漏洞曝光后,Linux基金会搞了个“核心基础设施计划”,专门给这类关键开源项目筹钱。但说实话,到现在也没彻底解决——你手机里、电脑里跑着的开源代码,大部分还是几个志愿者在深夜维护。

心脏流血漏洞教会我们一件事:安全不是靠某个“锁”的图标就能保证的。你看到的https,背后可能是一堆没检查长度的C代码。互联网的信任链条比想象中脆弱得多,一个字符的疏忽,就能让整个系统流血不止。

分享到: