喵说:Heartbleed

业界 作者:邮箱投递 2014-04-16 08:02:20
前言 前几天爆出一个高危漏洞,瞬间爆了国内外IT圈的G点,各大网站都在通宵加班补洞、各大媒体都在通宵采访写作、各路黑客都在通宵利用漏洞刷数据。关注的人很多,分析漏洞的人也不少,不爱凑热闹、凡事都慢半拍的喵自然也就没在这方面多放心思,就知道是服务端的一个漏洞,能够读取内存的数据,具体是怎么个情况没细看。后来看到有些带大V的外行发了一些有的没的解决方案,觉得有必要来通俗易懂的来阐述一下到底这个漏洞是怎么回事了。   从银行的故事到“心脏滴血” 去储蓄所存钱的时候,工作人员往往会问一句“存多少?”我觉得这句话完全可以入选“十大废话”,因为这个参考答案几乎是不被采信的,TA还会再点一遍。 偏偏就有这么一家的储蓄所,单(er)纯(bi)的工作人员问“存多少?”在获得答案之后直接将用户回答的数字填在了存单上,完全没有在意用户递过去的钱有多少,甚至有没有递过钱去都不在乎。所幸用户一直都很单纯,所以一直也没有造成损失,或者有损失也不知道。 有一天H到了柜台前,告诉工作人员“我要存5万块钱”,实际上一分钱也没有递过去,工作人员照例在存单上填了5万。然后H又告诉工作人员:“我要把5万块钱都取出来”,依然单(er)纯(bi)的工作人员就真的点了5万块钱给H。 上面那个精(cu)彩(zhi)万(lan)分(zao)的小故事所描述的事情就发生在了openssl身上。 你可以在脑海里完成这么一个替换过程: 储蓄所 -> 服务端系统 工作人员 -> openssl组件 储蓄所保险箱里的钱 -> 内存数据 存入的钱 -> 心跳包的内容 存款数字 -> “心跳包长度” 存款的过程 -> 客户端向服务端发送心跳包的过程 5万块钱(取款上限) -> 心跳包长度上限64KB(在银行取5万以上需要提前预约,所以即使你存入100万,如果不想惹来麻烦,最多也只能取5万,但是在程序里面unsigned int的范围严格控制在0~2^16) 工作人员誊写存款数字 -> openssl为心跳包分配内存块 取款的过程 -> 服务端向客户端返回openssl分配内存块内容的过程 H就是利用漏洞的黑客。 按照本来的设计思想,客户端向服务端发送的内容应该原封不动的返回才对,但是正如上面所描述的那样,如果客户端发送给服务端的“心跳包长度”虚高于心跳包实际长度时,服务端就会分配多余的内存空间,而多出的这部分内存空间里就可能有宝贝。 漏洞影响了谁? 具体这个漏洞会影响哪些用户呢?我们继续来扩展刚才的案例: 每天金库都会向储蓄所提供一笔钱(光进不出的是貔貅,虽然银行也很想当貔貅,不过用户显然是不会答应的)让用户来取钱。当然,每天也会有用户去储蓄所存钱。储蓄所当然也不会只有一个柜台办理存取款业务,所以有人办完了准备离开,有人正在办理,当然有人还在排队等号。此时H不怀好意的去柜台“存钱”、取钱了,还是上面描述的那个过程。H能够得到哪些用户的钱呢?金库的钱H肯定拿不到,还在排队的用户手里的钱H也肯定拿不到,业务还在办理中的钱还在柜台放着自然也不会被H拿到,只有金库每天分拨的部分和已经办理完业务的用户的钱才能被H拿到。 让我们再来进行一次替换: 金库 -> 服务端磁盘 用户 -> 各种正在运行的应用程序、服务 正在办理业务 -> 占有部分内存空间 办理完业务 -> 释放内存空间 等待办理业务 -> 还没有加载进内存 所以利用heart bleed漏洞,黑客不能拿到磁盘里的数据(金库里面的钱),只能拿到内存里的数据(储蓄所里面的钱),但并不是内存里所有的数据都能被黑客拿到,只有空闲内存的数据(已经办理完业务用户的钱或者金库分拨来的钱)才能被黑客拿到(而这里所说的内存占用和释放并不是说用户登录服务器时保存登录数据的内存空间就一定是被占用的,退出就一定是被释放的,实际上要比这个过程更为复杂,但是为了方便易懂,只能做这种简化)。 控制变量法标记有价值信息 上面的故事显然不够严谨,毕竟不是所有释放的内存都是有价值的,所以我们继续对故事进行扩展: 总行每天会分拨少量美元到储蓄所,来存美元的用户也不会很多,但是H假装存入很多5万美元(这是一年的取款上限啊。。。),之后拿着美元的存单告诉工作人员家里出了急事儿,老娘卧床不起、孩子重病瘫痪、老婆怀孕难产等等等等等,非要把钱取出来,但是储蓄所显然没有那么多美元现金(实际两三千刀都取不出来- -),于是就以人民币的方式支取,最后H获得了大量的人民币和少量的美元,高高兴兴的走了。 我们把美元当作敏感数据,比如用户的账号密码等等;人民币则是不敏感的数据,比如图片的部分二进制数据等等。 所以,并不是每次攻击黑客都可以获得敏感数据,也不是获取到敏感数据的时候64KB的存储空间里满满的都是敏感数据,而是大量无用数据夹杂着少量的敏感数据。这也不难解释,为什么黑客可能对某网站服务端发动一夜的攻击而只获得了几百个、几十个,甚至几个有用的账号。 结束语 但是!即便是只有少量的机会获得敏感数据,该漏洞依然是特别特别特别特别严重的漏洞!因为跟SSL相关的网站通常都是跟钱有关的网站,一旦发生数据泄漏,账户里的钱基本就是随意支取! 所以!如果你在4月1日到10日这段时间(尤其是4月7、8两天)登录了网银、电商、支付平台的账号,最好!赶紧!立刻!马上!更改密码!而不是把时间浪费在升级杀毒软件,纠结到底要不要把xp换成win7上去!   PS: 想了解更多关于heart bleed的大数据信息可以关注:http://www.zoomeye.org/lab/openssl 文中图片来源McAfee

关注公众号:拾黑(shiheibook)了解更多

[广告]赞助链接:

四季很好,只要有你,文娱排行榜:https://www.yaopaiming.com/
让资讯触达的更精准有趣:https://www.0xu.cn/

公众号 关注网络尖刀微信公众号
随时掌握互联网精彩
赞助链接