
■ _矾糊● ■ il孺i圈煳删一田_摘要:缓冲区溢出CBuf陆O删owl是圈络安全中最为常见的一种形式它普遍存在于各类的操缓冲反滞m 的倍害乃防节作系统及运行在操作系统上的应用软件中.是露络安全中最危险的漏洞之一.一个匿名的hc删用户可以利用这个磊洞获得一台主机的部分或全D Q naerouSneSS of部的控制权.如果能有效的消除援冲区苦出的漏洞.很大一部分的网络安全问题将得到缓解.本文Buffbr 0vernowQ nd简单介绍了援冲区港出的普遍性和危害性.并结台缓冲区溢出的原理.讲解了如何有效的防止缓冲区溢出.关键词:缓冲区滋出网络始安全{丽冠络攻击M eQ SureS of Preventi on1引言的w 抽d删s2000服务器版本中.存在着Ⅱs 50远相应的进程在内存中的映象如图l 所示:现在提厦到网络安全.不能不让人想到缓冲程缓冲区溢出.商务服务器中存在着IsAPI文件缓冲区溢出.讹d服务器存在着缓冲区溢出,函数调用时所建立的堆桂包含了下面的信区溢出.缓冲区溢出是一种非常危险.非常普遍息函致的返回地址调用函数的堆枝信息.的安全漏洞.在各种操作系统、应用软件中广泛就连最常用的ReaIPl ay80也存在着缓冲区溢出.局部变量分配的空间和被调用函致的参数分配存在.不止w i ndow s.其他的一些操作系统也存在着缓冲区溢出的问题.上面例子中的L西ux和So岫.的空间.在黑客的攻击技术中.缓冲区溢出攻击一直从函数的堆柱结构可毗看}}j :由于函数的局都是非常重要而且很常用的技术.利用缓冲区溢以及FrccBsD,ⅧLU ) ( .ⅢM AⅨ等操作系统部变量的内存分配是发生在堆柱里的.所以如果出.可以导致程序运行的失败.系统重新启动等都有这个漏洞.我们在某一个函数里定义了缓冲区变量则这个后果.更为严重的是.可以利用它来执行非授权缓冲区变量所占用韵内存空间是在该函数被调用指令.如果漏洞的程序是一个守护进程2缓冲区溢出的原理时所建立的堆桂里.{daem on).那么攻击者可以得到一个远程的2.1缓冲区溢出的基本原理由于对缓冲区的潜在操作(比如字符串的复shel l .从而获得主机的部分或全部的权限.在本缓冲区溢出指的是一种系统攻击的手段.通制)都是从内存低地址到高地址的,而内存中所保杂志第四期的(多阶段网络攻击建模)一文中的过往程序的缓冲区写超出其长度的内容.造成缓存的函数调用返回地址往往就在该缓冲区的上方第四点实例剖析中就是一个很好白勺例子.攻击者冲区的溢出.从而破坏程序的堆栈,使程序转而(高地址卜—这是由堆栈的特性决定的.这就为分别使用缓冲区溢出得到了M ysqIeducn和执行其它指令.以达到攻击的目的.覆盖函数的返回地址提供了条件.当覆们有机会Bm d.educn两台主机的r00l 权限.世界上第一个在HnⅡ下我们假设有一段c语言程序调用用大于目标缓冲区大小的内容来向缓冲区进行填缓冲区溢出攻击—M oⅡ讧蠕虫.发生在十年前.它如下充时,就有可以改写函数保存在函数堆栈中的返曾造成了全世界6000多台网络服务器瘫痪.’ 红咖《...)调用函数6Ⅱ蜘∞l(曜1.鹕L.m 挚}回地址.从而使程序的执行流程随着我们的意图色代码。

也是利用微软的Ⅱsw EB服务器的ⅢA由于在高级语言的调用中.缓冲区是在堆栈而转移.换句话来说.进程接受了我们的控制.缓冲区溢出漏洞进行病毒的传播.使许多主机陷上进行分配的.堆桂是一个后进先出的队列.在我们可以让进程改变原来的执行流程.去执行我于瘫痪.从以上的实例我们可以看出.缓冲区溢一般的操作系统中.它的生长方向总是和内存的们准备好的代码.出的危害是相当大的.生长方向相反的.即堆栈的填八是从高地址开始下面我们来看一个实际地例子衄i Ⅱ(1调用s廿cpy函致.如s唧y(m .但是.缓冲区溢出却普遍存在于各类的操作向低地址增长的.在刚才的函数调用中.也是同系统及运行在操作系统上的应用软件中.在镫软样的道理.当程序被操作系统调人内存运行.其-cCC⋯’ 138应月技术J U LY 2003 万方数据园为字符c的16进制AscⅡ码是O “ 3,故覆盖这个指针变量的目的,从而使程序执行攻击程序.但是有安全漏洞的程序依然存在.于是人调用sⅡcpy函数后.进程的在内存地址空间的结者的代码.们开发了一些专门的检查工具.用于检测缓冲区构如上图所示.因为没有进行边界检查.程序在(3)长跳转缓冲区(L0n商m pbu施话}这种溢出的存在.但是这些工具只能减少缓冲区溢出执行拷贝操作时.没有注意到锾冲区的太小.而方法和覆盖函数指针类似.而且这类的控制在攻的漏洞.而并不能完全消除这种漏洞.往缓冲区内填充了大于缓冲区容量的教据.就会击中使用的比较少.(2)对于操作系统来说.把堆栈设置为不可覆盖调其他的一些数据.比如说函数调用的返回执行可以防止绝大部分缓冲区溢出攻击的成功.地址.3如何防止缓冲区溢出通过使被攻击程序的堆桂段地址空间不可执行,如果最们用的是进程可以访问的某个地址而前面已经研究了缓冲区溢出的基本原理.一从而使得攻击者不可能执行被植人被攻击程序辅不是0x43434343来改写调用函数的返回地址.而个缓冲区溢出的存在与很多因素有关.其中主要人缓冲区的代码.这种非执行堆栈的保护技术可这个地址正好是我们精心准备好的代码的A口..有编写程序的程序员操作系统编程语言,编以有效地对付把代码植人自动变量缓冲区的攻那么进程将会执行我们的代码或者以已经存在的译程序系统操作员等.下面从这几方面人手.击.现在Li nux和sol ari s都发布了有关这方面的代码.因此.利用缓冲区溢出的攻击可以在别的来讨论如何防范这种攻击补T.进程上下文中执行自己的代码.从而绕过操作系(1)首先对于程序员来说.养成良好的编程(3)对程序指针的完整性和数组边界进行检统的安全机制.习惯是很重要的.从根本上来说.缓冲区溢出漏查.虽然通过堆柱不可执行技术可以肪范大部分以上所描述的是缓冲区是在局部变量空间的情况,当然,缓冲区也可以在堆【H娜.动态内洞的存在就是程序员疏忽太意的结果.程序员的缓冲区溢出的攻击.但是如果攻击者是通过函数指针lFⅡ眦临Poj疵%}控制代码转移到攻击能在编写程序的时候.如果能把这种安全编程存分配空间)和全静态数据区【初始化和未初始的思想提高一个高度,那么存在这类漏洞的可代码,这样就可以跳过这种保护措施.因此要进化的数据区J .能性将会减少很多.这就从源头上减少了漏洞行程序指针完整性的检查.程序指针完整性捡查2.2控制程序转移到攻击代码的方法的存在.主要自勺是注意几个高风险函数的使用,在程序指针被引用之前检测到它的改变.因此.通过上面的饲子我们可以看出.攻击者为了比如上面例子中的strcpy函数.相关的还有即使一个攻击者成功地改变了程序的指针.由于达到攻击的目的.首先就是溢出一个没有边界检spr山【f.s呲ac,vspri n盯.ge嵋,sc卸f以及在循环系统事先检测到了指针的改变.因此这个指针将查或者其它弱点的缓冲区.从而覆盖函数的返回内的gel c.fgefc,gei char等.调用这些函数一不会被使用.对于数组边界检查能防止所有的缓地址.改变程序的执行流程.使之跳转到攻击代定要强制进行参数的长度的检查.也可以用相冲区溢出的产生和攻击.这是因为只要数组不能码.这样就扰乱了程序的正常的执行顺序.通过关的函数代替这些函数.比如scrncpy代替被溢出.溢出攻击也就无从谈起.为了实现数组溢出一个缓冲区.攻击者可以用暴力的方法改写s们py,snp^ⅡⅡ代替spnD盯等.边界检查,则所有的对数组的读写操作都应当被相邻的程序空间而直接跳过了系统的检查.事实上.即使程序员知道了如何编写安全的检查以确保对数组的操作在正确的范围内.控制程序转移到攻击代码的方法主要有以下(文章未完,后转46页左下)三种(1)活动纪录《Ac6vadon Roc0I吐s}上面的Argn高地址例子就是一个典型的例子.攻击者通过提交一段特别的参教.是堆栈中的自动变量溢出.覆盖调参数地址J空同L翳魏一Ar剖程序的返回地址.使返回地址指向攻击代码.当函数调用结束时.程序就跳转到攻击者设定的地返回地址《T址.而不是原先的地址.怔厂一(2)函数指针(Functi on P0i ncm I这类问低地址局地变■ 局翘变量l址(缓冲区)题主要存在干c/c++语言中.有些函数返回一空间]个指针变量.如果攻击者在这个被调用的函数附近技到一个缓冲区.通过溢出这个缓冲区来达到图1堆栈图2调用后堆栈结构 万方数据cha广t ID:寝件分层雷10hart N 8n怕:N ev—acK89eDl agr日mCh日rt Ty∞;L『M L P日0k日ge D 1agr8mch” t stereoty口e:[ :P8ck88e O l agranl []有实例中共享信息.新类和扩充已有的类的接口.可以实现对现有系第四.生成全局的对象{在BcB5中,可以统的功能扩展:在。

工程名bpr。文件中创建全局的对象I.从而(3)对系统的维护方便了.~个程序如果提供了啪L描述的详尽而全面的文档.要捕获程在整个程序中共享此对象的信息,第五.可以通过生成外部文件或设置专用的序的错误和修正这些错误比直接去读源代码容易用户瓶宇段来传递信息.得多.当然还有其他的方式可以传送信息.但在面f4)容易实现‘ 代码复用。.如果说在设计时r———]向对象的程序设计中.要尽量避免直接利用的就考虑到代码的复用问题,精心设计其粪的接信息处理w i ndow s消息机制来传递信息.除非为了特殊的口,同时降低其对外部环境的依藏性.就有可能需要.实现‘ ~个功能只需开发一次.便可在以后的新存储系统程序中反复使用‘ 的梦想.当然这需要程序员建6结束语立自己的代码仓库.采用面向对象的思想指导开发可以很好地提总之.从面向对象开发的角度而言.用BcB说明:的质量和开发效率墨个软l 牛由三大组件模块组成.其中觳据存储部分采用观摩的窠面型敬据库.不需要开笈。一定程度上能防范缓冲区溢出攻击的措施有用户界面足整个取件开发的帻心郾分,佶息处理既分主要完成一些公用的模块.比如访问.树操作,目录操作等等。

可以以较高的效率开发出可重用性好、易于维护和易于扩充的软件产品.充分体现出面向对象开发的特点,这对当前急需解决的提高软件产业生(2)对系统功能的扩充也容易了.通过增加产效率的问题而言.是非常有意义的.一2k2k=一A赢1' r1' r图4一个软件的分层结构1r1r1程序员大本营(BonaIId版)(上接39页)2吴炜煜.面向对象分析设计与编程( 00A,00哪P).清华大学出版社2000.(4)对于系统操作员和管理员来说.要及时地为有漏洞地程序打上补丁.如果还没有补丁可3张龙祥.uM L与系统分析设计.人民邮电出以停掉该应用程序或者使用其它的替代品.特别对于l 『N Ⅸn加Ⅱ系统来说.应该去掉特权程序的suⅢ或sGⅢ.如果某个程序存在着这个漏洞.属于r00e,而这个文件被设了suⅢ.那么如攻击版社.200J.8.者就可以利用它来以root的身份执行我们准备好的代码.4 Ronal d J N orm an.0bj ec【· O nen【ed sysIem sA【l al ys讧蛐dDesI罢nPreⅡ6眙|Ial I In忙m ali涮,4小结Inc,1998.缓冲区溢出漏洞是安全漏洞中最为常见地一种形式.在本文中我们详细分析了缓冲区溢出5 E押甜Y0u山n&CarlAr酉l &0qectofi enfed攻击的原理和方法.最常见地缓冲区溢出形式是攻击活动记录.然后在堆桂中植^代码.把堆桂An山ysl s&Dcsl 窖l LPrend*H al l Inl 唧心呲设置为不可执行虽然可以防范大部分地攻击.但是要确保系统地安全,必须将上面的几种措施组k.,1998.合使用.才能提高防范的效率.6郑^杰等.实用软件工程I第二版I.清华大学出版社.1997 4.参考文献1十年来攻击和防卫的弱点.hl 肇:/,gD4 J63c。一定程度上能防范缓冲区溢出攻击的措施有

枷uoh曲锄舳奶qycb廿Ⅱ.2 J onCsnadcr著.刘江林译.Em 血veⅡ:P皿胁g舢l m i 岵.中国电力出版社.200l7 Bofi 盟d加pi 船公司著.梁志{;;|.汪浩、康向东刘存根等译.CHBui l def5开发人员指南.1叭· 106.机械工业出版社.2000.3王育舒.缓冲区溢出攻击分析⋯.天津商学院学报,2000.3.20_23. 万方数据缓冲区溢出的危害及防范缓冲区溢出的危害及防范作者:邱强作者单位:上海海运学院 200135刊名:计算机系统应用英文刊名:COMPUTER SYSTEMS & APPLICATIONS年,卷(期): 参考文献(3条)参考文献(3条)2003(7) 1.王育舒 缓冲区溢出攻击分析 20002.Jon CSnader;刘江林 Effective TCP/IP Programming 20013.十年来攻击和防卫的弱点 本文链接:
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-95361-1.html
好帅
要开通的吧
iphone是什么