




已阅读5页,还剩64页未读, 继续免费阅读
(计算机应用技术专业论文)基于信息流的动态污点分析技术研究.pdf.pdf 免费下载
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
i, 独创性声明 本人声明所呈交的学位论文是本人在导师指导下进行的研究工 作及取得的研究成果。据我所知,除了文中特别加以标注和致谢的地 方外,论文中不包含其他人已经发表或撰写过的研究成果,也不包含 为获得电子科技大学或其它教育机构的学位或证书而使用过的材料。 与我一同工作的同志对本研究所做的任何贡献均已在论文中作了明 确的说明并表示谢意。 论文使用授权 1 年阳2 尸 本学位论文作者完全了解电子科技大学有关保留、使用学位论文 的规定,有权保留并向国家有关部门或机构送交论文的复印件和磁 盘,允许论文被查阅和借阅。本人授权电子科技大学可以将学位论文 的全部或部分内容编入有关数据库进行检索,可以采用影印、缩印或 扫描等复制手段保存、汇编学位论文。 ( 保密的学位论文在解密后应遵守此规定) 签名:新躲墼 日期:1 年s 月吖日 一 摘要 摘要 随着计算机技术和网络技术的飞速发展,信息网络已经成为社会发展的 重要保证,随之而来的网络安全问题逐渐成为信息化时代人们面临的最为严 峻的问题之一。理论分析表明,各类网络攻击行为之所以能够对计算机系统产生 巨大的威胁,其主要原因在于计算机及软件系统在设计、开发、维护过程中存在 安全漏洞。长期以来,缓冲区溢出漏洞是各种安全漏洞中最为常见的一种。缓冲 区溢出漏洞非常的普遍,广泛存在于各种操作系统、应用软件之中。c e i 玎声 称约5 0 以上的网络攻击都是利用缓冲区溢出漏洞进行的。如何有效的检测和防 护缓冲区溢出这一类网络攻击是有待人们急需解决的问题。 在网络攻击及漏洞检测方面,国内外已经有一些较为深入的研究工作。然而 已有的手段相对落后,静态分析方法不能很好的解决程序运行时的攻击防护和对 未知攻击的检测等问题,而动态分析方法大多需要目标程序源代码,不利于保护 商业软件和推广应用。在对缓冲区溢出漏洞及检测方法进行了深入研究之后,本 文提出了一种新型的网络攻击检测方法基于信息流的动态污点分析方法。这 是一种主要针对缓冲区溢出漏洞攻击的检测技术,具有实时性,在客户程序动态 执行时完成监控检测任务,不需要客户程序源代码,误报率低等特点。 本文首先阐述了研究背景及意义,缓冲区溢出攻击技术及检测技术等相关背 景知识,然后主要研究了动态污点分析技术的两个重要分析方法数据流分析 和控制流分析。数据流分析方法主要通过指令分析来识别和标记外部污点数据, 跟踪污点数据通过算术类和移动类指令造成的显式信息传播,检测污点数据被用 作跳转对象地址、格式化字符串参数等可疑情况并作出攻击报警提出。控制流分 析通过控制流图和辅助栈来帮助分析污点数据通过分支节点造成的隐式信息流传 播,以减小误报率。接着基于动态污点分析技术构建了原型系统,展示了系统设 计思路及相关实现细节。最后对系统进行了实验评估,从功能上和性能上对系统 进行了测试。实验表明动态污点分析技术能很好的完成针对缓冲区溢出攻击的检 测任务,但是性能还需提升。 关键词:动态污点分析,数据流分析,控制流分析,缓冲区溢出 月 a a b s t m c t a b s t r a c t w i t l lm er a p i dd e v e l o p m e n to fc o m p u t e rt e c l u l o l o g y 觚dn e m o r kt e c l l i l o l o g y i r 怕m a t i o nn e 眦o r k sh a v eb e c o m e 觚i m p o n a r l tg u 黜l t e ef o rs o c i a ld e v e l o p m 饥t t h e 雠s u i i l gi s s u eo fn e t 、v o r ks e 饥丽妙h 嬲b e c o m em e m o s ts 谢o u sp r o b l 锄i i li i l f 0 肌a l i o n a g e t h e o f e t i c a l 孤a l y s i ss h o 、t h a tv 撕o l l st y p 懿o fn e t 、o r ka t t a c k s o nc o m p u t e r s v s t 蜘晦w k c hh a v eb 咖a b l et 0c r e a t eag 心a t 也r e a t a 他m a i h i yd u et 0s e c i l r i t y v u l n 锄b i l i t i 铝i l lc o m p u 衙锄ds o f 栅a r es y s t e m sw l l i c ha r em a d ei n l ep r o c c s s 鹤o f s 0 脚a r ed 懿i g 吗d e v d o p m 锄t 锄dm a i l l t 锄锄c e f o ral o i 培缸m e b u 岱玎0 v e m o w l n e r 曲i l i t yi s l em o s tc o m m o nt ) p ei i la l ll 【i n d so fs e c t l r i t ) ,l n e r a b i l i 6 骼b u 伍玎 o v e r f l o wi sv e r yc o m m o n 锄d 诵d e s p r e a d 证av a r i e 哆o fo p e r a t i i 培s y s t e m s ,a p p l i c a t i o n s o 胁a r e c e r td a j j n e dt l l a tm o 他m 锄5 0 o fn e 铆。呔a n a c k s 甜ec 秭e d0 u tb y1 l s i i l g b u f 】陆o v e f n o w l n 喇b i l i 似h o wt 0d 0e f f e c t i v e l yd e t e c t i o n 锄dp r o t e 娟o nt 0b u 您贸 o v e r n o wv u l n e r a b i l i t yi sw h a tp e o p l en e e dt 0r e s o l v ei m m e d i a t e l y ma 1 1o v 盯t 1 1 ew o d d 廿l er 伪e a r c hf o rd e t e c t i o no fa t t a c k s 如dv u l n e r a b i l i t i e sh 鹤 b e 吼d o i n gw e l l h o w e v s o m ea p p r o ac :h 懿h a v eb 啪a l i n l eb a c k w a r d s 伽ca 1 1 a l y s i s m e 岫d sc 妣n o tp r o p 盯l yp r e v e i l ta n a c k sw r h t l l ep r o g 例叽i sm n i l i n g 锄dd e t e c t u n h o w na t t a c k s ,w l l i l em em 旬o r i 哆邮b l e mo fc l y n 锄i c 锄a l y s i sm e t l l o d si s t l l a ti t n e e d st 0 乞嘲墨c tp r 0 争锄s 0 u r c ec o d e ,s oi tc 锄n o tp r o t e c tc o m m 耐a l f h a r e a r e r d o i n gr e s e 撒hw o d 【d e 印l y 蠡b u a 研o v e m o w l n c r a b i l i 劬w ep r 骼e n ta n e wn e 抑o r k a t t a c kd e t e c t i o na p p r o a c h d y n 锄i ct a i n ta i l a l y s i sb 器e d0 ni n f o n l l a t i o nn o w t l l i si s 觚d e t e c t i o na p p r o a c ha g a i n s ta t t a c l ( sb a s e do nt t l eb u 伍玎o v e m o w l n e r a b i l i t y ,w l l i c h i sw i t l lr e a l t i m e ,d y n 锄i cm o m t o r i n gt l l ec x e c u t i o no fc l i 蜘tp r 0 孕锄t 0p r c v e n t a t t a c l 【s 舶mn e t 、7 i r o r k ,d o 鼹n o tr e q u i r ec l i 髓tp r 0 铲a ms 0 、l r c ec o d e ,a n dh 勰1 0 wf a l s ep o s i t i v 骼 t 1 1 i st 1 1 e s i sf i r s t l yb e 西n sw i md e s 翻b i n gt l l er 懿e a r c hb a c k 伊o u i l d 锄ds i 鲥f i c 觚c e , b u f i 衙o v e r n o w l n e r a b i l i t ya t t a c k st e c i l l l o l o g y 锄dp r e v e n t i o nt e c h n o l o g y 锄ds o m e o t l l e rb a c k 蓼o u n dl c n o w l e d g e t h 明,w ed om a j o rr e s e a r c hw o r ko n 俩oi m p o r t 锄t 觚a l 吼i c a lm e t h o d so fd ”锄i ct a j n t 锄a l y s i s - d a t af l o w 锄a l y s i s 锄dc o n 臼0 l f l o w 锄a l y s i s d a t af l o w 锄a l y s i sm e m o d s ,p r i m 撕l yt l l r o u g l li n s t m c t i o n 锄a l y s i st oi d e n t i 黟 a b s t r a c t 卸dm a r k 廿1 ee x t e m a lt a j n td a t a ,缸出n gt a i l l t e dd a t ap r o p a g a t i o nc a u s e db ye x p l i c i t i i l f o m a t i o nn o w ,d e t e c t i n g 、池e i lt a j n t e dd a t ai su s e da sa j u 玎啦t a r g e ta d d r e s s ,f o 咖a t s t r i n gp a r a m e t e r sa i l ds oo i l a 1 1 da l a m i l l gw h e i la 仕a 6 i ( so c c 吼c o n 乜0 1 f l o wa i l a l y s i si s 耐mm eh e l po fc o r l t r o lf l o wd i a 黟姗a 1 1 da u x i l i a 巧s t a c kt 0 鹊s i s ti l l l ea n a l y s i s i n l p l i c i ti n f 0 1 m a t i o nn o wo ft a i n t e dd a t ac a l l s e db yb r 眦c hn o d eo fp f o 黟锄,i no r d e rt o r e d u c et h ef 酊s en e g a t i v e s t h w eb u i l da p r o t o t y p es y s t 锄b a s e do nd y n 锄i ct a i n t 锄a i y s i ss h o wt l l es y s t e md 商伊a n ds o m ei n l p l e m e m 砒o nd e t a i l s f i n a l l y w e 百v e 锄 e x p 嘶m e l l t a le v a l u a t i o no fn l ep m t o t y p es y s t e m ,丘o m l e 血n 硎o n a l i t ys i d ea i l d p 刊白咖a 1 1 c es i d e t h ee x p 舐m e i l t ss h o wm a tm ea p p r o a c ho fd y n a i i l i ct 血t 锄a l y s i s b 舔e do ni i l f o n n a t i o nn o wc a nw e l lc o m p l e t em et a s kf o rp r e v 咖i o nb u 彘ro v e r f l o w a t t a c l ( s ,b u tm ep e r f o m l a n c en e e d st ob ei m p r o v e d k e yw o r d s :d y l l 锄i ct a i n t 锄a l y s i s ,d a t an o wa 1 1 a l y s i s ,c o n 的lf l o wa n a l y s i s , b u 丘酹o v e r f l o w 1 1 1 砸b i l 时 l u 一 目录 目录 第一章引言1 1 1 课题背景及研究意义1 1 2 国内外研究现状3 1 3 论文主要工作和组织结构4 第二章安全漏洞及攻击检测6 2 1 计算机安全漏洞简介6 2 1 1 什么是安全漏洞6 2 1 2 安全漏洞分类7 2 2 缓冲区溢出漏洞8 2 2 1 缓冲区溢出原理8 2 2 2 堆栈溢出攻击技术一9 2 2 3 堆溢出攻击技术1 2 2 2 4 格式化字符串溢出攻击技术13 2 2 5 流程跳转攻击技术16 2 3 常见漏洞攻击检测方法17 2 3 1 非执行栈技术1 7 2 3 2 非堆执行和数据技术l8 2 3 3 安全共享库技术l8 2 3 4 地址空间随机化技术1 9 2 4 本章小结2 0 第三章动态污点分析原理2 l 3 1 动态污点分析概述2 l 3 2 基于数据流的动态污点分析2 3 3 2 1 动态数据流分析2 3 3 3 基于控制流的动态污点分析2 6 3 3 1 控制流图简介及相关定义2 6 3 3 2 动态控制流分析算法2 7 3 4 本章小结3 0 i v 目录 第四章原型系统设计与实现3 l 4 1 系统框架设计3 1 4 1 1 系统功能及流程图3 1 4 1 2 系统模块划分3 2 4 2d v l l 锄。刚o 平台3 3 4 3 各模块设计3 6 4 3 1 污点数据标记模块3 6 4 3 2 污点数据跟踪模块3 6 4 3 3 污点数据误用检测模块3 7 4 3 4 控制流分析模块3 8 4 4 系统实现3 9 4 4 1 系统启动3 9 4 4 2 影子内存实现4 0 4 4 3 各模块关键技术4 2 4 5 本章小结4 7 第五章实验与评估4 8 5 1 功能评估测试4 8 5 1 1 攻击检测覆盖分析4 8 5 1 2 漏报分析4 9 5 1 3 误报分析4 9 5 1 4 实验测试5 0 5 2 性能评估测试5 1 5 2 1 兼容性测试5 1 5 2 2 性能实验测试5 2 5 2 3 性能改进5 3 5 3 本章小结5 4 第六章结论5 5 6 1 总结5 5 6 2 未来展望5 5 致 射5 6 参考文献5 7 在学期间的研究成果一6 0 v 第一章引言 1 1 课题背景及研究意义 第一章引言 随着计算机技术和网络技术的飞速发展,信息网络已经成为社会发展的 重要保证【,随之而来的网络安全问题逐渐成为信息化时代人们面临的最为 严峻的问题之一。各类计算机病毒、恶意程序对处于互联网之中的计算机系统产 生巨大的威胁。蠕虫可以在几小时甚至几分钟之内危害成千上万的主机,而木马 则在后台远程控制并威胁本地数据和系统【2 】。 1 9 8 8 年1 1 月2 日,m o r r i s 蠕虫发作,几天之内6 0 0 0 台以上的h l t e n l e t 服务器 被感染,损失超过一千万美元。它造成的影响是如此之大,使它在后来的1 0 几年 里,被反病毒厂商作为经典病毒案例。m o r r i s 蠕虫通过缸g e r d ,s e n d m a i l ,r e x e c 凰h 三种系统服务中存在漏洞进行传播。 1 9 9 8 年c m 病毒造成全球数十万台计算机遭受破坏。 2 0 0 1 年7 月1 9 日,c o d e r e d 蠕虫爆发,在爆发后的9 小时内就攻击了2 5 万 台计算机,造成的损失估计超过2 0 亿美元。随后几个月内产生了威力更强的几个 变种,其中c o d e r e di i 蠕虫造成的损失估计1 2 亿美元。c o d e r e d 蠕虫使用了很多 相当高级的编程技术,通过微软公司的i i s 服务的i d a 漏洞进行传播。 2 0 0 1 年9 月1 8 日,n i m d a 蠕虫被发现,不同于以前的蠕虫,n i m d a 开始结合 病毒技术。对n i m d a 造成的损失评估数据从5 亿美元攀升到2 6 亿美元后,继续攀 升,到现在己无法估计。n i i i l d a 蠕虫只攻击微软公司的w i n d o w s 系列操作系统, 它通过电子邮件、网络邻近共享文件、t e 浏览器的内嵌m i m e 类型自动执行漏洞、 i i s 服务器文件目录遍历漏洞、c o d e r c di i 和s a ( 1 m i n 彤i i s 蠕虫留下的后门共五种方 式进行传播。其中前三种方式是病毒传播的方式。 2 0 0 3 年,s l a m m e r 蠕虫在1 0 分钟内导致互联网大塞车。同年8 月,利用w i n d o w s 系统i 冲c 漏洞传播的“冲击波 蠕虫爆发,8 天内导致全球电脑用户损失高达2 0 亿美元之多。 严酷的现实唤起了人们对网络安全研究的重视。理论分析表明,各类网络攻 击行为之所以能够对计算机系统产生巨大的威胁,其主要原因在于计算机及软件 电子科技大学硕士学位论文 系统在设计、开发、维护过程中存在安全漏洞【3 】。这些典型的网络入侵事件的第一 步就是寻找计算机系统的安全漏洞【4 1 。而这些安全漏洞的大量存在也是网络安全问 题的总体形势趋于严峻的重要原因之一。c e r t c c2 0 0 8 年工作报告中指出,信息 系统软件的安全漏洞是各种安全威胁的主要根源,层出不穷的应用软件安全漏洞 的威胁也越来越大【5 j 。 长期以来,缓冲区溢出漏洞是各种安全漏洞中最为常见的一种。缓冲区溢出 漏洞非常的普遍,广泛存在于各种操作系统、应用软件之中。同时缓冲区溢 出漏洞又是非常危险,利用缓冲区溢出攻击,可以导致程序运行失败、系统 当机、重新启动等后果。更为严重的是,可以利用它执行非授权指令,甚至 可以取得系统特权,进而进行各种非法操作【6 】。c e r t 声称约5 0 以上的网络 攻击都是利用缓冲区溢出漏洞进行的r 7 1 。虽然缓冲区溢出漏洞已经引起了人们足 够的重视,但是由于程序员不良的编程习惯,长期积累大量潜在的漏洞隐患, 导致新的缓冲区溢出漏洞层出不穷,新的缓冲区溢出攻击也大量涌现。如何 有效的检测和防护缓冲区溢出这一类网络攻击是有待人们急需解决的问题。 如上所述,迫切需要一种能有效检测防护各类流行网络攻击的方法,特别是 针对缓冲区溢出攻击的防护方法。该方法应该能快速自动的检测到各种基于安全 漏洞的网络攻击行为,如缓冲区溢出攻击等。该方法应该误报率、漏报率低,并 且运行时的负载尽可能小,稳定性好,不会影响到网络用户的正常工作。同时, 考虑大量商业化软件的存在,源代码获取较困难,如果能基于二进制程序进行动 态检测将带来很大的便利。 本文提出一种新型的网络攻击检测技术一一基于信息流的动态污点分析 技术。该技术基于信息流,包含数据流分析和控制流分析,在二进制程序运 行时动态执行监控和检测任务。该技术可有效检测各种基于安全漏洞的网络 攻击,包括缓冲区溢出攻击、格式化字符串攻击等。本文还将构建基于该技术的 原型系统,实现完备的动态污点分析技术来完成对目标程序的运行监控和网络攻 击检测任务。该系统将具备以下特点: 1 不需要目标程序源代码,在目标二进制程序运行时动态监控并检测来自网络 的攻击; 2 能有效检测各类网络攻击,包括缓冲区溢出攻击、格式化字符串攻击等; 3 基于信息流,即包括数据流和控制流,全面应对各种可能的情况; 4 误报率、漏报率低; 5 负载较小,不会影响程序正常功能。 2 第一章引言 1 2 国内外研究现状 在网络攻击及漏洞检测方面,国内外已经有一些较为深入的研究工作。通过 对目前国内外相关研究文献的收集整理,对基于安全漏洞的网络攻击检测研究工 作可作如下分类: 基于源代码的静态检测技术:这是目前研究相对较多的一个分支,其特征是 通过对源代码的扫描和分析,对缓冲区溢出发生的模式进行识别,从而完成溢出 漏洞的检测。 基于目标代码的检测技术:目前这类研究尚仍然比较少见,一种典型的研究 是通过一些反汇编根据对目标代码进行处理,然后再依赖一些源代码静态检测技 术进行处理。另外一些黑箱式的检测工具,比如f u z z ,但是它一来于类似于强力 破解的技术,尚处于研究的初步阶段。 基于源代码的动态检测技术:这类技术通过再执行时对程序内存中的访问情 形加以监控来完成溢出漏洞的检测。比如通过在原码中插入一些约束和判断的模 块,然后在编译后的程序运行期间对有关变量和堆栈区域的监控来检测漏洞。 此外,按照检测粒度来分类,有如下两类: 粗粒度攻击检测:检查系统不正常的行为,如在某个端口扫描或是不规则行 为。这种检测方法并不能检测是否真正发生溢出或是如何溢出,而凭借外表现象 来推测溢出攻击的发生,因此常常产生误报。该检测方法不是研究的热点。 细粒度攻击检测:基于代码级的漏洞攻击检测,能检测出溢出攻击是否发生、 如何发生。这种检测方法误报率低,能提供溢出攻击的详细信息,是研究的热点。 但是目前大多数基于此的检测方法需要目标程序源代码或是反汇编代码,不能被 广泛运用到应用程序中,特别是商用软件,这限阻碍了这些方法的开展和实用性。 本文提出的基于信息流的动态污点分析技术,是一种细粒度动态攻击检测技 术。该技术在保证有效检测溢出攻击、误报率低的同时,还能适用于商用软件, 即不需要程序源代码。此外有学者还把它用于检测其他基于w e b 程序漏洞的攻 击,如s q l 注入攻击等。这使得它有很大的灵活性和广泛的适用性。 正因动态污点分析技术具有如此多的优势和广泛的应用前景,国外安全学者 已经展开了研究,并取得了一些成果。相对而言,国内在这方面的研究较少。 l 鲫和c h i u e h 提出基于污点标记和追踪的方法来监控代码【引,但是他们的方 法有两个缺点:一是需要重新编译代码,这使得该方法适用性下降;二是不支持 控制流的数据处理,这使得污点分析不够全面。 n c w s o m e 和s o n g 提出了动态数据流分析技术的缓冲区溢出漏洞检测方法p j 。 一 电子科技大学硕士学位论文 他们的方法标记来外部输入的数据,跟踪污点数据的传播,并检测这些数据使用 的合法性。他们的方法揭开了动态污点分析技术的核心内容,然而运行负载问题 值得关注,几十倍甚至上百倍的性能开销对程序运行造成不小的影响。同时他们 的方法也不支持控制流的数据处理。 此外,研究者还把动态污点分析技术用于其他一些领域,如程序识别、软件 测试、调试工具等。 通过分析已有的研究成果我们发现,现有的基于动态污点分析的技术都致力 于解决某一个或某一类具体问题,不方便扩展到其他领域。另外,现有的技术大 多是基于数据流的动态污点分析,不支持控制流的数据分析。再有,所有动态污 点分析技术面临最大的难题就是运行开销问题。这个新型的网络攻击检测技术本 身有着极高的研究价值和广泛的应用前景,但还存在诸多不足之处,有待人们进 一步研究和挖掘它的潜力。正因如此,本文寻求构建一个完备的基于信息流的动 态污点分析的理论框架,使其具有很大的灵活性和适用性,同时具备控制流数据 分析能力,并拥有尽可能小的运行负载。 1 3 论文主要工作和组织结构 本文主要研究工作如下: 1 研究数据流分析技术,解决如何标记、跟踪、分析污点数据等数据流分析 的关键问题。 2 研究控制流分析技术,解决如何处理程序控制分支的污点数据传播等问题, 完善动态污点分析技术。 3 研究镜像内存技术、影子线程技术,解决性能开销问题。 4 研究二进制程序运行监控平台,基于动态污点分析技术构建原型系统。 本文共六章,内容组织结构如下: 第一章,介绍课题背景及研究意义,国内外研究现状,论文工作及内容组织 结构等。 第二章,介绍安全漏洞、缓冲区溢出漏洞攻击类型及检测方法等相关知识。 第三章,详细阐述动态污点分析技术原理,数据流分析流程,控制流分析方 法等。 第四章,构建基于动态分析技术的原型系统,给出系统框架,模块设计、部 4 第一章引言 分关键技术设计及实现等。 第五章,实验并评估动态污点分析技术及原型系统,给出优化建议。 第六章,给出结论并展望未来研究工作。 5 电子科技大学硕士学位论文 第二章安全漏洞及攻击检测 本章主要阐述计算机安全漏洞及常见的基于漏洞攻击的检测方法,着重介绍 了缓冲区溢出漏洞等相关背景知识。 2 1 计算机安全漏洞简介 2 1 1 什么是安全漏洞 漏洞是在硬件、软件、协议的具体实现或系统安全策略上存在的缺陷,从而 可以使攻击者能够在未授权的情况下访问或破坏系统。漏洞会影响到很大范围的 软硬件设备,包括作系统本身及其支撑软件,网络客户和服务器软件,网络路由 器和安全防火墙等。换而言之,在这些不同的软硬件设备中都可能存在不同的安 全漏洞问题。在不同种类的软、硬件设备,同种设备的不同版本之间,由不同设 备构成的不同系统之间,以及同种系统在不同的设置条件下,都会存在各自不同 的安全漏洞问题。漏洞问题是与时间紧密相关的。一个系统从发布的那一天起, 随着用户的深入使用,系统中存在的漏洞会被不断暴露出来,这些早先被发现的 漏洞也会不断被系统供应商发布的补丁软件修补,或在以后发布的新版系统中得 以纠正。而在新版系统纠正了旧版本中具有漏洞的同时,也会引入一些新的漏洞 和错误。因而随着时间的推移,旧的漏洞会不断消失,新的漏洞会不断出现。漏 洞问题也会长期存在l l 。 本文讨论的安全漏洞,主要指计算机系统软件漏洞。安全漏洞是在系统具体 实现和具体使用中产生的错误,但并不是系统中存在的错误都是安全漏洞。只有 能威胁到系统安全的错误才是漏洞。许多错误在通常情况下并不会对系统安全造 成危害,只有被人为的在某些条件下故意使用时才会影响系统安全。漏洞虽然可 能最初就存在于系统当中,但一个漏洞并不是自己出现的,必须要有人发现。在 实际使用中,用户会发现系统中存在错误,而入侵者会有意利用其中的某些错误 并使其成为威胁系统安全的工具,这时人们会认识到这个错误是一个系统安全漏 洞。系统供应商会尽快发布针对这个漏洞的补丁程序,纠j 下这个错误【l0 1 。这就是 6 第二章安全漏洞及攻击检测 系统安全漏洞从被发现到被纠正的一般过程。然而,基于安全漏洞的攻击其传播 速率是惊人的,而在短时间内的破坏力也是巨大的。因此,不能只寄望于系统供 应商发布的补丁,这是需要一个过程时间的。当补丁打好时,成千上万的主机已 经遭受攻击。时刻准备抵御这些网络攻击,才是当务之急。 2 1 2 安全漏洞分类 早期的计算机安全漏洞分类方法有很多种,主要有p a 分类法、r i s o s 分类法、 a s l a m 分类法和e r i c 蹦g h t 分类法等。由于近年来计算机安全漏洞层出不穷, 且 漏洞的起因、漏洞的种类、漏洞的利用方式以及漏洞的影响结果各不相同,仅靠 早期的那些分类方法已经不能满足对目前存在的各种漏洞进行分类的要求。因此, 综合目前计算机安全漏洞的特性,业界又提出了一些新的漏洞分类方法,下面主 要介绍按漏洞的形成原因的分类方法【1 1 1 : 1 ) 输入验证漏洞 这类漏洞的形成原因对用户提供的外部数据的合法性没有作必要的检查,从 而造成攻击者非法进入系统。例如:应用程序没有正确识别错误的输入、接收了 无关的输入数据、系统无法处理空输入域、域值关联错误等都会导致输入验证错 误。 2 ) 缓冲区溢出漏洞 这类漏洞的形成原因是由于向程序的缓冲区中录入的数据超过其规定长度造 成缓冲区溢出,破坏程序正常的堆栈,使程序执行其他命令。这类漏洞危害特别 大,长期以来一直被入侵者利用发动网络攻击。下面有一节将对此类漏洞进行详 细讲解。 3 ) 边界条件漏洞 这类漏洞的形成原因是未对边界条件进行有效性验证。例如:当一个进程读 或写超出有效地址边界的数据、系统资源耗尽、固定结构长度的数据溢出等都会 导致边界条件错误。 4 ) 访问校验漏洞 这类漏洞的形成原因是由于程序的访问验证部分存在某些逻辑错误,使攻击 者可以绕过访问控制进入系统。例如:一个对象的调用或其他操作在其访问域之 外、一个对象接收了另一个未授权对象的输入、系统没有正确地进行授权操作等 都会导致访问校验错误。 7 电子科技大学硕士学位论文 5 ) 意外情况处置漏洞 这类漏洞的形成原因是由于程序在它的实现逻辑中没有考虑到一些意外情 况,系统没有处理这些情况的功能模块、设备或用户输入等造成的异常情况而导 致运行出错。 6 1 设计漏洞 这个类别是非常笼统的,严格来说,大多数漏洞的存在都是设计错误。 7 ) 竞争条件漏洞 这类漏洞的形成原因是由于程序处理文件等实体时在序列同步方面存在问 题,可能存在一个机会窗口使攻击者能够施以外来的影响。 8 ) 顺序化操作漏洞 这类漏洞的形成原因是由于错误的序列化操作而造成的错误。 9 ) 环境错误 这类漏洞的形成原因是由于一些环境变量的错误设置或恶意设置而导致有问 题的特权程序可能去执行攻击代码。例如:在特定的环境中模块之间的交互造成 错误、一个程序在特定的机器或特定的配置下将出现错误、操作环境与软件设计 时的假设不同造成错误等。 1 0 ) 配置错误 这类漏洞的形成原因是由于系统和应用的配置有误。例如:访问权限配置错 误、参数配置错误、系统被安装在不正确的地方或位置等【l l 】。 2 2 缓冲区溢出漏洞 在各类安全漏洞中,被入侵者利用得最多,危害最大的当属缓冲区溢出漏洞。 如前面引言所述,缓冲区溢出漏洞广泛存在于各种操作系统、应用软件之中。 5 0 以上的网络攻击都是利用缓冲区溢出漏洞进行的。而且能造成全世界网络瘫 痪、成千上万主机遭受攻击的著名蠕虫木马,几乎都是利用了某软件的缓冲区溢 出漏洞而实施攻击。在2 0 0 0 年1 1 月举行的a c ms i g s o f t 软件工程会议上, c e r t 的砌c h a r dp e th i a 认为缓冲区溢出漏洞是美国ns a ( n a t i o n a ls e c 嘶t y a g e n c y ) ,而b r i a ns n o w 则预测,在未来2 0 年内,缓冲区溢出漏洞仍将继续存在【lz 。 2 2 1 缓冲区溢出原理 8 第二章安全漏洞及攻击检测 缓冲区是内存中存放数据的地方,是程序运行时在计算机内存中的一个连续 数据块,它保存着给定类型及长度的数据【1 3 1 。例如c 语言中经常要用到的数组, 其中最常见的是字符数组。一般来说,一个变量数据的长度是固定的,而且同一 个函数里的不同变量在内存中是紧挨着存放。那么缓冲区也有一段固定长度,如 果程序往缓冲区中写入了过量长度的数据,而又不加任何检查数据边界的机制, 这就造成了缓冲区溢出。显然到这一步还看不出任何端倪,但是把它和c 语言程 序结合起来看,这个漏洞的危害性便显现出来。 由于w i n d o w s 系列操作系统和u i l i x 系列操作系统在互联网及p c 机上应用的 广泛性,以及与c 语言结合的紧密性,不得不承认大量的系统软件和应用软件都 是由c 语言编写的事实。然而非常不幸的是,c 语言程序特别容易出现缓冲区溢 出漏洞。从语言本身来讲,效率是c 语言重要的设计目标之一,c 语言允许直接 的低级的内存访问操作和指针的算术运算,但是c 语言对指针和数组没有进行边 界检查,非常容易越过数组边界的读写操作,导致缓冲区溢出【1 2 】。 如果只是缓冲区溢出,也不会产生安全问题。但是c 程序里存放变量的缓冲 区,即栈里还紧挨着函数返回地址,如果攻击者精心构造了一溢出字符串,恰好 覆盖了函数返回地址,从而改变程序后续的运行流程,这样攻击便发生了。通常 攻击者会使程序转而执行一段预先在内存中放入的s h e l l c 0 d e 代码。s h e l l c o d e 代码 将为攻击者提供对目标主机的控制服务,它能够获得被攻击程序同等的运行权限, 而大多数的服务程序都是以超级用户权限运行的。也就是说,s h e n c o d e 代码有可 能以超级用户权限执行,这样攻击者就可以完全控制目标主机1 1 4 1 。 如上所述,一个标准的缓冲区溢出攻击可以分为三个步骤:首先,向有漏洞 的目标系统的缓冲区注入攻击字符串,包括s h e l l c o d e 代码;然后,发现其系统中 运行程序存在的溢出漏洞以及触发条件;最后,精心构造溢出字符串使得目标进 程的内存中的特定数据( 如函数返回地址) 被修改,程序的执行流程跳转至预先注入 的s h e l l c o d e 代码,攻击者获得被攻击主机的控制权,继而以一定的方式控制被攻 击主机。 缓冲区溢出攻击的种类很多。从攻击原理分类,缓冲区溢出攻击可以分为堆 栈溢出、堆溢出、格式化字符串溢出和单字节溢出等;从攻击方式分类,又可分 为本地溢出和远程溢出两类【l4 1 。 2 2 2 堆栈溢出攻击技术 9 电子科技大学硕士学位论文 一般来说,进程在内存中的映像从低地址开始分为五部分:正文段、初始化 数据段、未初始化数据段、堆区、栈区。正文区是由程序确定的,存放代码指令 和只读数据。正文区域对应可执行文件的文本段,这个区域通常被标记为只读, 任何针对该区域的写操作都会导致错误。数据区域包含了已初始化和未初始化的 数据段,静态变量储存在这个区域中。堆区和栈区用来存放动态变量和函数调用 的现场数据,堆区和栈区共享同一块内存区域,栈由该区域的最高地址向低地址 增长,而堆由该区域的低地址向高地址增长,如图2 1 所示。这里主要关注堆栈区 域。 图2 1 内存结构 下面来看一段c 语言的程序,如果向一个缓冲区填充的数据量超过定义的缓 冲区长度,而又不做边界长度检查,就会发生缓冲区溢出。 v o i dm n c t i o n ( c h a r u - s r c ) c h a rb u - d e s t 16 ; s 仃c p y ( b u e s t ,b u f _ s r c ) ; ) 严主函数宰 m a i l ) i n t i ; c h a rs 2 5 6 】; f o r ( i :0 ;i 2 5 6 ;i + + ) s 仃 i 】= a ; 如n c t i o n ( s 仃) ; ) 从程序代码可以看出,数组s t r 的大小( 2 5 6 字节) 远远超过了目标缓冲区 1 0 第二章安全漏洞及攻击检测 b u fd e s t 的大小( 1 6 字节) ,当调用s 仃印y 函数向目标缓冲区拷贝数据时,由于s 呻y 函数不会检查数组是否越界,从而导致了b u fd e s t 缓冲区溢出。 在高级语言中,程序函数调用和函数中的临时变量都会用到堆栈。当程序中 发生函数调用时,操作情况如下:首先把参数压入堆栈;继而向堆栈中压入指令 寄存器( e i p ) 中的内容,作为函数返回地址;接着放入堆栈的是基址寄存器( e b p ) 的 内容;然后把当前的栈指针( e s p ) 拷贝到( e b p ) ,作为新的基地址;最后把e s p 减去 适当的数值,为本地变量留出一定空间。劬c t i o n 函数调用前后,堆栈情况如图2 2 所示。 图2 - 2 函数调用时的堆栈情形 从图2 2 中可以看出,f 岫c t i o n 函数调用完成后,s 缸数组的内容( 2 5 6 个字母 a 即o x 4 1 4 1 4 1 w ) 造成缓冲区溢出,覆盖了从地址b u f b e s t 到地址b u f d e s t + 2 5 6 内存空间的原来的内容,包括调用函数f u n c t i o n 时保存的e b p 和返回地址r e t 。这 样,函数返回时就返回到地址0 x 6 1 6 1 6 l ,发生错误。可见,缓冲区溢出如果覆盖 到了堆栈返回地址,便可以改变程序的正常执行流程。假设攻击者预先将一段 s h c l l c 0 d e 代码放入目标程序缓冲区中,并构造一段攻击字符串使得覆盖函数的返 回地址正好指向这段s h e l l c o d e 代码首地址( 如图2 3 ) ,则当函数返回时,程序将转 而执行攻击者所注入的s h e l l c o d e 代码,使得攻击者将获得主机的主控权。如果受 攻击的程序是以超级用户身份运行,则攻击者甚至可获得超级用户权限,将完全 控制受攻击主机。 电子科技大学硕士学位论文 图2 3 覆盖返回地址 由于这种溢出攻击其溢出字符串是放在栈中,所以通常称其为堆栈溢出攻击。 2 2 3 堆溢出攻击技术 在程序中,堆用于动态分配和释放程序所使用的对象。操作系统中,大部分 的内存区是在内核级被动态分配的,但堆区是由应用程序来分配的,它在编译的 时候被初始化。非初始化的数据段( b s s ) 用于存放程序的静态变量,这部分内存都 是被初始化为零的。在考虑缓冲区溢出攻击时,h e a p 段和b s s 段具有相近的特 性,因此下面将要提到的基于堆的溢出既包含h e a p 段的溢出,也包含b s s 段的 溢出。 在大部分的系统( 包括l i n u x 系统) 中,h e a p 段是向高地址增长的。如果一段 程序中先后声明两个静态变量,则先声明的变量的地址小于后声明的变量的地址。 接下来是一段有漏洞的程序: s t a t i cc h a rb u 妇f e r 5 0 ; s t a t i cm ( 幸印呻( ) ; w l l i l e ( s 圩! = o ) u f 】衙h = 木s 仃+ + ; ) 掌劬c p 仃( ) ; 在堆中,变量的存放如图2 4 所示: 1 2 第二
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 咨询服务协议书样本
- 解析卷-北师大版8年级数学上册期中试题及参考答案详解(B卷)
- 2025版电子信息设备融资租赁委托合同样本
- 2025年度国内高端柴油批发与物流配送合作合同
- 2025版城镇化改造土方工程劳务分包合同范本
- 2025版住宅小区改造工程委托施工合同
- 2025版企业间融资租赁借款合同汇编
- 2025年度智能停车场设备安装与租赁合同样本
- 2025年度城市公共交通系统采购框架合同
- 2025年度典当借款与艺术品市场风险管理服务协议
- 工程建设强制性条文-电力工程部分
- 档案数字化工作实施方案
- 苏教版四年级数学上册教案全册
- 短视频在互联网媒体与在线游戏行业的应用研究
- 中医体重管理
- 家长会校长讲座
- 中国脑小血管病诊治指南2023版
- 房地产中介服务操作手册
- 水质-氯化物的测定验证报告
- 2024年全国职业院校技能大赛中职组(水利工程制图与应用赛项)考试题库(含答案)
- 多年生牧草加气地下滴灌技术规程
评论
0/150
提交评论