




已阅读5页,还剩55页未读, 继续免费阅读
(电路与系统专业论文)fuzz安全测试技术研究.pdf.pdf 免费下载
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
摘要 随着软件产品和i n t e m e t 的快速发展,产品的安全性和网络安全问题变得越来 越严重,软件安全测试也变得越来越受重视。对于0 d a y 挖掘的方法有源代码审核, 二进制审核,f u z z 测试等方法。一般工业界经常使用的安全测试方法是f u z z 测试, 它是软件产品安全和网络安全的主要保障之一。 本文首先介绍软件测试的基本方法,分析了黑盒测试用例中的边界值方法, 等价类划分法,及常见的网络安全漏洞方法像网页安全漏洞检测,s q l 注入,缓 冲区溢出。设计关于边界值方法,等价类划分法的测试用例等。 重点介绍f u z z 测试的主要技术和测试工具。详细讲述关于f u z z 测试中的文件 随机测试和a c t i v e x 的测试,通过两个实验实现。实验一利用a c t i v e xf u z z 的常用 工具c o m r a i d e r ,对暴风影音的m p s d u 文件的o n b e f o r e v i d e o d o w n l o a d 函数进行 测试,定位找出漏洞,使用o l l y d b g 和i d ap r o 编译器进行漏洞分析,编写测试代 码,代码运行后,触发漏洞。实验二使用f i l e f u z z 工具,对m o v i e p l a y 播放器进行 漏洞挖掘。 本文设计的使用f u z z a c t i v e x 工具c o m r a i d e r 和f i l e f u z z - ! - 具进行漏洞挖掘 的方法,在一定程度上有助于挖掘更多的安全漏洞,可作为使用f u z z 测试工具进 行更高级漏洞挖掘的基础参考。 关键词:软件安全测试漏洞f u z z 测试c o m r a i d e rf i l e f u z z a bs t r a c t 晰吐1t h eg r e a td e v e l o p m e n to fs o f t w a r ep r o d u c t sa n di n t e m e t ,t h es e c u r i t yo f p r o d u c ta n dn e t w o r kb e c o m em o r ea n dm o r ei m p o r t a n t s o f t w a r es e c u r i t yt e s t i n gi s b e c o m i n gm o r ea n dm o r ep r e s s i n g t h em i n i n gm e t h o df o ro d a yi n c l u d e ss o u r c ec o d e a u d i t , b i n a r ya u d i t , f u z zt e s t i n g ,a n ds oo n f u z zt e s t i n gi sf r e q u e n t l yu s e di n g e n e r a li n d u s t r y ,w h i c hi sas a f e t yt e s t i n ga n d o n eo ft h em a i ns e c u r i t yt e s t i n gu s e di n t h es o f t w a r ep r o d u c ts e c u r i t ya n dn e t w o r ks e c u r i t y f i r s t l y , t h i sp a p e ri n t r o d u c e dt h eb a s i cm e t h o d o fs o f t w a r et e s t i n g ,i n c l u d i n g b l a c k b o xc a s et e s ta n a l y s i so ft h eb o u n d a r yv a l u em e t h o d ,e q u i v a l e n c ec l a s sm e t h o d , a n dc o m m o nm e t h o do fn e t w o r ks e c u r i t yv u l n e r a b i l i t i e s ,s u c ha sw e bs e c u r i t y v u l n e r a b i l i t yd e t e c t i o n ,s q li 玛e c t i o n ,b u f f e ro v e r f l o w s o m ec a s e sd e s i g n e do nt h e b o u n d a r yv a l u em e t h o d ,e q u i v a l e n c ec l a s sa l l o c a t i o n s e c o n d l y ,f u z zt e s t i n gh i g h l i g h t e dt h em a i nt e c h n i c a la n dt e s t i n gt o o l s f u z z t e s t c a s e sd e s c r i b e da n dr a n d o mn u m b e rg e n e r a t i o np r o c e s si si nd e t a i l ,a n dt h ef i r s t e x p e r i m e n tu s e df u z za c t i v e xt o o ln a m e dc o m r a i d e rt o t e s tm p s d uf i l eb yt h e f u n c t i o no fo n b e f o r e v i d e o d o w n l o a dt od e t e c tv u l n e r a b i l i t y , u s i n gt h ed i s a s s e m b l y t o o lo fo l l y d b ga n di d ap r ot od e b u g ,c o m p i l i n gt h ec o d eo ft o = r i n g t h es e c o n d e x p e r i m e n tu s e df i l e f u z zt o d e t e c tv u l n e r b i l i t yo fm e d i a p l a y w h e nh a df i n i s h e d , t h e r ew a sav u l n e r a b i l i t yt oe x p l o i t t h em e t h o do fu s i n gc o m r a i d e ra n df i l e f u z zd e s i g n e di nt h i st h e s i st oe x p l o i t v u l n e r a b i l i t i e s ,t oac e r t a i ne x t e n t ,h e l p i n gt od e t e c tm o r ea n dm o r es e c u r e v u l n e r a b i l i t i e s ,t h e ym i g h tb eu s e da st h er e f e r e n c eo fd e t e c t i n gm o r ea d v a n c e ds e c u r e l h l e r a b i l i t i e s k e y w o r d :s o f t w a r es e c u r i t yt e s t i n gv u l n e r a b i l i t y f u z zt e s t i n gc o m r a i d e r f i l e f i i z z 西安电子科技大学 学位论文创新性声明 秉承学校严谨的学风和优良的科学道德,本人声明所呈交的论文是我个人在 导师指导下进行的研究工作及取得的研究成果。尽我所知,除了文中特别加以标 注和致谢中所罗列的内容以外,论文中不包含其他人已经发表或撰写过的研究成 果;也不包含为获得西安电子科技大学或其它教育机构的学位或证书而使用过的 材料。与我一同工作的同志对本研究所做的任何贡献均已在论文中做了明确的说 明并表示了谢意。 申请学位论文与资料若有不实之处,本人承担一切相关责任。 本人签名: 章蛑 日期:2 0 l o 3 。站 西安电子科技大学 关于论文使用授权的说明 本人完全了解西安电子科技大学有关保留和使用学位论文的规定,即:研究 生在校攻读学位期间论文工作的知识产权单位属西安电子科技大学。学校有权保 留送交论文的复印件,允许查阅和借阅论文;学校可以公布论文的全部或部分内 容,可以允许采用影印、缩印或其它复制手段保存论文。同时本人保证,毕业后 结合学位论文研究课题再撰写的文章一律署名单位为西安电子科技大学。 本人签名:章蛑 导师签名:嘭扣曹彳幸 日期:2 0 l o a 汐 日期:y 矿,了 第一章绪论 第一章绪论 1 1 研究背景和意义 随着针对计算机系统的威胁逐步增长,很多组织和机构都在寻找一些解决方 案,用以保护品牌资产价值和消费者的信心,将维护费用减少到最低限度。如果 不付出很大的努力去消除,每个复杂的软件程序都会有高昂的安全漏洞,这些缺 陷悄悄地潜入产品当中,最终会导致不安全的系统出现。随着软件安全需求的意 识越来越强烈,人们对安全的要求也越来越高。 软件安全测试能够反映真实的攻击情形,从而产生客观的,可量化的结果, 并能演示真实的漏洞利用情况。及早开展安全测试,有助于在很大范围内阻止来 自现在和未来的威胁。如果安全不能贯彻到整个开发的生命周期,软件将不可避 免出现安全问题,这些问题将可能导致财务信息被窃,数据丢失,性能下降,并 危及私人数据的安全。 将软件安全测试补充到软件开发的过程中,尽可能减少更多漏洞,使得软件 产品有可能越来越安全。软件安全测试已经成为软件测试的核心测试,是实现软 件安全的基础和关键。软件安全测试的f u z z 测试在安全测试领域变得越来越重要, 而且对于安全的概念也需要作为一种慢慢灌输的方式【1 】进行更加深刻的了解。 1 2 软件安全测试_ f u z z 测试的发展 最早的f u z z 测试可以追溯到1 9 8 9 年,b a r t o nm i l l e r 2 】教授在他的高级操作系 统课上开发了一个原始的模糊器,用来测试u n i x 应用程序的健壮性。测试的关 注点并不是评价系统的安全性,而是验证全部代码的质量和可靠性。尽管在该项 研究的过程中,涉及到安全性问题,但是在对s e t u i d 应用程序的测试中,并没有取 得很大的进展。1 9 9 5 年,研究发现使用f u z z 测试,s e t u i d 应用程序的可靠性得到 改进,但该应用程序仍然具有“较高的失效概率 。 1 9 9 9 年,o u l u 大学开始p r o t o s 测试集的开发工作【3 j 。这项工作首先分析协 议规约,再产生反规约或很有可能让协议无法正确处理的报文,开发出各种测试 集。使用白盒和黑盒的混合测试方法,标志着f u z z 测试发展取得一个重要的里程 碑,后来的工作中使用这样的方法发现了大量的故障。 2 0 0 2 年,d a v ea i t e l t 4 j 发布了一个开放源代码s p i k e 5 ,采用g n u 的许可( g p l ) 。 a i t e l 模糊处理器实现一种基于块的方法,用于测试基于网络的应用程序。s p i k e 2 f u z z 安全测试技术研究 采用一种比m i l l e r 的模糊器更高级的方法,它的最显著的特征是包括可变长数据 块。 2 0 0 4 年,f i l ef u z z 测试开始出现【5 】。接着m i c r o s o f t 公司发布了m s 0 4 2 8 安全 公告1 6 1 ,详细描述了处理j p e g 文件引擎中的一个缓冲区溢出漏洞。同年,m u s e c u r i t y 公司开始开发一种硬件模糊装置,其目的是让网络中传输的协议数据发生 变异。这个商业产品供应商的出现,恰好吻合当前人们关注f u z z 测试的潮流。大 量的开发者和安全领域的研究人员开始对f u z z 测试感兴趣。 2 0 0 6 年,a c t i v e xf u z z 测试开始流行1 3 ,d a v i dz i m m e r 发布了c o m r a i d e r , h d m o o r e 发布了a x m a n l 6 。这两个工具关注访问i n t e m e te x p l o e r 浏览器时能被 w e b 应用程序实例化的a c t i v e x 控件。a c t i v e x 控件是优秀的f u z z 测试目标,其 中包括接口、函数原型和实际的控制逻辑,从而允许对其实施自动化的智能测试。 到目前为止,f u z z 测试取得一定进展。人们对f u z z 测试的关注越来越多,f u z z 测试的发展将会达到新的里程碑。 1 3 本文所做的工作 随着软件安全需求的意识越来越强烈,人们对安全系统的要求也越来越高。 软件安全测试越来越重要。安全测试能够反映真实的攻击情形,从而产生客观的, 可量化的结果,并能演示真实的漏洞利用情况。软件的安全方面有很多内容,主 要的安全问题是由软件本身的漏洞造成的,黑客或攻击软件都是利用软件漏洞进 行攻击的。 本文主要以黑盒测试的f u z z 测试为研究对象。讲述黑盒测试方法的基本概念, 黑盒测试用例的产生。其次,关于f u z z 测试的基本概念,使用方法,进行测试的 条件及发现的漏洞等。实验一利用a c t i v e xf u z z 的常用工具c o m r a i d e r 对m p s d u 文件的o n b e f o r e v i d e o d o w n l o a d 函数进行测试找出漏洞,使用o l l y d b g 和i d ap r o 编译器进行漏洞分析,编写测试代码,代码运行后,触发漏洞。实验二使用f i l e f u z z 工具,对m o v i e p l a y 播放器进行漏洞挖掘。 1 4 本文的结构 本文首先介绍软件测试的基本方法,分析黑盒测试用例测试方法等基本理论 知识,主要论述黑盒测试的f u z z 测试方法。本文结构如下: 第一章讲述论文背景,f u z z 测试的发展,及本文的工作。 第二章讲述软件测试的基本概念,测试分类,设计测试用例,及安全性测试 第一章绪论 3 的基本概念。 第三章讲述0 d a y 和安全漏洞的基本概念。 第四章讲述f u z z 测试方法的基本概念。 第五章讲述两个仿真实验,实验一利用a c t i v e xf u z z 的常用工具c o m r a i d e r 进行漏洞挖掘。实验二利用f i l e f u z z 工具进行漏洞挖掘。 1 5 小结 随着应用软件的广泛使用,i n t e m e t 的快速发展,安全问题变得越来越重要。 软件安全测试能够确保发现更多安全漏洞,越来越受测试人员的重视。f u z z 测试 作为软件安全测试的一种重要的测试方法,本文进行两个实验的仿真,实验一利 用a c t i v e xf u z z 的常用工具c o m r a i d e r 对m p s d l l 文件的o n b e f o r e v i d e o d o w n l o a d 方法进行测试,使用o l l y d b g 和i d ap r o 编译器进行漏洞分析,编写测试代码,代 码运行后,触发漏洞。实验二利用f i l e f u z z 工具对m o v i e p l a y 播放器进行漏洞挖掘。 对于揭示软件安全性能过程有很大的帮助。 第二章软件测试技术5 2 1 1 软件测试的定义 第二章软件测试技术 2 1 软件测试基本概念 软件测试的定义如下1 7 j : 测试是执行或模拟一个系统或程序的操作 测试是为了建立一个信心,即软件是按照它所要求的方式执行 测试是带着问题和错误的意图分析程序的 测试是度量程序的功能和质量的 测试是评价程序和项目工作产品的属性和能力的,评估其是否获得期望和 可以接受的结果 测试除了包含执行代码的测试,还包含检视和结构化同行评审 2 1 2 软件测试的目的 软件测试是对软件建立信心的一个过程引。测试是评估软件或系统品质或能力 的一种积极的行为,是对软件质量的一种度量。对软件进行的测试越充分,人们 对这个软件的信心越强。 很多重要的缺陷主要来自对于需求的设计的误解,遗漏和不正确。因此证明, 检测和预防成了测试的重要目标。 ( 1 ) 证明 获取软件系统在可接受风险范围内可用的信心 尝试在非正常情况和条件下的功能和特性是可接受的 保证一个软件系统是完整的并且可用或可被集成的 ( 2 ) 检测 发现缺陷,错误和系统的不足 定义软件系统的能力和局限性 提供组件,工作产品和软件系统的质量信息 ( 3 ) 预防 确定系统的规格中不一致和不清晰的地方 提供预防和减少可能制造错误的信息 在过程中尽早检测错误 6f u z z 安全测试技术研究 确认问题的风险,并且提前确认解决这些问题和风险的途径 2 2 软件测试的分类 从不同的角度,可以把软件测试分成不同的种类吲。 2 2 1 根据透明度分类 根据透明度分类,软件测试可以分为白盒测试,黑盒测试和灰盒测试。 1 白盒测试 白盒测试通过对内部结构的分析,检测寻找问题。即把软件当作打开的盒子 里的东西一样进行测试,由于盒子打开了,盒子里的东西构造就很清楚,可以深 入到软件里,进行具体的测试。 2 黑盒测试 黑盒测试通过软件的外部表现来发现其缺陷和错误。在已知产品需求的情况 下,通过测试检验是否都能被满足的测试方法。把软件当作放在黑盒子中的东西 进行测试,测试时无需知道软件是如何实现的,完全从用户使用的角度进行测试。 3 灰盒测试 灰盒测试的定义是在白盒测试和黑盒测试之间浮动的,它包括黑盒测试方法, 还包括通过逆向工程( r e ) 获得的结果,逆向工程也被称为逆向代码工程( r c f j 2 2 2 根据开发过程分类 按软件开发过程进行划分,测试可以分为单元测试,集成测试,系统测试等。 1 单元测试 单元测试是一种白盒测试方法,主要以代码单元为单位进行测试,在函数式 语言中通常以函数为单元进行测试。单元测试需要编写测试代码进行测试。 2 集成测试 集成测试属于灰盒测试,主要是测试模块间的接口及配合关系,集成测试有 时像黑盒测试那样不考虑内部的关系,集成测试既有白盒测试的特性,又有黑盒 测试的特性。 3 系统测试 系统测试属于黑盒测试,主要是依据软件规格进行测试,不管软件的具体实 现方法。 第二章软件测试技术7 2 2 - 3 专门性o , o n 试 安全性测试,性能测试,内存测试是最常见的三个专门性测试。 1 安全性测试 安全性测试主要测试软件的安全性,由于i n t e m e t 的发展,使得应用软件越来 越容易受到攻击,软件安全性测试变得越来越重要。 2 性能测试 性能测试主要针对软件的一些重要性能进行测试,用来评估软件的健康程度。 软件性能的好坏是决定软件能否战胜对手赢取用户的关键因素。 3 内存测试 内存测试主要测试软件运行时的内存是否越界,是否存在内存泄漏等问题。 2 3 测试用例设计 软件质量的好坏很大程度上取决于测试用例的数量和质量。测试用例设计是 软件测试的核心和最重要的内容 7 1 。 测试用例设计方法不仅用在软件测试上,非软件领域的测试也同样需要使用 测试用例设计方法设计测试用例。测试用例设计方法不仅可以用来设计测试用例, 还是一种分析问题的方法。 2 3 1 黑盒测试用例设计技术 黑盒测试用例设计主要有等价类划分法,边界值分析法,因果图法,正交表 测试法,判定表法等。本文主要分析等价类划分法,边界值分析法。 2 3 1 1 等价类设计方法 等价类划分是一种典型的黑盒测试方法。这一方法完全不考虑程序的内部结 构,只依据程序的规格说明来设计测试用例。等价类是指某个输入域的子集合。 在该子集合中,各个输入数据对于揭示程序中的错误都是等效的。 等价类合理地假设:某个等价类的代表值,与该等价类的其它值,对于测试 来说是等价的。因此,可以把全部的输入数据划分成若干的等价类,在每一个等 价类中取一个数据来进行测试。这样就能以较少的具有代表性的数据进行测试, 而取得较好的测试效果。 等价类划分是把所有可能的输入数据,即程序的输入域划分成若干部分( 子 集) ,然后从每一个子集中选取少数具有代表性的数据作为测试用例。 8 f u z z 安全测试技术研究 ( 1 ) 分类 划分等价类:等价类是指某个输入域的子集合。在该子集合中,各个输入数 据对于揭露程序中的错误都是等效的。合理地假定:测试某等价类的代表值就等 于对这一类其它值的测试。因此可以把全部输入数据合理划分为若干等价类,在 每一个等价类中取一个数据作为测试的输入条件,就可以用少量代表性的测试数 据。取得较好的测试结果。等价类划分可有两种不同的情况:有效等价类和无效 等价类。 有效等价类:是指对于程序的规格说明来说是合理的,有意义的输入数据构 成的集合。利用有效等价类可检验程序是否实现规格说明中所规定的功能和性能。 无效等价类与有效等价类的定义恰好相反。 设计测试用例时,要同时考虑这两种等价类。因为软件不仅要能接收合理的 数据,也要能经受意外的考验,这样的测试才能确保软件具有更高的可靠性。 ( 2 ) 划分等价类的标准 1 ) 完备测试、避免冗余 2 ) 划分等价类重要的是:集合的划分,划分为互不相交的一组子集,而子集 并是整个集合 3 ) 并是整个集合:完备性 4 ) 子集互不相交:保证一种形式的无冗余性 5 ) 同一类中标识( 选择) 一个测试用例,往往处理相同,映射到“相同的执行 路径” ( 3 ) 划分等价类的方法 1 ) 在输入条件规定了取值范围或值的个数的情况下,则可以确立一个有效等 价类和两个无效等价类。 2 ) 在输入条件规定了输入值的集合或者规定了”必须如何”的条件的情况下, 可确立一个有效等价类和一个无效等价类。 3 ) 在输入条件是一个布尔量的情况,可确定一个有效等价类和一个无效等价 类。 4 ) 在规定输入数据的一组值( 假定n 个) ,并且程序要对每一个输入值分别处 理的情况下,可确立n 个有效等价类和一个无效等价类。 例:输入条件说明学历为:专科、本科、硕士、博士四种之一,则分别取这 四个值作为四个有效等价类,另外把四种学历之外的任何学历作为无效等价类。 5 ) 在规定输入数据必须遵守的规则的情况下,可确立一个有效等价类( 符合规 则) 和若干个无效等价类( 从不同角度违反规则) 。 6 ) 在确知已划分的等价类中各元素在程序处理中的方式不同的情况下,则应 再将该等价类进一步划分为更小的等价类。 第二章软件测试技术 9 ( 4 ) 设计测试用例 确立了等价类后,可建立等价类表,列出所有划分出的等价类输入条件:有 效等价类、无效等价类,从划分出的等价类中按以下三个原则设计测试用例: 1 ) 为每一个等价类规定一个唯一的编号。 2 ) 设计一个新的测试用例,使其尽可能多地覆盖尚未被覆盖的有效等价类, 重复这一步,直到所有的有效等价类都被覆盖为止。 3 ) 设计一个新的测试用例,使其仅覆盖一个尚未被覆盖的无效等价类,重复 这一步,直到所有的无效等价类都被覆盖为止。 2 3 1 2 边界值分析法 ( 1 ) 定义 边界值分析法就是对输入或输出的边界值进行测试的一种黑盒测试方法。通 常边界值分析法是作为对等价类划分法的补充,大量的错误是发生在输入或输出 的边界上。因此针对各种边界情况设计测试用例,可以查出更多的错误。 ( 2 ) 与等价划分的区别 边界值分析不是从某等价类中随便挑一个作为代表,而是使这个等价类的每 个边界都要作为测试条件。边界值分析不仅考虑输入条件,还要考虑输出空间产 生的测试情况。 ( 3 ) 常见的边界值 对1 6 位的整数而言,3 2 7 6 7 和3 2 7 6 8 是边界 屏幕上光标在最左上、最右下位置 报表的第一行和最后一行 数组元素的第一个和最后一个 循环的第o 次、第1 次和倒数第2 次、最后一次 ( 4 ) 边界值分析 1 ) 边界值分析使用与等价类划分法相同的划分,只是边界值分析假定错误更 多地存在于划分的边界上,因此在等价类的边界上以及两侧的情况设计测试用例。 例:测试计算平方根的函数 输入:实数 输出:实数 规格说明:当输入一个0 或比0 大的数的时候,返回其正平方根:当输入一 个小于0 的数时,显示错误信息“平方根非法输入值小于0 ”并返回0 ;另外,脚 本语言p e r l 的库函数p r i m l i n e 也可以用来输出错误信息。 2 ) 等价类划分 1 0 f u z z 安全测试技术研究 i 可以划分如下: a 输入( i ) = o b 输出( a ) :o 和( b ) e r r o r i i 测试用例有两个: a 输入4 ,输出2 。对应于( i i ) 和( a ) 。 b 输入1 0 ,输出o 和错误提示。对应于( i ) 和( b ) 。 3 ) 边界值分析 划分( i i ) 的边界为0 和最大正实数;划分( i ) 的边界为最小负实数和0 。得到以下 测试用例: a 输入 最小负实数 b 输入 绝对值很小的负数) c 输入0 d 输入 绝对值很小的正数) e 输入 最大的正实数 4 ) 通常情况下,软件测试所包含的边界检验有几种类型:数字、字符、位置、 重量、大小、速度、方位、尺寸、空间等。 5 ) 相应地,以上类型的边界值应该在:最大最小、首位末位、上厂f 、最快 最慢、最高最低、最短最长、空满等情况下。 6 ) 利用边界值作为测试数据,如表2 1 所示。 表2 1 测试数据表 项边界值测试用例的设计思路 起始1 个字假设一个文本输入区域允许输入1 个到2 5 5 个字符,输入1 字符符结束+ 1 个个和2 5 5 个字符作为有效等价类;输入0 个和2 5 6 个字符作 字符为无效等价类,这几个数值都属于边界条件值。 最小值1 最 假设某软件的数据输入域输入5 位数据值,可以使用10 0 0 0 数值作为最小值,9 9 9 9 9 作为最大值;然后使用刚好小于5 位和 大值+ l 大于5 位的数值作为边界条件。 小于剩余空 空间间一点大于 例如在用u 盘存储数据时,使用比剩余磁盘空间大一点( 几 k b ) 的文件作为边界条件。 空间一点 7 ) 内部边界值分析 在多数情况下,边界值条件是基于应用程序的功能设计而需要考虑的因素, 可以从软件的规格说明或常识中得到,最终用户可以很容易发现问题。然而,在 测试用例设计过程中,某些边界值条件是不需要呈现给用户的,或者说用户是很 第二章软件测试技术 1 1 难注意到的,但同时确实属于检验范畴内的边界条件,称为内部边界值条件或子 边界值条件。 内部边界值条件主要有下面几种: ( 1 ) 数值的边界值检验:计算机是基于二进制进行工作的,因此,软件的任何 数值运算都有一定的范围限制,如表2 2 所示。 表2 2 数值的边界值检验表 项范围或值 位( b i t ) 0 或1 字节( b y t e ) 0 2 5 5 字( w o r d )0 - - 6 5 5 3 5 ( 单字) 或0 , - , 4 2 9 4 9 6 7 2 9 5 ( 双字) 千( k ) 1 0 2 4 兆( m ) 1 0 4 8 5 7 6 吉( g )1 0 7 3 7 4 1 8 2 4 ( 2 ) 字符的边界值检验:在计算机软件中,字符也是很重要的表示元素,其 中a s c i i 和u n i c o d e 是常见的编码方式。表2 3 中列出了一些常用字符对应的a s c i i 码值。 表2 3 字符的边界值检验表 字符a s c i i 码值字符a s c i i 码值 空( n u l l ) oa6 5 空格( s p a c e ) 3 2a9 7 斜杠( ) 4 7z9 0 o4 8z1 2 2 冒号( :) 5 8 单引号( ) 9 6 6 4 2 3 2 白盒测试用例设计 比较成熟的白盒测试用例设计方法有静态白盒法,侵入式法,路径覆盖法, 数据定义使用法,程序片法。本文主要介绍静态白盒法,侵入式法,路径覆盖法。 2 - 3 2 1 静态白盒法 静态白盒测试法一般根据审查的严格程度分为同行评审,走查和评审。 ( 1 ) 同行评审 同行评审常常仅在编写代码或设计体系结构的程序员,以及充当审查者的其 12 f u z z 安全测试技术研究 他一两个程序员和测试员之间进行。 ( 2 ) 走查 走查比同行评审是更正规的方法,走查中,编写代码的程序员向其他程序员 和测试员组成的小组做正式陈述。 ( 3 ) 评审 评审时最正式的审查类型,具有高度组织化,要求每一个参与者都接受训练。 对于静态白盒测试的目的是要找出软件的问题,具备以下几个有效的基本要 素: 确定问题 遵守规则 充分准备 编写报告 对于静态方法,有很多工具可以探测实现。探测缓冲区溢出漏洞的静态方法, 比较常用的是m j o l n i r 工具【1 0 】,m j o l n i r 包含:一个调用图分析器,一个约束产生 器,一个函数总结,一个约束集产生器,一个约束集解决器。m j o l n i r 要求被分析 的程序系统依赖图表示法约束是一种对于探测缓冲区溢出的静态分析工具。应用 静态分析方法,也需要合理的想象【l l 】一文中指出,它主要分析相应的近似值,然 后再找出相应的漏洞。 2 3 2 2 侵入式法 侵入式法白盒测试指的是在软件测试过程中需要对软件系统的代码进行修改 的测试方法。按照修改目的不同分为:程序插桩测试,断言测试和缺陷种植法。 程序插桩测试是指在程序中设置断点或打印语句,在执行过程中了解程序的 一些动态特性。设计程序插桩时需要考虑的问题包含如下: 探测哪些信息 在程序的什么部位设置探测点 需要设置多少个探测点 断言测试是在程序中插入断言,插入断言的目的是用于帮助程序的调试与排 错,断言的实现一般是利用编译器的条件编译完成的。 断言的特点如下: 一般是一个宏定义,或是语言的一部分 仅在调试版本产生作用 断言失败时,程序将停止运行,并输出错误的信息 第二章软件测试技术 1 3 缺陷种植测试是一种用来估计驻留在程序中的缺陷数量的技术。工作原理是 向一个软件中“种植”缺陷,再运行测试集,检查发现多少个种植的缺陷,还有 多少个种植的缺陷没有被发现,以及已经发现多少个新的非种植的缺陷,再可以 预测残留的缺陷数量。 2 3 2 3 路径覆盖法 路径覆盖法是指覆盖率分析,研究的内容包含:如何选择程序元素,如何生 成指定程序元素的测试用例,程序元素的覆盖率,测试效果的评价。路径覆盖法 设计出足够的测试用例完成对被测试程序可执行路径进行全方位的执行覆盖。一 般包含逻辑路径覆盖和物理路径覆盖两种方法,如图2 1 所示。 图2 1 带节点的程序流程图 1 语句路径覆盖 语句路径覆盖是指通过选择足够的测试用例,使得运行这些测试用例时,被 选择的测试程序的每一个语句至少被执行一次。 语句路径覆盖的测试用例,如表2 4 所示。 表2 4 符合语句路径覆盖度量标准的测试用例表 测试用例名称测试数据 预期结果 测试路径 c a s e l x = 4 ,y = 2 ,z - - ox = 3s a c b e d 2 判定路径覆盖 判定路径覆盖通过设计足够多的测试用例,使得程序中的每一个判定至少都 获得一次“真值”和“假值”,或使得程序中的每一个分支都至少通过一次。 判定路径覆盖的测试用例,如表2 5 所示。 1 4 f u z z 安全测试技术研究 表2 5 符合判定路径覆盖度量标准的测试用例 测试用例名称测试数据预期结果 测试路径 c a s e 2 x = l ,y = 3 ,捌 x = l 3 s a c b d c a s e 3 x = 3 ,y :2 ,z = l x = 4s a b e d 3 条件路径覆盖 条件路径覆盖指对于每一个判定中所包含的若干个条件,应设计足够多的测 试用例,使得判定中的每一个条件都至少取到一次“真值”和“假值”的机会。 条件路径覆盖的测试用例,如表2 6 所示。 表2 6 符合条件路径覆盖度量标准的测试用例 测试用例名称测试数据预期结果测试路径 c a s e 4 x = l ,y = 2 ,z - - o x = 3 2s a c b e d c a s e 5 x = 2 ,y = 1 ,z = lx = 3 s a b e d 4 判定条件路径覆盖 判定条件路径覆盖通过设计足够多的测试用例,使得运行这些测试用例时, 判定中的每一个条件的所有可能结果至少出现一次,并且每一个判定本身的所有 可能结果至少也出现一次。 判定条件路径覆盖的测试用例,如表2 7 所示。 表2 7 符合判定条件路径覆盖度量标准的测试用例 测试用例名称测试数据预期结果测试路径 c a s e 6 x = 4 ,y = 2 ,z - - o x = 3s a c b e d c a s e 7 x = l ,y = l ,z = l x = i s a b d 5 条件组合路径覆盖 条件组合路径覆盖通过设计足够多的测试用例,使得运行这些测试用例时, 每一个判定中结果的所有组合至少出现一次。 条件组合路径覆盖的测试用例,如表2 8 所示。 表2 8符合条件组合路径覆盖度量标准的测试用例 测试用例名称测试数据 预期结果测试路径 c a s e 6 x = 4 ,y = 2 ,z - - 0x = 3 s a c b e d c a s e 7 x = l ,y = l ,z = l x = 2s a m c a s e 8 x = 2 ,y = l ,z - - ox = 3 s a c b e d c a s e 9 x = l ,y = l ,z = lx = l s a b d 第二章软件测试技术 1 5 6 物理路径覆盖 物理路径覆盖通过设计足够多的测试用例,使得运行这些测试用例时,程序 的每条可能执行的物理路径都至少经过一次。 物理路径覆盖的测试用例,如表2 9 所示。 表2 9 符合条件组合路径覆盖度量标准的测试用例 测试用例名称测试数据预期结果测试路径 c a s e 8 x = 4 ,y = 2 ,z - - 0 x = 3 s a c b e d c a s e 9 x = l ,y 2 2 ,z = 1x = 2 s a b e d c a s e l 0 x = 1 ,y = 3 ,z - - 0 x = 2 s a c b d c a s e l l x = l ,y :1 ,z = l x = 1s a b d 2 4 安全性测试 安全性测试是一项很重要的测试,测试人员需要像黑客一样攻击软件系统, 找到软件系统包含的安全漏洞。主要包含以下类型: 网页安全漏洞检测 s q l 注入 缓冲区溢出 2 4 1 网页安全漏洞检测 一些设计不当的网站可能包含很多可以被利用的安全漏洞,这些安全漏洞如 同给远程攻击者开了一个后门,让攻击者可以方便地进行某些恶意的攻击。例如, 公共漏洞和披露网站c v e ( c o m m o n v u l n e r a b i l i t i e sa n de x p o s u r e s ) 公布了 e l e m e n ti n s t a n t s h o p 中的w e b 网页a d d2b a s k e t a s p 的一个漏洞项,允许远程攻击 者通过隐藏的表单变量“p r i c e ”来修改价格信息。这个表单的形式如下所示: 利用这个漏洞,不怀好意者可以任意设定p r i c e 字段的值,然后提交给 i n s t a n t s h o p 网站的后台服务器,从而可能用1 0 0 美元就可以获得一部b m w 5 4 5 。 测试要点:发现类似的安全漏洞的最好方法是进行代码审查。除了代码审查, 测试人员还可以利用一些测试工具进行检查,例如:p a e s s l e rs i t ei n s p e c t o r 、 w e bd e v e l o p e r 等。 f u z z 安全测试技术研究 2 42s q l 注入 s q l 注入是另外一个经常忽略的安全漏洞,但是s q l 注入同时也是非常普遍 的代码漏洞它会导致数据库端的敏感数据泄漏或者服务器受到黑客的控制。 例如,下面的代码存在s q l 语句的注入漏洞。如图22 所示。 图2 2s q l 代码图 这段代码从t e x t b o x l 获得用户输入的用户名,从t e x t b o x 2 获得用户输入的密 码,然后执行数据库查询操作。假设在1 e x t b o x l 的输入框输入一个已知的用户名, 再改变一下,则可以不输入密码也能登录系统。这个字符串利用了s q ls e r v e r 对 单引号的处理方式,只要简单地组合成类似下面的字符串并输入到t e x t b o x l 的输 入框中即可。 a d r a i n 。o r + 1 = 1 可以利用已知的a d m i n 账号,不输入密码就能登录系统。因为给预期的s q l 语句注入了额外的语句,所以实际上提交到s q ls e r v e r 数据库执行的语句变成了 如下所示的语句: s e l e c tc o u n t ( + 、f r o mu 辩r w h e r e l o g o n n a m e = a d m i n o r 1 k 1 a n dp a s s w c i r d 由于1 - 1 是恒等的因此返回的结果肯定为真,从而干扰用户信息的正常验 证,导致能绕过密码验证而登录系统。 第二章软件测试技术 1 7 测试要点:检查是否存在s q l 语句注入漏洞的最好办法是代码审查,查看所 有涉及s q l 语句提交的地方,是否正确处理用户输入的字符串。 2 4 3 缓冲区溢出 不仅是连上i n t e m e t 的软件系统才会有安全问题,个人软件系统或公司内部的 软件系统也存在安全问题,这些安全问题不会导致信用卡密码的泄漏,但是可能 导致工作成果的丢失。如果软件系统是采用c 语言这类容易产生缓冲区溢出漏洞 的语言开发,要注意检查可能造成系统崩溃的安全问题。 例如,下面的两行c 语言代码就可能造成缓冲区的溢出问题: c h a rb u f l 2 0 ; g e t s ( b u f ) ; 如果使用g e t s 函数从s t d i n 读入数据,则可能出现缓冲区溢出的问题。另外一 个例子如下: c h a rb u t l 2 0 ; c h a rp r e f x 】- h t t p :”; s t r c p y ( b u f , p r e f i x ) ; s t m c a t ( b u f , p a t h ,s i z e o f ( b u f ) ) ; 问题出现在s i z e o f 的参数不是整个b u f 的大小,而是b u f 的剩余空间大小。 如果申请一段内存,而填入的数据大于这块内存,数据就覆盖这段内存之外 的内存。比如: v o i df o o ( c h a r i n p u t ) c h a rb u f 1 0 0 ; s t r c p y ( b u f ,i n p u t ) ; ) 如果i n p u t 的长度大于1 0 0 ,就会产生缓冲区溢出问题。 测试要点:测试人员需要对每一个用户可能输入的地方尝试不同长度的数据 输入,以验证程序在各种情况下正确地处理了用户的输入数据,而不会导致异常 或溢出问题。或者通过代码审查来发现这些问题,还可以利用一些工具来帮助检 查这类问题,例如a p p v e r i f i e r l l2 1 。a p p v e r i f i e r 的原理是h o o k 分配和释放资源的 a p i ,在程序调用这些a p i 时记录信息,在程序退出时报告出未释放的资源;它只 能检测n a t i v e 代码;程序正常退出才行,强行杀进程不能得到正确的报告;只能 做r u n t i m e 检测。 18f u z z 安全测试技术研究 2 4 4 软件安全测试分类 软件安全测试主要有以下几种: ( 1 ) 安全性测试 有许多的测试手段可以进行安全性测试,目前主要的安全测试方法有: 静态代码安全测试:主要通过对源代码进行安全扫描,根据程序中数据流、 控制流、语义等信息与其特有软件安全规则库进行匹对,从中找出代码中潜在的 安全漏洞。静态的源代码安全测试是非常有用的方法,它可以在编码阶段找出所 有可能存在安全风险的代码,这样开发人员可以在早期解决潜在的安全问题。而 正因为如此,静态代码测试比较适用于早期的代码开发阶段,而不是测试阶段。 动态渗透测试:渗透测试也是常用的安全测试方法。是使用自动化工具或 者人工的方法模拟黑客的输入,对应用系统进行攻击性测试,从中找出运行时所 存在的安全漏洞。这种测试的特点就是真实有效,一般找出来的问题都是正确的, 也是较为严重的。但渗透测试一个致命的缺点是模拟的测试数据只能到达有限的 测试点,覆盖率很低。对于渗透测试可以从最基本的端口扫描器i l3 】和漏洞扫描器 作为关注点。端口扫描器用于收集从一个远程网络地址中的测试目标信息。特殊 的是,端口扫描器试图定位每一个目标主机连接的可获得的网络服务。它们通过 探测每一个指定的( 或缺省值) 网络端口或目标系统的服务器,进行操作。 程序数据扫描。一个有高安全性需求的软件,在运行过程中数据是不会遭 到破坏的,否则就会导致缓冲区溢出类型的攻击。数据扫描的手段通常是进行内 存测试,内存测试可以发现许多诸如缓冲区溢出之类的漏洞,而
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025广西现代职业技术学院人才招聘33人笔试备考试题完整答案详解
- 浦发银行包头市东河区2025秋招笔试价值观测评题专练及答案
- 农发行贵阳市南明区2025秋招结构化面试经典题及参考答案
- 华夏银行呼和浩特市赛罕区2025秋招笔试专业知识题专练及答案
- 浙江国企招聘2025杭州萧山供销市场开发管理有限公司招聘3人笔试参考题库附带答案详解
- 农发行随州市曾都区2025秋招半结构化面试题库及参考答案
- 光大银行钦州市钦北区2025秋招半结构化面试题库及参考答案
- 华夏银行深圳市南山区2025秋招笔试英文行测高频题含答案
- 兴业银行常州市武进区2025秋招半结构化面试题库及参考答案
- 农发行梧州市蒙山县2025秋招笔试价值观测评题专练及答案
- GB/T 46104-2025电解水制氢系统功率波动适应性测试方法
- 信贷档案管理培训课件
- 2025年会计继续教育网络答题真题及答案
- (2025)安全知识竞赛试题(附完整答案)
- 2025年辅警招聘考试(行政职业能力测验)复习题及答案
- 2025年海南事业单位联考笔试历年典型考题及考点剖析附带答案详解
- 2025年水发集团有限公司招聘(216人)备考练习试题及答案解析
- 试验检测资金管理办法
- 护理时政面试题库及答案
- 知识产权系列主题培训课件
- 2025年工勤行政事务高级技师技术等级考试试题及答案
评论
0/150
提交评论