绕过堆栈保护的缓冲区溢出攻击技术

上传人:小** 文档编号:66002883 上传时间:2022-03-26 格式:DOC 页数:7 大小:115.50KB
收藏 版权申诉 举报 下载
绕过堆栈保护的缓冲区溢出攻击技术_第1页
第1页 / 共7页
绕过堆栈保护的缓冲区溢出攻击技术_第2页
第2页 / 共7页
绕过堆栈保护的缓冲区溢出攻击技术_第3页
第3页 / 共7页
资源描述:

《绕过堆栈保护的缓冲区溢出攻击技术》由会员分享,可在线阅读,更多相关《绕过堆栈保护的缓冲区溢出攻击技术(7页珍藏版)》请在装配图网上搜索。

1、:E新屯等:绕过堆栈保护的缓冲区惓出攻击技术绕过堆栈保护的缓冲区溢出攻击技术王新志刘克胜(解放军电子工程学院)播要拔冲区溢出攻去是网络攻去的主矣形式之一,占远穆网络攻去的大多数。堆 桟适出爰拔冲g海出攻去的主要方法,但堆税侏护技术能够在抿大钗度上防止堆桟泊 出的发生.本文在介绍缓冲区溢出原理钓基比上,貯炊桟溢出和垃栈铎护进行了分析. 煎后对绕过堆校保护的绘冲尽浚出技术址行了媒计粒研究.关徒词 缓冲区溢出 堆栈保护 网络攻击1. 引言缓冲区溢出(buffer overflow,又称为buffer overrun)是现代计箕机系统长期存在的安全 问題,是目前远程网络攻击的主要手段.)988年的“莫

2、尔斯蠕虫”事件引起了人们对缓冲区溢 岀的关注,缓冲区溢出攻击成为少数高水平黑客手中的“杀手钢”订996年,Phwck河杂志 49期中-篇名为Smashing The Stack For Fun And Profit的文章详尽描述了利用缓冲区溢 出漏洞进行攻击的原理及实现细节,复杂的攻击手段有了简单的实现方式,大疑缓冲区溢出 漏洞被发现并被利用来攻击,缓冲区溢出攻击一跃成为远程网络攻击的主流。根据CERT/ CC“的资料统计,】9881996年,缓冲区溢出仅占各种网络安全问题的10%左右,而1997 年以来,缓冲区溢出占所有重大安全性错误的百分之五十以上。根据国内外多家权威网络安 至机构实时更新

3、的涮洞列表分析数据显示缓冲区溢出问题正在扩大,而不是在缩减,缓冲 区溢岀攻击及相应的防护技术已经成为软件安全、网络安全等领域研究的電要课題之一。缓冲区溢岀的基本原理是指某些缺乏数组边界检査的编译器(如标准C编译器)編译的 程序左运行时,如果执行向一个指定大小的缓冲区内写入超长字符串这样的操作,将导致与 该缓冲区相邻的数据被痕盖,在某些条件下这会改变程序的正常执行流程,使程序的执行不 可控。攻击者利用缓冲区溢岀修改程序的指令抬针,使计算机执行攻击者预先植入或程序内 存空间中已存在的某些指令,从而达到攻击冃的.缓冲区溢出主要分为堆栈滋岀和堆溢出, 其中堆栈溢岀最常见,约占总数的90%以上,而且容易

4、被利用来攻击。有效的防止堆栈溢岀 可以根除绝大多数缓冲区溢岀问题。正确的编程技术以及对代码进行仔细检査可以清徐部分缓冲区溢岀隐患但是海駅的代 码和缓冲区溢出发生环境的复杂性决定了该手段的效能有限。自动的防缓冲区溢岀手段是 必须的,以堆栈保护为目的的防缓冲区溢出技术正是具中之一它通过检测程序堆栈是否遭 受破坏来决定程序是否继续执行在一定程度上可以有效防止部分堆栈溢出问题本文在分析堆栈溢岀攻击原理以及现有堆钱保护技术的基础上着重对堆栈保护技术中 的关键问题以及绕过堆栈保护的堆栈溢出攻击进行探讨。2. 堆栈溢出原理中E电子学会电子对杭分会第十三堀亍术年会论文集洵单的讲,堆栈溢出攻击是利用堆栈生长方向

5、和数据存储方向相反的特点,用后存入的 数据覆盖先前压栈的数据,直至覆盖函数的返回地址在函数执行完返回时改变程序的正常 执行流程,从而达到攻击目的.下面通过一个例子来详细分析。2.1 一个存在堆栈溢出问题的程序如图1所示,这是一个存在缓冲区溢出问题的C语言程序.它调用Mrcpy0完成字符串 传递的过稈。char *func(char *msg) int varl;char buf80;int var2;strcpy(buf, msg);return msg;)int main(int argv, char *argc) char *p;P = func(argcl);exit(0):9 1存在维

6、栈漫出问的示创代叫C语育没有进行数组边界检测,在调用strcpy.gets.strcat这样一些函数时,超长的参数 将导致字符串越界引起缓冲区溢岀。该代码编译后执行时,要接受个字符串作为参数如 果给其传递的参数长度大于80字节,buf之上的内存空间将被大于80的部分覆盖,发生堆栈 溢出.2.2 x86堆栈分析k86体系结构中,堆栈是向下增长的,也就是说后入栈数据的地址比先入栈数据的地址要 小。毎次函数调用都会创建一个新的栈帧,栈帧中包含函数本地变量、缓冲区、函数参数和过 程关联信息。其中过程关联信息包括栈帧指针和函数返回地址它们保证函数执行完毕后能 够正确返回以使程底继续执行。堆栈帧的创建步骤

7、如下:(1) 西数参数入栈.如果有多个参数,则按照从右至左的顺序依次入栈.(2) 西数的返回地址人栈。函数调用通过CALL指令来完成,该指令将控制寄存器的当 前值人栈,该值即函数返回地址。(3) 栈帧指针入栈。栈帧指针即EBP的当前值,它标识前一栈帧的位置。在这之后ESP 当前值被复制到EBP中。(4) 如果函数中使用了 try/catch或其它的异常处理结构,将异常处理信息入栈.(5) 在堆栈中为本地变量和缓冲区分配空间。分配顺序由编译优化选项决定.(6) 将丙数执行期间可能用到的奇存器,如ESI、EI刃、EBX等人栈。堆栈恤的结构如图2所示,对应图1示例代码的堆栈结构如图3所示。932王新

8、恚零恳过堆栈保护的级冲区溢出攻击技术低地址栈顼低地址缓冲区It长方向因数执疗蒂独的寄存老EBX. EDI. ESIvar2衣地变駅 缓冲区异常爺理帧函数距冋地址函戏密数buf funcO栈桢varl栈輸拒好EBP 返回地址 挣致char12字节4字节80字节4字节4字节4字节4字节桟顶一933mainOttW 1桟底高地址从堆栈帧的结构可以看岀由于x86体系 结构没有对堆栈中的数据进行有效保护,如果 本地变量发生缓冲区溢出,缓冲区前面的其它 本地变量、异常处理祯、栈恢指针、函数返回地 址、函数参数都可能被覆盖。在图3中,如果给 buf传递的参数长度大于80字节,则varl、存储 的EBP等都可

9、能被覆盖,甚至函数main的栈帧 也会被覆盖函数执行完毕后,返回地址被装 人EIP寄存器,程序从此处继续执行。如果返 回地址改变,则随着函数返回,程序的正常执行 流程即被改变程序下一步的行为将不可知。 绝大多数的堆栈溢岀都是通过这种手段更改程 序的执行流程从而达到攻击目的。堆H增长方向- 不栈戟!顶f 缓冲区增长方向低地址函数执行希要的寄存崟本地变2援冲区异常处理師栈顿指什高地址wan分析曼保护柘分3. 堆栈保护技术堆栈保护技术,例如Stack Guard.MS GS编译选项等,其根本目标是要保护函数的返回 地址不被修改。理想的情况是开发语言能够对数组边界都进行检测,杜绝缓冲区溢出问题。 Ja

10、va .Perl以及刚岀现的C#语盲都可以做到这一点,它们是安全的语言。很多操作系统以及 大型应用软件出于效率、速度等方面的考IS,选择了 C和C+ +来编写,语言的峡陷给这些系 统留下了缓冲区溢出的隐患。堆栈保护并不能保证堆栈中的数据不被破坏,也不能保证程序在受到攻击的悄况下还能 正常执行,因为当检测到攻击发生时,再执行任何描令都可能带来更大的安全风险。堆栈保 护的目的是有效的检测到可能的堆栈溢岀攻击然后采取相应的手段保证系统的安全,使攻 击者的U的不能得逞。933*缓冲区朮长方向栈帧函数执行需耍的衣存签本地变星缓冲区异常处理换飞丽针Canary盘返回地址也数参数T 栈帧 缓冲区堆长方向A明

11、点数执行盂要的寄存器本地变銀缓冲区Cookie2Q* * *栈底A 桟1高龟址高地址图5采用StackGuard的堆栈结构图6與用MS/GS的堆栈结构受保护部分聂佼指轩 凶数逋向建址中国电子学会电孑对抗分会第十三JS学术年会论文樂一个栈帧可分成攻击发起的部分和被保护的部分.攻击者利用的是对函数本地变锻賦 值时引起的溢出,是攻击发起的部分。栈帧指针、函数的返回地址等被利用来控制程序执行 流程的跳转,是堆栈保护技术要保护的对象,属于被保护的部分。如图4所示。低地址低地址堆栈保护为了检测缓冲区溢出对被保护部分的写人,需要在堆栈中引人一个检测标志。 该检演标志在StackGuard技术中称为canar

12、v(金丝雀,取自威尔士矿工用金丝牡检测矿中瓦 斯泄漏之意),在微软的Visual C+, net /GS编译选项中称为Security Cookie(安全Coo# ie)o这两种堆栈保护技术都是在塢译器级別上实现的使用它们编译生成的程序在运行时其 堆栈结构分别如图5和图6所示。StackGuard中将canary放在返回地址之前,只保护函数 的返回地址;MS/GS编译选项将cookie放在函数本地变虽缓冲区之后,保护异常处理帧、栈 帧指针和函数返回地址等所冇内容。当超长的字符串从本地缓冲区溢出覆盖函数返回地址时,必定冇先要覆盖并修改这个检 测标志。堆栈保护技术通过将函数调用过后的检测标志和预存

13、储的检测标志进行比较确定 是否有可能的缓冲区溢出,如杲有则退出程序以阻止攻击的进一步执行.在此值得一提的是 该检测标志徂的选择直接影响攻击检测的结果。如果便用固定值,则容易披攻击者猜测并进 行欺骗很容易彼绕过.StackGuard技术中最先使用了 null字符(大多数字符串操作函数遇 到这个都认为是字符串结尾而停止操作)在它的一个实现中曾经采用过随机值,后来处于性 能上的考虑使用了“结束字符这个待殊值。该值是一个32位整数,包含null(00),0aJf,0d 四个值取值为0xOOOaffOde OxOd是回车符,0x0a是换行符,而0M表示EOF,可以停止gets ()函数的继续执行。MS/

14、GS编译选项取的是随机值,这使得通过猜测来覆孟变得不可能, 至少是实现上很困难但是牺牲了程序的执行效率。4 绕过堆栈保护的堆栈溢出攻击(1)利用函数参数一种绕过堆栈保护的攻击方法是利用堆栈保护本身的弱点。从上述对堆栈保护技术的 描述中町以得知,堆栈保护是在函数返回后才执行检测掠志的检査,如杲函数执行中有缓冲 934 _王新吉等:绕过塔桟保护的缰冲区84出攻击枝术区溢出的话,此时溢出已经发生了。堆栈保护实现一个专门的函数调用来检斎检测标志,同 时还要预先存储检测标志的值.也就是说,在实际的功能函数堆栈帧之前,已经有一个标志 检査函数堆栈帧入栈。利用函数参数的方法就是使用加长的溢出字符串,使得sh

15、dlcode- 直覆盖到西数参数以上葭至能够覆盖到标志检査丙数的堆栈帧。如果能够把预存的检测标 志值都可以定位到并于以覆盖,则堆栈保护已经名存实亡。该方法利用程序存在的堆栈溢岀 问题,適过復盖堆栈保护函数的堆栈帧并利用堆栈保护函数返冋的时机来控制程序的流程。 缺点是需要进行大聚的地址猜测和定位。(2)修改堆栈骼指针。这种方法适用于StackGuard.在图3中,明显的,堆栈帧指针没有灵到保护。通过构造 及精确的shellcode,只H盖堆栈帧指针而不修改检测标志。通过本函数返回时实现对堆栈倾 指针的控制,通过下一个噸数的返冋实现堆;栈指针的拎制.这种方法在实现上比较用难,需 要进行精确的溢出。

16、(3对本地变量的更多控制通过对本地变趟的精确控制,修改调用若的堆栈帧指针,从而实现对调用者函数本地变 凰和函数参数的完全控制该方漆同方法】的区别是不需要修改检测标志即可控制调用者 函数的全部本地变就和因数参数v何方法2的区别是不需要函数返回来跳转到攻击代码。 这种技术要求调用者函数有合适的本地变凰。“)将调用者函数堆栈帧指向GOT这种方法有新意但暹比较复杂“ GOT是一种动态链接机制,比如Linux程序运行时对 lik动态库的调用。首先修改某个动态链接库文件某个函数的人口点,使其抬向攻击代码,然 后通过溢岀修改调用者因数堆栈帧指针,使其指向该动态链接库函数的入口点地址,最终实 现对程序执行流程

17、的控制。5.结束语缓冲区溢出攻击是近年来鼓为常见的一种攻击手段,代表了极危险的一类安全阪题。缓 冲区溢岀足译码错谋问题中的-个类型,并不单单是一种恃殊的错溟形式,新型的溢出问题 接连不断的被发现,一些溢出问题只有通过与操作系统或硬件做调整工作来达到防止其出现 的冃的。堆栈保护技术作为一种比较实用的防缓冲区溢出技术,虽然已经有了以编译器为基 础的解决方笔但是并不能对所有缓冲区溢出问题提供彻底的保护缓冲区谥岀仍将是软件 安全及网络安全中长期值得研究的问题,缓冲区溢岀技术与防缓神区溢出技术这对“矛”与 “盾”的竞争仍将继续下去。注l:Fhnick Magizine),很有名的民间黑客杂志,介绍最新的

18、黑客技术及相关知识。注2:CERT/CC(Coordination Center),吳国计算机紧急事件反应小组协调中心位于匹 兹堡是卡内基博隆大学软件工程学院的一个部门。该单位直按为美国国防部服务。参考资料1 Aleph (nc: Smashing Tbe Stack For Fun And Profit Ph rack Magazine) 49(14) f 19962- CriMwn (hwan : Buffer Overflowsand Defenses for the Vulneubirity of the DtcadeInfonnationSurvivability CoMcrenw

19、and Exposition January 2000.3. Ck rhrdo Richarte: Four different tricks to bypass StackShicld and StackGurd proutection and Prevention of Buffer Overflow Attacksi In 7th USENIX Senirity Conference pages 63-77,San AntonioTXtl998e5 BulbaKil3r: Bypassing Stackguard and StackShieklPhraek Magazine)56(5) 2000 5.936a规找保护的冲区世出攻击技术E 画上0M. 卄 mb1 1- efctflts eac. tn Ceftftrxt.5:Se &is

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!