(计算机科学与技术专业论文)基于程序分析的软件安全漏洞检测技术研究.pdf_第1页
(计算机科学与技术专业论文)基于程序分析的软件安全漏洞检测技术研究.pdf_第2页
(计算机科学与技术专业论文)基于程序分析的软件安全漏洞检测技术研究.pdf_第3页
(计算机科学与技术专业论文)基于程序分析的软件安全漏洞检测技术研究.pdf_第4页
(计算机科学与技术专业论文)基于程序分析的软件安全漏洞检测技术研究.pdf_第5页
已阅读5页,还剩56页未读 继续免费阅读

(计算机科学与技术专业论文)基于程序分析的软件安全漏洞检测技术研究.pdf.pdf 免费下载

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

文档简介

摘要 随着黑客攻击事件数量的不断上升,蠕虫在i n t e r n e t 上的泛滥,信息安全逐渐 成为人们眼中的焦点。信息安全中的一个核心问题就是存在于计算机系统中的软 件安全漏洞,恶意的攻击者可以利用这些安全漏洞提升权限,访问未授权资源, 甚至破坏敏感数据。因此如何发现软件中的安全漏洞至关重要。再好的防火墙、 入侵检测和杀毒软件,如果软件自身的安全都不能保证,那么根本起不到提高安 全性的作用。 本文的主要目的就是研究那些能够在软件开发周期中有效减少软件安全漏洞 的方法和技术,尤其侧重于程序分析技术在代码层安全漏洞检测上的应用。程序 分析技术分为静态分析和动态分析两种。静态分析扫描源码,在无需程序执行的 情况下进行漏洞的检测,但是容易产生误报。动态分析执行程序,通过收集运行 时的信息进行漏洞的检测,结果精确但容易产生漏报。基于现有的方法和经验, 本文设计了一个代码层软件安全漏洞的检测模型,论文主要工作如下: 1 研究了软件开发周期中的软件安全问题并对软件需求阶段、设计阶段和测 试阶段中一些能有效减少软件安全漏洞的实践方法进行了详细的分析。总结了现 有的常见软件安全漏洞和代码层的软件安全漏洞分类。 2 总结了用于漏洞检测的静态分析和动态分析手段,详细分析了两种方法的 特点和不足,讨论了它们结合互补的方式。 3 提出了一个静态分析,动态验证的安全漏洞检测模型。说明了模型中的各 个功能部件和分析流程。详细介绍了程序抽象表示形式,漏洞描述问题,别名信 息分析问题和代码植入问题。 4 对输入验证相关漏洞进行实例分析,总结了这类漏洞的本质,并给出了一 种j a v a 数据流跟踪模式。 5 研究了一种基于关系数据库的程序分析方法,设计了模型静态分析部分的 实现结构,构造了s q l 注入攻击漏洞的d a t a l o g 检测规则。同时设计了j a v a 数据 流动态跟踪的方案,说明了代码植入的实现手段,并利用j a v a s s i s t 工具包进行了 字节码植入的实验。 6 最后对漏洞检测的实现做了整体的概述,并对模型的优缺点进行了评价, 指出了将来的工作和改进的方向。 关键词:安全漏洞,静态分析,动态分析,代码植入 a b s t r a c t w i t ht h ee v e r - i n c r e a s i n gn u m b e ro fh a c k e ra t t a c k sa n dt h es p r e a do ft h ew o r mo u t h ei n l e r n e l ,i n f o r m a t i o ns e c u r i t yh a sg r a d u a l l yb e c o m et h ef o c u so fp e o p l e se y e s t h e s o f t w a r es e c u r i t yv u i n e r a b i l i t i e se x i s ti nt h ec o m p u t e rs y s t e m sa r et h em o s ti m p o r t a n t c o r ei s s u eo fi n f o r m a t i o ns e c u r i t y , w h i c ham a l i c i o u sa t t a c k e rc 锄u s et oe n h a n c e c o m p e t e n c e ,v i s i tu n a u t h o r i z e dr e s o u r c e s ,o re v e nd e s t r o ys e n s i t i v ed a t a s ot h e p r o b l e mo fh o w t of i n dv u l n e r a b i l i t i e si sc r i t i c a lf o rs o f t w a r es e c u r i t y t h o s ep r e v a i l i n g s a f e t ys o f t w a r e ss u c ha sf i r e w a l l s ,i d sa n dv i r u sc l e a n e r sc a n n o tp l a yt h ek e yr o l eo f p r o t e c t i n gt h es y s t e m sw i t h o u t t h eg u a r a n t e eo fs o f t w a r e s s e c u r i t y t h i sp a p e rm a i n l yf o c u so nt h em e t h o d sa n dt e c h n i q u e st h o s ea 北a b l et o e f f e c t i v e l yr e d u c et h ev u l n e r a b i l i t i e si nt h es o f t w a r ed e v e l o p m e n tl i f ec y c l e ,e s p e c i a l l y o np r o g r a ma n a l y s i st e c h n i q u e sa tt h ec o d el e v e l t h e r ea r et w ot y p e so fp r o g r a m a n a l y s i s :s t a t i ca n dd y n a m i c s t a t i ca n a l y s i st o o l sp a r s ea n da n a l y z et h es o u r c ec o d e w i t h o u tr u n n i n gi t ,b u ta l s oc a l lp r o d u c ef a l s ep o s i t i v e s d y n a m i ca n a l y s i st o o l se x e c u t e t h ep r o g r a ma n do b s e r v ei t sb e h a v i o ro v e ran u m b e ro fr u n s ,b u ta l s oc a np r o d u c ef a l s e n e g a t i v e s b a s e do np r e v i o u se x p e r i e n c e s ,t h i sp a p e rd e s i g n sav u l n e r a b i l i t yd e t e c t i o n m o d e la tt h ec o d el e v e l t h er e s e a r c hw o r ko ft h i sd i s s e r t a t i o nm a i n l yi n c l u d e s : 1 s y s t e m a t i c a l l ys t u d yt h es o f t w a r es e c u r i t yi s s u ei nt h es o f t w a r ed e v e l o p m e n t l i f e c y c l e ,a n da n a l y z et h et h eb e s tp r a c t i c e sw h i c hc a ne f f e c t i v e l yr e d u c et h es e c u r i t y v u l n e r a b i l i t i e si ns o f t w a r er e q u i r e m e n t sp h a s e ,t h ed e s i g np h a s ea n dt h et e s t i n gp h a s e s u m m a r i z ec o m m o nd a s s e so fs e c u r i t yv u l n e r a b i l i t i e sa n dt h e i rt a x o n o m ya tt h ec o d e l e v e l 2 r e s e a r c ht h es e c u r i t yv u l n e r a b i l i t i e sd e t e c t i o nm e t h o d sa n d t e c h n i q u e sb a s e d o n s t a t i ca n a l y s i sa n dd y n a m i ca n a l y s i s ,a n a l y s i st h es u e n g t h sa n dw e a k n e s s e so ft h e ma n d d i s c u s st h e w a y so fc o m b i n i n g s t a t i ca n dd y n a m i ca n a l y s i s 3 p r o p o s eas e c u r i t yv u l n e r a b i l i t i e sd e t e c t i o nm o d e lw h i c hu s es t a t i ca n a l y s i sa n d d y n a m i cv e r i f i c a t i o ns t r a t e g y i n t r o d u c et h ef u n c t i o n so ft h ec o m p o n e n t sa n dt h e d e t e c t i o np r o c e s s d e t a i l e d l yd i s c u s st h ep r o b l e mo fs t a t i cp r o g r a mr e p r e s e n t a t i o n t h e d e s c r i p t i o no fv u l n e r a b i l i t i e s ,a l i a sa n a l y s i sa n dc o d ei n s t r u m e n t 4 a n a l y s i st h ee x a m p l eo f t h ei n p u tv a l i d a t i o ns e c u r i t yv u l n e r a b i l i t i e s ,a n dp r o p o s e l l at r a c k i n gm o d ef o rj a v ad a t af l o wa n a l y s i s 5 s t u d yap r o g r a ma n a l y s i st e c h n i q u e sb a s e do nr e l a t i o n a ld a t a b a s e ,d e s i g n t h e i m p l e m e n t a t i o ns t r u c t u r eo ft h es t a t i ca n a l y s i sp a r t c o n s t r u c tt h ed e t e c t i o nr u l e so fj a v a s o li n j e c t i o na t t a c kv u l n e r a b i l i t i e su s i n gd a t a l o gp r o g r a m d e s i g nad y n a m i cj a v ad a t a f l o wt r a c k i n ga n di n t r o d u c et h em e a n so fc o d ei n s t m m e n t a i o n p r e s e n te x p e r i m e n t s a b o u tb y t ec o d ei n s t r u m e n t a t i o nw i t ht h eh e l po fj a v a s s i s tt o o lk i t , 6 f i n a l l y , o u t l i n et h ei m p l e m e n t a t i o no f t h ev u l n e r a b i l i t i e sd e t e c t i o nm o d e li nt h e o v e r a l lv i e w , e v a l u a t et h em o d e l sa d v a n t a g e sa n dd i s a d v a n t a g e sa n dp o i n to u tt h e d i r e c t i o no ff u t u r ew o r ka n di m p r o v e m e n t k e y w o r d s :s e c u r i t yv u l n e r a b i l i t i e s ,s t a t i ca n a l y s i s ,d y n a m i c 姐a l y s i s ,c o d ei n s t r u m e n t 1 1 1 西北工业大学 学位论文知识产权声明书 本人完全了解学校有关保护知识产权的规定,即:研究生在校攻读学位期间论文工作 的知识产权单位属于西北工业大学。学校有权保留并向国家有关部门或机构送交论文的复 印件和电子版。本人允许论文被查阅和借阅。学校可以将本学位论文的全部或部分内容编 入有关数据库进行检索,可以采用影印、缩印或扫描等复制手段保存和汇编本学位论文。 同时本人保证,毕业后结合学位论文研究课题再撰写的文章律注明作者单位为西北工业 大学。 保密论文待解密后适用本声明。 学位论文作者签名:跨丝 指导教师签名:芷碰 门 2 舻年乡月;口日四年月;口日 西北工业大学 学位论文原创性声明 秉承学校严谨的学风和优良的科学道德,本人郑重声明:所呈交的学位论文,是本 人在导师的指导下进行研究工作所取得的成果。尽我所知,除文中已经注明引用的内容 和致谢的地方外,本论文不包含任何其他个人或集体已经公开发表或撰写过的研究成 果,不包含本人或其他已申请学位或其他用途使用过的成果。对本文的研究做出重要贡 献的个人和集体,均已在文中以明确方式表明。 本人学位论文与资料若有不实,愿意承担一切相关的法律责任。 学位论文作者签名:丝 2 6 口7 年;月岁。日 两北工业大学硕十学位论文 第一章绪论 1 1 研究背景及意义 第一章绪论 随着黑客攻击事件数量的不断上升,蠕虫在i n t c r n e t 上的泛滥,信息安全逐渐 成为人们眼中的焦点。信息安全中的一个核心问题就是存在于计算机系统中的软 件安全漏洞,恶意的攻击者可以利用这些安全漏洞提升权限,访问未授权资源, 甚至破坏敏感数据。 2 0 0 3 年1 月,全球因特网遭受了过去1 8 个月来最严重的攻击。我国互联网出 现大面积网络流量异常、访问速度变慢的现象,情况严重的网络一度中断无法使 用,不计其数的网民浏览网页和发送电子邮件出现困难,时间长达数小时。澳大 利亚、美国、英国、韩国、泰国、日本、马来西亚、菲律宾、印度等全球范围的 互联网络都受到不同程度的攻击。全球估计至少有2 2 万个网络服务器遭到了病毒 攻击,美国美洲银行称1 3 万台自动取款机瘫痪此次攻击是利用2 0 0 2 年7 月 份公布的微软s o l s e r v e t 2 0 0 0 的一个系统漏洞,对网络上的s q l 数据库进行攻击。 连接在网络上的被攻击的系统如同癌细胞那样不断蜕变,生成新的攻击向网络释 放、扩散,从而逐步鲸吞、消耗网络资源,导致网络访问速度下降,甚至瘫痪。 2 0 0 3 年8 月1 1 日,利用m s 0 3 2 6 漏洞的“冲击波”蠕虫病毒开始在全世界 范围内爆发,造成巨大破坏。在国内,两天时间里就使数千个局域网陷于瘫痪状 态,受害者中既包括几十人的小规模企业,也有电信、政府等大型事业单位。而 且个人用户,尤其是使用宽带网的用户,也遭到了此病毒的攻击。在感染此病毒 后,会造成系统反复重启、不能收发邮件、无法浏览网页等影响,导致无法正常 工作,给企业和个人都造成了巨大的损失。 根据d h s 和n i s l l l l 对近十年软件安全漏洞进行的数据统计,2 0 0 6 年漏洞数已 经超过了8 0 0 0 个,比2 0 0 5 年增长了约百分之六十,几乎是2 0 0 4 年的两倍。 软件安全漏洞造成的重大损失以及还在不断增长的漏洞数量使人们已经开始 深刻认识到软件安全的重要性。从上世纪9 0 年代,信息安全学者,计算机安全研 究人员就开始了对计算机安全漏洞的研究,最为人熟知的就是缓冲区溢出攻击漏 洞口】。但研究的范围主要包括如何监测和防御恶意攻击者利用安全漏洞进行攻击, 由此开发出来入侵检测系统( i d s ) 和入侵防御系统( i p s ) 等等商业产品,以及 针对缓冲区溢出的堆和栈,不可执行堆栈等等技术。直到本世纪初,研究人员才 西北t 业大学硕十学位论文 第一章绪论 把研究的重点放在如何发现安全漏洞,更进一步说,如何借助自动化或半自动化 的辅助工具使软件开发人员在开发阶段就发现软件漏洞已经成为研究的重点。这 类辅助工具的开发需要大量使用诸如类型分析,指针别名分析,模型匹配,代码 植入和动态监测等程序分析技术。比起早期用于编译器优化和软件测试错误查找 中的标准程序分析技术,软件安全漏洞的检测要求更加复杂。如何从问题的根源 上解决软件安全问题,如何才能更有效的利用这些分析技术来进行安全漏洞查找 已经成为具有实用价值的课题和方向。 1 2 论文研究内容 程序分析技术分为静态分析和动态分析两种。前者是在源码阶段、编译阶段 或链接阶段,并且不需要程序的执行环境进行的软件漏洞检测【3 1 。后者是在程序运 行阶段通过分析程序的执行时信息进行漏洞检测【4 】。 本文在研究了程序分析技术的基础上,针对静态分析和动态分析优缺点的互 补性i s ,并结合它们在软件安全漏洞检测上的应用,提出了一个静态分析,动态验 证的漏洞检测模型,并借助现有的工具和技术对模型的部分进行了原型设计和实 现。 论文的主要研究内容如下: 1 介绍了软件开发周期中的软件安全问题和一些能有效减少软件安全漏洞的 实践方法。总结了现有的常见软件安全漏洞并对代码层的漏洞分类进行了研究。 2 研究了现有的安全漏洞静态和动态检测手段,在分析两种方法优缺点的基 础上提出了一个静态分析,动态验证的漏洞检测模型,对模型各个部件的功能和 漏洞检测流程进行了说明,并且详细介绍了模型中的四个关键部分。 3 对输入验证相关的软件安全漏洞进行了实例分析和模式总结,并借助一种 基于关系数据库的工具j o e q 和b d d b d d b ,设计了静态漏洞检测的d a t a l o g 推理规则。 说明了动态验证的方法,同时介绍了代码植入的实现手段,并利用j a v a s s i s t 工具 包进行了字节码植入实验。 1 3 论文组织结构 本论文对基于程序分析技术的软件安全漏洞检测进行了深入的研究,基本组 织结构如下: 第一章:简要介绍了本文的研究背景和意义,研究内容和所做工作。 2 西t l t 业大学硕士学伊论文 第一章绪论 第二章:讨论了软件开发周期中的软件安全,软件安全漏洞的理论及代码层 软件安全漏洞的检测方法。 第三章:给出了基于程序分析技术的软件安全漏洞检测模型,并对模型的各 个部分进行详细介绍。 第四章:对漏洞检测模型的部分进行了详细的原型设计和实现,最后对模型 进行了评价。 第五章:总结本论文的工作并对后续研究内容进行了展望。 3 西北工业大学硕七学位论文 第二章软件安全漏洞与检测技术 第二章软件安全漏洞与检测技术 人们已经开始认识到软件安全的重要性,并且已有一些很好的实践。软件开 发者必须关注由于设计不当和实现软件时的不合理而引发的安全漏洞本身,综合 利用各种手段和技术对软件进行漏洞检测,从问题的根源来提高软件安全,而不 是等投入使用后,发现了漏洞再来修补。 2 1 软件开发周期中的软件安全 图2 - 1 说明的是在软件开发周期中一些有效的实践,把这些好的实践应用到软 件工程中的各个环节,能极大的提高软件的安全性【6 】。 安 非法用例设计 风险分析 基于安全的测 试 渗透测试 图2 - 1 软件开发周期中的软件安全 第一,需求分析阶段。软件的安全问题必须在需求阶段就要明确。安全需求既 要包括那些常有的安全机制,如数据加密,也要具有应付那些突发攻击事件的能 力。对于这种性质的要求,可以类似于开发中的用例设计,为软件设计非法用例, 用于描述系统在受到攻击情况下的行为。 4 西北工业大学硕十学位论文 第二章软件安全漏洞与检测技术 第二,整体结构设计和详细设计阶段。在设计阶段,软件系统应该具有一些统 一的安全准则,如软件系统应该给用户尽可能少的特权。开发人员,结构设计人 员和分析人员必须清晰的知道可能存在的攻击,并使用文档详细的记录下来。不 管是整体结构设计还是详细设计,都应该进行风险分析,以便于后续阶段的处理。 在这个阶段,将软件的设计送到开发团队以外的人员进行外部审查,往往能够得 到更多的安全建议,完善软件的安全风险分析。 第三,编码阶段。编码阶段是最后形成软件代码产品的过程,在这个过程中, 开发者应该关注的是软件实现方面的缺陷,如s t r c p y 函数的使用引起的缓冲区溢 出攻击漏洞。 静态分析扫描程序源代码并找出一些常见的安全漏洞。近些年来,由市场的驱 动和分析技术的相对完善和成熟,已经出现了大量的商用静态分析工具来帮助开 发者进行软件的安全分析,特别是对于c 和c + + 语言程序的漏洞分析。如何利用 程序分析技术来提高软件的安全性已成为研究的热点之一,本文也将重点关注和 研究这些方法和技术。 除了程序分析的手段外,软件安全测试技术也越来越受到重视。安全测试和普 通软件测试的重要区别是安全测试是在充分考虑恶意用户蓄意破坏或侵入系统的 前提下进行的,安全测试应该包括两方面的内容:一是测试系统采用的安全机制, 确定其功能是否正常实现;二是按照攻击者所采用的方法理解安全问题,并模拟 进行基于风险的安全测试。 渗透测试是软件安全实践方面应用最普遍的方法。它一般是在软件开发过程中 的后期进行。渗透测试进行于真实的软件运行环境下,更好的理解了程序行为。 但是,如果没有正确了解软件的功能结构,进行黑盒渗透测试往往不能检测到程 序中那些隐藏很深的安全漏洞。渗透测试过程中应该大量的使用帮助工具。静态 分析工具可以扫描源程序或二进制代码,确定并报告程序中诸如缓冲区溢出的实 现层漏洞【7 j 。动态分析工具可以在软件运行过程中对系统进行监控【8 l ,对于那些系 统外界可以用来向软件提供恶意数据的程序入口点,动态分析工具尝试将其作为 漏洞报告给测试人员,以便做更深入的分析。对攻击模式的深刻认识是这些辅助 工具实用化的先决条件,它要求安全人员对软件安全漏洞的原理进行总结和分析。 本文关注的是代码层次的软件安全漏洞检测。代码层次的软件安全漏洞是非常 普遍和常见的,几乎一半的软件安全漏洞都是在代码层次上引入软件系统的【9 l 。比 起软件结构层次的安全缺陷,代码层的安全漏洞分析更容易实现自动化或半自动 化检测,辅助工具能够帮助开发者完成大量的工作。 5 西北t 业大学硕士学付论文第二章软件安全漏洞与检测技术 2 2 软件安全漏洞 2 2 1 安全漏洞概述 现存的安全漏洞定义有不同的形式,但它们的本质基本是一致的。r f c 2 8 2 8 1 l o l 把安全漏洞定义为可以被恶意攻击者用来突破系统的安全策略,从而访问未授权 的资源和数据,并达到一些非法目的。安全漏洞存在于计算机软件的各个方面, 本文主要针对两个问题对安全漏洞进行总结: 1 现有最常见的安全漏洞都有哪些? 2 软件安全漏洞都是哪些类型,如何来对它们进行分类? 在过去c e r t ,c c ( c e r tc o o r d i n a t i o nc e n t e r ) 统计报告的安全缺陷中1 1 1 1 约5 0 都是由于缓冲区溢出漏洞引起的【1 2 i 。但是随着网络的普及和使用,应用程序安全 漏洞在大量出现。表2 1 列出的是一些常见的安全漏洞。 表2 - 1 常见的安全漏洞 操作系统软件( c ,c + + )应用软件( j a v a ,c 如p h i ) 缓冲区溢出s q l 注入攻击 格式化字符串跨站脚本攻击 整数溢出 h 1 r ps p m t i n ga t t a c k s 竞争状态 d i r e c t o r yt r a v e r s a la t t a c k s s e s s i o nh i j a c k i n ga t t a c k s f 1 3 】对2 0 0 5 年十一月到十二月报告的3 0 0 个软件安全漏洞进行了研究,发现 传统的缓冲区溢出安全漏洞已经不再占主导地位,相反w e b 应用程序的安全漏洞 问题日益突出,如图2 2 所示。 2 2 2 安全漏洞分类 软件安全漏洞的分类是漏洞分析和检测的基础,对软件安全漏洞进行分类至少 有两点好处:第一,漏洞分类帮助软件开发者更好的理解由程序错误引起的安全 漏洞对系统安全的影响,并很好的组织安全规则和漏洞库用于指导软件的开发。 第二,定义一个好的软件安全漏洞分类机制,有助于开发更好的安全检测工具。 因为好的分类机制能够帮助研究人员和实践人员更好的理解问题本身,并设计出 6 西北工业大学硕七学位论文第二章软件安全漏洞与检测技术 自动化或半自动化的工具。 s q l 斑| e c r s - u t e $ c r i 蛐r q e 岈f e ro 悄* “玳 h m a o i f , c l o s w e c o d e8 睹矗黼 o 嘛 p a t h 下糟m 蝴i f o r m a ts # 目塔 撕b 秽o 垤一l o * t h 丁pr e s ;x m s es 蹦鼢碴 01 02 03 04 05 06 07 0 8 0 9 01 0 0 图2 - 2 对3 0 0 个安全漏洞的统计 7 0 年代中期以来,很多项目都将软件安全漏洞的识别和分类作为研究的核心, 并给出了相应的研究成果。如r i s o s ( r e s e a r c hi n t os e c u r eo p e r a t i n gs y s t e m s ) 项 目0 4 1 和p a ( p r o t e c t i o na n a l y s i s ) 项目 l s l 。它们都是关注操作系统中的安全漏洞分 类。而 1 6 1 和【1 7 l 对软件安全漏洞进行了更细致的分类,并充分考虑了人为的无意识 因素和故意因素。【1 8 1 专门针对代码层次的安全漏洞进行研究和分类,它将代码层 次的安全漏洞分为八个大类,每个大类下面又有许多子类。这八个大类是: 1 输入验证和表示相关漏洞 2 a p i 误用相关漏洞 3 安全特征相关漏洞 4 时间和状态相关漏洞 5 错误相关漏洞 6 编码质量相关漏洞 7 封装相关漏洞 8 运行环境相关漏洞 软件漏洞的分类涉及到一些分类学方面的理论和技术,而且是一项较为复杂 的工程,这已经超出了本文所讨论的范围。本文讨论的软件安全漏洞检测基于已 有的软件安全漏洞分类成果,对 1 8 1 d p 输入验证相关漏洞的一部分进行了分析和研 究,具体内容将在第四章阐述。 7 西北丁业大学硕+ 学位论文第二章软件安全漏洞与检测技术 2 3 代码层软件安全漏洞检测方法 2 3 1 手工分析 手工分析是目前大部分安全研究人员采用的方法。针对开源软件,手工分析 人员一般是通过源码阅读工具,例如s o u r c e i n s i g h 等等,来加速源码检索和查询的 速度。比如对c 或c + + 程序最简单的分析一般都是先对系统中s t r c p y 之类不安全 的库函数调用进行审查,进一步的审核安全库函数和循环的使用。在上述检查的 基础上,还可以通过检查函数中的逻辑问题。闭源软件比开源软件又有些不同, 闭源软件的主要局限性是由于只能在反汇编获得的汇编代码基础上进行分析,这 个的难度要远远高于源代码阅读。由此造成对程序的理解和对程序的逆向工程等 等很多困难。在针对闭源软件的漏洞分析中,反汇编引擎和调试器扮演了最重要 的角色。一般的手工分析采用的方法多种多样,但是自上而下的方法是最多的, 因为针对闭源软件的漏洞分析的主要难点还是在理解程序的流程上。 不论采用什么方法进行手工分析,都要求安全分析人员既对软件安全漏洞的 原理有深入的了解,同时还要熟悉软件本身的结构和功能。即使软件开发人员懂 得软件安全漏洞检测技术,手工进行漏洞检测仍然是一件费时耗力的事情。 完全自动化的软件安全漏洞检测还没有实现,人工的参与是必不可少的部分, 比如说对静态程序分析结果的确认,动态程序分析数据的构造等。 2 3 2 静态程序分析 软件安全审查已经成为确保软件安全性非常重要的一部分,很大一部份代码 层安全漏洞都可以通过软件安全审查发现。软件安全审查辅助工具的构造大量使 用了程序分析的原理和技术,这些技术包括两大部分,静态程序分析和动态程序 分析。 静态分析工具扫描程序文本,在不需要执行程序的情况下获得程序编译时候 的信息,并根据这些信息对特定的漏洞模式进行检测,从而完成软件的安全分析。 从理论上来说,扫描程序的源代码和扫描程序编译后的形式,如二进制代码,在 程序信息的获取上是等效的,但是后者的解码技术是件非常困难的事情。这和手 工分析的情况类似。 静态分析考虑了程序所有可能的运行情况,稳妥的分析策略使得分析结果具 备可靠性 7 1 ,但分析的结果未必有用。例如,对于一个返回整数绝对值的函数f , r 西北工业大学硕士学付论文第二章软件安全漏洞与检测技术 静态分析在无法精确判断的情况下,可能会得到的分析结果是“函数f 返回一个 数”。而这个结果对于分析人员来说可能价值并不大。 静态分析的本质是建立程序的一个状态模型,然后分析程序是如何在这些状 态之间转换。但一个程序的所有可能状态空间是非常大的,同时考虑所有状态往 往是不可行的。因此,静态分析会对程序的状态空间进行抽象,这样的处理会丢 掉程序的部分信息。为了使得静态分析结果仍然具各可靠性,要求无论抽象状态 的值是什么,分析的结果还应该是正确的。这样要求的直接结果就是分析精度的 损失,并且近似假设的地方越多,精度损失得就越大,误报的情况也越多。当分 析工具采取了不稳妥的分析策略时,舍掉一些可能存在的情况,那么分析结果就 可能就会漏掉一些安全漏洞。漏报会使得这些隐藏在软件中的漏洞日后产生极大 的危险。如果分析工具产生的误报太多,那么分析结果对于安全分析人员也是没 有意义的,因为需要花费大量的昂贵时间和资源来进行漏洞的确认工作。 现有的用于安全漏洞检测的静态分析主要有以下几种手段: 1 字符串匹配:最简单的静态检测方法是利用u n i x 应用程序g r e p 的字符串 匹配功能来查找源程序中安全隐患相关的危险函数,如s t r c p y 函数。其明显缺点 就是检查的安全漏洞有限和误报太多。 2 词法分析:引入基本的词法分析,对照安全漏洞库进行匹配,如 f l a w f i n d e r t ”、i t s 4 1 2 0 1 、r a t s t 2 1 嗨工具和更早期由m a t tb i s h o p 和m i k ed i l g e r 开发 的t o c - t o u 漏洞扫描工具都是采用这种方法。虽然这类工具分析的基本单位由 字符变成了记号,但是由于仍然没有考虑程序的语法,所以误报率也非常的高。 3 基于抽象语法树的语义分析:该方法扫描源程序构建抽象语法树,在抽象 语法树的基础上进行分析,分析时考虑被检查程序的基本语义。实用的静态分析 必须进行基于抽象语法树的程序语义分析,通过对抽象语法树的遍历,生成需求 驱动的程序中间表示形式,然后再做进一步的分析。如 2 3 1 在遍历抽象语法树的基 础上得到程序i p s s a 表示形式,并通过收集指针的信息来发现c 语言程序中的错 误。 不管用何种静态分析技术,还有一个重要的问题就是分析的时间。存在一些 静态分析工具执行得足够快,但是要想得到比较精确的分析结果,并且能够对大 型的程序进行分析,需要进行更多的计算和等待。特别是像指针别名分析问题, 现在还很难对大程序进行比较精确的有效分析。 9 西北工业大学硕十学付论文第二章软什安全漏洞与检测技术 2 3 3 动态程序分析 动态分析需要通过程序的执行来完成,有别于静态分析得到程序每次执行都 不变的特性,动态分析得到程序一次或多次执行的信息,可以根据这些监测到的 信息对特定的漏洞模式进行检测,从而完成软件的安全分析。程序测试和剖析是 最常见的标准动态分析。动态分析因为没有近似估计和抽象处理,所以其分析结 果是绝对精确的,如程序的那条路径被执行,程序计算的数据值是什么,程序使 用了多少内存或者是程序执行了多长时间等等。 动态安全漏洞检测有两种方式:一种是在执行的同时就进行程序运行信息的 收集和安全漏洞的判断,如阱】;另一种方式是把程序执行的所有信息都记录下来, 然后使用这些信息进行漏洞模式匹配,从而查找软件漏洞,如【2 5 】。动态分析常用 的方法就是在程序中植入代码。这些植入程序中的代码在程序运行时完成数据收 集,如输出某变量的值或打印执行结果等。 但是动态分析的结果是不完整的,一次程序的执行情况并不能代表程序以后 的可能执行情况。也就是说一个测试输入数据集不可能保证程序的所有可能执行 路径,仅仅依靠一次或多次的程序执行情况有可能无法发现软件的安全漏洞,但 是这些安全漏洞却是真实存在的。关键是如何设计有良好分支覆盖和状态覆盖的 测试用例。 现有的用于安全漏洞检测的动态分析主要有以下几种手段: 1 运行时监测:利用对程序编译分析的初步结果在程序中植入代码,程序运 行时监测实际发生的安全漏洞,如在访问数组元素时插入代码检查数组下标取值, 可以发现运行时发生的数组越界问题。工具a m n e s n 陋1 采用这种手段进行s q l 注入攻击漏洞检测。该工具为程序中每个进行数据库访问的点建立s q l 查询语句 模式,通过监测程序运行过程中动态生成的s q l 语句和该点模式的匹配情况来发 现安全漏洞。这类方法可以检查任一给定程序的执行轨迹是否违反安全规范,但 却无助于找到这些执行路径。 2 信息流分析:同样基于编译技术在程序中植入代码,在运行时专门监测不 符合安全规范的信息流。【2 5 】就是一个典型的进行信息流分析工具,工作原理主要 是对调用序列和函数传递的参数以及返回值进行跟踪。但是漏洞的判断还需要手 工对记录结果进行进一步的分析才能得出。该方法也无法找到真正发生安全问题 的执行轨迹。 3 程序模型检查:在程序执行时利用模型检查技术匹配违反安全规范的执行 轨迹,通过确定实际的安全攻击序列来发现安全漏洞。如瞄】通过p q l 语言描述违 1 0 西北t 业大学硕士学位论文 第二章软件安全漏洞与检测技术 反安全规范的执行轨迹,并为这些执行轨迹构造状态机,匹配这些状态机模型的 动态程序执行事件流被检测为程序的安全漏洞。 2 4 本章小结 本章从软件开发周期中的软件安全出发,说明了本文关注的内容。然后总结 了现有操作系统软件和应用软件中常见的安全漏洞。介绍了代码层软件安全漏洞 的手工分析方法,同时对软件安全审查中使用的静态程序分析技术和动态分析技 术进行了说明,总结了这两种技术在软件安全漏洞检测上的应用。 西北工业大学硕士学何论文第三章基于稃序分析技术的安全漏洞检测模型 第三章基于程序分析技术的安全漏洞检测模型 静态分析技术和动态分析技术源于两个不同的领域,在早期的发展中这两种 技术并没有交叉点。两者发展的成果都被认为是很难适合于另一方的。但是随着 程序分析技术的不断深入和广泛的应用,逐渐显露出了两者之间优缺点的互补性。 许多学者已经开始研究如何将它们结合在一起【5 】,软件安全漏洞检测是这种结合的 有效实践之一。 3 1 静态分析和动态分析的优势互补 表3 - 1 静态分析和动态分析的对比 静态分析动态分析 分析时间长:分析速度快: 对程序进行抽象简单的执行程序 稳妥的分析:精确的分析: 程序抽象引起没有近似 分析结果完整:分析结果不完整: 稳妥的考虑所有情况只代表一次执行的覆盖 表3 - 1 中对静态分析技术和动态分析技术优缺点进行了总结。结合使用两种方 法是克服各自缺点的有效途径。静态分析能够为动态分析提供正确性证明,反过 来后者能提高前者的分析精度。他们之间的互补整合有三种方式: 第一,静态分析和动态分析方法的互相借鉴。 静态分析和动态分析虽然分析的代价和结果上有很大的不同,但是对于特定 的问题,如果已经应用了其中一种分析方法,那么另一种分析方法在这个问题上 的应用也值得研究。在实际例子中,有些特定问题的两种分析方法都已经实现, 如程序的静态切片和动态切片 2 7 1 。 第二,聚合静态分析和动态分析方法。 聚合的意思是说这两种分析仍然是单独进行,但可以先进行其中一种分析, 然后使用第一种分析的结果来提高第二种分析的有效性。这样的分析策略已经被 研究人员和软件开发人员广泛使用。一个比较常见的应用就是利用静态分析搜集 1 2 西北丁业大学硕十学位论文 第三章基于稃序分析技术的安全漏洞检测模型 到的程序信息来减少动态分析需要进行的代码植入点。【2 8 】给出了一个聚合静态分 析和动态分析的框架,通过程序动态执行的路径将程序流图划分成两部分,为静 态分析提供更小的状态空间。 第三,混合的静态一动态分析方法。 在上述的两个方法中,工具的使用者还是要在静态分析或动态分析中进行选 择,但是整个过程的输出结果还是一种分析方法的输出结果。另一种新的分析方 法就是结合了静态分析和动态分析的混合分析方法。这种新的分析方法要在静态 分析的可靠性和动态分析的精确性之间做些权衡和折衷处理。该方法整合静态分 析和动态分析之间的差异,使得它们成为一个统一的整体。f 2 9 】中的工具在这方面 做了有益的尝试。 3 2 软件安全漏洞检测模型的提出 基于上述分析,本文给出一个软件代码层的安全漏洞分析模型,分析模型包括 了静态程序分析部分和动态程序分析部分。各个模块之间进行必要的数据交换和 通信,最后将软件的安全漏洞报告给分析人员。如图3 - 1 所示,对于整个分析模型, 进行如下几点说明: 1 整个模型采用的策略是静态分析方法和动态分析方法的聚合,静态分析部 分产生候选的安全漏洞报告,然后通过动态分析技术对候选的安全漏洞报告进行 确认和验证,并得出最终的软件安全漏洞检测报告。 2 输入模型的程序文件可以是程序的源代码文件,也可以是经过编译后的某 种形式,比如j a v a 程序的字节码。如果程序识别器具有了反编译平台的功能,那 么对于二进制代码文件也能进行相应的处理。由于二进制代码的安全分析涉及了 许多逆向工程方面的知识,可以单独作为研究的内容和方向,所以本文不再讨论。 3 程序测试输入数据的生成问题是比较复杂的,本文更关注的是软件安全漏 洞的检测,因此本文不对测试用例的生成做更深的研究。但测试输入数据生成器 是构成模型完整性的一个组成部分。 程序识别器完成从原始程序到抽象表示形式的转换,实际上是对程序某种粒度 上的理解。 解释器解释分析人员提供的别名分析描述和安全漏洞描述,它是静态数据流分 析器和静态安全漏洞分析器与外部的接口。 静态数据流分析器基于程序的抽象表示形式,进行漏洞检测所需程序静态信息 的收集,其中很重要的一部份是别名信息的收集。 西北丁= 业大学硕士学位论文 第三章基于稃序分析技术的安全漏洞检测模型 静态安全漏洞分析器在安全漏洞规则的指导下进行程序安全漏洞的分析,并产 生用于动态验证的候选安全漏洞。 代码植入器按照候选安全漏洞的信息,并结合程序静态信息,完成在原始程序 中的代码植入。 测试数据生成器按照候选安全漏洞的信息生成程序运行需要的输入测试用例。 程序运行监视器运行含植入代码的程序,收集程序动态信息,并进行最终安全 漏洞的判断。 整个模型有四个关键的地方:程序中间抽象形式的选取,安全漏洞的描述,别 名分析和程序的植入。 3 3 前端程序识别器 图3 - 1 软件安全漏洞检测模型 前端程序识别器对原始程序进行抽象就是建立了程序的另外一种中间表示形 式。后续的静态分析工作都会在这个中间表示形式的基础上进行。比如基础编译 原理罩构造的基本块和程序流图就是原始程序的一种抽象,编译器可以在这些抽 1 4 西北丁业大学硕士学位论文 第三章基于程序分析技术的安全漏洞检测模型 象基础上完成一些诸如公共子表达式删除的基本优化。和软件安全漏洞检测相关 的程序中间表示形式中,比较常见的有抽象语法树,控制流图,程序依赖图和过 程调用图。把原始程序包含的信息转换成关系数据库,用数据库的查询来完成程 序的静态分析是近来研究中出现的新方法o o l ,本小节也将对这种方法进行介绍, 并在第四章部分原型的设计和实现中使用了这种方法和技术。 3 3 1 常见的程序抽象表示形式 1 抽象语法树 最常见的一种程序高级中间表示形式是抽象语法树,它保持了明显的程序结 构,并含有能够将自身重构回到源代码形式或其近似形式的足够信息。程序静态 分析的许多工作都是通过遍历抽象语法树来完成的,包括一些其它的程序中间表 示形式的构造也要通过遍历抽象语法树来完成。 2 控制流图 控制流图【3 1 】是程序执行流程的图形表示,它反应了程序中语句、模块之间的执 行顺序和相互调用关系。通常所说的控制流图是函数控制流图,它描述控制流在 函数的各个语句问的流动关系。 定义3 1 函数控制流图可以表示为一个四元组 ,其中s 为图的节点集,函数中的每条语句都对应图中的一个节点;边集e = j s l , s 2 e s 且语句s l 执行后,s 2 可能成为下一条执行语句 - - - s x s ;s e n t r y 称为函数

温馨提示

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

最新文档

评论

0/150

提交评论