技
术
创
新
中文核心期刊 《微计算机信息》(管控一体化)2008年第 24卷第 1-3期
360元/年 邮局订阅号:82-946 《现场总线技术应用 200例》
信息安全
一种缓冲区溢出攻击通用模型研究
AGeneralModelofBufferOverflowAttack
(四川大学信息安全研究所)徐 耘 周安民 王 炜
XUYUN ZHOUANMIN WANGWEI
摘要:随着 Internet的普及,信息安全问
日趋显著,近年来发生的一系列安全事件让每个连接到 Internet的用户感到不安,
特别是远程缓冲区溢出攻击更是防不胜防。缓冲区溢出攻击是一种常见的攻击方式,对缓冲区溢出漏洞进行恶意利用,会
产生极具破坏性的蠕虫。本文对各种缓冲区溢出漏洞和利用技术进行了深入研究,建立了缓冲区溢出攻击通用模型 OS-
JUMP(OverflowShellcodeJump),并利用该模型,提出了在模型的各个阶段阻截缓冲区溢出攻击的防范措施。
关键词:缓冲区溢出;检测;模型
中图分类号:TP309.2 文献标识码:A
Abstract:WiththepopularizationofInternet,informationsecurityisbecomingincreasinglyapparent.Aseriesofsecurityeventsdur-
ingtheresentyearsareenoughtomakepeopleconnecttoInternetuneasy,especiallytheremote-distancebufferoverflow.Buffer
overflowisawellknownattack.InternetWormswillgenerateenormousloseviabufferoverflowattack.Thispaperfirstdeeplyana-
lyzedvariousattacktechnologiesofbufferoverflow,thensetupageneralattackmodelOSJUMP(OverflowShellcodeJump),atlast,
itpresentedmethodstodefensesuchattackineachphaseofthismodel.
Keywords:Bufferoverflow,detection,model
文章编号:1008-0570(2008)01-3-0048-03
1 前言
Internet为人们提供了一个传输和共享信息的平台,但网络
安全问题也越来越引起人们的关注。利用缓冲区溢出攻击,不
仅可以导致程序运行失败、系统当机、重新启动等严重后果;更
恶劣的是,它可以被利用来执行非授权指令,甚至黑客可以因
此而取得系统特权,进而进行各种非法操作。目前,网络安全问
题已变得越来越严重,已经影响到了网络本身和网络应用服务
业务的发展。因此,对于缓冲区溢出攻击和防范的研究,具有现
实和深远的意义。
2 缓冲区溢出的各种类型和利用技术
一个程序分为多个段,不同的段存放不同的数据。常见的
段有代码段(.text),数据段(.data),只读数据段(.rdata)。各段在内
存中的位置和功能如图 1所示。
图 1进程地址空间布局
如果程序员缺乏安全意识,那么每一个段都有出现缓冲区溢
出漏洞的可能。下面详细
各种类型漏洞的成因和利用技术。
2.1堆栈溢出利用技术
堆栈负责保存函数的局部变量,也负责保存函数调用时相
关寄存器的值。堆栈由内存高址向内存低址方向增长,如果局
部数组变量未作长度检查,就有可能引发堆栈的溢出漏洞。一
个堆栈缓冲区溢出的例子如下。
voidfun(char*input)
{chara[8];
strcpy(a,input);}
系统进入 fun函数时,堆栈先是保存数组 a的 8个字节的
空间,然后保存原EBP和原EIP。strcpy函数没有检查拷贝数据
的长度,如果 input的字符串过长,超过 8个字节,则会在覆盖
完数组 a的空间后,还会覆盖到保存的 EBP和 EIP,从而引发
缓冲区溢出漏洞。
如输入为 input=”aaaaaaaaaaaa/x01/x02/x03/x04”,则堆栈被
覆盖如图 2所示。
图 2堆栈被覆盖布局
当 fun函数返回后,EIP就被改写为 0x04030201,系统就进
入到 0x04030201地址执行。若把 0x04030201改为要执行代码
――Shellcode的地址,系统就会跳入到Shellcode中执行。
2.2堆溢出利用方式
堆栈溢出的利用已经非常成熟,可以做到通用,但堆溢出
的利用相对复杂。在程序运行过程中,malloc等动态分配函数
最后都是调用 HeapAlloc,在heap堆中申请内存空间。比如:
buf1=HeapAlloc(hHeap,0,200);
strcpy(buf1,mybuf);
buf2=HeapAlloc(hHeap,0,16);
程序在堆中分配了buf1和 buf2。这两个堆块,带有对用户
透明的管理结构,当 buf1溢出覆盖时,会覆盖掉后面的空闲堆
管理结构,以及两个双链表指针。在作 HeapAlloc时,系统会把
徐 耘:硕士生
48- -
邮局订阅号:82-946360元/年
技
术
创
新
信息安全
《PLC技术应用 200例》
您的论文得到两院院士关注
第一个指针值写入到第二个指针指向的地址中。
覆盖利用时,将第一个指针覆盖为 Shellcode的地址,第二
个指针覆盖为某个函数的地址,特别的,覆盖为系统默认异常
处理的地址,利用模型如图 3所示。
图 3堆分配利用模型
当在调用 HeapAlloc时,默认异常处理地址被改写为
Shellcode的地址,同时系统异常,进入异常处理流程执行默认
异常处理,从而进入 Shellcode。
2.3虚函数表溢出利用方式
虚函数是 C++中很重要的一个概念,C++的多态性由虚函
数实现。虚函数是定义 virtual关键字的函数,会执行动态联编。
虚函数表保存在.rdata段中。溢出利用可以通过覆盖 objA
的 pvtable,伪造出一个 vftable表,并把 Shellcode的地址伪造成
test1函数的地址。覆盖利用模型如图 4所示。
图 4虚函数表覆盖模型
当程序调用 objA对象的test1成员函数时,就会调用伪造
的虚函数表,进入 Shellcode。
2.4
化溢出利用方式
若?snprintf(buf,sizeof(buf),str);?操作,没有限制用户提交格
式化串,就引发格式化溢出。
如果提交BBBB%20d%n,就会将其写入到对应的地址中。
也可以将 Shellcode地址写入要执行的函数地址。
2.5其他溢出
除上面能独立利用的溢出类型外,还有其他一些较重要的
溢出类型,如整数溢出和流格式溢出。整数溢出和流格式溢出
都不能单独利用,需要通过整数和流格式溢出,引起堆栈溢出
或堆溢出,从而改变系统执行流程,进入到 Shellcode中。
整数溢出的原因是计算机的可保存位数是有限的,超出部
分将会被丢弃。整数溢出特别容易出现在图像处理和视频处理
中,这是因为流由很多段构成,段由标记,参数和数据段构成。
这些文件格式有时会依据标记来确认段,并读取参数进行运
算,再依据这些参数来处理随后紧跟的数据。在对参数进行运
算时相信了文件输入的参数,没有进行确认而导致。
类似的,流格式溢出是直接将 size作为参数调用 memcpy
等函数进行拷贝,如果参数过长,会进入到不可读写的段而引
发异常,从而利用系统异常处理流程,进入到 Shellcode中。
3 缓冲区溢出攻击通用模型――
OSJUMP
3.1模型的定义
通过上面的分析,可以建立 OSJUMP缓冲区攻击通用模型
。OSJUMP这个词来源于 Overflow(溢出)Shellcode(执行代码)和
JUMP(跳转)。这三个方面对成功的缓冲区溢出攻击缺一不可。
定义:OSJUMP指利用 Overflow(缓冲区溢出),覆盖系统数
据,借助系统执行流程(函数的返回,函数的调用,系统异常处
理等),改变系统 EIP指向 Shellcode(目标代码),从而跳入
(JUMP)到 Shellcode中,执行目标代码的攻击过程。OSJUMP模
型如图 5所示。
图 5OSJUMP模型图
3.2模型的说明
模型各个部分的功能和相互联系如下:
Overflow:功能是构造 Shellcode,覆盖系统关键数据。Over-
flow是缓冲区溢出攻击的前提。
Shellcode:是要执行的目标代码,通过 overflow所构造。
Shellcode正确才能保证执行成功。Shellcode执行是缓冲区溢出
攻击的最终目的。
JUMP:利用系统流程,通过 Overflow,改变 EIP为 Shellcode
的地址,跳入 Shellcode。JUMP跳转是的缓冲区溢出攻击能否成
功的关键。
3.3模型的分析
利用 OSJUMP模型,可以对第 2节中的各种溢出类型和攻
击方式进行建模分析,如表 1所示。
表1各种利用类型分析
而未来发展的缓冲区溢出攻击技术,也可以利用该模型进
行解释,分析和预测。
3.4基于 OSJUMP模型的防范措施
基于 OSJUMP模型,可以对缓冲区溢出攻击,进行不同层
次的阻截和防范。现在的一些缓冲区溢出的防范和检测
,
本质上都可以划归于 OSJUMP模型的三个层次。
1)防范 overflow
overflow是缓冲区溢出的前提,如果避免缓冲区溢出的可
能,可以从根本上杜绝缓冲区溢出漏洞。
这个层次的防范手段对应有提高程序员安全编程的思想,
采取安全的编程语言和安全的编程方式,避免 strcpy,memcpy
等危险函数,采用人工或自动化工具,对代码进行安全性分析。
2)防止 jump
通过防止利用系统流程,跳入到 Shellcode中。
防范 jump的手段有 1、在栈中加入 Cookie字段,如果检查
到 Cookie字段被覆盖改变,则停止程序的运行;2、对堆中的链
表指针进行实时检查,如果不符合链表结构,则停止执行;3、修
改栈的分布,局部变量和寄存器保存在不同的堆栈中,从根本
49- -
技
术
创
新
中文核心期刊 《微计算机信息》(管控一体化)2008年第 24卷第 1-3期
360元/年 邮局订阅号:82-946 《现场总线技术应用 200例》
信息安全
上避免利用系统流程实现跳转。
3)防止执行 Shellcode
如果前两个阶段的阻截失败,就需要防止恶意代码 Shell-
code的执行。
防范执行 Shellcode手段有堆栈不可执行;监控恶意代码的
执行流程,进行表征分析等。
4 小结
本文对各种缓冲区溢出漏洞和利用技术进行了深入研究,
建立了缓冲区溢出攻击通用模型 OverflowShellcodeJump,并利
用该模型,提出了截缓冲区溢出攻击的防范措施。
本文作者创新点在于在全面分析了各种缓冲区溢出攻击
类型的基础上,提出了一种缓冲区攻击通用模型――OSJUMP,
通过 OSJUMP模型,提出了在模型各阶段阻止攻击的措施。
OSJUMP对缓冲区溢出攻击技术的预测,以及对蠕虫的防治,有
重要的作用。
参考文献
[1]WeaverN. Potentialstrategiesforhighspeedactiveworms.
2002.http://www.cs.berkeley.edu/~nweaver/worms.pdf
[2]StanifordS,PaxsonV,WeaverN.HowtoowntheInternetin
yoursparetime.In:BonehD,ed.Proc.ofthe11thUsenixSecuri-
tySymp.SanFrancisco,2002.http://www.icir.org/vern/papers/cdc-
usenix-sec02/cdc.pdf
[3]WeaverN.Warholworms:ThepotentialforveryfastInternet
plagues.2002.http://www.cs.berkeley.edu/?nweaver/warhol.html
[4]ZouCC,GongW,TowsleyD.CodeRedwormpropagationmod-
elingandanalysis.In:Proc.ofthe9thACMSymp.onComputer
andCommunicationSecurity.Washington,2002.138~147.
[5]SongD,MalanR,StoneR.AsnapshotofglobalInternetworm
activity.TechnicalReport,ArborNetworks,2001.
http://www.first.org/events/progconf/2002/d5-02-song-slides.pdf
[6]谢恒建 胡兆阳 缓冲区溢出攻击的防护技术分析[J]微计算
机信息 2005,9-3。
作者简介:徐耘(1983-),女(汉族),四川人,硕士生,研究方向为
网络系统与信息安全;周安民(1963-),男(汉族),重庆人,研究
员,硕士生导师,研究方向为信息安全;王炜(1081-),男(汉族),
四川人,博士生,研究方向为网络系统与信息安全。
Biography:XUYun (1983-),Female(Han),SichuanProvince,
SichuanUniversity, Master, researchfieldisNetworkSystem
&InformationSecurity. ZHOU An-min(1963-),Male(Han),
Chongqing, Researcher, researchfieldisInformationSecurity.
WANGWei(1981-),Male(Han),SichuanProvince,Ph.D.candi-
date,researchfieldisnetworkandsecurity.
(610064 四川成都 四川大学信息安全研究所)徐耘 周安民
王炜
(InstituteofInformationSecurity,SichuanUniversity,Cheng-
du610064)XUYunZHOUAn-minWANGWei
通讯地址:(610064 四川成都 四川大学电子信息学院信息安
全研究所)徐耘
(收稿日期:2007.10.23)(修稿日期:2007.12.05)
(上接第 94页)
图2消息消冗算法活动图
3结束语
针对快速公交(BRT)智能系统的集成,自行开发了专用的
消息中间件来提供了消息可靠性以及消息冗余消减等功能,有
效地提高了快速公交(BRT)智能系统的运行效率,降低了应用子
系统的开发难度。本文提出的消息中间件通信控制策略对其他
利用消息中间件集成的大型应用系统也具有一定借鉴意义。
本文创新点是根据国内首条城市快速公交线路的业务特
点,设计并提出了 BRT智能系统专用消息中间件的消息通信策
略。采用该策略设计并开发的中间件系统,专用于快速公交智
能系统的集成,提高了系统的运行效率,增强了系统的整合工
作能力。
参考文献
[1]王宇辉,熊桂喜.机场管理信息系统中信息发布技术的研究与
应用[C].南京大学学报(自然科学),第36卷,第八届全国青年计
算机学术会议专刊,2000.
[2]陈世强.基于XML和Reactor模式的消息中间件的设计[J]微
计算机信息,2006,24,299
[3]JavaMessageServicespecificationVersion1.1 [S],SunMi-
crosystems,Inc.2002-04
[4]AndrewS.Tanenbaum,陆丽娜,伍卫国,刘隆国等.分布式操
作系统[M],电子工业出版社,2004
作者简介:姚育章(1981-),男,河北,北京航空航天大学硕士生,
研究方向为中间件技术、系统集成;熊桂喜 (1964-),男,湖北,北
京航空航天大学副教授,研究方向为系统集成、中文信息处理。
Biography:YaoYuzhang(1981-),male,Heibei,Master,BeiHang
University,majoredinMiddlewareTechnology,SystemIntegra-
tion;XiongGuixi(1964-),male,Hubei,associateprofessor,Bei-
HangUniversity,majoredinInformationRetrieval,SystemInte-
gration.
(100083北京 北京航空航天大学 计算机学院)姚育章 熊桂喜
(CollegeofComputerScience,Beihang University,Beijing
100083)YaoYuZhangXiongGuiXi
通讯地址:(100083北京 北京航空航天大学 计算机学院)姚育章
(收稿日期:2007.10.23)(修稿日期:2007.12.05)
50- -