历史上的重大软件BUG启示录 第2篇---心脏滴血

2155人阅读 评论(0) 收藏 举报
分类:


(图片来源于网络)

      OpenSSL"心脏滴血"漏洞于2014年4月7号被曝光,“黑客只要对存在这一漏洞的网站发起攻击,每次读取服务器内存中64K数据,不断的迭代获取,就能获取程序源码、用户http原始请求、用户cookie甚至明文帐号密码等敏感信息”。全球三分之一的以"https"开头的网站受到影响,包括大批网银、购物网站、电子邮件等。

      引起这个漏洞的原因是服务器没有对客户端发来的心跳数据做严格检测。

      客户端和服务器正式通讯前,先向服务器发送一个心跳信号包来查询服务器是否在线。发送的心跳信号包中包含信息的长度和信息文本,如果服务器在线,就将收到的信息回送给客户端。比如客户端向服务器发送心跳包,告诉服务器我发送了5字节信息,信息内容是“Hello”,然后服务器就会向客户端回送“Hello”。

      或许你会疑惑,这样做没问题啊!是的,正常情况下没问题,但是服务器在回送的过程中,并没有验证信息的实际字节个数,而是直接根据客户端发来的信息长度字段来决定向客户端回送多少字节的信息。这样就带来了问题,比如客户端向服务器发送心跳包,告诉服务器我发送了64KB信息,信息内容是“”,你没看错,这也不是误写,内容就是为空!但服务器却没有验证到底有没有信息内容,也没有验证信息内容的字节数和信息长度字段是否吻合!服务器仍然使用memcpy函数将从指向保存信息内容的地址处开始的64K内存信息全部复制出来,然后回送给客户端。看,服务器内存中的数据就这样被送到了客户端的机器上!

      修复代码中最重要的一部分如下所示:

if (1 + 2 + 16 > s->s3->rrec.length)
     return 0; /* silently discard */
hbtype = *p++;  
n2s(p, payload); 
if (1 + 2 + payload + 16 >s->s3->rrec.length)
     return 0; /* silently discard per RFC 6520 sec. 4 */
pl = p;

      主要做了两件事:第1行代码将信息文本为空的情况排除,第5行代码将信息长度大于信息文本长度的情况排除。

      写《深入理解计算机系统》的Bryant曾说过:任何到外部环境的接口都应该是“防弹的”!OpenSSL代码显然忽视了这一点。       

      一个未严格检测的入口参数,却置成千上万的服务器于危险之中。

查看评论

历史上的重大软件BUG启示录 第2篇---心脏滴血

(图片来源于网络) OpenSSL"心脏滴血"漏洞于2014年4月7号被曝光,“黑客只要对存在这一漏洞的网站发起攻击,每次读取服务器内存中64K数据,不断的迭代获取,就能获取程序源码、用户http原始...
  • zhzht19861011
  • zhzht19861011
  • 2016-09-02 21:42:05
  • 2155

冲出软件Bug的泥潭

 ■ 今年4月,一个软件的小问题让美国航空集团公司损失了数千美元,当时一些机票的价格被错误地定为1.86美元;■ 在最近的一次美国总统选举中,计票错误也出现在 ...
  • wangchinaking
  • wangchinaking
  • 2005-12-29 09:14:00
  • 1714

历史上的重大软件BUG启示录 第4篇---Google的疏忽

(图片来源于网络) 很多的软件Bug源自于输入错误,即便像Google这样的国际大公司。 在Google上搜索的时候,有些结果列表项中带有一条警告,表明Google认为它带有恶意代码。 如果你在200...
  • zhzht19861011
  • zhzht19861011
  • 2016-09-04 11:49:11
  • 2290

历史上的重大软件BUG启示录第7篇---美国商务航空公司的烦恼

(图片来源于网络)         2004年12月25日,美国商务航空公司(Comair)由于计算机系统瘫痪,不得不启动“有限”飞行计划,取消圣诞节期间飞往119个城市的1100个航班,给3万名乘客...
  • zhzht19861011
  • zhzht19861011
  • 2016-12-24 08:56:25
  • 1789

那些史上留名的软件 bug 们

来源:雷锋网    参考原文:http://www.leiphone.com/news/201512/j5VB5PajMkedwBjJ.html 作者: 知社学术圈 文章地址:https://l...
  • robertsong2004
  • robertsong2004
  • 2015-12-07 15:32:45
  • 423

嵌入式软件可靠性设计的一些理解

0.前言           设备的可靠性涉及多个方面:稳定的硬件、优秀的软件架构、严格的测试以及市场和时间的检验等等。这里着重谈一下作者自己对嵌入式软件可靠性设计的一些理解,通过一定的技巧和方法提...
  • zhzht19861011
  • zhzht19861011
  • 2013-12-04 15:00:51
  • 10911

一次心脏滴血漏洞的bug处理过程

一个p2p平台,一次内部安全事件的处理过程,一个关乎投资人利益的网络投资平台,一个无知者无畏的年代。口口声声对外宣称安全、可靠、高收益、……...
  • foryouslgme
  • foryouslgme
  • 2016-06-15 11:53:54
  • 1564

OpenSSL “心脏滴血”漏洞

漏洞描述 : OpenSSL软件存在“心脏出血”漏洞,该漏洞使攻击者能够从内存中读取多达64 KB的数据,造成信息泄露。   漏洞危害: 可被用来获取敏感数据,包括会话Se...
  • momo_mutou
  • momo_mutou
  • 2015-08-07 13:05:26
  • 843

《疯狂农场》带来的启示

           1。Strong man stands up for himself。The Stronger man Stands up for others。强者保护自己,更强的保护他人。 ...
  • cctt_1
  • cctt_1
  • 2006-12-17 18:36:00
  • 1684

编写优质嵌入式C程序

前言:这是一年前我为公司内部写的一个文档,旨在向刚踏入嵌入式编程的年轻工程师们介绍如何在裸机环境下编写优质嵌入式C程序。本文通过一些我遇到的、同事遇到的或者一些前人遇到的典型案例来分析嵌入式C中的一些...
  • zhzht19861011
  • zhzht19861011
  • 2015-05-05 21:26:30
  • 33898
    个人资料
    专栏达人 持之以恒
    等级:
    访问量: 169万+
    积分: 1万+
    排名: 1162
    博客专栏
    最新评论
    友情链接