当前位置:文档之家› 堆溢出分析及其防御策略

堆溢出分析及其防御策略

ISSN1009-3044ComputerKnowledgeandTechnology电囊知识与技术V01.6,No.4,February2010.PP.846—847

堆溢出分析及其防御策略

钟达夫.唐懿芳

E—mail:info@CCCC.net.cn

http://www.dnzs.net.cn

Tel:+86——551——56909635690964(广东科学技术职业学院计算机T程技术学院,广东珠海519090)

摘要:缓冲区溢出攻击是目前网络攻击的主要方式之一.而堆溢出攻击是目前缓冲区溢出攻击研究的重点,该文深入地分析了堆的结构、堆操作的原理,指出堆溢出攻击的关键结构,最后提出堆溢出防御的策略。

关键词:缓冲区溢出;堆溢出;随机分配

中图分类号:TP393文献标识码:A文章编号:1009—3044(2010)04-0846-02

HeapOverflowAnalysisandDefensePolicy

ZHONGDa—fu,TANGYi—fang

(ComputerEngineeringTechnicalCollege,GuangdongInstituteofScienceandTechnology,Zhuhai519090,China)

Abstract:Bufferoverflowattacksisoneofthemainnetworkattacks.whiletheheap

ovemowattackisthebu艉rovernowattacksfocusofthestuay.Thisin—depthanalysisofthestructureoftheheap,theheapoperationprinciple,pointingoutthatthekeystructureoftheheap

overflowattacks,concludesheapoverflowdefense

strategy.Keywords:bufferoverflow;heapoverflow;randomassignment

据中国互联网安全监控部门的统计[1—2】,近年来,缓冲区溢出相关的攻击事件又有呈上升的趋势。在缓冲区溢出攻击事件中,攻击的对象多为堆栈结构。栈溢出攻击技术相对比较简单。攻击技术也相对比较完善,并且利用栈溢出漏洞的攻击具有一定的规律可循,因此在目前的缓冲区溢出攻击中,相当部分的攻击选择了栈溢出攻击方式。但是,栈的溢出攻击中,攻击者也会遇到比其他两种攻击方式更严密的防御措施,如stackguard[31、不可执行堆栈保护方法【4|、Pax内核补丁保护方法嘲以及随机栈保护技术㈣等。由于这些防御措施,使得栈溢出攻击变得困难。

堆溢出技术比较复杂,虽然近几年来,已经有越来越多的关于堆溢出利用的事件和理论报道,但是这门技术仍然相对比较深奥。这主要是由于每个系统和编译器都使用不同的方式管理堆,即使是在相同的平台上,不同的应用程序也会使用不同的堆管理方式J7J,针对不同目标软件的每一次攻击都有其各自的特点,没有固定的规律可循,因此实施这类攻击比较困难,非一般人员所能掌握和使用。但是由于堆的保护可以说是非常薄弱,因此堆溢出攻击是目前缓冲区溢出攻击的研究重点。

1堆溢出原理

堆和栈的溢出利用原理是一样的,但是由于堆结构不同于栈结构,因此在利用的时候还是有差异的。对于栈来说,由于栈结构的本身特点,攻击者可以直接往目标机器的缓冲区复制超长的字符串,改写保存于栈中固定位置的函数返回地址,实现执行流程的改变。对于堆来说,由于堆本身的结构里并没有像栈一样,有函数返回地址,因此在利用的时候,堆溢出要比栈溢出复杂得多。

假设有如下的堆定义:

char+buff=rchar

8)malloc(16);char4bur2=(char4)malloe(16);

先往bur2里写入16个“A”,之后再往bufl里写入32个“B”。通常认为。往

bufl里写入32个字符。肯定会导致bufl溢出,从而将其相邻的bur2中的16

个“A”改写为16个“B”.但实际并非如此,只是将buf2的前8个字符改写为

“B”而已。其原因由图l可知,另外8个字节的“B”被写到了内部保留的8个字

节中了。

2堆溢出攻击分析

图1堆溢出示意图

堆的溢出利用,目前也可以分为两种情况:第一种是MattConover等提出的堆利用方法,这种方法和栈溢出利用比较相似:通过溢出堆,从而覆盖保存的某个指针值。但这种溢出方法有个条件:即堆溢出漏洞后面要存在一个可利用的指针值,并a该指针值必须是位于堆的后面,即相对于堆来说处于内存高端。这种方法利用和栈的溢出利用基本相同。

第二种是利用堆结构本身的特点18-91。堆是由程序运行时动态分配的一段内存快,其分配和释放是根据用户的需求分别由malloc类函数和free类函数来实现。堆的增长方向与内存的增长方向相同,从内存低地址到内存高地址顺序分配。每个堆实质是由用户数据区和管理结构区两部分组成,其中用户数据区用来存储用户数据;管理结构区用来存放堆的信息,如堆空闲与否、堆大小和双向链表指针等。一个已分配使用的堆的内存映像如图2所示。

收稿日期:2009—12—22

846--■络囊讯及安垒?????-?-

本栏目责任编辑:冯蕾 

万方数据

 万方数据

堆溢出分析及其防御策略

作者:钟达夫, 唐懿芳

作者单位:广东科学技术职业学院计算机工程技术学院,广东,珠海,519090

刊名:

电脑知识与技术

英文刊名:COMPUTER KNOWLEDGE AND TECHNOLOGY

年,卷(期):2010,6(4)

参考文献(9条)

1.warning3.一种新的堆溢出方法 2001

2.Pierre-Alain FAYOLLE;Vincent GLAUME ENSEIRB A Buffer Overfow Study Attacks & Defenses 2002

3.Greg Hoglund软件刮析一代码攻防之道 2005

4.Pax team address space layout randomization

5.The PaX team PaX ASLR protection 1999

6.Solar Designer Non-executable Stack Patch 1998

7.Crispin Cowan;Steve Beattie;Ryan Finnin Day Protecting Systems from Stack Smashing Attacks with StackGuard 2000

8.宁夏公安网监总队2009年8月互联网安全监测情况通报 2009

9.太原公安网监总队2009年1月互联网安全监测情况通报 2009

本文链接:https://www.doczj.com/doc/33537939.html,/Periodical_dnzsyjs-itrzyksb201004029.aspx

相关主题
文本预览
相关文档 最新文档