腾讯网首页·手机腾讯网·加入收藏·设为首页·导航
don't delete

您所在的位置: 腾讯首页 > 科技频道 > 国内互联网 > 正文

 

绿盟于旸:让阿里安娜火箭爆炸的缓冲区溢出
http://tech.QQ.com  2008年03月18日13:08   腾讯科技    评论0

绿盟科技的于旸在现场演讲(腾讯科技摄)

腾讯科技讯 3月18日,由中国最大的互联网综合服务提供商腾讯发起和组织的互联网安全峰会在深圳召开。包括微软、盛大、新浪等互联网界各大巨头的技术专家,学者和专业人士参与了此次的交流。此次峰会是今年以来首场由中国互联网各顶尖企业共同参与的大型网络安全专业盛会。

来自绿盟的于旸,在现场发表演讲。以下为文字实录:

于旸:我首先做个自我介绍,我叫于旸,目前主要从事信息技术安全有关的研究工作。腾讯虽然不是一家安全公司,但是腾讯科技对于信息安全问题的重视程度和在对待上的专业态度,一直以来都给我留下了很深刻的印象。举个例子,我们可能会注意到,在腾讯的网站上有一个专门的安全中心的页面,会对腾讯的软件中的一些安全问题及时在这里通知用户,并且FIX。在中国仅此一家,如果把微软中国也算上的话就是两家。

所以,我非常荣幸今天在这里和来自腾讯以及全国各地的各位安全专家们一起,就一些信息安全方面的问题进行讨论。我演讲的题目是《缓冲溢出历史、八卦和娱乐》。用缓冲区溢出这个题目对在座各位朋友并不陌生。我可能无法用短短的一个小时让大家了解很多的技术,但是我会尽量让大家听得愉快。

如果大家想进一步地了解相关的技术,可以关注一下明天禇诚云和吴石的演讲。其中一定会有更加详细和精彩的内容。

首先,我们来简单看一下什么是缓冲区溢出以及缓冲区溢出的历史,然后我会花一点时间给大家介绍在二十年当中,我们和缓冲区溢出以及它的诸多“亲戚”所做的搏斗。第二部分内容我会给大家介绍一些和缓冲区溢出相关的小例子,这些东西可能没有很多的技术含量,但是可能会比较有趣。

首先我们来看什么是缓冲区溢出,严格来说,我们去查相关的专业资料可以看到一个很精确的定义,但实际上在广义上我们把所有的内存读写类漏洞,包括很多,基本上通俗的我们都称之为缓冲区溢出。今天在我的演讲之中用的缓冲区溢出的概念是最广泛意义上的,并不是精确地去指一个具体的缓冲区溢出问题。

到底什么是缓冲区溢出呢?我们看这张图上面(图),我找了一个油漆桶的图。简单说,我们在200毫升的咖啡杯里倒了205毫升的咖啡。不管什么原因,结果都是咖啡倒多了。咖啡倒多了杯子承纳不下,它会流到别的地方。流到什么地方去呢?会流到什么东西上面去呢?根据情况不同可能导致不同的危害。简单来说,这就是缓冲区溢出。

在这里我给大家举一个简单的例子。这是一台Windows 2000,在Windows2000当中有一个程序叫MRinFo,这个程序是Windows自带的网络程序,这个程序它在处理命令行参数的时候是存在程序溢出问题的。不会导致安全风险,但是我想可以用这个程序作为一个例子,让大家大概对缓冲区溢出有一个概念。首先我们给这个程序敲入参数,这个参数并不是程序设计的时候,它是做预计的输入,预计的输入应该是IP地址或者域名,返回之后地址不能被解析。如果我们把这个参数输得相当长,大家看它很快就返回了,根本就没有出现这些(图)。为什么呢?因为在程序设计的时候,正常情况下如果一个地址不能被解析,它就会转入打印的流程。由于在这个地方我们传递的相当长的参数,导致了缓冲区溢出的发生,程序就直接崩溃,或者可能转入了其它流程,最后就没有打印出信息来。

我再给大家看另外一个例子。刚才一瞬间非常的迅速,可能没有看清楚,我们再来一遍。大家看一看,我给它传递了一个很长的参数,但是在末尾我加了两个汉字(图),在座各位有认识这俩字的吗?这不是太上老君画的符,这是两个我们在字库里可以找到的汉字。这两个汉字对应的内码恰好是Windows当中参数的地址。这两个汉字是什么?就是我刚才说的200毫升的咖啡杯我们倒了205毫升,这就是那5毫升。这5毫升咖啡流到了不该流的地方,而恰好它的内容我们又把它设定为一个特殊的值,就是我说的函数的溢值。这个程序在转入到下一流程的时候就会被两个神奇的汉字所欺骗。这就是一个最简单的缓冲区溢出的例子。

所以,我们可以用一个原本用于网络操作的程序来完成一个锁屏的工作。简单来说,我们几乎可以对任何安全漏洞下这样一个定义,什么叫安全漏洞?就是可以让程序执行没有设定的功能,你如果能实现这个,那它就是一个安全问题。我们先把这个MRinFo程序放到一边,一会儿还会用上它。

以前大家如果对安全漏洞没有太多了解,或者大家想去了解和学习我给大家推荐一个我的朋友也是我的同事,他写的一个小小的文档。一般来说,我们除了刚才的这种非常典型的急于备战的程序溢出之外,把堆溢出以及覆盖BSS区等等问题都在广义上称之为容易溢出的问题。

导致缓冲区溢出的原因是什么呢?在历史上,当然我说的历史不是很长的时间,可能十几年前甚至于十年以内的时间。最早是由于我们使用了一些不安全函数,或者是没有正确地使用好一些函数导致的。这是导致缓冲区溢出比较简单的方式。后来又出现了类似于整数问题导致的一些缓冲区溢出,以及近两年又出现一些新的情况。我在这里就不给大家一一介绍。

我们把其中的一条我认为比较有意思的导致缓冲区溢出的方式给大家看一下,整数问题(图)。对于我们的计算机来说,它有一个非常有意思的特性,我们知道一个数是正数还是负数,为什么?因为写阿拉伯数字的时候下面可以加一个减号表示负,在脑子里面我们也可以形成这样一个逻辑概念,但计算机没有这个功能。为了表示负数在计算机当中是用了一个特殊的方式,在这里我也不进行介绍了。总的来说,大家知道在计算机处理数字的时候,两个数字相加它的值可能小于那两个数字,两个数字相乘可能得出来的值也小于那两个数字。就是加和乘不一定使结果变大。反过来减和除也不一定使结果变小。另外,内存当中的一段数字它既可以认为它是一个正数也可以认为是一个负数,这都是在程序当中所决定的,如果在这个当中没有处理好也会出现一些问题。

整数问题的确是非常让人在这个地方出问题的。但是,像这种只是表示温度上出一点小的差错可能无伤大雅,不会出现什么严重的后果。但是也有出现严重后果的时候,现在我就要开始八卦了,这是阿里安娜五星火箭,1996年5月4日,失事四颗卫星同时被毁,这是什么原因导致的呢?因为火箭的控制程序是拉非人写的,程序员把一个长整形变量写成了短整形导致了溢出。就是这么一个小小的错误,导致阿里安娜五星火箭失事的非常重要的原因。当然整体来说还有别的原因,比如本身这段代码在阿里安娜五型火箭没有用的,这其实也是整个开发管理方面的问题,因为大并不适用于五型火箭。在四型火箭里可能没有用好的性能做这样一个负值,到了五型火箭就会出问题。我们看到给火箭写程序的人也会出这样一个错误。

还有一个例子,代码本身找不出什么问题来,实际上代码也没有问题,但是这段代码如果拿VC2003去编译的话,在一些特殊的情况下就会出问题。为什么呢?在VR2003里面对于new的处理没有考虑到整型,如果我们传递一个大的参数,比如Lx4然后后面七个零,在这个时候,因为一个整形是多少?四、五十节,这时候会把Lx4后面七个零这个数字乘以4。在分辨内存的时候会乘4,一乘4就导致的32位整型的上溢,算出来的一个值是多少呢?是零。或者说我们用稍微再大一点的数字,实际上真正分配的内存是一个比较小的值。

顺便说一下,这个安全问题在VC2005里面已经得到了解决。接下来我们再用一点时间说一下缓冲区溢出的一段小小历史。今天当我们谈到历史两个字的时候,可能脑子里面浮现出来的是巨大的时间跨度和厚重的文化。但是对于信息技术领域,因为它本身年龄就不是很大,没有很长的历史,对于信息安全技术它就更加年轻了,在这个领域里面可能十年就是很长的时间了。那我们的缓冲区溢出到现在多长时间呢?也就二十多年时间。这个技术第一次登上历史舞台,被公众所了解、所看到是在1988年11月2日,就是非常著名的Morris蠕虫事件。Morris蠕虫是罗伯特Morris Junior编译,他为什么叫这个名字呢?因为洋人取名字跟中国人不一样,在座各位不可能跟父母用一样的名字,但是外国人觉得这个名字不错就可以给自己儿子用。所以我们用Junior来表示区别,很显然他的父亲也叫Robert Morris。

我们想象一下,1988年,我对这段情况不了解,中国可能还没有这种互联网,甚至连实验性的互联网都没有。你会发现这里面闪耀着很多的智慧,是你在今天的这些木马病毒当中看不到的。举一个例子,那时候主要是VIX,这些机器各自是不一样的,甚至硬件价格都不一样,Morris蠕虫是由原代码和脚本组成的,它感染一台机器之后会利用这台机器上的编译器去编译,所以它可以跨平台,它本身是已原代码方式存在的,它感染下一代的时候也是把原代码传过去。

Robert Morris也就因为这件事情成了世界上第一个因为计算机被正式地被计算机法所判决的一个人,他被判了400小区的社区服务和一万美元的罚款。同时Morris蠕虫事件之所以这么有名,就是因为它直接导致了CERT这个组织的成立。就是1988年发生的蠕虫事件之后美国就赶紧成立了CERT,有了CERT之后中国有成立了CERT。如果没有蠕虫事件可能我们在座各位很多都不会从事这个行业。Morris蠕虫事件是互联网非常重要的一个事件。老Robert Morris实际上是我们现代unix系统的设计者,这就很难怪他儿子为什么这么厉害了。另外,老Robert Morris也是美国国家安全局的首席科学家。这就是Robert Morris(图)。

但是Morris蠕虫出现的时候,实际上公众对其一无所知,只是非常小范围的传播,即使是搞技术的人对它也不是很了解,只是知道有风险,具体怎么样都不清楚。包括Morris出现之后大家还是不清楚。这个时候另外一个人走上了历史舞台,Spaftord,这个老头对Morris蠕虫进行了分析,并且编写了INTERNET蠕虫分析。他在分析蠕虫的时候也同时把缓冲区溢出的知识带给公众,但是这一次介绍仍然可以说不是非常透彻和详细的。真正意义上的一篇专门用来论述缓冲区溢出技术的文章,实际上是1996年才发表,发表在PHRACK 49的杂志,他的本名叫ALEGH ONE,在这篇文章当中,可以说是非常详细地把缓冲区溢出这个知识介绍给公众。ALEGH ONE是谁呢?大家可能都看过邮件列表,他管理过五年,在1996-2001年之间,大部分时间都是他在管理这个邮件列表。

手机看新闻】 【一键订阅新闻】 【返回科技首页】 【论坛  】【发表评论(0)

热门新闻排行

IT新闻

互联网

通信

网评

三星前董事长李健熙涉嫌逃税被罚1亿美元
AMD首席执行官鲁毅智宣布辞职 COO梅耶尔接任
王文汉:大学毕业后的5-10年最重要!
三星集团前董事长李健熙因逃税被判刑三年
联想柳传志的价值与启示:无心插柳 柳已成荫
美国举行人机扑克牌大赛 顶尖高手被电脑击败
前微软女项目经理因诈骗罪 被判入狱22个月
李健熙被判3年 三星新CEO赴中国展危机公关
HD-DVD中国版影碟机即将上市 EVD欲诉其侵权
福布斯:英特尔施压致AMD第2季业绩仍大幅亏损
杀毒软件年内有望全免费
“网络第一美女”接私活 被判赔偿400万元
北京网店新规遭专家炮轰 被指阻碍电子商务
515亿美元 史上最大PE收购案尘埃落定
黑客“封锁”旧金山网络 技术人员仍在解密
谷歌地球部门高级程序员辞职 称谷歌规模过大
奇虎推出永久免费杀毒软件 只靠增值服务盈利
俄罗斯总统:官员如不会上网就卷铺盖走人
多家视频网站获视频牌照 引发新一轮烧钱热
专家炮轰北京工商局:网店办证扼杀百万就业
黑市iPhone售价翻六倍 传俄罗斯总统也在用
浙江瑞安天价手机号叫卖298万元
广州“手机地铁票”面世
诺基亚第二季净利润17.5亿美元 同比降低61%
工信部证实将于电信重组结束后发放3G牌照
首款WAPI双模手机面世 国产厂商将推多款产品
中国电信即将启用全新CDMA手机品牌
中国移动拿下188号段 185和186号段归新联通
中国电信开始集采1000万部CDMA手机
苹果3G版iPhone连遭破解 打破运营商软件限制
北京网店新规遭专家炮轰 被指阻碍电子商务
工商总局局长:北京网店新规将向全国推广
诺基亚第二季度在中国等新兴市场遭遇寒流
杀毒软件年内有望全免费
女士左手留14厘米长指甲 不让丈夫睡左侧
诺基亚解读财报细节 下半年推触摸屏手机
三星前董事长因逃税被判刑三年 并罚1亿美元
三星前董事长李健熙涉嫌逃税被罚1亿美元
密推低价ThinkPad 联想变局笔记本
我是网游历史见证人,我来说说那些故事:
腾讯博客  娱乐 体育 时尚 文化 思想 财经 动漫

男人也能这么美
男人也能这么美
女星最爱做护士
女星最爱做护士

杨澜:与奥运会结缘绝对不是偶然
李少红回应质疑 演艺明星各种吃相
赤壁也为奥运做贡献 董洁清纯写真
名模性感模仿秀 最落魄的女明星们
奥运主持最佳人选 奥运啦啦队曝光
赵薇带病捐款 黄奕妖艳雷人写真照
越狱男主角时尚照 新红楼的造型门

新闻线索

如果你有科技领域的人事变动、重组并购、变革技术出现,以及产品投诉等重要新闻线索,请告诉我们,我们会给予特别关注。

网友意见留言板
关于腾讯 | About Tencent | 服务条款 | 广告服务 | 腾讯招聘 | 腾讯公益 | 客服中心 | 网站导航
Copyright © 1998 - 2008 Tencent Inc. All Rights Reserved
腾讯公司 版权所有