缓冲区溢出攻击的内容报告及安全防备[网络技术]
本文“缓冲区溢出攻击的内容报告及安全防备[网络技术]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
下面的文章主要介绍的是黑客中级技术,缓冲区溢出攻击,在实际操作中缓冲区溢出是一种非常广泛、非常危险的漏洞,在各种操作系统、利用软件中遍及存在.操纵缓冲区溢出攻击,可以招致程序运行失利、系统当机、重新启动等后果.
更为严重的是,可以操纵它履行非受权指令,乃至可以获得系统特权,进而举行各种不法操作.
缓冲区溢出是一种非常广泛、非常危险的漏洞,在各种操作系统、利用软件中遍及存在.操纵缓冲区溢出攻击,可以招致程序运行失利、系统当机、重新启动等后果.更为严重的是,可以操纵它履行非受权指令,乃至可以获得系统特权,进而举行各种不法操作.缓冲区溢出攻击有多种英文名称:buffer overflow,buffer overrun,smash the stack,trash the stack,scribble the stack, mangle the stack, memory leak,overrun screw;它们指的都是同一种攻击手段.第一个缓冲区溢出攻击--Morris蠕虫,发生在十年前,它曾造成了全世界6000多台网络服务器瘫痪.
本文将解析缓冲区溢出的原理;研究各种范例的缓冲区溢出漏洞和攻击手段;最后,还将侧重研究各种防备手段,用来消除这些漏洞所造成的影响.
1、 缓冲区溢出的原理
通过往程序的缓冲区写超越其长度的内容,造成缓冲区的溢出,从而破坏程序的仓库,使程序转而履行别的指令,以到达攻击的目的.造成缓冲区溢出的缘由是程序中没有细心查抄用户输入的参数.比方下面程序:
void function(char *str) {
char buffer[16];
strcpy(buffer,str);
}
上面的strcpy()将直接吧str中的内容copy到buffer中.这样只要str的长度大于16,就会造成buffer的溢出,使程序运行出错.存在象strcpy这样的问题的尺度函数还有strcat(),sprintf(),vsprintf(),gets(),scanf()等.
当然,随便往缓冲区中填东西造成它溢出普通只会呈现"分段错误"(Segmentation fault),而不能到达攻击的目的.最常见的手段是通过制造缓冲区溢出使程序运行一个用户shell,再通过shell履行别的号令.假如该程序属于root且有suid权限的话,攻击者就得到了一个有root权限的shell,可以对系统举行肆意操作了.
缓冲区溢出攻击之所以成为一种常见安全攻击手段其缘由在于缓冲区溢出漏洞太广泛了,并且易于实现.并且,缓冲区溢出成为远程攻击的主要手段其缘由在于缓冲区溢出漏洞赐与了攻击者他所想要的一切:植入并且履行攻击代码.被植入的攻击代码以一定的权限运行有缓冲区溢出漏洞的程序,从而得到被攻击主机的掌握权.
在1998年Lincoln实行室用来评价入侵检测的的5种远程攻击中,有2种是缓冲区溢出.而在1998年CERT的13份倡议中,有9份是是与缓冲区溢出有关的,在1999年,至少有半数的倡议是和缓冲区溢出有关的.在Bugtraq的调查中,有2/3的被调查者认为缓冲区溢出漏洞是一个很严重的安全问题.
缓冲区溢出漏洞和攻击有很多种情势,会在第二节对他们举行描写和分类.呼应地防卫手段也随者攻击办法的差别而差别,将在第四节描写,它的内容包含针对每种攻击范例的有效的防卫手段.
缓冲区溢出攻击的目的在于扰乱具有某些特权运行的程序的功效,这样可以使得攻击者获得程序的掌握权,假如该程序具有充足的权限,那么整个主机就被掌握了.普通而言,攻击者攻击root程序,然后履行近似"exec(sh)"的履行代码来得到root权限的shell.为了到达这个目的,攻击者必须到达以下的两个目标:
2. 通过得当的初始化存放器和内存,让程序跳转到入侵者安置的地址空间履行.
按照这两个目标来对缓冲区溢出攻击举行分类.在二.1节,将描写攻击代码是若何放入被攻击程序的地址空间的.在二.2节,将介绍攻击者若何使一个程序的缓冲区溢出,并且履行转移到攻击代码(这个就是"溢出"的由来).在二.3节,将综合前两节所谈论的代码安置和掌握程序履行流程的技术.
1、植入法:
攻击者向被攻击的程序输入一个字符串,程序会把这个字符串放到缓冲区里.这个字符串包含的资料是可以在这个被攻击的硬件平台上运行的指令序列.在这里,攻击者用被攻击程序的缓冲区来存放攻击代码.缓冲区可以设在任何地方:仓库(stack,自动变量)、堆(heap,动态分配的内存区)和静态资料区.
2、操纵已经存在的代码:
有时,攻击者想要的代码已经在被攻击的程序中了,攻击者所要做的只是对代码传送一些参数.比方,攻击代码要求履行"exec ("/bin/sh")",而在libc库中的代码履行"exec (arg)",此中arg使一个指向一个字符串的指针参数,那么攻击者只要把传入的参数指针改向指向"/bin/sh".
全部的这些办法都是在追求改变程序的履行流程,使之跳转到攻击代码.最基本的就是溢出一个没有边界查抄大概别的弱点的缓冲区,这样就扰乱了程序的正常的履行次序.通过溢出一个缓冲区,攻击者可以用暴力的办法改写相邻的程序空间而直接跳过了系统的查抄.
分类的基准是攻击者所追求的缓冲区溢出的程序空间范例.原则上是可以肆意的空间.实际上,很多的缓冲区溢出是用暴力的办法来追求改变程序指针的.这类程序的差别之处就是程序空间的冲破和内存空间的定位差别.主要有以下三种: 1、活动记录(Activation Records):
每当一个函数调用发生时,调用者会在仓库中留下一个活动记录,它包含了函数完毕时返回的地址.攻击者通过溢出仓库中的自动变量,使返回地址指向攻击代码.通过改变程序的返回地址,当函数调用完毕时,程序就跳转到攻击者设定的地址,而不是原先的地址.这类的缓冲区溢出被称为仓库溢出攻击(Stack Smashing Attack),是目前最常用的缓冲区溢出攻击方法.
2、函数指针(Function Pointers):
函数指针可以用来定位任何地址空间.比方:"void (* foo)()"声明了一个返回值为void的函数指针变量foo.所以攻击者只需在任何空间内的函数指针四周找到一个可以溢出的缓冲区,然后溢出这个缓冲区来改变函数指针.在某一时刻,当程序通过函数指针调用函数时,程序的流程就按攻击者的企图实现了.它的一个攻击典范就是在Linux系统下的superprobe程序.
3、长跳转缓冲区(Longjmp buffers):
在C语言中包含了一个简单的查验/恢复系统,称为setjmp/longjmp.意思是在查验点设定"setjmp(buffer)",用"longjmp(buffer)"来恢复查验点.但是,假如攻击者可以进入缓冲区的空间,那么"longjmp(buffer)"实际上是跳转到攻击者的代码.象函数指针一样,longjmp缓冲区可以指向任何地方,所以攻击者所要做的就是找到一个可供溢出的缓冲区.一个典型的例子就是Perl 5.003的缓冲区溢出漏洞;攻击者首先进入用来恢复缓冲区溢出的的longjmp缓冲区,然后诱导进入恢复情势,这样就使Perl的注释器跳转到攻击代码上了.
二.3代码植入和流程掌握技术的综合解析
最简单和常见的缓冲区溢出攻击范例就是在一个字符串里综合了代码植入和活动记录技术.攻击者定位一个可供溢出的自动变量,然后向程序传送一个很大的字符串,在引发缓冲区溢出,改变活动记录的同时植入了代码.这个是由Levy指出的攻击的模板.因为C在习惯上只为用户和参数开辟很小的缓冲区,因此这种漏洞攻击的实例非常常见.
代码植入和缓冲区溢出不一定要在在一次行动内完成.攻击者可以在一个缓冲区内安排代码,这是不能溢出的缓冲区.然后,攻击者通过溢出别的一个缓冲区来转移程序的指针.这种办法普通用来办理可供溢出的缓冲区不够大(不能放下全部的代码)的情形.
假如攻击者试牟利用已常常驻的代码而不是从外部植入代码,他们普通必须把代码作为参数调用.举例来说,在libc(几近全部的C程序都要它来衔接)中的部份代码段会履行"exec(something)",此中somthing就是参数.攻击者然后利用缓冲区溢出改变程序的参数,然后操纵另一个缓冲区溢出使程序指针指向libc中的特定的代码段.
3、 缓冲区溢出攻击的实行解析
2000年1月,Cerberus 安全小组公布了微软的IIS 4/5存在的一个缓冲区溢出漏洞.攻击该漏洞,可以使Web服务器崩溃,乃至获得超级权限履行肆意的代码.目前,微软的IIS 4/5 是一种主流的Web服务器程序;因而,该缓冲区溢出漏洞关于网站的安全构成了极大的威胁;它的描写以下:
浏览器向IIS提出一个HTTP恳求,在域名(或IP地址)后,加上一个文件名,该文件名以".htr"做后缀.于是IIS认为客户法则在恳求一个".htr"文件,".htr"扩大文件被映像成ISAPI(Internet Service API)利用程序,IIS会复位向全部针对".htr"资源的恳求到 ISM.DLL程序 ,ISM.DLL 翻开这个文件并履行之.
浏览器提交的恳求中包含的文件名存储在部分变量缓冲区中,若它很长,超越600个字符时,会招致部分变量缓冲区溢出,覆盖返回地址空间,使IIS崩溃.更进一步,在如图1所示的2K缓冲区中植入一段尽心计划的代码,可以使之以系统超级权限运行.
4、缓冲区溢出攻击的防备办法
缓冲区溢出攻击占了远程网络攻击的绝大大都,这种攻击可以使得一个匿名的Internet用户有机会得到一台主机的部份或全部的掌握权.假如能有效地消除缓冲区溢出的漏洞,则很大一部份的安全威胁可以得到减缓.
目前有四种基本的办法保护缓冲区免受缓冲区溢出的攻击和影响.在四.1中介绍了通过操作系统使得缓冲区不可履行,从而禁止攻击者植入攻击代码.在四.2中介绍了强迫写精确的代码的办法.在四.3中介绍了操纵编译器的边界查抄来实现缓冲区的保护.这个办法使得缓冲区溢出不大概呈现,从而完好消除了缓冲区溢出的威胁,但是相对而言.
以上是“缓冲区溢出攻击的内容报告及安全防备[网络技术]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |