缓冲区溢出攻击.docx
《缓冲区溢出攻击.docx》由会员分享,可在线阅读,更多相关《缓冲区溢出攻击.docx(11页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。
1、缓冲区遹出攻击是采用缓冲区溢出漏洞所进行的攻击行动。缓冲区溢出是一种特别普 遍、特别危急的漏洞,在各种操作系统、应用软件中广泛存在。采用缓冲区溢出攻击,可 以导致程序运行失败、系统关机、重新启动等后果。更为严峻的是,可以采用它执行非授 权指令,甚至可以取得系统特权,进而进行各种非法操作。缓冲区溢出攻击有多种英文名 称:buffer overflow , buffer overrun , smash the stack , trash the stack , scribble the stack z mangle the stack , memory leak , overrun screw ;
2、它们指的都是同一种攻击 手段。第一个缓冲区溢出攻击一Morris蠕虫,发生在二十年前,它曾造成了全世界6000 多台网络服务器瘫痪。L概念缓冲区溢出是指当计算机向缓冲区内填充数据位数时超过了缓冲区本身的容量,溢出 的数据掩盖在合法数据上,抱负的状况是:程序检查数据长度并不允许输入超过缓冲区长 度的字符,但是绝大多数程序都会假设数据长度总是与所安排的储存空间想匹配,这就为 缓冲区溢出埋下隐患。操作系统所使用的缓冲区,又被称为堆栈,在各个操作进程之 间,指令会被临时储存在堆栈当中,堆栈”也会消失缓冲区溢出。2危害在当前网络与分布式系统平安中,被广泛采用的50%以上都是缓冲区溢出,其中最闻 名的例子
3、是1988年采用fingerd漏洞的蠕虫。而缓冲区溢出中,最为危急的是堆栈溢出, 由于入侵者可以采用堆栈溢出,在函数返回时转变返回程序的地址,让其四阵专到任意地址, 带来的危害一种是程序崩溃导致拒绝服务,此夕L种就是用匕转并且执行一段恶意代码,比 如得到shell ,然后为所欲为。数据,这时数据也会溢出存储空间。输入数据通常被存放在一个临时空间内,这个临时存 放空间被称为缓冲区,缓冲区的长度事先已经被程序或者*作系统定义好了。何为缓冲区溢出缓冲区溢出是指当计算机程序向缓冲区内填充的数据位数超过了缓冲区本身的容量。 溢出的数据掩盖在合法数据上。抱负状况是,程序检查数据长度并且不允许输入超过缓冲
4、区长度的字符串。但是绝大多数程序都会假设数据长度总是与所安排的存储空间相匹配, 这就为缓冲区溢出埋下隐患。*作系统所使用的缓冲区又被称为堆栈,在各个*作进程之间, 指令被临时存储在堆栈当中,堆栈也会消失缓冲区溢出。当一个超长的数据进入到缓冲区时,超出部分就会被写入其他缓冲区,其他缓冲区存 放的可能是数据、下一条指令的指针,或者是其他程序的输出内容,这些内容都被掩盖或 者破坏掉。可见一小部分数据或者一套指令的溢出就可能导致一个程序或者*作系统崩溃。溢出根源在于编程缓冲区溢出是由编程错误引起的。假如缓冲区被写满,而程序没有去检查缓冲区边界, 也没有停止接收数据,这时缓冲区溢出就会发生。缓冲区边界检
5、查被认为是不会有收益的 管理支出,计算机资源不够或者内存不足是编程者不编写缓冲区边界检查语句的理由,然 而摩尔定律已经使这一理由失去了存在的基础,但是多数用户仍旧在主要应用中运行十年 甚至二十年前的程序代码。缓冲区溢出之所以泛滥,是由于开放源代码程序的本质打算的。一些编程语言对于缓 冲区溢出是具有免疫力的,例如Perl能够自动调整字节排列的大小,Ada95能够检查和阻 挡缓冲区溢出。但是被广泛使用的C语言却没有建立检测机制。标准C语言具有很多复制 和添加字符串的函数,这使得标准C语言很难进行边界检查。C+略微好一些,但是仍 旧存在缓冲区溢出。一般状况下,掩盖其他数据区的数据是没有意义的,最多造
6、成应用程 序错误,但是,假如输入的数据是经过黑客或者病毒细心设计的,掩盖缓冲区的数据 恰恰是“黑客或者病毒的入侵程序代码,一旦多余字节被编译执行,黑客或者病毒 就有可能为所欲为,猎取系统的掌握权。溢出导致黑客病毒横行缓冲区溢出是病毒编写者和特洛伊木马编写者偏爱使用的一种攻击方法。攻击者或者 病毒擅长在系统当中发觉简洁产生缓冲区溢出之处,运行特殊程序,获得优先级,指示计 算机破坏文件,转变数据,泄露敏感信息,产生后门访问点,感染或者攻击其他计算机。2000年7月,微软Outlook以及Outlook Express被发觉存在漏洞能够使攻击者仅 通过发送邮件就能危及目标主机平安,只要邮件头部程序被
7、运行,就会产生缓冲区溢出, 并且触发恶意代码。2001年8月,“红色代码”采用微软ns漏洞产生缓冲区存溢出,成 为攻击企业网络的“罪魁祸首。2003年1月,Slammer蠕虫采用微软SQL漏洞产生缓 冲区溢出对全球互联网产生冲击。而在近几天,一种名为冲击波的蠕虫病毒采用微软 RPC远程调用存在的缓冲区漏洞对Windows 2000/XP、Windows Server 2003进行攻 击,波及全球网络系统。据CERT平安小组称作系统中超过50%的平安漏洞都是由内 存溢出引起的,其中大多数与微软技术有关,这些与内存溢出相关的平安漏洞正在被越来 越多的蠕虫病毒所采用。缓冲区溢出是目前导致“黑客型病毒
8、横行的主要缘由。从红色代码到Slammer,再到 日前爆发的“冲击波,都是采用缓冲区溢出漏洞的典型。缓冲区溢出是一个编程问题, 防止采用缓冲区溢动身起的攻击,关键在于程序开发者在开发程序时认真检查溢出状况, 不允许数据溢出缓冲区。此外,用户需要常常登录*作系统和应用程序供应商的网站,跟踪 公布的系统漏洞,准时下载补丁程序,弥补系统漏洞。3.缓冲区攻击一.缓冲区溢出的原理通过往程序的缓冲区写超出其长度的内容,造成缓冲区的溢出,从而破坏程序的堆栈, 使程序转而执行其它指令,以达到攻击的目的。造成缓冲区溢出的缘由是程序中没有认真 检查用户输入的参数。例如下面程序:void function(char
9、 *str) char buffer16;strcpy(buffer,str);)上面的strcpy()将直接吧str中的内容copy到buffer中。这样只要str的长度大于 16 ,就会造成buffer的溢出,使程序运行出错。存在象strcpy这样的问题的标准函数还 有 strcat() , sprintf() , vsprintf() , gets() , scanf()等。当然,任凭往缓冲区中填东西造成它溢出一般只会消失分段错误(Segmentation fault),而不能达到攻击的目的。最常见的手段是通过制造缓冲区溢出访程序运行一个用户 shell ,再通过shell执行其它命令。
10、假如该程序属于root且有suid权限的话,攻击者就 获得了一个有root权限的shell ,可以对系统进行任意操作了。缓冲区溢出攻击之所以成为一种常见平安攻击手段其缘由在于缓冲区溢出漏洞太普遍 了,并且易于实现。而且,缓冲区溢出成为远程攻击的主要手段其缘由在于缓冲区溢出漏 洞赐予了攻击者他所想要的一切:植入并且执行攻击代码。被植入的攻击代码以肯定的权 限运行有缓冲区溢出漏洞的程序,从而得到被攻击主机的掌握权。在1998年Lincoln试验室用来评估入侵检测的的5种远程攻击中,有2种是缓冲区 溢出。而在1998年CERT的13份建议中,有9份是是与缓冲区溢出有关的,在1999年, 至少有半数的
11、建议是和缓冲区溢出有关的。在Bugtraq的调查中,有2/3的被调查者认为 缓冲区溢出漏洞是一个很严峻的平安问题。缓冲区溢出漏洞和攻击有很多种形式,会在其次节对他们进行描述和分类。相应地防 卫手段也随者攻击方法的不同而不同,将在第四节描述,它的内容包括针对每种攻击类型 的有效的防卫手段。二、缓冲区溢出的漏洞和攻击缓冲区溢出攻击的目的在于扰乱具有某些特权运行的程序的功能,这样可以使得攻击 者取得程序的掌握权,假如该程序具有足够的权限,那么整个主机就被掌握了。一般而言, 攻击者攻击root程序,然后执行类似exec(sh)的执行代码来获得root权限的shell. 为了达到这个目的,攻击者必需达到
12、如下的两个目标:1 .在程序的地址空间里支配适当的代码。2 .通过适当的初始化寄存器和内存,让程序期踽到入侵者支配的地址空间执行。依据这两个目标来对缓冲区溢出攻击进行分类。在二.1节,将描述攻击代码是如何放 入被攻击程序的地址空间的。在二.2节,将介绍攻击者如何使一个程序的缓冲区溢出,并 且执行转移到攻击代码(这个就是溢出的由来I在二.3节,将综合前两节所争论的代 码支配和掌握程序执行流程的技术。-1在程序的地址空间里支配适当的代码的方法有两种在被攻击程序地址空间里支配攻击代码的方法:植入法:攻击者向被攻击的程序输入一个字符串,程序会把这个字符串放到缓冲区里。这个字 符串包含的资料是可以在这个
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 缓冲区 溢出 攻击
限制150内