首页 软件安全性测试

软件安全性测试

举报
开通vip

软件安全性测试一、 静态测试的和动态测试浅析 根据程序是否运行,测试可以分为静态测试和动态测试。静态测试就是静态分析,对模块的源代码进行研读,查找错误或收集一些度量数据,并不需要对代码进行编译和仿真运行。动态测试需要真正运行程序发现错误,通过有效的测试用例,对应的输入输出出关系来分析被测程序的运行情况。 1、 静态测试 所谓静态测试(static testing)就是不实际运行被测软件,而只是静态地检查程序代码、界面或文档中可能存在的错误的过程。 从概念中我们可以知道,其包括对代码测试、界面测试和文档测试三个方面:对于代码测试,...

软件安全性测试
一、 静态测试的和动态测试浅析 根据程序是否运行,测试可以分为静态测试和动态测试。静态测试就是静态分析,对模块的源代码进行研读,查找错误或收集一些度量数据,并不需要对代码进行编译和仿真运行。动态测试需要真正运行程序发现错误,通过有效的测试用例,对应的输入输出出关系来分析被测程序的运行情况。 1、 静态测试 所谓静态测试(static testing)就是不实际运行被测软件,而只是静态地检查程序代码、界面或文档中可能存在的错误的过程。 从概念中我们可以知道,其包括对代码测试、界面测试和文档测试三个方面:对于代码测试,主要测试代码是否符合相应的标准和规范;对于界面测试,主要测试软件的实际界面与需求中的说明是否相符;对于文档测试,主要测试用户手册和需求说明是否符合用户的实际需求。静态测试包括对软件产品的设计规格说明书的审查,对程序代码的阅读、审查等。静态分析的查错和分析功能是其他方法所不能替代的,已被当作一种自动化的代码校验方法。 静态方法是指不运行被测程序本身,仅通过分析或检查源程序的文法、结构、过程、接口等来检查程序的正确性。静态方法通过程序静态特性的分析,找出欠缺和可疑之处,例如不匹配的参数、不适当的循环嵌套和分支嵌套、不允许的递归、未使用过的变量、空指针的引用和可疑的计算等。静态测试结果可用于进一步的查错,并为测试用例选取提供指导。 通常静态测试包括:(1)代码检查:代码会审、代码走查、桌面检查;(2)静态结构分析;(3)代码质量度量。 静态测试采用人工检测和计算机辅助静态分析手段进行检测,只进行特性分析。 ● 人工检测:人工检测是指不依靠计算机而完全靠人工审查或评审软件。人工检测这种方法可以有效地发现逻辑设计和编码错误,发现计算机不易发现的问题。 ● 计算机辅助静态分析:利用静态分析工具对被测程序进行特性分析,从程序中提取一些信息,以便检查程序逻辑的各种缺陷和可疑的程序构造。如用错的局部变量和全局变量,不匹配的参数,潜在的死循环等。静态分析中还可以用符号代替数值求得程序结果,以便对程序进行运算规律的检验。 2、 动态测试 动态测试(dynamic testing),指的是实际运行被测程序,输入相应的测试数据,检查实际输出结果和预期结果是否相符的过程,所以判断一个测试属于动态测试还是静态的,唯一的标准就是看是否运行程序。 动态方法是指通过运行被测程序,检查运行结果与预期结果的差异,并分析运行效率和健壮性等性能,这种方法由三部分组成:构造测试实例、执行程序、分析程序的输出结果。 动态测试是通过观察代码运行时的动作,来提供执行跟踪、时间分析,以及测试覆盖度方面的信息。     通常动态测试包括:(1)黑盒测试:又称功能测试。这种方法把被测软件看成黑盒,在不考虑软件内部结构和特性的情况下测试软件的外部特性。(2)白盒测试:又称结构测试。这种方法把被测软件看成白盒,根据程序的内部结构和逻辑设计来设计测试实例,对程序的路径和过程进行测试。 二者之间的区别: 区别一:静态测试是用于预防的,动态测试是用于矫正的;   区别二:多次的静态测试比动态测试要效率和效益高;   区别三:静态测试综合测试程序代码;   区别四:在相当短的时间里,静态测试的覆盖度能达到100%,而动态测试经常是只能达到50%左右,原因动态测试发现的bug大部分只是在测试实际执行的那部分代码;   区别五:动态测试比静态测试更花时间;   区别六:静态测试比动态测试更能发现bug;   区别七:静态测试的执行可以在程序编码编译前,动态测试只能在编译后才能执行;   区别八:静态测试能发现动态测试所不能发现的一些:“Syntax error,code that hard to maintain,code that hard to test,code that does not confirm to coding standard, and ANSI violations”。 黑盒白盒、动态静态测试之间的关系 它们只是测试的不同角度而已,同一个测试,既有可能是黑盒测试,也有可能是动态测试;既有可能是静态测试,也有可能是白盒测试。而且它们之间还有包括交叉的关系, 总结 初级经济法重点总结下载党员个人总结TXt高中句型全总结.doc高中句型全总结.doc理论力学知识点总结pdf 以下4句话: ● 黑盒测试有可能是动态测试(运行程序,只看输入和输出),也有可能是静态测试(不运行程序,只是查看界面) ● 白盒测试有可能是动态测试(运行程序,并分析代码结构),也有可能是静态测试(不运行程序,只是静态查看代码) ● 动态测试有可能是黑盒测试(运行程序,只看输入和输出),也有可能是白盒测试(运行程序,并分析代码结构) ● 静态测试有可能是黑盒测试(不运行程序,只是查看界面),也有可能是白盒测试(不运行程序,只是静态查看代码) 以上的测试方法各有所长,每种方法都可设计出一组有用的例子,用这组测试用例可以比较容易地发现某种类型的错误,却不易发现另一种类型的错误,不同的测试方法各自的目标和侧重点不一样。因此在实际测试中,应结合各种测试方法,形成综合策略,以达到更完美的效果。在单元测试主要用白盒测试;在系统测试时主要用黑盒测试,或者以黑盒测试为主要测试方法,白盒测试为辅助方法等。 二、 软件测试中的模糊测试 1、 什么是模糊测试 模糊测试,是一种用于发现软件漏洞的自动化检测技术。模糊测试的主要思想为提供非预期的输入数据并监视异常结果来发现软件的故障或漏洞。完整的模糊测试主要由识别输入、构造测试样本、执行测试样本、捕获程序异常等几部分组成。在整个自动化过程中,反复生成各种数据样本并监视目标软件异常为模糊测试的主要工作流程。 模糊测试(Fuzz Testing)是一种发现安全漏洞的有效的测试方法,在安全性测试中越来越受到重视。模糊测试将随机的坏数据插入程序,观察程序是否能容忍杂乱输入。模糊测试是不合逻辑的,只是产生杂乱数据攻击程序。采用模糊测试攻击应用程序可发现其他采用逻辑思维来测试很难发现的安全缺陷。 模糊测试(Fuzzing)事实上不是一种新技术。模糊测试概念最早于1989年由Wisconsin大学的Barton Miller教授提出(威斯康星州的麦迪逊大学Barton Miller教授),它是一种自动化或半自动化的漏洞挖掘技术,通过向目标软件输入大量的畸形数据并监测目标系统的异常来发现潜在的软件漏洞。模糊测试可以完全不需要任何关于软件或 协议 离婚协议模板下载合伙人协议 下载渠道分销协议免费下载敬业协议下载授课协议下载 的先验知识,但借助于事先对目标软件或协议进行研究而得到的先验知识可以开发出更高效的模糊器(Fuzzer,测试者开发的用于模糊测试的工具)。由于目前人们聚焦于开发更加安全的软件,模糊测试才被更加广泛应用并成为公认的代码测试方法。 在软件测试过程中,一个程序被随机产生的数据大量验证,称为模糊测试。假如一个程序在应对任一的这类数据上失效,开始出现冲突、锁住、消耗大量内存或者产生不可控制的程序错误,开发者就知道代码中某处出现了bug。因此这个缺陷可能在程序发布或者配置前被定位并予以矫正,从而使可能的程序漏洞不出现在程序最终发行版本中。软件测试被频繁地用于测试缓冲区溢出漏洞,而这种溢出在输入字符的数量超出可用的缓冲区空间时候发生。 软件程序有许多种的输入方式,比如鼠标、键盘和触摸屏。另外还包括调用其它程序或植入实用系统中的控制器数据。模糊测试可以有效地找出漏洞,是由于输入一个程序的数据是随机的,因此不会被任何的关于软件应该如何运行的偏见所束缚。当人们自己测试软件的时候,可能做出软件被如何使用的假设,而造成只对特定的输入进行测试。 一个彻底的模糊测试是对有效数据和随机数据的联合调试。有效数据测试防止程序在抵达一个欠缺的代码块前出现拒绝信息。 你必须意识到,虽然通过一个模糊测试,这并不意味着一个程序完全没有bug。软件测试仅仅是随机测试的模拟,是程序行为的一个有限样本的测试。测试可能只展现那些软件可以处理的没有冲突的例外。还有,模糊测试不能测试出开发中出现的逻辑错误。 模糊测试一个大的优点在于它的成本效率;测试通常是自动化的,而且容易配置。模糊测试是一种有效的软件测试方法,但它也只是众多软件测试方法中的一种。静态分析、相互评价和安全代码方法学都是安全软件开发的方法。 2、 举例说明 解释模糊测试(模糊化)的最好方法就是使用示例。最近以来,模糊化的最常见用处是验证两种类型的数据分析程序:文件和网络。 文件分析程序的一个例子是Microsoft Word。对Word文件分析程序进行模糊测试需要什么?想象一下创建一百万个长度和所包含数据均为随机的Word文档。假设这些文档不是由Word自己创建,而实际上是通过将随机的二进制数据源输送到磁盘上的测试文件中创建的。在Word中打开其中任意一个文件,看看会发生什么。 这样做可能会出现三种结果。第一种,对于大多数测试文件,Word会指出文件 格式 pdf格式笔记格式下载页码格式下载公文格式下载简报格式下载 无法识别,或文件已破坏而无法打开等错误。第二种,一百万个文件中的少数文件可能实际上包含了某些可识别控件和可打印字符的组合。那些文件将会正常打开,没有任何问题。第三种,也是最有趣的情况是,可能有几个文件包含了文件分析程序没有预见到的数据。在这种情况下,程序可能会出故障。 对于安全性测试人员,第三类测试文档才是真正有意义的情况。如果文件分析程序出现故障,那意味着它存在bug。如果有bug,它可能是可利用的。例如,bug可能会引起堆栈损坏或堆损坏,从而造成故障。一般情况下,此类bug在联网环境下属于严重问题,因为各种各样的文件类型都可作为电子邮件附件分发。经验表明,大多数用户都会打开附件,而不管其性质。 在网络分析程序领域中也存在相似的问题。考虑一下典型的PC、服务器或嵌入式网络设备所能理解的协议数量之多:DHCP(动态主机配置协议)、DNS、HTTP、SMB(服务器消息块)和SMTP等等。每个协议实现都包括一个针对来源于网络的数据包的分析程序,而每个分析程序都可能需要一些复杂的逻辑。此类代码也往往会有许多边界情况,从而使之难以验证。 测试网络协议代码的一个方法是通过模糊化。但是,在这种情况下,我建议使用一种“向其提供随机数据即可”方法(在上面的Word分析程序上下文中说明)的变体。 假设我需要测试一个DHCP客户端。再进一步假设DHCP客户端代码的某一特定部分特别糟糕,但是该段代码在某种程度上得到了分析程序另一部分(被认为较为可靠)的网络保护。 在这种情况下,用纯随机数据模糊化DHCP客户端不可能有效地使用时间,因为我预见代码的可靠部分会筛选出大多数不正确的数据。我改为采用一种更具针对性的方法。 实际上,根据我的经验,在采用这种方式时模糊化最有效。继续该DHCP示例,我将模糊测试(模糊处理程序)配置成使用已知有效数据、故意错误数据和随机数据的组合,而不是用大量纯随机数据来测试该客户端。使用已知有效数据的目的是跳过我不感兴趣的分析程序组件。使用故意错误数据的目的是利用已知或我怀疑将成为代码中缺陷的情况。最后,使用随机数据的目的就是看看会发生什么。 在模糊化的过程中,我的方法会随着我对可疑行为的进一步了解而得到完善。例如,我的测试DHCP包的某些部分最初包含了随机数据,我随后可能会在该处使用已知的有效数据来进一步深入了解该分析程序。如果发现了错误,我会发送故意错误数据以试图利用它。这种启发式方法是两个领域的最佳 方案 气瓶 现场处置方案 .pdf气瓶 现场处置方案 .doc见习基地管理方案.doc关于群访事件的化解方案建筑工地扬尘治理专项方案下载 :人类直觉和计算机自动化。 模糊化确实是功能强大的工具,但是它在测试覆盖率方面仍处于相对未知的领域。因此我发出以下行动呼吁(当然要在读完本文其余部分之后实现):选择您熟悉的技术,或至少您感兴趣的技术,为之编写一个模糊处理程序。您多半可能会发现bug。
本文档为【软件安全性测试】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_105949
暂无简介~
格式:doc
大小:24KB
软件:Word
页数:5
分类:生活休闲
上传时间:2017-09-19
浏览量:42