




已阅读5页,还剩42页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
s c h o o lo fc o m p u t e rs c i e n c e & e n g i n e e r i n g s o u t h e a s tu n i v e r s 时 f e b r u 哪2 0 1 0 东南大 本人声明所呈交的 的研究成果。尽我所知 其他人已经发表或撰写 的学位或证书而使用过 已在论文中作了明确的 东南大学学位论文使用授权声明 东南大学、中国科学技术信息研究所、国家图书馆有权保留本人所送交学位 论文的复印件和电子文档,可以采用影印、缩印或其他复制手段保存论文。本人 电子文档的内容和纸质论文的内容相一致。除在保密期内的保密论文外,允许论 文被查阅和借阅,可以公布( 包括刊登) 论文的全部或部分内容。论文的公布( 包 括刊登) 授权东南大学研究生院办理。 缎日肌刎加 摘要 题目:基于路径松弛的网络安全漏洞侦测 硕士研究生姓名:张实睿 导师姓名:徐宝文 学校名称:东南大学 摘要 随着互联网的应用与普及,网络安全问题成为人们关注的焦点。在已知的网络安全漏洞 中,跨站攻击,s q l 注入式攻击以及由整数溢出引发的缓冲区溢出漏洞近年来上升趋势最为 明显,造成了很大的危害。相关领域的研究者提出了多种方法加以侦测和防范,这些方法主要 分为动态的测试方法和静态源代码审查方法。前者的查错能力受制于测试用例覆盖面的局限 性,后者充分考虑了程序各种可能的执行路径与输入,但容易产生误报,影响测试者的判断。 为解决上述困境,本文提出了一种基于路径松弛的漏洞检测方法。对于一个测试的执行, 该方法不但以程序实际执行测试用例的结果作为检测依据,还通过静态分析为程序加入约束 信息,使得实际的测试结果与相应的约束信息共同作为漏洞侦测的依据,扩大了侦测范围。 根据程序实际测试结果,可以检测到在当前执行中程序是否出现错误;根据插入的约束信息, 可以推断出,在同一条执行路径下,程序是否有潜在的出错可能。基于路径松弛的漏洞检测 方法本质上是动态测试方法的延伸,它与动态测试的区别在于测试之前引入轻量级的程序静 态分析而获取约束信息。 为验证此方法的有效性,本文分别针对这三类网络安全漏洞,以开源程序代码为测试来 源,应用相应的路径松弛侦测方法进行实例研究。实例研究的结果表明,本文提出的基于路 径松弛的方法能够发现程序中潜在的网络安全漏洞,是行之有效的。 关键词:跨站攻击s q l 注入整数溢出路径松弛约束信息 u i 硕i :学位论文 a b s t r a c t t i t i e :n e t w o r ks e c u r i t yv u l n e r a b i l i t yd e t e c t i o nb a s e do np a t hr e l a x a t i o n n a m e :s h i l l j iz h a i l g s u p e r 、,i s o r :b a o w e l l ) ( u u n i v e r s i 哆:s o u t h e a s tu i l i v e r s i t y w i t ht h er a p i dd “e l o p m e l l to fi n t e m e t ,n e t 、) l ,o r ks e c u r i t yi s s u e sa t t r a c tm o r ea t t e n t i o n s o fa l l t h en e t w o r ks e c u 而t y 1 n e r a b i l i t i e s ,t h eo c c u r r e l l c eo fc r o s s - s i t ea t t a c k s ,s q l e c t i o na t t a c k s ,a s w e l la sb u 虢ro v e 棚o wa t t a c k st r i g g e r e db yi n t e g e ro v e r n o wi n c r e a s e ds i 印i f i c a n t l yi nr e c e n ty e a r s , c a u s i n g 盯e a th a n n r e s e a r c h e r si nr e l a t e df i e l d sp r o p o s e dav a r i e t yo fm e t h o d st od e t e c ta n d p r e v e n tt h e s e l n e r a b i l i t i e s g e n e r a l l y ,t h e s em e t h o d sc a nb ed i v i d e di n t o 觚ok i n d s :d y n 锄i c t e s t i n ga 1 1 ds t a t i ca n a l y s i s t 1 1 ec a p a b i l i t i e so fd y n a m i ct e s t i n ga r es u b j e c tt ot h el i m i t a t i o n so ft h e c o v e m g eo ft e s tc a s e sw h i l et h ec a p a b i l i t i e so fs t a t i ca n a l y s i sa r er e s t r i c t e db yg e n e r a t i n gf a l s e p o s i t i v e sa l t h o u 曲i tc o v e r sa l lt h ep o s s i b l ep r o 伊锄p a t h sa i l dp r 0 伊锄i n p u t s t bo v e r c o m et h es h o r t c o m i n g so fe x i s t i n gm e t h o d s ,t h i sp a p e rp r e s e n t san e wk i n do fn e 附o r k s e c u r i t y l n e r a b i l i t yd e t e c t i n gm e t h o db a s e do np a t hr e l a x a t i o n w h e ne x a m i n i n gap r o 黟锄m n , m i sm e t h o dn o to n l vc o n s i d e rt h ee x e c u t i n gr e s u l t so fc e r t a i nt e s tc a s e sa sab a s i sf o rd e t e c t i o n ,b u t a l s og e n e r a t ec o n s t r a i n ti n f o m “o nt h r o u 曲s t a t i ca n a l y s i so ft h eo b j e c tp r o g r a ma n dt a k eb o t ht h e a c t l j a lt e s t i n gr e s u l t sa j l dt h ec o r r e s p o n d i n gc o n s t r a i n ti n f o 册a t i o na st h eb a l s i sf o rd e t e c t i o n t h i s m e t h o dc 柚f i n dt h ee x i s t i n g l n e r a b i l i t i e sa c c o r d i n gt ot h ec u 仃i m tm n t i m ed a t a ;i tc a i la l s od e t e c t p o t e n t i a l l l n e r a b i l i t i e sa c c o r d i n gt 0c o n s t r a i n ti n f o m l a t i o n t h en e t w o r ks e c 嘶t yv u l n e r a b i l i t y d e t e c t i n gm e t h o de x t e n d st i l et r a d i t i o n a ld y n a m i ct e s t i n ga p p r o a c h e s ,c o m p a r e dw i t ht r a d i t i o n a l d y i l a m i ct e s t i n g ,t h i sm e t h o db r i n g ss l i g l l t s t a t i ca l l a l y s i sb e f o r et e s t i n gi no r d e rt o g e n e r a t e c o n s t r a i n ti n f o n n a t i o n t ov a l i d a t em ee 仃e c t i v e n e s so fo u rm e m o d ,t h i sp a p e rc a m e so u tc a s es t u d i e sb a s e do n c r o s s s i t ea t t a c k s ,s q li n j e c t i o na t t a c k sa n db u h 研o v e r f l o wa t t a c k st r i g g e r e db yi n t e g e ro v 耐l o w t h er e s u l to fc a s es t u d yi n d i c a t e sm a to u rm e m o di se a e c t i v e ;i tc o u l dd e t e c tt h ep o t e n t i a ln e t w o r k s e c u r i t y l n e r a b i l i t i e s k e yw o r d s : c r o s s s i t ea t t a c k ,s q li n j e c t i o i l ,i n t e g e ro v 硎o w ,p a mr e l a x a t i o n , c o n s 仃a i n t i n f o n n a t i o n 摘要i i i a b s t r a c t i v 目j j 之1 v r 第一章引言1 1 1 研究背景及意义l 1 2 研究的主要内容1 1 3 论文组织结构2 第二章三种网络安全漏洞及其利用4 2 1 跨站攻击漏洞及其利用4 2 1 1 跨站攻击漏洞的基本概念4 2 1 2 跨站脚本漏洞的利用4 2 2s q l 注入攻击漏洞及其利用5 2 2 1 s q l 注入攻击的基本概念5 2 2 2 s q l 注入漏洞的利用5 2 3 由整数溢出引发的缓冲区溢出漏洞及其利用6 2 3 1整数溢出的定义6 2 3 2 由整数溢出引发的缓冲区溢出6 第三章三种网络安全漏洞的侦测与防护8 3 1 跨站攻击漏洞的侦测与防护8 3 2s q l 注入式攻击的侦测与防护8 3 3 由整数溢出引发的缓冲区溢出漏洞侦测与防护9 第四章基于路径松弛的侦测与防护策略1 1 4 1 单一路径的不确定性1 l 4 2 基于路径松弛的漏洞侦测思想1 2 4 2 1 路径松弛的定义1 2 4 2 2 程序控制流图1 3 4 2 3 选取能实际执行到的程序路径1 4 第五章三种基于路径松弛的漏洞侦测方法1 5 5 1 基于路径松弛的跨站脚本漏洞侦测1 5 5 1 1 选取存在跨站攻击可能的程序路径1 5 5 1 2 基于数据类型的约束信息1 6 5 1 3 基于输出位置的约束信息1 8 5 1 4 基于数据类型与输出位置的约束测试1 8 5 2 基于路径松弛的s q l 注入攻击漏洞侦测2 l v 硕+ 卜学位论文 5 2 1面向注入检测的数据类型分类2l 5 2 2s q l 语句组装及变量位置判定2 l 5 2 3 基于用户输入类型与组装位置的约束测试2 2 5 3 基于路径松弛的由整数溢出引发的缓冲区溢出漏洞侦测2 3 5 3 1 整数边界值约束信息的生成2 3 5 3 2 基于整数边界约束信息的约束测试2 4 第六章实例研究2 7 6 1 针对跨站攻击漏洞的实例研究2 7 6 1 1 通过测试用例动态测出的跨站攻击漏洞2 7 6 1 2 潜在的跨站攻击漏洞2 8 6 2 针对s q l 注入式攻击漏洞的实例研究3 l 6 3 针对由整数溢出引发的缓冲区溢出漏洞实例研究3 3 第七章总结与展望3 5 7 1 小结3 5 7 2 未来工作3 5 参考文献3 8 附录一:跨站攻击实例4 0 附录二:s q l 注入攻击实例4 l 附录三攻读硕士学位期间完成的论文4 1 1 1 研究背景及意义 第一章引言 随着互联网的应用与普及,基于网络的应用程序飞速发展,互联网上的安全问题同益受 到研究者的关注。在网络安全的研究范围中,针对网络应用程序的主动攻击与渗透是危害互 联网安全的主要手段【1 1 。开源w e b 软件安全计划( o p e l lw 曲a p p l i c a t i o ns e c 埘t yp r o j e c t ) 台 湾分会发布0 7 年十大w e b 安全漏洞,跨站脚本攻击登上首位,s q l 注入式攻击与基于缓冲 区溢出漏洞的攻击紧随其后【2 1 。在c e r t c c 发布的研究报告中,c c + + 程序的缓冲区溢出漏 洞占到了所有类型漏洞的5 0 以上【3 1 ,其中由整数溢出引发的缓冲区溢出占据了很高的比例, 具体包括:s s hc r c 3 2 远程溢出,a p a c h ec h u n k e d e i l c o d i n g 溢出,o p e n s s hc h a l l e n g e r e s p o n s e 机制远程溢出等。以上统计表明,在众多针对网络程序的攻击手段中,跨站脚本攻 击,s q l 注入式攻击和通过整数溢出引发的缓冲区溢出攻击上升趋势明显,给网络安全造成 了很大的威胁。 跨站脚本攻击通过在用户访问的页面中嵌入恶意代码来窃取用户信息。世界上第一个跨 站脚本蠕虫发生在著名社交网站m y s p a c e ,2 0 个小时内就传染了一百万个用户,并最终导致 该网站的全面瘫痪。s q l 注入式攻击利用某些数据库的外部接口把用户恶意构造的数据插入 到实际的数据库操作语言当中,从而达到入侵数据库乃至操作系统的目的。目前绝大部分企 业都将用户的机密信息通过网络程序存储于后台数据库中,如果后台数据通过s q l 注入的方 式被篡改或者窃取,将造成企业或个人巨大的损失。缓冲区溢出漏洞的本质是向有限空间的 数组中填入超出数组容量的数据,造成数组访问越界。由于对数组以外空间的不当改写可能 覆盖系统的其它重要数据,比如函数执行上下文信息等,攻击者可以通过构造特殊的输入可 以让程序执行意想不到的代码。攻击者可以通过这些恶意代码获得系统的访问权,从而破坏 系统的软硬件设施,盗取隐私数据。 对跨站脚本漏洞,s q l 注入漏洞,由整数溢出引发的缓冲区溢出漏洞的检测和防范具有 极其重要的意义。已有的针对这三类网络安全漏洞的研究存在着一个共同点,即检测方法分 为两大类,分别是静态的代码审查和动态的测试,但这两类方法分别都存在着明显的缺陷。 静态的检测方法,如s q l 注入中的对用户输入的关键字过滤,跨站攻击检测中对服务器端代 码的静态分析,传统缓冲区溢出检测中的静态溢出侦测工具( s p l i n t ,c s s v ) h 5 1 等,审查的 代码量大,覆盖面广,但检测效率低,会造成误报;动态的检测方法,如s q l 注入中的动态 监控,跨站攻击中的对客户端敏感信息进出的动态监控,传统缓冲区溢出检测中的动态检测 工具( s t o b o ) 哺1 等,能根据测试用例进行测试,不会产生误报,但只能覆盖测试用例对应 的执行路径,不能发现潜在漏洞,会造成漏报。 1 2 研究的主要内容 针对已有的研究方法的缺陷,本文以跨站脚本漏洞,s q l 注入漏洞和由整数溢出引发的 缓冲区溢出漏洞为研究对象,提出了路径松弛的概念,旨在结合静态代码审查和动态侦测的 优点,弥补原有方法的不足。 路径松弛的概念建立在对一条可执行路径进行测试的基础上,是对测试的扩展。其主要 步骤是选取可行的测试路径,对测试路径所在程序进行静态分析,通过静态分析对测试路径 上的相关输入变量维护一个取值范围或者赋予一个数据类型,并根据输入变量的输出位置维 护一个位置约束信息,在检测过程中不仅以变量的当前值作为判断依据,还把它们的维护信 息一并考虑进去,以最大限度地检测此路径下出错的可能。其中,选取可行的执行路径可以 有效减少静态分析所有路径所产生的误报,对输入变量维护约束信息可以提高测试的覆盖范 围,增强其测试效果。本文以三种网络安全漏洞为研究对象,提出并阐述了三方面内容:基 于路径松弛的跨站脚本漏洞侦测,s q l 注入漏洞侦测以及由整数溢出引起的缓冲区溢出漏洞 侦测。应用基于路径松弛的方法对三类网络安全漏洞进行侦测的关键是:根据每一类漏洞的 特征,建立与之相应的约束信息。 跨站攻击的原理在于恶意的用户输入被服务器不加过滤地输出,关键是用户输入与相对 应的输出之间的联系。用m p u t ( v ) 表示来自用户的输入,用o u t p u t ( v ) 表示对用户输入v 的输 出。在一条程序路径中存在跨站攻击漏洞的必要条件是:存在一个变量v 以及两个带标签的 结点i n p u t ( v ) 和o u t p u t ( v ) ,并且这两个结点之间联通。如果这条路径中的任何与用户相关的输 入( 即所有具有i n p u t ( v ) 的结点) 都不影响任何输出( 即在与i i l p u t ( v ) 联通的路径上不存在 o u t p u t ( v ) ) ,那么这条路径中必定不会出现跨站攻击漏洞。路径松弛体现在对用户输入 ( i n p u t ( v ) ) 进行数据类型分类,对用户输入在页面中的输出位置,即o u t p u t ( v ) 的位置进行位 置类型分类,最终用户输入的数据类型和相对应的输出位置类型共同构成跨站攻击漏洞侦测 的约束信息。 s q l 注入攻击的原理在于用户恶意构造的输入被用于组装待执行的s q l 语句,所以用户 的输入内容以及输入在s q l 语句中的组装位置是影响s q l 注入攻击的关键因素。路径松弛 就体现在对用户的输入内容根据特定规则进行分类,即为输入内容关联一个数据类型约束; 同时对输入在s q l 语句中的组装位置进行分类,为输入关联一个位置类型约束,最终用户输 入的数据类型约束和组装位置类型约束共同构成s q l 注入漏洞侦测的约束信息。 由整数溢出引起的缓冲区溢出漏洞的原理在于动态分配缓冲区空间时发生整数溢出,造 成实际分配空间小于预定空间,所以表示动态分配缓冲区大小的整型变量是影响这一类型漏 洞的关键因素。路径松弛体现在二个方面:一是大大简化了静态分析时的追踪变量,只需追 踪表示动态分配缓冲区大小的整型变量;二是为追踪变量维护一个取值范围,以追踪变量的 取值范围作为约束信息。侦测时不仅通过变量的当前值进行判断,还以变量的当前取值范围 为依据,判断是否可能发生整数溢出,从而引发缓冲区溢出。这种检测方法代表了不同于传 统缓冲区溢出检测的思路:传统的溢出检测关注于程序是否向没有分配的空间写入数据,而 本文的方法关注于缓冲区是否一开始就少分配了空间。 1 3 论文组织结构 文章后续章节的组织结构如下:第二章详细介绍了跨站攻击漏洞,s q l 注入漏洞和由整 数溢出引发的缓冲区溢出漏洞的概念及利用方式;第三章详细介绍了针对这三类网络安全漏 洞的现有研究成果,并分析了其中存在的问题;第四章介绍了本文所提出的基于路径松弛的 漏洞侦测思路;第五章具体针对跨站攻击漏洞,s q l 注入漏洞和由整数溢出引起的缓冲区溢 第一章引苦 出漏洞,提出了相对应的基于路径松弛的侦测方法;第六章的主要内容为实例研究,将基于 路径松弛的检测方法分别应用到可能存在跨站攻击漏洞,s q l 注入式漏洞与缓冲区溢出漏洞 的实际程序代码块中,实例研究的结果证实了本文所提出方法的有效性;第七章总结了本文 的工作,并提出了未来需要继续深入的研究。 硕 :学位论文 第二章三种网络安全漏洞及其利用 2 1 跨站攻击漏洞及其利用 2 1 1 跨站攻击漏洞的基本概念 跨站脚本攻击是指攻击者在远程w 曲页面的h t m l 代码中插入具有恶意目的的数据,用 户认为该页面是可信赖的,但是当浏览器下载该页面时,嵌入其中的脚本将被解释执行。跨 站攻击产生的根本原因在于数据与代码的混合使用,也就是h t m l 的注入问题。攻击者的输 入没有经过严格的控制与筛选而进入了数据库,最终显示给来访的用户,导致可以在来访用 户的浏览器罩以浏览用户的身份执行h t m l 代码,数据流程如下:攻击者的h t m l 输入一 w e b 程序一 进入数据库一 w e b 程序一 用户浏览器。以最易发生跨站攻击的网络论坛为例, 在论坛中的注册用户都可进行发言,发表的字符本应是单纯的数据,但攻击者的留言却是一段 可在浏览器中执行的脚本。当其它用户浏览这段留言时,如果服务器没能发现这一点,把攻击 者的留言不加过滤地转发给用户浏览器时,就产生了攻击效果。 对网络应用程序进行跨站脚本攻击主要有两种形式,分别为存储好的脚本攻击和反射的 脚本攻击。前者是指跨站攻击通过回显静态数据的方法得以实现,攻击者通常将恶意脚本直 接输入到被攻击站点的表格域中,此时脚本代码被留在被攻击的服务器,当其他用户访问这 个页面,这些脚本就开始执行;后者是指攻击者将恶意脚本嵌入到u d 地址的参数c g i 中, 攻击者可以通过电子邮件等形式将嵌入了恶意脚本的链接发送给潜在的受害者,当受害者点 击链接时,恶意脚本被执行。 2 1 2 跨站脚本漏洞的利用 跨站攻击的最主要目标不是网络服务器本身,而是登录网站的用户。攻击者一般不会得 到访问网络服务器的根权限或系统权限,但仍会给网站用户带来极大的危害,主要体体现在 以下几方面: 会话劫持和c o o l 【i e 窃取跨站脚本攻击利用用户和网站之间的信任关系,窃取包含用户 i d 和认证的c o o k i e s ,直接导致攻击者得到用户的机密信息,以有效用户的身份请求服务。 突破外网内网不同安全设置跨站攻击可用来绕过防火墙的保护。许多公司和企业的局域 网都被配置为:客户端计算机信任局域网中的服务器,不信任外部网络上的服务器。然而, 通过跨站攻击,防火墙外的服务器可以欺骗防火墙内的客户端,让客户端认为它是防火墙内 的一个可信任的服务器。 屏蔽和伪造页面信息攻击者可以利用i f r a m e 标签,并把宽度和高度设置为1 0 0 来代 替主页,对于用户来说,他看到的地址栏是站点服务器的地址,但看到的内容却是攻击者的 主页。 拒绝服务攻击和辅助攻击攻击者可以利用脚本的频繁运行( 如间隔时间为2 0 m s ) 造成 d o s 攻击,使得被攻击站点名誉扫地,减低网站用户的信任。跨站脚本攻击也可以与浏览器 漏洞结合,修改系统设置,查看系统文件,或在终端用户的系统上执行恶意代码等。 第_ 二章三种网络安令漏洞及j c 利用 2 2s q l 注入攻击漏洞及其利用 2 2 1s q l 注入攻击的基本概念 s q l 注入通常是指试图强迫应用程序执行与它期望相悖的s q l 代码的行为。这种情况出 现的直接原因源于用户的不可靠输入被用于组装待执行的s q l 语句,以一个典型的s q l 注 入片断为例: s e l e c t 宰f b mu s e r t a l b l e w h e r eu s e r = a i l dp a s s w o r d = 其中,u s 酣a b l e 表含有u s e r 和p a s s w o r d 两列,记录有正常用户的用户名和密码, 和 表示用户的输入。正常情况下,当这个查询返回集不为空时表明用户名和密码合 法,返回集为空的时候表示用户名和密码不匹配。例如,当表内存在用户名为a ,密码为b 的用户时, 为a , 为b 可以使查询返回非空列,即表示认证成功,此时对应 查询语句如下: s e l e c t 木f 如mu s e r t a l b l e w h e r eu s e r = a 锄dp a s s w o r d = b 但是当一个恶意的用户使用特殊字符串作为输入时,例如 为i n v a l i d , 为 1 o r l = l ,此时对应的查询语句如下: s e l e c t 木f o mu s e r t a b l e w h e r eu s 萨i n v a l i d a n dp a s s w o r d = 1 o r l = l 考虑w h e r e 后的逻辑表达式,由于后面o r l = l ,这个逻辑表达式恒真。换言之,尽管 不存在i n v a l i d 这个用户,但通过如上的输入,总能使查询语句返回所有的列,从而绕过期望 的s q l 执行情况获得成功的验证。 2 2 2s q l 注入漏洞的利用 s q l 注入漏洞的利用过程可以归纳为四个阶段,分别是寻找s q l 注入点,获取和验证 s q l 注入点,获取信息,实施直接控制或间接进行控制。寻找s q l 注入点的经典查找方法 是在有参数传入的地方添加诸如“a n dl = l 等特殊字符,通过浏览器所返回的错误信息来判 断是否存在s q l 注入,如果返回错误,则表明程序未对输入的数据进行处理,存在s q l 注 入漏洞;找到s q l 注入点以后,需要进行s q l 注入点的判断,常常采用2 2 1 节中的语句 来进行验证。验证结束后,需要进一步获取存在注入点的数据库信息,如是否支持多句查询, 是否支持子查询,数据库的用户权限等。如果用户权限为s a ,且数据库中存在x p 锄d s h e l l 存 储过程,则可以着手实施直接控制。以s q ls e n ,e r2 0 0 0 为例,如果实施注入攻击的数据库 是s q ls e r v e r2 0 0 0 ,且数据库用户为s a ,则可以直接添加管理员账号、开放3 3 8 9 远程终端 服务、生成文件等。与直接控制不同,间接控制是指通过s q l 注入点不能执行d o s 等命令, 只能进行数据字段内容的猜测。在网络应用程序中,为了方便用户的维护,提供了后台管理功 能,后台管理的用户名和口令都会保存在数据库中,通过猜测可以获取这些内容。 硕l 学位论文 2 3 由整数溢出引发的缓冲区溢出漏洞及其利用 2 3 1整数溢出的定义 在特定的硬件系统上,整数变量拥有固定的长度。( 本文后续章节引用的代码均是基于 3 2 位系统) 长度固定意味着整数变量存在着一个系统所能储存的最大值。以3 2 位长度的整 数变量为例,它所能储存的最大值等于3 2 位二进制数的最大值,换算成十进制为: 4 2 9 4 9 6 7 2 9 5 。如果程序试图去向3 2 位的整数变量存储一个大于4 2 9 4 9 6 7 2 9 5 的值,就发生了 整数溢出。 i s oc 9 9 的标准并未规定编译器对整数溢出采取统一的策略,仅仅说明它将导致不确定 的行为,这在理论上为编译器提供了广阔的选择空间从完全忽略它到立即终止这个程序。 实际使用的编译器大部分都采取了忽略整数溢出的策略。根据i s oc 9 9 的规定:只涉及到无 符号整数类型的计算永远不会发生整数溢出,因为当结果超出无符号整数类型所能表示的最 大值时,用该整数类型的最大值对结果求模,求模所得就一定能被表示,这就造成了所储存的 数值实际小于原本应该储存的值。图2 一l 展示了这种导致“错误”结果的计算过程:a 和b 都是3 2 位的无符号整数,a 被赋予3 2 位整数所能表示的最大值,b 被赋予值l ,a 与b 相加 的结果赋予r ,因为a 与b 之和超过了3 2 位整数的最大值,根据i s o 的标准,进行求模计算, 并将结果赋予r 。由此可以看出,r 实际保留了原来计算结果的低3 2 位,原来的值被截短了。 a = o x f f f 师研r = ( o x 删+ 0 x 1 ) 0 x 1 0 0 0 0 0 0 0 0 b = 0 x l r = ( o x l o o o o 0 0 0 0 ) o x l 0 0 0 0 0 0 0 0 = o r = a + b 图2 1 :整数溢出中的求模运算 2 3 2 由整数溢出引发的缓冲区溢出 对于一个已经计算出的整数值,程序较少去检测是否经过了求模操作,也就无法得知结 果的j 下确性,所以整数溢出一旦发生,就不可能被检测到。因为整数溢出不会直接改写内存 地址,所以它的大部分情况不会造成可利用的安全漏洞。但当溢出的整数变量用作数组的边 界控制或者缓冲区的大小参数时,会间接造成缓冲区溢出漏洞,利用这种漏洞,别有用心者 通过构造特殊的输入可以让程序执行意想不到的代码。下面具体分析由整数溢出造成缓冲区 溢出的两种情况。 当发生溢出的整数变量作为数组的边界检查时,由于溢出使实际数值变小,从而能通过 程序罩的安全审核;但之后对数组进行写或拷贝操作时,却使用了未发生溢出的数值,造成 数组越界。图2 2 和图2 3 展示了属于此类情况的两个实例。图2 2 的例子中整数变量i 表 示通过m e m c p y 函数拷贝到b u f 中的字符串长度,在 w 1 处对缓冲区的写入有个边界保护, 咀足、刍i 的长度超出了短整数类型变量s 所能表示的最大范围时,i 的值很可能被截取为一个 小于8 0 的值,造成边界保护失去作用,从而造成缓冲区溢出;图2 3 的例子中当l e i l l 与l e n 2 的和大于整数范围时,计算结果很可能被截取为小于2 5 6 的值,这时对b u 脓的写入保护将 被绕过,由于程序是分两次把l e n l 和l e n 2 拷贝到m y b u f ,从而造成超出缓冲区空间的数据写 入m y b u f ,产生了缓冲区溢出漏洞。 图2 - 2 :整数溢出实例a图2 - 3 :整数溢出实例b 当发生溢出的整数变量作为分配缓冲区大小的参数时,整数的溢出使得实际分配空问小 于预定的分配空间,存在数组越界的可能性。图2 4 和图2 5 展示了属于此类情况的两个实 例。图2 4 的例子中数组m y a r r a y 的空间大小由l e i l 参数与i n t 类型大小的乘积决定,乘积的 类型也为整数。当乘积发生整数溢出时,由于数值被截短,很有可能为m y a r r a y 分配的内存 空间要小于包含l e n 参数个元素的整数数组所需要的空间。当程序最后对m y a 玎a y 的赋值操作 以l e l l 参数的值作为元素个数上限时,就可能造成向没有分配的空间写入数据,即产生了缓 冲区溢出;图2 5 的例子中数组b m p 的空间大小由p i c s i z e 参数与结构b m p h e a d e r 的大小之和 决定。当相加的结果发生整数溢出时,很有可能为数组b m p 分配的内存空问要小于包含p i c s i z e 参数个元素的数组所需要的空间,此时若对b m p 数组赋值,则使得发生缓冲区溢出的可能性 大大增强。 在以上分析的两种情况中以整数在缓冲区分配时的溢出最为常见,同时也最容易被利用, 并且较之前者更难于发现。首先表示缓冲区长度的参数形式复杂,可以为加,可以为乘;同 时如果使用n e w ( ) 函数为数组分配空问,函数的参数只用于表示元素的个数,但隐藏了元素类 型本身的大小,而为数组实际分配的空间却是参数代表的元素个数乘以元素类型本身的大小; 再加上数组元素类型很多,从最简单的整数类型到复杂的自定义结构类型,当面对复杂的元 素类型时还要确定这种类型本身的长度,然后再乘以元素的个数。 7 硕i :学位论文 第三章三种网络安全漏洞的侦测与防护 围绕跨站攻击,s q l 注入式攻击以及缓冲区溢出漏洞利用,相关领域的研究者已经做了 大量的工作。本章分别介绍了这三类网络安全漏洞防护与侦测的研究现状,并讨论了其中存 在的问题,揭示了新的漏洞侦测与防护方法应该努力的方向。 3 1 跨站攻击漏洞的侦测与防护 对跨站攻击的检测和防范主要分为两个方面,对服务器端的检测和防范和对客户端的检 测和防范。在针对服务器端的检测工作中,g a d il u c c a 和a r f a s o l i n o 等人提出了一种静 态分析与动态检测相结合的检测方法m ,先对服务器端的页面代码进行传统的静态分析,确 定此页面上是否可能存在跨站攻击漏洞,再根据静态分析的结果,精心设计用于跨站攻击的 测试用例;古开元和周安民等人从网站开发人员的角度,提出了输入数据在显示之前进行编 码,过滤特殊字符的输入参数,将数据插入i 衄柏t 属性等防范措施m 1 ;吴耀斌和王科等人 提出了在服务器端过滤输入数据中的代码,限制输入字符长度以及限制用户上传f l a s h 文件等 防范手段一1 。在针对客户端的检测工作中,p h i l i p pv o 酉和f l o r i a i ln e i l 似i c h 等人通过追踪网络 浏览器中保存的用户敏感信息,能够觉察到被追踪的敏感信息是否将从浏览器发送到第三方, 从而在客户端建立了一层防护墙,让用户自行判断是否允许这样的发送n 引;e n 西nk i r d a 和 c 城s t o p h e rl c h e g e l 等人在他们的论文中展示了名为n o x e s 的客户端检测工具1 ,其功能等同 于发挥特殊效用的网关,通过人工和自动生成的检测规则,防止通过跨站攻击的恶意脚本在 客户端执行;o m a ri s m a i l 和m a s a s h ie t o h 等人提出了一种在客户端自动检测跨站攻击漏 洞的防范系统n2 j ,它通过在客户端建立一个本地代理,根据客户端发出的请求和服务器发回 到客户端的回应来进行跨站漏洞检测。 已有的方法从服务器端和客户端两方面进行防护,都存在不足之处。服务器端的静态分 析针对服务器页面的全部代码,检测代价很大,会造成很多误报,因为在实际的执行过程中, 一些在控制流图上连通的路径实际永远执行不到;客户端的检测,无论是对用户敏感信息的 追踪,还是对恶意脚本代码的识别,没有从源头上切断跨站攻击的根本恶意的用户输入, 同时极大地增加了客户端浏览器的负担,使得用户在j 下常浏览网页时能明显感受到效率地降 低。 3 2s q l 注入式攻击的侦测与防护 围绕s q l 注入的检测与防范问题,相关研究人员做了大量的工作。s w b o y d 等人u 副提 出了一种s q l 随机编码的方法,这种方法假设用户的输入当中不应该出现s q l 命令,首先 将s q l 语言中关键字进行随机编码,待与用户输入组装s q l 查询语句完毕后再解码运行, 当发现无法解码的输入时,则判定用户进行了恶意的提交。f v r a l e u r 等人n 4 1 提出了类似的机 器学习检测s q l 注入的方法。r m c c l u r c 等人n 鄙和w r c o o k 等人n 刚分别提出了一些安全可 靠的数据库查询方式。静态检测方面,c g o u l d 等人n 7 1 提出了静态检测s q l 语句生成的方法, 并实现了相关的工具n 引。结合静态分析与动态验证方面,b u e h r e r 等人n 鲫提出了分析用户输入 第三章三种网 下查询语法树的检测方法。h a l f o n d 和o r s o 等人啪1 使用自动创建机制来防止s q l 注入。w e i 等人口则考虑了在s q l 存储过程中注入式攻击的防范机制。此外,周敬利等乜2 3 提出了一种类 似检测s q l 语法树的反s q l 注入策略。薛昱春等心3 1 提出了一种将用户输入进行b a s e 6 4 编码, 在不变更用户输入语义基础上缩小输入范围的过滤方法。 与跨站攻击的研究现状类似,尽管在检测和防止s q l 注入攻击方面人们已经进行了大量 的工作,但已有的研究成果依然存在着一些不足。首先,对应用程序的静态检测会存在大量 的误报,因为一些在控制流图逻辑上连通的路径实际可能永远执行不到;其次,一些结合静 态分析的动态检测技术需要对应用程序的源代码进行大量的修改,应用代价过高。 3 3 由整数溢出引发的缓冲区溢出漏洞侦测与防护 目前缺乏对由整数溢出导致缓冲区溢出的普遍性和危害性的认识。在研究整数溢出与缓 冲区溢出相关的领域中,来自m c a f e e 公司的o d e dh o r o v i t z 提出了一种通过监测用作循环计 数的大整数变量来达到防范缓冲区溢出的检测机制瞄钔。鉴于检测整数溢出的最终目的是防止 可能的缓冲区溢出,同时本文所提方法也是基于以前的检测方法,将首先简要介绍传统缓冲 区溢出的检测方法,然后详细阐述o d e dh o r o v i t z 提出的通过分析整数溢出来防止缓冲区溢出 的思路。 传统的缓冲区溢出检测有两种基本检测方法:静态溢出检测和动态溢出检测。静态检测 本质上是一种代码审查,它不执行待检测的程序本身,而是通过对程序代码中的变量分析取 值、建立约束关系来检测是否可能发生溢出弦引;动态监测本质上是一种测试方法,通过直接 的运行精心设计的测试用例,分析执行的结果就能判断程序是否存在溢出问题心引。 对于静态和动态侦测,均有已经被广泛使用的检测工具。静态溢出检测工具主要包括 s p l i n t h l ,c s s v 瞄1 等;s p l i n t 是一个轻量级的静态分析工具,它静态地分析源代码,并根据用 户提供的规格信息来检测程序中的安全漏洞。c s s v 及其扩展心7 1 通过静态分析源代码来侦测c 程序中的所有缓冲区溢出。与s p l i n t 不同,c s s v 能够自己生成程序的规格说明。对于一个c 程序,它可以生成一个语义与原程序一致的程序,这个新程序包含了一组新的表示字符串缓 冲区空间、字符串长度的变量以及一组保证字符串访问安全性的a s s e n 检查,c s s v 对转换后 的程序进行整数范围分析汹】,检查生成的a s s e r t 是否都能够得到保证。动态溢出检测工具主 要包括s t o b o 哺1 ,k l h e ea i l ds j c h a p i n 啪3 等。s t o b o 直接插装源代码来检查字符串访问 中是否存在可能的缓冲区溢出,但它的主要缺点是只能检测特殊字符串访问的安全性,忽略 了其它方式的缓冲区溢出。k l h e ea n ds j c h 印i n 首先为每个缓冲区引入类型信息,表示缓 冲区的大小,然后首先通过静态分析寻找那些最有可能有缓冲区漏洞的点( 典型的是一些不安 全的函数调用) ,再在目标代码中插入边界检查来检测缓冲区溢出漏洞。 o d e dh o r o v i t z 首先总结了由整数溢出导致缓冲区溢出的通用模式,然后根据这一本质特 征,针对性地提出了解决方案。o d e dh o r o v 池所发现的通用模式为:导致整数溢出发生的那 个整数变量通常作为分配缓冲区大小的参数之一,在程序里总是要作为一个计数器出现,表 示缓冲区所对应的元素个数;
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 4.2 流程图教学设计中职基础课-上册-劳保版(第七版)-(数学)-51
- 本章复习与测试教学设计高中物理教科版2019选择性必修第三册-教科版2019
- Module 3 Unit 3 说课稿外研版英语八年级上册
- 人教PEP版英语五年级上册教学设计+教案
- Unit4InterestsandAbilitiesSpeakingWorkshop(教学设计)北师大版七年级英语上册
- 第20课 对外开放格局的形成说课稿高中历史岳麓版2007必修Ⅱ-岳麓版2007
- 装配式建筑生态施工讲解手册
- 2025电子商务公司合作伙伴网络代销合同
- 市政电梯安装验收标准及施工实施方案
- 师徒结对活动过程记录表格式范本
- 抗菌药物敏感性试验(药敏试验)
- 听余映潮老师讲《咏雪》(课堂实录 )
- 华为TaiShan200-X6000服务器技术白皮书
- 地质勘查单位安全检查表-(修订本)
- 山东省装备制造业调整振兴规划在建重点项目表
- 中英-外研社五年级上册课文翻译(一年级起点)
- 沥青混合料PPT课件.ppt
- 氨基酸溶解性(共1页)
- GDX2包装机组工艺流程简介
- 张家口至涿州公路张家口段(含连接线)建设项目水资源论
- 组织与管理研究的主流理论 ppt课件
评论
0/150
提交评论