(计算机应用技术专业论文)gecism中“缓冲溢出类非我”的识别与消除.pdf_第1页
(计算机应用技术专业论文)gecism中“缓冲溢出类非我”的识别与消除.pdf_第2页
(计算机应用技术专业论文)gecism中“缓冲溢出类非我”的识别与消除.pdf_第3页
(计算机应用技术专业论文)gecism中“缓冲溢出类非我”的识别与消除.pdf_第4页
(计算机应用技术专业论文)gecism中“缓冲溢出类非我”的识别与消除.pdf_第5页
已阅读5页,还剩45页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

摘要摘要缓冲区溢出漏洞非常普遍,可存在于w i n d o w s 、u n i x 、n e t w a r e 、s q ls e v e r 等各种系统和应用程序中,因此缓冲区溢出攻击技术也成为了一项广泛而基础的攻击技术,并且也成为目前攻击技术的主要发展方向之一。缓冲溢出攻击的常用手段就是通过改变程序的执行流程,转而去执行其植入的入侵代码,进而获得系统的r o o t权限,对系统安全构成了巨大的威胁本文在模仿生物免疫系统设计的计算机安全系统模型g e c i s m ( g e n e r a lc o m p u t e ri m m u n es y s t e mm o d e l ) 基础上构建了d a e ( d e t e c t i n ga n de l i m i n a t i n g )a g e n t 。此代理可通过第一次模糊检测,第二次精确检测来判定缓冲溢出攻击是否发生,进而通过定位入侵发生的位置对入侵进行消除。并在以下方面对“缓冲溢出类非我”的检测与消除进行了研究:训练集分为两部分,其一为入侵程序,用于提取规则进行f 次模糊检测使用,其二为可能被入侵的对象,通过在l i n u x 系统下定义了系统调用与返回地址组成的向量,利用二叉树这一特殊的数据结构进行向量存储,用于第二次精确检测;采用异常处理机制,将处理函数提前写入训练集的对象中,保存函数运行时的堆栈信息,如果入侵发生则启动该机制,使被入侵程序的运行恢复到初态,尽量减少入侵所造成的危害。关键词:缓冲溢出系统调用二叉树识别消除ab s t r a c ta b s t r a c tb u f f e r o v e r f l o wi sv e r yc o m m o n ,a n di tc a ne x i ti nl o t so fs y s t e m sa n da p p l i c a t i o n ,s u c ha sw i n d o w s ,u n i x ,n e t w a r e ,s q ls e v e es ob u f f e r - o v e r f l o wa t t a c kh a sb e e nt h ec o m m o na n db a s i ca t t a c kt e c h n o l o g y , a n dn o w a d a y si ti sa l s ot h em a i nd i r e c t i o no fa t t a c kt e c h n o l o g y t h ec o m m o nm e t h o do fb u f f e r - o v e r f l o wa t t a c ki st oc h a n g et h eo r d e ro fp r o g r a me x e c u t i o ni no r d e rt oe x e c u t et h ec o d ew h i c hi sw r i t t e nb yi n t r u d e r b yt h i sw a y , t h ei n t r u d e rc a ng e tt h er o o ta c c e s s ,a n di tw i l lt a k eg r e a tt h r e a tt ot h es y s t e m t h ea r t i c l ec o n s t r u c t st h ed a e ( d e t e c t i n ga n de l i m i n a t i n g ) o nt h eb a s eo fg e c i s m ( g e n e r a lc o m p u t e ri m m u n es y s t e mm o d e l ) t h ea g e n tc a nd e t e c ti n t r u s i o ni m p r e c i s e l ya tt h ef i r s tt i m e ,t h e nd e t e c ta c c u r a t e l ya tt h es e c o n dt i m e a tl a s ti tc a nf i n dt h ea c c u r a t ed i r e c t i o nw h e r et h ei n t r u s i o nh a p p e n e dt oe l i m i n a t ei t t h ea r t i c l ea l s od o e st h er e s e a r c ha b o u td e t e c t i o na n de l i m i n a t i o no fb u f f e r o v e r f l o wa t t a c ko nt h ef o l l o w i n ga s p e c t :f i r s to fa l l ,t r a i n i n ga s s e m b l yi sd i v i d e di n t ot w op a r t s ,o n ei si n t r u s i o np r o g r a mw h i c hi su s e dt og e tt h er u l eo ft h i sk i n di n t r u s i o na n da n o t h e ri so b j e c tp r o g r a mw h i c hm a yb ea t t a c k e db yt h ei n t r u s i o n b ym a k i n gt h ed e f i n i t i o no fv e c t o rw h i c hi sc o m p o s e db ys y s t e mc a l la n di t sa d d r e s so nt h eb a s eo fl i n u xs y s t e m ,w ec a ni n s t a l lt h e s ev e c t o r si nt h ef o r n lo fb i n t r e ew h i c hi su s e df o rs e c o n da c c u r a t ed e t e c t i o n w ew i l lw r i t ec e r t a i np r o g r a mi nt h eo b j e c ta p p l i c a t i o ni no r d e rt os a v et h es i t u a t i o no fs t a c k o n c ei n t r u s i o nh a p p e n s ,w ec a n u s ee x c e p t i o n a lm e c h a n i s mt or e c o v e rt h ei n t r u d e dp r o g r a m k e y w o r d s :b u f f e r - o v e r f l o w ,s y s t e m c a l l ,b i n t r e e ,d e t e c t i o n ,e l i m i n a t i o n ,c l a s s i f i o河北大学学位论文原创性声明本人郑重声明:所呈交的学位论文,是本人在导师指导下进行的研究工作及取得的研究成果。尽我所知,除了文中特别加以标注和致谢的地方外,论文中不包含其他人已经发表或撰写的研究成果,也不包含为获得河北大学或其他教育机构的学位或证书所使用过的材料。与我一同工作的同志对本研究所做的任何贡献均已在论文中作了明确的说明并表示了致谢。作者签名:握鹫日期:上吐年月l 1 7学位论文使用授权声明本人完全了解河北大学有关保留、使用学位论文的规定,即:学校有权保留并向国家有关部门或机构送交论文的复印件和电子版,允许论文被查阅和借阅。学校可以公布论文的全部或部分内容,可以采用影印、缩印或其他复制手段保存论文。本学位论文属于l 、保密口,在年月同解密后适用本授权声明。2 、不保密眵。( 请在以上相应方格内打“”)作者签名乙雀聋导师签名:丕型毪一一一日期:丝丑年上月扯日日期:丝z 年上月卫同第1 章绪论1 1 引言第1 章绪论计算机的普及和网络技术的发展形成了一面双刃剑,一方面它使得人们可以更加自由地进行信息、知识的共享,另一方面,这也使得计算机系统安全问题同益严重,基于网络的攻击行为已成为对计算机系统安全造成威胁的主要因素。回首2 0 0 1 年,i n t e r n e t 上引起轩然大波的两个病毒:c o d er e d ( 红色代码) 和n i m d a( 尼姆达) i i 】。这两个病毒对网络安全所造成的破坏是前所未有的,它们主要是利用了缓冲区溢出漏洞,因此这种漏洞的攻击技术就被称为缓冲区溢出攻击技术。其实早在1 9 9 6 年,黑客电子邮件组邮递清单的仲裁者a l p h eo n e 就写了一篇题为“s m a s h i n gt h es t a c kf o rf u na n dp r o f i t 的文章1 7 】,该文章清楚的阐述了种攻击方式缓冲区溢出攻击。文章的发表引起了人们的广泛关注,同时,存在于大量服务进程和应用程序中的漏洞也被相继发现,这些漏洞引起了许多严重的安全性问题。迄今为止,缓冲区溢出仍然是以一种危害相当大的计算机安全问题而存在的。根据c e r t ( c o m p u t e re m e r g e n c yr e a d i n e s st e a m ) 发布的2 0 0 3 年年度报告,由缓冲区溢出漏洞导致的攻击占了远程网络攻击和渗透的5 0 以上【3 】,并预计仍有上升的趋势。虽然缓冲区溢出漏洞产生的直接原因被认为是由于c 语言编译器本身以及编程人员的疏忽造成的,但是后来事实证明,这种漏洞的消除和避免几乎是不可能的。因此对于缓冲溢出攻击的检测和识别就成为了克服该类入侵的主要途径。由于缓冲区溢出漏洞非常普遍,可存在于w i n d o w s 、u n i x 、n e t w a r e 、s o ls e v e r 等各种系统和应用程序中1 3 j ,因此缓冲区溢出攻击技术也成为了一项广泛而基础的攻击技术之一。开展缓冲区溢出攻击的研究,已经成为计算机系统整体安全性的一个重要方面和有益补充。鉴于以上原因,本篇论文在对缓冲区溢出攻击进行深入分析研究后,在g e c i s m ( 计算机免疫系统模型) 的框架内,实现了对此类攻击的识别和消除。河北人学 :学硕十学位论文1 2 研究现状1 2 1 计算机免疫系统研究现状国外起主导作用的是美国t h eu n i v e r s i t yo fn e wm e x i c o 的s t e p h a n i ef o r r e s t教授领导的研究小组。从九十年代中期开始研究计算机中的“自我 与“非我”,对计算机免疫系统模型及计算机免疫系统的应用作了很多研究工作,提出了计算机中的“自我”、“非我”概念并在底层进行了定义。介绍了计算机免疫学与计算机免疫系统的设计原则,提出了一个计算机免疫系统的构造模型,并且把它应用于工业领域。另外,o s l ou n i v e r s i t yc o l l e g e 的n e a ls t e p h e n s o n ,s n o wc r a s h 小组将计算机免疫的概念拓宽1 4 】,将其定义为利用人工免疫对包括计算机安全在内的整个计算机系统进行管理1 5 j 。近些年来,在国内计算机免疫学研究方面也做了大量工作,有了很大的发展,取得了一些成果。武汉大学、北方交通大学计算机科学技术系、国防科技大学管理科学与工程系、北京邮电大学程控交换与通信网国家重点实验室分别提出了基于多代理的计算机安全免疫系统检测模型、一种基于免疫的入侵检测模型、一种基于人工免疫模型的入侵检测方法、一种基于免疫原理的网络入侵检测新模型【6 1 ,及武汉大学与北方交通大学合作,提出的基于主机安全扫描的计算机免疫系统检测模型瞄j 。另外,南京航空航天大学对利用免疫机理完成抗病毒的技术进行了研究。北京理工大学自动控制系,从控制论的角度论述了计算机免疫和生物免疫的相似性,讨论了在计算机防病毒领域中应用m u l t i - a g e n t 控制技术构筑计算机仿生物免疫系统的可行性和实用性i 吼l o 】。1 2 2 缓冲溢出攻击技术的研究现状以国外而言,早在7 0 年代初,c 程序的缓冲区溢出问题被认为是c 语言数据完整性模型的一个可能后果( 即不对数组做边界检查) 。但直到1 9 8 8 年,m o r r i s 蠕虫病毒出现并在因特网上肆意传播,才引起了人们对于缓冲区溢出问题的广泛关注】。1 9 9 6 年,出现了一些较为全面地介绍缓冲区溢出的文章,这些文章提出了控制程序流的跳转方法和如何解决小缓冲区溢出的方法,其中包括a l e p ho n e 的“s m a s h i n gt h es t a c kf o rf u na n dp r o f i t ,1 2 】。2 第1 章绪论面临越来越多的来自缓冲区溢出攻击的威胁,1 9 9 8 年1 月c r i s p i nc o w a n ,c a p o np u ,d a v i dm a i e r ,h e a t h e rh i n t o n ,p e a tb a k k e ,s t e v eb e a t t i e ,a a r o ng r i e r ,p e r r yw a g l e ,a n do i a nz h a n g 在第七届u s e n i x 安全学术会议上发表了题目为a u t o m a t i cd e t e c t i o na n dp r e v e n t i o no fb u f f e r - o v e r f l o wa t t a c k s 的论文,提出了侦测和防止缓冲区溢出发生的自适应技术,引起了多方的注意。同年5 月份,在美国o a k l a n d 举行的i e e e 安全和密码学术年会上c r i s p i nc o w a n ,t i mc h e n ,c a l t o np u ,a n dp e r r yw a g i e 展示了i m m u n ix 根据自动侦测和预防技术开发的s t a c k g u a r d 系统f 1 2 j 。后来,r i c h a r dj o n e s 和p a u lk e l l y 开发了一个g c c 的补丁即s t a c k s h i l e d i b 】,可用来实现c 程序完全的数组边界检查,防范溢出问题。在2 0 0 0 年的u s e n i x 科技年会上,a r a s hb a r a t l o o 等人开发出了静态方法和动态方法相结合的工具l i b s a f e 与l i b v e r i f y l 】。其中l i b s a f e 为所有包含潜在缓冲区溢出弱点的c 语言库函数打补丁,确保这些函数在执行时进行严格的边界检查,而l i b v e r i f y则类似于s t a c k g u a r d ,在函数调用开始时在堆空间保存c a n a r y ,在返回时验证其合法性,以此来保证指针的完整性。在2 0 0 1 年美国o a k l a n d 举行的i e e e 安全和密码学术讨论会上,d w a g n e r 和d d e a n提出了从源程序中抽取系统调用信息,利用这些系统调用的先后次序构成一个全局的“控制流图”,以此来判断是否出现异常【1 5 j 。在2 0 0 3 年,h e n r yh a n p i n gf e n g 等人提出了利用发生系统调用时堆栈中的信息来推测程序执行历史( 也可以说是未来) 的方法,并把它用于程序异常行为的检测,他们的方法被称为v t p a t h i 场】。在国内,对于缓冲溢出攻击的研究起步比较晚,2 0 0 0 年左右才有部分研究者涉足这方面的研究,迄今虽然这方面的研究和技术水平有所进展,但是目前国内尚没有专门的组织开展这方面的研究工作。1 3 本文的工作本文在前人工作的基础上,以计算机免疫系统模型为研究框架,并以此为依托,通过对“缓冲溢出类”攻击大量地分析研究和实验,提出并实现了对缓冲溢出类攻击的识别和消除的一种方法。其思想是,根据缓冲溢出类入侵的特征,将入侵程序和被入侵程序同时进行训练,不只是从进程的行为来判断是否为入侵,而是通过采集被入侵程序的- 3 一河北大! 学1 :学硕十学 青:论文系统调用和其返回地址,精确地检测是否有这类入侵发生。一旦检测到此类入侵,则立刻终止入侵的程序或进程,并且对被入侵的程序暂时中断,保存洁净点,采用回滚的技术将其再进行恢复,以使程序能重新正常执行。1 4 论文的结构本文首先对计算机免疫系统以及“缓冲区溢出类”攻击进行介绍,指出本文所作的工作实际是对6 e c i s m 中ba g e n t 和t ha g e n t 的具体实现,并且详细论述了此类入侵的分类以及各类的入侵原理。随后在提出系统调用与返回地址相结合构建线索二叉树的基础上,对此类入侵进行了精确得检测,同时对被入侵的程序进行了恢复,实现了对此类入侵的消除。最后通过实验验证了识别和消除方法的可行性和有效性。第一章主要是对课题的背景和国内外研究现状进行了概述。第二章概要介绍了计算机免疫系统模型以及本课题与此系统的联系,重点论述了缓冲溢出类攻击的形成原理、分类以及入侵特征。第三章主要介绍了本文所构建的用于识别与消除“缓冲溢出类非我”的代理模型,论述了该代理的构成以及各组件的功能。第四章首先研究分析了缓冲溢出类入侵程序的数据集,采用c 4 5 的算法对入侵程序进行规则提取,得到缓冲溢出攻击的规则特征,通过实验论证了规则的正确性,但同时也显示出了规则的局限性。进而提出了将被入侵对象列入训练范围,即将存在缓冲溢出漏洞的程序或守护进程也带入训练阶段,生成搜索二叉树,从而实现对入侵的进一步精确检测。第五章研究了在有入侵发生的时候,如何实现对入侵的精确检测,并准确定位入侵的发生位置,同时通过对被入侵程序进行中断、回滚的方法来消除入侵。第六章总结,并对下步工作提出设想。第2 章缓冲溢出类攻击2 1 计算机免疫系统第2 章缓冲溢出类攻击计算机免疫系统模型( g e n e r a lc o m p u t e ri m m u n es y s t e mm o d e l ) 就是根据仿生学原理,模拟生物系统的免疫机理,设计的一种计算机系统安全模型。该模型由不同的代理构成,各代理通过相互协作,实现以下三个功能【1 7 l :1 区分“自我”、“非我”;2 消除“非我”;3 调节自身的反应强度。g e c i s m 源于生物免疫系统,它对入侵按是否有特征及是否有方法消除进行分别对待,同时引入沙盒主机,对未知入侵进行测试,模拟初次免疫应答。g e c i s m 总体结构如图2 1 所示。图2 1g e c i s m 总体结构g e c i s m 通过各个智能代理的相互协作实现计算机免疫功能,它们的功能说明如下1 类m ca g e n t 完成g e c i s m 抗原提呈的功能,采用规则判断“自我”、“非我”。河北大! 学:i :学硕士学位论文2 类t ha g e n t 的功能是对已检测到的“非我”进行分类。3 类ba g e n t 的功能与b 细胞的功能相似,主要是完成对于已知特征的“非我”根据消除方法库中的方法进行消除。4 类t da g e n t 在功能上与t d 细胞相似。它由类t ha g e n t 分类器中检测到的未知特征的“非我”激活,同时接受类ba g e n t 无法消除的“非我”。被激活后,对检测到的“非我”进行回滚,找到一个最近的洁净点。对该点的状态进行备份,同时在该点设置障碍,使进程执行到此不能继续执行,并激活类t ca g e n t 。5 。类t ca g e n t 接收未知特征或无法消除的“非我 ,且把含有“非我”的进程迁移到沙盒主机。6 沙盒主机对未知特征的“非我 进行测试,得出该“非我”是否有害,能否消除。在沙盒主机中,通过在内核中插入判断语句来定义一些安全规则,主要根据进程要执行的操作、参数、运行环境等因素来判断进程是否会产生危害。在特定的环境中违反了相应安全规则的进程就是“非我”,并尝试消除方法。同时,对检测和分类规则的生成与更新也是在沙盒中完成的。本文所要完成的工作是对类m ca g e n t 、类ba g e n t 以及类t da g e n t 的功能的深化和演化,添加代理d a ea g e n t ,实现了对特定非我缓冲溢出类非我的较精确检测和消除。2 2 缓冲溢出攻击目前,在对1 i n u x 系统的入侵中,缓冲溢出是最常见而且是长久以来一直存在的一种入侵,所谓缓冲区,简单说就是程序运行时内存中的一块连续的区域。静态变量在程序加载时定位于数据段,动态变量在程序运行时定位于堆栈中。“缓冲区溢出”简单的讲就是向一个缓冲区中写入过多的数据,超出了其范围边界所产生的溢出。2 2 1lln u x 下c 语言函数的调用机制1 进程在内存中的影像假设现在有一个程序p r o g r a m ,它的函数调用顺序如下:第2 章缓冲溢出类攻击m a i n 0f u n c l ( ) :f)由上可知,主函数m a i n 调用函数f u n c l :函数f u n c l 调用函数f u n c 2 :函数f u n c 2调用函数f u n c 3 。当程序被操作系统调入内存运行,其相对应的进程在内存中的影像如图2 - 2 所示:图2 - 2 进程在内存中的影像图内存高址内存低址其中函数的栈帧包含了下面的信息:1 ) 函数的返回地址,返回地址是存放在调用函数的栈帧或被调用函数的栈帧里。7 河北人学j i :学硕十学位论文2 ) 调用函数的栈帧信息,即栈顶和栈底。3 ) 为函数的局部变量分配的空间。4 ) 为被调用函数的参数所分配的空间。2 2 2 缓冲区溢出攻击的原理缓冲区溢出攻击是利用了c 语言中对数组和指针引用不进行边界检查的弱点,通过向一个缓冲区内写入超过其大小的数据,修改特定内存,改变程序执行顺序,达到攻击的目的。c 语言中产生缓冲区溢出主要有两个原因【1 9 1 :其一是因为c 语言对数组和指针引用并不自动进行边界检查,其二是由于标准c 库提供的一些函数如s t r c p y 、s t r c a t 、p r i n t f 等是不安全的。从函数的栈帧结构可以看出,由于函数的局部变量的内存分配是发生在栈帧里的,所以如果我们在某一个函数里定义了缓冲区变量,则这个缓冲区变量所占用的内存空间是在该函数被调用时所建立的栈帧里。由于对缓冲区的潜在操作( 比如字串的复制) 都是从内存低址到高址的,而内存中所保存的函数调用返回地址往往就在该缓冲区的上方( 高地址) 这是由栈的特性决定的,这就为覆盖函数的返回地址提供了条件。当入侵者用大于目标缓冲区范围的内容来向缓冲区进行填充时,就有可能改写函数保存在函数栈帧中的返回地址,从而使程序的执行流程发生转移。这就意味着,进程接受了入侵者的控制,他们可以让进程改变原来的执行流程,去执行已经编写好的代码,这样就形成了缓冲区溢出攻击。2 2 3 缓冲溢出攻击的分类缓冲溢出攻击的分类方法很多,从其攻击原理分可分为基于堆栈的溢出、基于堆和b s s 的溢出以及基于格式化字符串的溢出i jj 。1 基于堆栈的溢出f 2 ( ) 】进程在内存的映像可以被分成三个区域:文本、数据和堆栈。文本区是由程序确定的,存放代码( 指令) 和只读数据,该区域对应可执行文件的文本段,这个区域通常被标记为只读,任何针对其的写操作都会导致段错误。数据区域包含了已初始化和未初始化的数据,静态变量储存在这个区域中。而堆栈区用来存放动态变量和函数调用的现场数据,r 第2 章缓冲满f j l 类攻击其中就包括c 语言的局部变量。在函数返回前,程序会使寄存器e s p 指回堆栈中的返回地址,也就是说,在函数执行过程中入栈的数据都必须出栈。图2 - 3 显示了调用某函数f时栈的大致情形。在不同的操作系统中,采用不同的编译器,不同的编译参数,对栈中数据的分布都有影响,但大体如此。鉴于此可得到种有效的系统攻击方法当函数调用时,返回地址存放在堆栈中,局部变量也存放在堆栈中;如果局部变量中有一个字符数组,并且该程序使用了危险的函数来操纵该字符数组,那么就可以通过向该程序传递超长的字符串来使得该字符数组“溢出”,从而达到覆盖返回地址、执行恶意代码的目的,这样就形成了基于堆栈的缓冲区溢出攻击。高地址低地址图2 - 3 调用函数f 时栈的情况2 基于堆和b s s 的溢出1 2 l 】堆( h e a p ) 段是由应用程序动态分配的内存区,操作系统中,大部分的内存区是在内核一级被动态分配的,但h e a p 段是由应用程序来分配的,它在编译的时候被初始化。在l i n u x 系统中,通常为用m a l l o c 0 ,c a l l o c 0 和r e a l l o c 0 函数开辟的内存单元,b s s 段包含未被初始化的数据,在程序运行的时候才被分配,在被写入数据前,它始终保持全零。在大部分的系统中:h e a p 段和b s s 段是从低端地址向高端地址增长的。下面的例子说明了哪些数据是存放在堆段或b s s 段。s t a t i ci n tg l o b a l ,c c n s t a n t = 1 ;严存储在d a t a 段唯s t a t i ci n tg l o b a l ,v a r i a b l e ;幸存储在b s s 段毒v o i dm a i n ( i n ta r g c ,c h a r33a r g v ) 母a r g c 和a r g v 存储在栈段木q 可北人学t 号:硕十学位论文i n tl o c a l ,d y n a m i cc ,v a r i a b l e ;木存储在栈段木s t a t i ci n tl o c a l ,s t a t i c ,v a r i a b l e ;幸存储在b s s 段幸i n t 母b u t , p o i n t e r = ( i n t 宰) m a l l o c ( 3 2 ) :木存储在堆段牛)计算机系统中的一个进程,在需要处理新的数据时,通常利用m a l l o c ( ) 函数在内存中开辟新的缓冲区,然后将需要处理的数据写入到利用m a l l o c ( ) 创建的内存中。比如要将存储在d a t a 中的数据读入到b u f 中进行处理,其伪代码如下所示:b u f = m a l l o c ( b u f f e r - s i z e ) ;s t r c p y ( b u f ,d a t a ) ;p r o c e s st h ed a t ai nb u f ;这里可以得出一个动态分配内存进行数据处理的模型f 2 l 】,如图2 - 4 所示:图2 4 数据在缓冲区中的处理过程在此模型下,实际上是假设了在缓冲区创建时,已经准确地知道所要处理的数据大小或者是数据大小的上界。但是这个要求,在实际情况中并不是总能被满足,可能发生的情况有:( 1 ) 由于疏忽,缓冲区过小,以至不能容纳下所要处理的正常大小的数据;( 2 ) 由于软件升级等原因,造成系统的不兼容,导致原先所定义的缓冲区大小不能满足新的要求;( 3 ) 黑客发动攻击,恶意传送过大的数据到缓冲区,造成溢出。3 格式化字符串溢出f ! :】在c 语言中p r i n t f ( ) 函数被用来向终端( 或系统隐含指定的输出设备) 输出若干任意类型的数据。它的一般格式为p r i n t f ( 格式控制,输出表项) ;c 语言提供一系列与p r i n t f 函数拥有相近特性的函数。这一系列函数包括f p r i n t f ,第2 章缓冲溢出类攻击s p r i n t f , s n p r i n t f , v p r i n t f , v f p r i n t f , v s p r i n t f 和v s n p r i n t f 等。格式化字符串就是p r i n t f ( ) 系列输出函数中用来控制数据输出格式的格式控制字符串。p r i n t f 系列函数被调用时,从格式串中依次读取字符,当遇到格式化字符时,就按照格式控制字符从输出表项对应的变量中读取数据,然后按照控制字符规定的格式输出数据。在这类函数的格式控制符中“n ”是最易于被利用的,它的作用是把已经输出的字符串的长度写入指定的内存变量中。在一些大型程序中由于运行情况复杂,程序员往往需要使用这个格式符获取当前输出的字符个数。如果p r i n t f 中的输出表项的个数大于格式化字符的个数,多余的输出表项将被忽略;如果输出表项的个数小于格式化字符的个数,p r i n t f 将从给定的输出表项的下一个内容为多余的格式控制字符的内存单元中读取数据。例如,语句:p r i n t f ( ”d ,d ,n ,”,1 ,2 ) i ,当这条语句执行时,堆栈的情况如图2 5 所示:栈顶栈底e b pr e t格式化字符串地址12d u m p输出参数1输出参数2图2 - 5 堆栈示意图从图中可以看出,格式化字符串地址以及输出参数依次存放在堆栈中,p r i n t f 函数依次从输出参数中读出数据并输出,当遇到第三个格式控制字符“n ”时,如果d u m p 的值为有效地址,则以它为地址的内存单元将会被改写为p r i n t f 函数输出的字符串长度值,1 1 -河北大学:i :学硕十学何沦文由此可见,p r i n t f 函数可以改写内存。同理,与研n t f 一类的函数都可以通过格式控制字符达到改写内存的目的,从而为攻击者所利用,去执行一段恶意的代码。2 2 4 缓冲溢出攻击常用方法缓冲溢出攻击的根本目的是使程序的执行流程发生跳转,去执行入侵者已植入的一段代码( s h e l l c o d e ) ,实现控制被攻击系统的目的。要实现程序的执行跳转,入侵者要通过缓冲溢出漏洞修改有关执行流程的信息,如返回地址。覆盖返回地址是一种最常用的执行流程跳转技术【2 3 1 。当进程调用另一个进程时,将e i p 压入堆栈保存,即返回地址( r e t ) ,然后跳转到被调用的进程继续执行;当进程从被调用的过程返回时,则将保存的r e t 的值弹出至l j e i p 中,然后从这个地址继续执行。从内存地址上看,被调用的过程的堆栈缓冲区位于r e t 的低地址端,同时缓冲区的增长方向是从低地址到高地址,因此用大于目标缓冲区大小的内容来向缓冲区进行填充时,就可能改写函数保存在函数栈帧中的返回地址,当进程从过程返回时,一个特定的地址被恢复至u e i p ,进程将跳转到这个地址继续执行。这个地址一般被设定为被植入的s h e l l c o d e的首地址,当进程的执行流程发生跳转时,就会执行入侵者植入的s h e l l c o d e ,进而达到入侵的目的。2 2 5 缓冲溢出攻击的对象1 ) s u i d 及s g i d 程序1 1 2 】l i n u x 允许其他用户以某个可执行文件的文件拥有者的用户i d 或用户组i d 的身份来执行该文件,这是通过设置该可执行文件的文件属性为s u i d 或s g i d 来实现的。也就是说如果某个可执行文件被设了s u i d 或s g i d ,那么当系统中其他用户执行该文件时就相当于以该文件属主的用户或用户组身份来执行。如果某个可执行文件的属主是r o o t ,而这个文件又被设了s u i d ,那么如果该可执行文件存在可利用的缓冲区溢出漏洞,则可能会被利用来以r o o t 的身份执行入侵者准备好的代码。2 ) 各种端口守护( 服务) 进程l i n u x 中有不少守护( 服务) 进程是以r o o t 的身份运行,如果这些程序存在可利用的缓冲区溢出漏洞,那么入侵者就可以让它们以当前运行的用户身份加o t 去执行已经准1 2 第2 章缓冲浠:类攻击备好的代码。由于守护进程已经以r o o t 的身份在运行。我们并不需要设置相对应的可执行文件的s u i d 或s g i d 属性。又由于此类攻击通常是从远程机器上向目标机器上的端口发送有恶意的数据造成的,所以叫做”远程溢出”攻击。2 3 小结本章首先概要介绍了计算机免疫系统的总体概念和设计原则,并简要说明了本文所做的工作与此系统相关模块的联系;之后对缓冲溢出攻击从攻击原理、入侵分类、入侵技术以及入侵对象等方面进行了详细论述。河北大学i :学硕十学何论文第3 章入侵识别与消除代理d a ea g e n t 的整体设计3 1d a ea g e n t 结构图本文依据前人所做的工作,将课题进一步深入与细化,实现了对“非我”的具体分类研究。根据前文所述,为了实现对缓冲溢出类非我的检测和消除,构建的d a ea g e n t代理结构如图3 1 所示:3 2 各部分的功能图3 1 代理结构图此代理的主要研究对象为缓冲溢出类非我,主要目的是完成对此类非我的识别和消除,其主要构件功能如下所示:1 采集器a采集器a 是代理和外部环境的接口,每隔一定的时间,在环境中提取一定长度的样本点,送检测器a ,并将被保护进程状态进行缓存。2 检测器a第3 章入侵识圳与消除代理d a ea g e n t 的整体设计控制检测器a 的工作频率,利用非我规则检测样本点。在此,“非我”特指缓冲溢出类非我,规则库中的规则目前也只限于这种入侵的规则提取,如果检测到的样本点与规则库中的规则匹配率大于阈值r ,则激活信号传送器a 。3 信号传送器a信号传送器a 被激活后,发送信号暂时冻结当前进程,同时采集到入侵程序中的e x e c v e 系统调用参数,将其送至并激活采集器b 。4 采集器b在收到信号传送器a 送来的信号后,根据传送的参数,采集器b 采集新一组的样本点,采集器b 与采集器a 的不同之处在于,加入了地址采集功能,并送入检测器b 。5 检测器b访问训练库中的数据,检测样本点,根据指定算法,如果出现了异常,则激活信号传送器b 。6 信号传送器b信号传送器b 被激活后,发送信号启动消除器。7 消除器终止信号传送器a 冻结的进程,搜索消除方法库,消除非我。8 非我规则库由于本文只针对缓冲溢出类非我进行研究,因此规则库中只包括提取的此类非我的规则。在对入侵程序进行训练时,训练集共分为三类,即基于堆栈的缓冲溢出,基于格式化字符串的溢出以及基于堆和b s s 的溢出。9 训练库训练前文中所描述的入侵对象,将数据库中的数据结构训练为二叉树结构,数据形式为向量形式,其共包括两个元素,即( s y s _ c a l l ,a d d r e s s ) 。1 0 消除方法库存储对于该类特征的“非我”的消除方法。河北人学: 学硕十学何论文3 3 小结本章主要从整体上介绍了d a e a g e n t 代理的结构组成以及各构件的功能。从宏观上看,该代理主要完成了两个功能,一是检测入侵,二是消除入侵。在下面的第四、第五章中将分别详细论述这两个功能模块的原理和实现过程。第4 章g e c i s m 中“缓冲溢出类1 卜我”柃洲的实现第4 章g e cls m 中“缓冲溢出类非我”检测的实现4 1g e cis m 中“缓冲溢出类非我 检测通过本文之前对缓冲溢出类攻击的分析可知,不论哪种类型的攻击,其根本目的都是使程序改变正常的执行顺序而转去执行入侵者植入的恶意代码。而实现这种目的最常用的技术就是改变被入侵程序的返回地址。鉴于此,本文在前人工作的基础上,提出了种新的思想,即针对此类入侵,不仅考虑入侵进程的系统调用序列,提取特征;同时最主要的是将入侵对象进程也列入了研究范畴。之所以要考虑入侵对象,即“自我”集1 3 8 】,主要是由于缓冲溢出类入侵的攻击特性所决定的。因为前人设计的计算机免疫系统主要是从进程的行为来判断是否为“非我”,判断途径是检测系统调用序列,这在大多数情况下是可以比较准确的识别“非我”,但下面这个例子则是一种例外,如下所示:程序s t a c k e x p c# i n c l u d e v o i di n t r u d e r ( )p r i n t f ( “b ec a r e f u l ! b e i n gh a c k e d ! ! ! i l 1 1 ”) ;)i n tm a i n ( i n ta r g c ,c h a r 孛a r g v )c h a rb u f 1 0 ;s t r c p y ( b u f , a r g v 1 ) ;p r i n t f ( “p r o g r a m m ei sn o r m a l ! k n k n ”) ;)程序s t a c k e x p c 中的s t r c p y ( ) 函数如果发生了缓冲溢出,攻击者将i n t r u d e r 函数的入1 3 地址溢出覆盖了堆栈中的e i p 值,即下一条指令的地址值,则程序会跳转至i n t r u d e r函数,如果仅凭进程行为来判断,则采集到的系统调用序列在入侵前后都是一样的,因河北人学i j 学硕十学何论文为均执行了同样的系统调用s y s,因此仅用行为来判断则不能检测到入侵发生。鉴write于这样的入侵检测不是很精确,本文引入了以上提到的新的思想。通过采集入侵对象进程的系统调用和其相应的返回地址,建立二叉树,能够更加精确得检测返回地址的状态,从而判断入侵是否发生以及确定危害发生的位置,为后面消除“非我”的工作打下了基础。由于入侵对象的自身特征,即那些拥有s u i d 和s g i d的程序及守护程序的数量在有限范围内,因此这种设计思想具有可行性。4 1 1 缓冲溢出类非我规则库的生成1 非我分类规则提取系统调用序列是计算机免疫系统中检测“非我 的数据源,系统调用序列也作为“非我”分类的数据源,这是基于以下原理f 2 4 】:一方面,不同种类的“非我”( 网络入侵,攻击,病毒等) 会执行不同的代码,进而产生不同的系统调用序列,利用这些序列的不同之处就可以辨别“非我”的种类,这就构成了“非我”的类别特征。、另一方面,系统调用序列是以系统调用号形成的整数串形式采集存储的,数据形式统一,容易进行精简和自动分析,需要较少人为干预。本文所用于训练的“非我”数据集是自行采集的,主要包括两类入侵,基于堆栈的和基于格式化字符串的,此种分类方法是按照缓冲溢出攻击原理来进行的,由于以上两类入侵原理是最常见的,因此作为了分类的依据。此外用于实验的数据集还包括在新墨西哥州大学计算机免疫系统网站上采集到的其他六类非我。用于测试的测试集是来自于新墨西哥州大学计算机免疫系统网站的数掘集,分别为针对s y n t h e n t i cs e n d m a i l 进行入侵的缓冲溢出程序s y s l o g e di n t r u s i o n ,s m 5 x ,s m 5 6 5 ai n t r u s i o n ;针对s y n t h e t i cw u f t n 的缓冲溢出入侵;针对n a m e dp r o g r a mf r o mb i n d4 9 6 的入侵等共计四类。在对训练集提取规则时,我们将采集到的系统调用序列以定长窗口w = 7 ,步长为1滑动,生成的系统调用的短序列如表4 一l 所示:第4 章g e c i s m 中“缓冲浠出类1 r 我”检洲的实现表4 1 系统调刚短序列表对训练样本集合中的每条记录以短序列中的7 个位置为属性,记做p o ,p l ,p 6 ;以0 , 2 ,3 ,4 ,5 ,6 ,7 为归属类别,其中类别7 定义为缓冲溢出类入侵,前六类为非缓冲溢出类入侵,实验结果如下所示:d e c i s i o nt r e er u l e ss i z ee r r o r sn oe r r o r s8 4 97 3 0 ( 6 8 ) 4 6 47 9 3 ( 7 4 ) ( a )( b )( c )( d )( e )( f )( g ) l e f t ,再将f 1 l e f t 作为根节点考虑,由于系第4 章g e c i s m 中“缓冲浠f i j 类1 r 我”检测的实现统调用不可再分,所f 1 l e f t 的左孩子为空,f 1 l e f t 的右孩子节点为f 1 调用的第二个系统调用及其相应的返回地址组成的向量;至此返回到f 1 节点,f 1 节点的右孩子向量为主函数所调用的第二个子函数挖及其相应的返回地址组成的向量;依此类推可最终生成一棵训练二又树。例如作为训练集的程序分别命名为f u n c l ,f u n c 2g , aoo f u n c i ,每一个程序都可训练为一棵二叉树,举例如下:f u n c l ( )f 1 ( ) ;* f l 调用的系统调用宰采集得到)该程序对应的二又树f u n c l t r e e 结构如图4 - 1 所示。同理其他程序也同样可以训练成相似的二叉树f u n c 2 _ _ t r e e ,f u n c 3 _ t r e e ,f u n c it r e e 。这样就形成了有n 棵二叉树的森林,接下来再将此森林训练成一棵复杂的二叉树t r e e ,建立思想同建立单棵二叉树的思想类似,只是将单棵二叉树根节点的右孩子进行了填充,其总体结构如图4 2 所示:4 1 3 检测原理及算法描述通过实验可知,一个完整j 下确的程序在执行结束后,都会以主函数的返回地址返回,至此程序的执行不会出现错误。对于有缓冲溢出漏洞的程序而言,如果没有入侵的发生,河北人学1 :学硕十学何论文程序的运行可能会出现三种情况,其一是缓冲溢出漏洞并没有起作用,即程序顺利执行完毕;其二是缓冲溢出漏洞起了反作用,如程序员的操作触犯了该漏洞,则此时就会出现“s e g m e n t i o nf a u l t ”的情况,即某段程序的最终返回地址出现了问题,导致程序不能正常返回;其三即此漏洞被入侵者利用,更改了程序的返回地址,使其执行一段其他代码,这种情况下程序表面上好似在正常执行,实际却更改了原来的执行流程,最终程序仍能正常返回。图4 l 二叉树结构因此为了使检测识别工作更加准确,同时又能确定入侵发生的位置,我们可通过同时采集每一系统调用所对应的返回地址来达到此目的。为了便于检测,将采集到的系统调用向量( s y sc a l l ,a d d r e s s ) 序列仍以滑动窗口机制进行划分,窗口长度为7

温馨提示

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

评论

0/150

提交评论