




已阅读5页,还剩77页未读, 继续免费阅读
(计算机应用技术专业论文)基于故障注入的软件安全测试技术研究.pdf.pdf 免费下载
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
摘要 摘要 本文研究如何通过软件测试有效提高软件的安全性。首先研究了目前已有 的提高软件安全性的相关工作,并进行了分析比较。软件安全测试是各高校和 研究机构用来提高软件安全性的研究焦点之一,由于软件生产成本相对硬件较 低,而且比较灵活,它既有静态扫描源代码的方法,也有动态跟踪运行程序的 测试方法,目前存在大量此类专门性的测试工具。 其中,故障注入技术是一种相对特殊的方法,它最大的特点是高度灵活性, 它既能开发特殊的硬件辅助设备进行硬件方法的测试,也能实现软件方法的故 障注入测试技术。软件测试方面,它可以对软件的容错性、可靠性、安全性进 行测试。在软件故障注入测试方式上,既可以采用静态故障注入也可以采用动 态故障注入。测试硬件的硬件故障注入方法和软件故障故障注入方法现在有了 比较稳定成熟的方法,虽然关于软件的故障注入测试技术虽然已经取得了很大 的进展,但同时也存在故障的精确模拟、故障的有效注入、通用性和移植性等 问题,仍处于探索阶段。 本文首先讨论了故障模型,故障测试用例的生成,故障注入方式和测试结 果分析等几个关键问题,并提出了两种方案从不同侧重点改善上述问题:第一 种方案重点关注故障测试用例的生成和测试结果的分析判断,根据反映软件产 品的用户使用情况的操作剖面生成故障测试用例模拟运行时的异常行为,从而 触发软件脆弱性,在目标系统运行时动态修改程序状态引入故障,开发安全需 求规格说明作为测试数据的判断准则,确定安全性,此方法不需要获取程序源 码,独立于软件开发过程执行测试,更加准确地模拟了漏洞触发情景。第二种 方案则结合了简单方便的静态源码扫描技术和灵活高效的动态故障注入技术, 并且在程序与环境的交互点注入故障,为了降低测试工具的复杂度,- 将注入故 障后的测试数据与参照运行( g o l d e nr u n ) 后的系统状态数据进行比较。此外,第 二种方案中还引入了虚拟机技术,将测试环境配置在虚拟机中,提高了测试工 具本身的健壮性和灵活性。最后我们对这两种方法进行了演示和验证工作,证 明了方法的有效性。 关键词:软件安全测试故障注入静态分析动态测试操作剖面安全需求规 格虚拟机 a b s t r a c t a b s t r a c t t h ep u r p o s eo ft h i sp a p e ri sh o wt ot e s ts o f t w a r ee f f e c t i v e l yi no r d e rt oi m p r o v e s o f t w a r es e c u r i t y t h i sp a p e rf i r s t a n a l y s e sa n dc o m p a r e st h ee x i s t i n gr e s e a r c h w o r k s s o f t w a r es e c u r i t yt e s t i n gi sar e s e a r c hf o c u si nr e s e a r c hi n s t i t u t i o n sa n du n i - v e r s i t i e s i ti sm o r ef l e x i b l ea n di t sd e v e l o p m e n tc o s t sa r er e l a t i v e l yl o w e rt h a n h a r d w a r e t h e r ea r eb o t hs t a t i cm e t h o d so fs c a n n i n gt h es o u r c ec o d ea n dd y n a m i c t e s t i n gm e t h o d so ft r a c k i n gt h er u n n i n gp r o g r a mw i t hal a r g en u m b e ro fs u c hs p e c i a l i z e dt e s t i n gt o o l s a m o n gt h e m ,t h ef a u l ti n j e c t i o nt e c h n i q u ei sar e l a t i v e l ys p e c i f i cm e t h o dw i t h h i 曲f l e x i b i l i t y i tc a nd e v e l o ps p e c i a lh a r d w a r e a s s i s t e dd e v i c et oc a r r yo u tt h ef a u l t i n j e c t i o nt e s t i n g ,a l s ou s es o f t w a r em e t h o df o rt h ep u r p o s e t h ef a u l ti n j e c t i o nt e c h n i q u ec a l lb eu s e df o rs o f t w a r ef a u l tt o l e r a n c e ,r e l i a b i l i t y ,s e c u r i t yt e s t i n g i tc o u l db e i m p l e m e n t e di nb o t hs t a t i ca n dd y n a m i cw a y s s o f t w a r ef a u l ti n j e c t i o nt e s t i n gt e c h n o l o g yh a so b t a i n e dc o n s i d e r a b l ea d v a n c e s ,b u tt h e r ea r es o m ep r o b l e m sn e e d e di m p r o v i n gf u r t h e r ,e g t h ee x a c tf a u l ts i m u l a t i o n ,i n j e c tf a u l te f f e c t i v e l y ,t h ev e r s a t i l i t y a n d p o r t a b i l i t yi s s u e s t h i sp a p e rf i r s t l yd i s c u s s e ss e v e r a lk e yi s s u e sd u r i n gt h et e s t i n gp r o c e d u r e :t h e f a u l tm o d e l ,f a u l tt e s tc a s eg e n e r a t i o n ,f a u l ti n j e c t i o nm e t h o d sa n dt e s tr e s u l t sa n a l y s i s 。t h e n ,w ep u tf o r w a r dt w os c h e m e sf r o mad i f f e r e n tf o c u st or e s o l v ea b o v e p r o b l e m s t h ef i r s ts c e n a r i om a i n l yf o c u s e so nt h ew a yo ff a u l ti n je c t i o nt e s tc a s e s a n dh o wt od e c i d ea b o u tt h et e s tr e s u l td a t a w eg e n e r a t et h ef a u l ti n je c t i o nt e s tc a s e s w i t ht h eo p e r a t i o n a lp r o f i l ei no r d e rt oe m u l a t er u n t i m ea b n o r m a le v e n t s ,m o d i f y r u n t i m et a r g e ts y s t e ms t a t e st oi n d u c et h ef a u l t ,d e v e l o ps o f t w a r es e c u r i t yr e q u i r e m e n ts p e c i f i c a t i o na st h em e t r i cf o rt h et e s tr e s u l td a t a t h i ss c e n a r i oh a sn ou s ef o r t h ea p p l i c a t i o ns o u r c ec o d ea n di si n d e p e n d e n to fs o f t w a r ed e v e l o p m e n tp r o c e d u r e , s oi tc a ne m u l a t et h ev u l n e r a b i l i t ye x p l o i tm o r ee x a c t l y i nt h es e c o n ds c e n a r i o ,w e c o m b i n et h es t a t i cs o u r c ec o d es c a n n e rt o o la n dt h ed y n a m i cf a u l ti n j e c t i o nt o o l ,i n j e c tf a u l t sa ti n t e r f a c e so ft h ea p p l i c a t i o na n di t se n v i r o n m e n t i no r d e rt ob r i n gd o w n t h ec o m p l e x i t yo ff a u l ti n j e c t i o nt e s tt o o l ,w ec o m p a r et h et e s tr e s u l td a t aw i t ht h e s t a t e sf r o mt h eg o l d e nr u n a d d i t i o n a l l y ,w ec o n f i g u r et h ee n v i r o n m e n to ff a u l t i n j e c t i o nt e s tt o o l si nt h ev i r t u a lm a c h i n e ,w h i c hi m p r o v e st h er o b u s ta n df l e x i b i l i t y l i a b s t r a c t o ft h et 0 0 1 t ot h el a s t ,w et e s tt h et w oa p p r o a c h e sw i t ht w of p ts e r v e ra p p l i c a t i o n s , w h i c hd e m o n s t r a t et h ee f f e c t i v i t yo fo u ra p p r o a c h e s k e y w o r d s :s o f t w a r es e c u r i t yt e s t i n g ,f a u l ti n j e c t i o n ,s t a t i ca n a l y s i s ,d y n a m i c t e s t ,v i r t u a lm a c h i n e ,o p e r a t i o np r o f i l e ,s e c u r i t yr e q u i r e m e n ts p e c i f i c a t i o n i i 图目录 图目录 图1 1c v e 年漏洞数量统计2 图1 2 微软安全公告数量统计3 图3 1故障、错误和失效的关系链2 0 图3 2 故障注入原理2 2 图3 3g o o f i 体系结构2 3 图3 4 故障注入方法分类2 4 图3 5 源代码级的故障分类和s w i f i 级的故障模拟3 5 图3 6 软件故障暴露的概率3 5 图3 7 故障注入六元组模型3 8 图4 1 操作剖面开发流程4 5 图4 2 故障注入安全测试框架4 8 图4 3a d m i n i s t r a t o r 使用的功能5 l 图4 4 读文件操作5 2 图4 5a d m i n i s t r a t o r 操作剖面实例5 3 图4 6 测试例原型实例l :重命名文件操作剖面5 4 图4 7 重命名文件最终发送的故障测试用例之一5 4 图4 8 测试例原型实例2 :创建目录操作剖面5 5 图4 9 创建目录最终发送的故障测试用例之一5 5 图4 1 0f t p 主要漏洞类型分类统计5 6 图4 1 l远程缓冲区溢出漏洞分类统计5 6 图4 1 2f t p s t r e s s f u z z e rv 1 0 操作界面5 8 图4 1 3f t p s t r e s s f u z z e r v l 0 发送数据包中的参数数据5 8 图4 1 4f t p s t r e s s f u z z e rv 1 0 数据包大小设定5 9 图4 1 5x e n3 0 结构示意图6 0 图4 1 6 故障注入技术总体框架图6 2 图4 1 7 基于x e n 虚拟机的故障注入测试模型6 7 图4 1 8 共享日志缓冲区实现的通信模块6 8 v t 表目录 表目录 表4 1 应用安全需求规格说明4 5 表4 2 需求规格说明4 6 表4 32 0 0 8 0 9 2 0 至2 0 0 9 0 3 1 6 期间1 5 个f t p 缺陷发布5 0 表4 4 间接环境故障列表举例6 3 表4 5 直接环境故障列表举例6 3 v i i 中国科学技术大学学位论文原创性和授权使用声明 本人声明所呈交的学位论文,是本人在导师指导下进行研究工作 所取得的成果。除已特别加以标注和致谢的地方外,论文中不包含任 何他人已经发表或撰写过的研究成果。与我一同工作的同志对本研究 所做的贡献均已在论文中作了明确的说明。 本人授权中国科学技术大学拥有学位论文的部分使用权,即:学 校有权按有关规定向国家有关部门或机构送交论文的复印件和电子 版,允许论文被查阅和借阅,可以将学位论文编入有关数据库进行检 索,可以采用影印、缩印或扫描等复制手段保存、汇编学位论文。 保密的学位论文在解密后也遵守此规定。 作者签名:盔监 洲? 年月j e t 第1 章绪论 1 1背景介绍 第1 章绪论 近年来计算机安全已经变成一个非常重要的问题,安全性是软件质量的重 要属性。传统上国内学者较多关注软件的失效安全性( s a f e t y ) ,即软件运行不引 起系统事故的能力,强调的是一类安全关键软件的安全性失效可能造成重大人 员伤亡、财产损失、环境污染等危险事故。对失效安全性的度量主要建立在可 靠性理论基础上的安全度、失效度、平均事故间隔时间、软件事故率等。保密 安全性( s e c u r i t y ) ,i s 0 9 1 2 6 质量模型将其定义为与防止对程序和数据进行非法 存取的预防能力有关的质量属性。软件安全性是软件在受到恶意攻击时仍能提 供所需功能的能力( 施寅生,邓世伟,谷天阳,2 0 0 8 ) 。本文重点关注软件安全 性测试( 即保密性测试,s e c u r i t yt e s t i n g ) 。 目前,针对软件漏洞发布公告的安全公司或安全组织主要有以下三个:微 软公司、c v e 安全组织、f o r t i f ys o f t w a r e 公司( 陈鑫,崔宝江,范文庆,钮心 忻,2 0 0 9 ) 。其中微软公司作为世界上最主要的操作系统软件提供商,它所发布 的安全公告主要针对微软开发的w i n d o w s 操作系统及其它应用软件。微软的安 全公告不仅发布漏洞信息,还提供相关补丁的下载以方便用户修复漏洞。c v e 安全组织由美国国土安全部s d e p a r t m e n to f h o m e l a n ds e c u r i t y ) 的国家网络安 全局( n a t i o n a lc y b e rs e c u r i t yd i v i s i o n ) 资助,为公众提供免费的漏洞信息查询、统 计等服务。c v e 所发布的漏洞公告范围更广,不仅包含了软件漏洞,还包含了 网站的s q l 注入、x p a t h 注入、跨站脚本攻击等w e b 漏洞。 图1 1 所示是c v e 年漏洞数量统计,可以看出漏洞的数量在2 0 0 8 年之前 逐年增加。1 9 9 9 年之前,由于用户以及软件生产商对于漏洞的关注程度不是很 高,黑客也在致力于通过传统的病毒感染方式进行病毒扩散,因此统计到的漏 洞数量维持在较低水平。1 9 9 9 2 0 0 4 年,漏洞数量已经由每年1 0 0 0 个的水平增 长到每年近3 0 0 0 个。这期间,非常著名的冲击波、震荡波等病毒在互联网上肆 虐。黑客将注意力转移到了操作系统漏洞方面。冲击波、震荡波是通过利用操 作系统漏洞来感染主机,再通过成熟的蠕虫技术将病毒扩散出去,才会造成如 此巨大的影响。2 0 0 5 年之后,漏洞数量达到了一个高峰期。据美国国家标准与 技术局( n i s t ) 统计,在数量众多的漏洞当中,9 2 的漏洞存在于软件之中。虽 然图1 1 中2 0 0 8 年( 截至1 2 月1 5 日) 的漏洞数量较往年有下降趋势,但是考虑 到互联网的整体安全状况,未来几年漏洞的数量仍将维持在较高水平上。对于 第1 章绪论 各种漏洞而言,操作系统漏洞的危害程度是最大的。一旦用户主机的操作系统 的漏洞被利用,攻击者可以访问该主机并进行任意的操作。微软在个人电脑操 作系统软件市场占有率很高,因此它的漏洞产生的影响与危害性是十分巨大的。 分析微软操作系统的漏洞状况对于研究软件漏洞的现状是十分必要的。 1 9 9 71 9 9 81 9 9 92 0 0 02 0 0 1 2 0 0 22 u 0 32 0 0 42 0 0 52 0 0 62 0 0 72 0 0 8 时闯1 年 图1 1c v e 年漏洞数量统计 图1 2 所示为微软2 0 0 3 2 0 0 8 年( 截至2 0 0 8 年1 2 月1 5 日) 的安全公告数量, 每个安全等级的公告数量也清楚地显示在图中。2 0 0 3 2 0 0 6 年的安全公告数量基 本维持在约每年5 0 个的水平,2 0 0 6 年以后上升到了约每年7 0 个的水平。严重 和重要等级的安全公告的数量在逐年增加,所占比例也在不断提高。由于一个 微软安全公告中一般包含了若干个漏洞,所以每年的安全公告数量只能反映大 致的趋势。相对而言,c v e 公布的微软漏洞数量要更准确一些。c v e 公布的 2 0 0 6 2 0 0 8 年微软漏洞数量分别是2 6 7 、2 5 8 、2 2 5 ,占当年的c v e 漏洞比例分 别为4 0 4 、3 9 6 和4 2 1 。就微软漏洞的发展趋势而言,微软公司在2 0 0 8 年上半年的“m i c r o s o f ts e c u r i t yi n t e l l i g e n c er e p o r t ”中提到:2 0 0 8 年上半年行 业内漏洞的发掘数量相对于2 0 0 7 年下半年下降了4 ,相对于2 0 0 7 年上半年下 降了1 9 ,但漏洞评分( c v s s 评分系统) 为高的漏洞数量相对于2 0 0 7 年下半年 上升了1 3 。不难看出,软件漏洞数量虽然略有下降趋势,但是漏洞的严重程 度却在上升,因此软件的漏洞安全是一个不能够忽视的问题。 从总体上来讲,软件漏洞仍将是威胁信息安全的重大问题。漏洞的数量略 呈下降态势,但是漏洞的严重程度在向相反方向发展。 2 第1 章绪论 2 0 0 32 0 0 42 0 l i ) 52 0 0 62 0 0 72 0 0 8 图1 2 微软安全公告数量统计 口低缀的 一中够的 园蓖譬的 圈紧急的 时阅1 年l 为了提高软件的安全性,研究人员采取了各种措施:对软件开发者的安全 知识普及,提出安全编程的概念,以期从根本上改善软件质量。然而由于软件 产品的迅速更新以及时间、经济成本考虑等多种因素,目前这种措施效果有限; 研究黑客攻击的策略,技术和工具,发布漏洞补丁和制定相应的抵御工具,例 如防火墙、杀毒软件等,这种方法对保护软件起到不错的效果。但是由于这种 方法是被动式的,它在时间上具有滞后性,而且层出不穷的新漏洞攻击使得这 些工具的更新代价很大;硬件与软件的安全总是相互均衡的,一个具有弱安全 性的硬件需要加强软件的安全性来弥补,反之亦然,因此,从硬件的角度来提 高软件的安全性也是安全研究的一个重要分支,安全协处理器的研究取得了一 定成效并形成了产品,但是这种方法的局限性在于它只能对一定范围的安全特 性起作用,同时产品一旦确定,很难增加新的功能,因此不够灵活,生产成本 也很高;软件安全测试是各高效和研究机构用来提高软件安全性的研究焦点之 一,软件生产成本相对硬件较低,而且比较灵活,它既有静态扫描源代码的方 法,也有动态跟踪运行程序的测试方法,目前存在大量此类专门性的测试工具。 软件安全测试方法中的故障注入技术被广泛用于验证软件容忍性、健壮性 和安全性的测试中。故障注入是指按照选定的故障模型,人为地有意识地在目 标系统中产生故障,以加速该系统的错误和失效的发生;通过分析系统对所注 入故障的反应信息,可以验证容错性和故障安全等信息。软件实现的故障注入 对目标系统的硬件环境没有损坏,使用起来方便、灵活,系统的复杂程度较小, 具有许多其它测试方法不具有的优势。本文以现有的故障注入技术为基础,分 析技术特点和尚待解决的问题,结合软件测试的其它技术进行改进,以实现一 个高度通用性、灵活性和高效率的软件故障注入工具,更好地发现软件脆弱性 和评估软件安全性能。 3 第1 章绪论 1 2 研究内容 目前故障注入技术被广泛应用于硬件和软件的各种测试中,而且取得了令 人瞩目的进展。故障注入可以有效地模拟各种异常程序行为,通过故障注入能 够强制性地使程序进入到某种特定的状态,而这些状态是采用常规的标准测试 技术很难到达的。软件实现的故障注入对目标系统的硬件环境没有损坏,使用 起来方便、灵活,系统的复杂程度较小,但是在测试过程中仍然存在若干需要 进一步完善的问题: ( 1 ) 目前软件故障注入的测试技术主要应用于分布式系统,嵌入式系统,协议, 和组件的错误容忍性和健壮性测试。这种情况下,随机测试可能更加简单方 便,使用较多。为了发现软件脆弱性,不仅需要随机测试来探测简单的漏洞, 而且需要采取一定策略生成确定性的、更加精确模拟故障的故障测试用例, 以发现复杂的、隐藏较深的脆弱点,然而目前确定性的测试用例大多都是针 对特殊对象的,缺乏通用性的故障测试用例生成模型。 ( 2 ) 目前故障注入技术存在的一个问题是,大多数故障注入工具使用特殊的故障 注入策略来测试一个特殊系统。用新的故障注入策略来扩展这样的工具或者 将工具移植到一个新的系统通常是一个笨重、耗时的过程。到目前为止,只 有很少的工具研究了不同目标系统的扩展性和移植性问题。同时,目前具有 高通用性的软件故障注入技术设计成本比较高昂,同时由于设计复杂,用户 配置使用也很麻烦,有的需要用户手动编写故障注入脚本,因此,需要在通 用性和用户友好性之间寻找合适的折中点。 ( 3 ) 故障注入技术通常分为静态故障注入技术和动态故障注入技术,静态故障注 入主要通过程序变异的方法,改变源程序,在被测系统的二进制文件内静态 地引入故障,从而使其运行时出现错误。由于静态注入占用很少的系统资源, 也不需要监控程序,能够较好的保持系统原来的时序,因此这种注入法有好 的优化性。但是由于它的静态特点,它不满足灵活性和重用性要求,这对需 要反复测试的系统很不方便。动态注入是在被测系统正常运行过程中,在特 定的状态或条件下,通过一定的机制修改被测系统的二进制映像,从而实现 故障注入。这种注入方式有以下特点:注入故障前被测系统的二进制映像 与原目标系统的二进制映像相同。需要一个监控程序对目标系统进行监控 以决定是否注入故障。要求故障注入系统能灵活、动态地生成或提取故障 测试用例并注入。这种方式中,由于注入故障前被测系统的二进制映像不被 改变,因此它能逼真地模拟被测系统的运行。另外,由于该种方式是根据被 测系统的运行状态或条件注入故障的,所以它具有灵活性。由于这种注入方 式需要一个监控程序来监控目标系统的状态,以决定是否进行故障注入,这 4 第1 章绪论 要求该监控程序的优先级不能太低,否则就不能监测到目标系统的某些关键 状态信息,因此,这个监控程序就有可能抢占系统其他任务的运行,以至于 影响系统的正常运行。另外,监控程序要不停的提取系统大量的状态信息已 实现监控,这样会占用目标系统很大的资源开销。因此,如何结合静态故障 注入和动态故障注入技术以发挥它们的优势,也是一个需要进一步回答的问 题。 ( 4 ) 通常的故障注入技术在一个系统内实现故障注入和故障监视功能,这样的测 试工具就存在安全性和完整性的问题:是,如果测试过程中操作系统产生 了不可恢复的崩溃,这样重新布置测试环境将会很耗时。二是,一旦操作系 统崩溃我们不可能对导致崩溃产生的实际故障进行深入查看,而且故障注入 后有时候需要的分析数据是复杂的,甚至是不确定的,这就需要记录尽可能 多的运行时系统状态,这对于传统的操作系统是个很消耗资源的任务。 本论文的目标是在借鉴已有成果的基础上,寻找解决至少改善上述问题的方 法,以使故障注入工具更加简单,高效,通用和灵活。 1 3 方法概述及研究意义 我们提出了两种方案来改善上述问题:第一种方案集中讨论故障注入测试用 例的生成和测试结果的精确分析,这两个问题也是故障注入技术中比较关键的技 术,同时也是其它故障注入技术没有足够重视的方面。第二种方法针对源码可用 的目标系统考虑静态扫描和动态故障注入的方法的有效结合,以及对故障注入工 具本身健壮性的一个改进,将故障注入技术的不同功能放置在虚拟机的不同虚拟 域中。两种方法的实现思路概括如下: ( 1 ) 现在的验证和检测是高度面向过程的,并且需要软件生命周期的早期知识 来指导测试,例如威胁分析、失效模型和影响分析、故障树分析、马尔科 夫模型,和形式化方法。相反的,在第一种方案中,我们引入面向产品的 检测机制并且关注软件产品,认为软件认证测试必须独立于设计保证。考 虑到大部分漏洞的触发大多都是目标系统与用户及环境的异常交互造成 的,我们使用操作剖面来分析目标系统中每个用户对系统的使用范围及其 概率,用户操作的环境等信息,然后生成测试用例。同时在程序运行过程 中,通过修改程序状态来实现故障注入。在测试过程中收集来的测试数据 存放在数据库中,同时我们开发了目标系统的安全需求规格说明作为测试 结果的评测标准。 ( 2 ) 大部分的安全测试都对软件程序内的功能和结构进行了充分的考虑和测 5 第1 章绪论 试,但是由于资源的限制,很少考虑到应用程序在极端的运行环境下的脆 弱性。第二种方法提出了一种基于x e n 虚拟机的故障注入软件脆弱性测试 模型,该模型以x e n 虚拟机的特权域和用户域两个域为测试环境,故障监 控和故障注入分布在两个客户域中,有效实现r n 试的备份和恢复及跟踪 调试功能,同时该模型利用静态扫描对源代码进行分析并设置断点,在应 用程序和环境的交互处注入故障来干扰环境,模拟异常环境以触发软件脆 弱点。 本篇论文的主要贡献在于: ( 1 ) 讨论了故障注入技术测试过程中的几个关键问题,并给出了改进措施。 ( 2 ) 使用面向产品的操作剖面和在应用程序与环境的交互点注入故障两种方法 作为故障模型,生成测试用例,两种方法都力图真实模拟故障,以触发安 全冲突,发现软件安全脆弱点。 ( 3 ) 对可以获得源码和不能获得源码的应用程序都提出了相应的故障注入测试 方案,并且将虚拟机技术引入故障注入技术,将故障注入的不同功能部分 分别放置在虚拟机的不同虚拟域中,增加了故障注入工具本身的健壮性和 测试的灵活性。 1 4本文的组织结构 本文主要研究软件故障注入方法在发现软件安全脆弱性方面的应用。首先 分类研究了软件安全测试实现技术,阐述了提高软件安全性的措施。然后详细 分析了故障注入技术。故障注入方法由几个关键技术组成,本文首先讨论了故 障模型,故障测试用例的生成,故障注入方式和测试结果分析等几个关键问题, 在前面的基础上,提出了基于操作剖面的故障注入方法和基于虚拟机的故障注 入方法来提高现有故障注入技术在软件安全测试方面的性能,并用实验证明了 方法的有效性。 本文总共分为5 章,各章的主要内容如下: 第1 章:介绍了本文的研究背景和内容,概要介绍了现有软件安全研究的 必要性,提出了故障注入技术在软件安全测试应用中存在的问题,随后针对这 些问题,给出了本文的研究内容。 第2 章:对提高软件安全性的研究工作进行了全面介绍,首先对软件安全 测试技术的两个分类进行了研究,最后提出了软件安全抵御所应采取的措施。 第3 章:错误注入技术是一种检查系统可靠性性和安全性的灵活、有效工 具,它可以同时采用硬件和软件技术来实现故障注入,而且故障注入方式也针 6 第1 章绪论 对不同的目标和应用灵活多变。本章详细描述了故障注入技术涉及的术语,实 现思想和框架,并详细分析了故障注入技术的实现方法和国内外的研究现状。 第4 章:给出了本文采用的研究方法与技术方案。在研究了软件安全测试 技术和故障注入现有方法的基础上,为了改善故障注入方法在软件安全脆弱性 测试的应用中遇到的问题,我们提出了基于操作剖面和基于虚拟机的两种故障 注入技术方法,最后用实验演示和验证了方法的有效性。 第5 章:对本文的研究工作进行总结,并针对方法中存在的不足及进一步 发展做了分析和展望。 7 第2 章常用软件安全性测试技术简介 第2 章常用软件安全性测试技术简介 软件安全性测试是确定软件的安全特性的实现是否与预期设计一致的过程 ( 施寅生,邓世伟,谷天阳,2 0 0 8 ) 。软件安全性测试有其不同于其它测试类型 的特殊性,一个很难发现的软件安全漏洞可能导致大量用户受到影响,而一个 很难发现的软件缺陷可能只影响很少一部分用户。安全性测试不同于传统测试 类型最大的区别是它强调软件不应当做什么,而不是软件要做什么。非安全性 缺陷常常是违反规约,即软件应当做a ,它却做了b 。安全性缺陷常常由软件 的副作用引起,即软件应当做a ,它做了a 的同时,又做了b 。传统测试类型 强调软件的肯定需求,例如用户账户3 次登陆失败则关闭此账户。安全性测试 更强调软件的否定需求,如未授权用户不能访问数据。软件安全性测试可分为 安全功能测试和安全漏洞测试两个方面。 安全功能测试基于软件的安全功能需求说明,测试软件的安全功能实现是 否与安全需求一致,需求实现是否正确完备。软件主要的安全功能需求包括数 据机密性、完整性、可用性、不可否认性、身份认证、授权、访问控制、审计 跟踪、委托、隐私保护、安全管理等。安全漏洞测试从攻击者的角度,以发现 软件的安全漏洞为目的。安全漏洞是指系统在设计、实现、操作、管理上存在 的可被利用的缺陷或弱点。漏洞被利用可能造成软件受到攻击,使软件进入不 安全的状态,安全漏洞测试就是识别软件的安全漏洞。现在的研究工作用于保 护软件不被篡改,防止软件被欺骟或者泄露,预防被已知的安全漏洞攻击。各 个大学和研究机构的科学家提出了广泛的应对攻击的措施。本章将概括介绍现 存的提高软件安全的方法。 2 1 硬件方法检测软件安全性 许多软件安全工具的设计者将他们自己限制在计算机系统的“较高层次” ( g e l b a r t ,o l g a ,d s c2 0 0 8 ) ,例如,他们仅仅关注应用程序或者操作系统,但 是计算活动不仅发生在软件中,还会发生在软件周围的硬件和物理环境中。 安全协处理器是可信的计算设备,它扩展现存的系统并确保程序以可信的 方式运行。基于一个系统,协处理器提供对应用程序( 或部分的程序) 的机密和 篡改保护。程序和( 或) 内存经常以外人看来是密文的格式出现,这是对保密和 计算的保护,甚至是对恶意的直接物理访问的抵御。 a b y s s ( w h i t es r ,c o m e r f o r d l1 9 9 0 ) 是用来保护软件执行的安全协处理器, 9 第2 章常用软件安全性测试技术简介 也是一个用于软件保护的体系结构。它允许软件商根据软件来对其进行调节, 但是一旦软件被安装,用户就不能修改它,并且按照生产商最初设定的参数精 确运行。软件应用程序被划分成被保护的过程( 经常是关键的) 和未被保护的过 程,被保护的过程在安全协处理器内部执行。协处理器自身是一个完整、小型 的计算机系统,它包括一个处理器、实时时钟、随机数产生器和存储执行中的 被保护过程,它也包括监控过程,负责执行和验证被保护过程。安全协处理器 是逻辑上、物理上和程序上都安全的单元:既然它不允许任何其它应用程序访 问受保护的过程和监控过程,它是逻辑安全的;既然它包含在阻止篡改的程序 包中,它是物理安全的;既然运行在其内部的服务不能用于破坏软件保护,它 是程序上安全的。 所有被保护的部分或者全部应用程序都被加密保存在磁盘上,它们唯一的 一次以明文格式表示是在安全协处理器中。监控过程负责过程的加密、解密以 及密码管理,它也负责检验并实施执行权( r i g h t - t o e x e c u t e ) ,例如只有被认证的 系统才能够执行特定软件。执行权( r i g h t - t o e x e c u t e ) 被生产商创建,它们包括: 加密解密密钥; 有关监控过程如何使用执行权( r i g h t t o e x e c u t e ) l 拘信息( 例如,软件只被 允许安装在一个处理器上,把软件复制到另一个机器上是不可能的) ; 指定有权利执行软件的操作者,一个许可证有效期等其它信息。 执行权( r i g h t t o e x e c u t e ) , 必, 须以安全方式安装在a b y s s 安全协处理器中, 通常使用软件商提供的智能卡或者安全令牌来完成。 a b y s s 体系结构的出现激发了许多安全协处理器领域的研究项目。基于 a b y s s 拓展的安全处理器i b mc i t a d e l 不但提供对特殊软件的保护,而且也提 供对计算机系统其它部分的安全服务( 例如加密) 保护。c i t a d e l 最大的贡献是它 成为实际硬件模型的基础,c a r n e g i em e l l o n 大学开发的d y a d ( y e e ,t y g a r1 9 9 5 ) 系 统就是基于这个原型。 d y a d 是一个安全硬件模型,它包含一个c p u 、引导程序( b o o t s t r a p ) r o m , 和一个不易丢失数据的内存。类似于a b y s s 和c i t a d e l ,它是一个安全协处理 器,能够存储密钥并同时支持执行密文指令和处理密文数据。它是基于物理上 能够进行篡改校验和防止加密分析的假设。既然d y a d 支持计算机系统的其它 部分,它能提供一个安全的启动服务。系统首先执行来自于安全r o m 的验证 软件,它在整个系统启动之前验证系统软件。安全启动之后,d y a d 向计算机系 统提供安全功能。像a b y s s ,它在安全协处理器中执行被保护的应用程序( 或 它们的部分) 。d y a d 也提供对任何存储的数据进行完整性验证,加密存储数据 并加密通信渠道( 这样支持d y a d 的网络系统就能通过密钥交换,验证和加密来 1 0 第2 章常用软件安全性测试技术简介 建立安全的通信1 。既然d y a d 支持整个计算机系统,部分操作系统内核可以运 行在安全模式来支持安全协处理器。 另一个源于a b y s s 和c i t a d e l 的安全协处理器是i b m4 7 5 8 安全协处理器。 i b m 的目标是为第三方提供开发和展开安全协处理器应用的多用途平台。平台 必须满足: 可以安全配置的 支持p 具有支持可能不互相信任的多方的能力 有一个层次的安全体系结构,一个层次的损坏不会传播的其它层。 进一步研究安全协处理器的应用证明,它们在恶意环境中也是适用的( 因为 它们是具有反篡改保护功能) ,能够抵御部分缺陷( 因为它们只执行应用程序的 指定部分并提供孤立的保护层) ,避免不具有完整的访问密钥的恶意入侵者,帮 助敏感信息的备份和灾难恢复。 安全协处理器提供关键部分的软件加密( 或全部) 并防止软件被修改。但是, 它们并不提供应用程序控制流的攻击保护。足智多谋的攻击者即使不用解密也 能够重放加密软件来获得执行结果的信息。这个软件也不能避免所有的编程错 误:如果写的很糟糕,它可能包含攻击者可以利用以获得执行控制的漏洞。在 极端情况下,如果可信的协处理器本身受到损毁,系统可能更容易被攻击。 2 2 软件安全性测试方法 理想情况下,软件应该做被预料的事情而不是其它的。既然生成完美的软 件是几乎是不可能的,人们设计出各种基于软件的保护方法。软件保护的方法 可以大致分为静态方法和动态方法,静态方法包括软件水印,代码扰乱和静态 代码分析,动态方法通常用来应对特定的攻击( g e l b a r t ,o l g a2 0 0 8 ) 。 2 2 1静态分析技术 静态分析技术关注程序的代码,从程序代码的内部结构和特性上检测软件 漏洞( 张林,曾庆凯,9 _ 0 0 5 ) 。 静态检测技术从早期的词法分析开始,出现了大量的方法。早期静态检测 主要指静态分析,随着形式化验证方法的引入,静态检测的概念被扩展为: 1 ) 静态分析 对被测程序源代码进行扫描,从语法、语义上理解程序行为,直接分析被 测程序特征,寻找可能导致错误的异常。 第2 章常用软件安全性测试技术简介 2 】程序验证 通过对程序代码的形式化抽象,使用形式化验证技术证明程序是否符合特 定安全规则,从而判断程序是否存在安全漏洞。 从早期的缓冲区溢出检测开始,十几年来出现了各种检测技术,以下分程 序静态分析和程序抽象验证两类来介绍。 2 2 2 1 静态分析 静态分析方法直接扫描程序代码,提取程序关键语法,解释其语义,理解 程序行为,根据预先设定的漏洞特征、安全规则等检测漏洞( 张林,曾庆凯, 2 0 0 5 ) 。 静态代码安全检查器分析和扫描源代码,寻找潜在的安全问题,这类似于 病毒扫描器。静态代码检测器检查源代码来发现任何已知的或预先定义的问题。 f a l s ep o s i t i v e 和f a l s en e g a t i v e 都可能发生,因此应该结合其他的安全审计和测 试方法( t e v i s ,j a y e v a n j2 0 0 5 ) 。 静态代码安全检查器的目标是集中于安全分析。不用于程序员用类似于 g r e p ( ) 的应用程序搜索源代码,检查器检查已知和潜在的问题,使用编码的规 则寻找这些问题,并放入数据库。检查器不但发现问题,而且也描述问题并给 出可能的修订意见,而且,他们对每个问题都提供潜在的危害程度的评估,可 以方便审查者用于整个评估。 这些安全检查器根据以下不同的标准而有所差异:发现安全问题所采用的 方法,被检测的安全问题的类型,问题被报告的方式,用于提高软件的建议, 主机平台,审计工具源码的可用性,软件的专有和共享特性,这些特征标识了 每一个安全审计工具能提供的特征的广泛范围。主要分为以下3 类: ( 1 )词法分析 词法分析是最早出现的静态分析技术,它仅仅进行词法上的检查。词法分 析把程序划分为一系列片断,再把每个片断与一个“可疑数据库 进行比较, 如果可疑,则进一步实行启发式判断。词法分析可以检查的漏洞较少,往往只 是一些已知的固定漏洞代码,漏报率相当高。 ( 2 )规则检查 程序本身的安全性可由安全规则描述。程序本身存在一些编程规则,即一 些通用的安全规则,也称之为漏洞模式,比如程序在r o o t 权限下要避免e x e c 调 用。规则检查方法将这些规则以特定语法描述,由规则处理器接收,并将其转 换为分析器能够接受的内部表示,然后再将程序行为进行比对、检测。 ( 3 )类型推导 自动推导程序中变量和函数的类型,来判断变量和函数的访问是否符合类 1 2 第2 章常用软件安全性测试技术简介 型规则。静态漏洞检测的类型推导由定型断言、推导规则和检查规则3 个部分 组成。定型断言定义变量的初始类型,推导规则提供了推论系统的规则集合, 检查规则用于判定推论结果是否为“良行为”。 基于类型推导的静态分析方法适用于控制流无关的分析,但
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论