如何攻击软件

发表于:2008-8-07 13:50

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:译者:贾国莹    来源:51Testing投稿

  摘要:本文通过介绍一些方法(即所谓的“攻击”)来揭露软件设计和开发中的错误。这些攻击是手工的、探索性的测试设计,可以飞快的执行而花费很少或者根本没有开销。这些攻击是通过学习了大量实际的软件错误,将这些错误的原因和症状进行了归纳之后形成的。美国佛罗里达州技术学院的学生通过一个学年的手工精确测试,已经确定了数十种攻击软件的办法,以达到发现软件中错误的目的。这些方法已获得成功,在很短的时间内在几乎不熟悉软件的情况下,发现了大量的额外的错误。本文旨在介绍这些方法中的一部分来验证它们在发现软件错误中的实际使用情况。

  概述:
  是什么使优秀的软件测试人员变得更优秀?是什么直觉指导他们准确的定位错误?可以学到这些有用的本领吗?
这些问题就是本文的主题。我相信一个优秀的测试人员不仅仅靠直觉来引导,实际上,多年来很多测试人员建立了一个标准攻击的兵工厂。每一次当他们面对一个新的测试问题时,他们都要精心组织攻击,发誓一定要找到错误。尽管这些攻击策略很少能够记录下来,但是这些策略在手工测试中占有很重要的地位,是培训新的测试人员的一个非常好的途径。

  我们通过学习实际的测试人员如何寻找软件错误,来开始兵工厂之旅。在本文中,我们将探讨已有攻击策略的一部分。我们的下一个挑战是开始研究自动化攻击的过程,并找到有效的解决方法。
  攻击方法可以分为三类:
  输入/输出攻击
  数据攻击
  计算攻击
  每一类特定类型的攻击,可确定一些非常有趣的软件故障。接下来的部分我将描述每一类方法中的一些攻击手段,并有具体的错误示例。我验证的每一个错误都来自于微软公司的产品。但这不代表我具有反对微软的立场。事实上,微软作为全球顶级的软件公司使得它成为众矢之地。但是不要假设微软的产品就比其它公司的产品错误多。文中所描述的攻击能够突破来自于许多厂商的几乎每一个可以想象到的平台。我的经验表明,开发人员编写的错误,存在一个相当统一的概率。而不论其应用领域,使用哪种操作系统,以及是否公布其源代码。当然,除非他们是网页开发人员,因为很少有机会需要去中断网页软件。
  一、 输入/输出攻击
  输入/输出攻击也就是大多数测试人员所说的“黑盒”测试,它不考虑内部的数据和计算。实际上,这是最普遍的测试类型。因为看源代码十分枯燥,又费时费力。除非你确实知道你要找什么,不然将做大量的无用功(我们将在下面的两部分讨论如何去寻找你的目标)。
输入/输出攻击有如下表所示的10种类型,分为输入数据,输入数据组合和输入顺序3个大类。下面我们将详细讨论每一个攻击类型,并举例说明。


输入/输出攻击

1、输入数据攻击

强迫所有错误信息出现

强迫默认值被指派

探索允许的字符集

强迫改变输出规模

溢出显示区域

强迫屏幕刷新问题

2、输入数据组合攻击

强迫非法输出

找到不能并存的输入

3、输入顺序攻击

强迫非法输出

重复多次输入序列

 

  1. 输入数据攻击
  这种类型的攻击只需要使用简单的输入或者输入数据(如果是输入变量)就可以进行。我们试图发现一个简单的数据来中断应用程序,即使其它的大量数据能正常使用。有很多种方法可以用来选择数据,而不仅仅简单的找到可接受和不可接受输入之间的界线,尤其是如果你想要找到错误,并且这些错误是开发人员要修复的但是无法用事实证明是存在的。
  下面是例子但是这些例子有时很难实现:
  请务必确保你能看见所有的错误信息。
  确定一个程序的错误确实很难,这通常意味着存在错误。有些错误信息较为简单,只要简单的暂停执行就能显示出错误提示,然后可以继续下一个输入或者将时间消耗完。然而,其它的错误信息来自于抛出的异常或者执行的异常句柄。异常句柄(或者任何集中式错误事务)是因为指针意外的发生了变化,而没有随着数据状态的改变而改变。突然,异常指针开始执行,所有的数据错误接踵而来:文件一直处于打开状态,内存一直被占用,数据可能仍然没有初始化。当控制一旦返回到主程序,就很难分清错误句柄在哪里返回,有什么遗留下来的副作用可能会在什么地方等待粗心的开发人员。例如:打不开一个文件,因为这个文件已经处于打开状态,或者你可能会使用没有正确初始化的数据等等。如果我们要确保能看到所有的错误信息并且系统一直工作正常,我们就必须为我们的用户(更不用提我们的维修商了)做大量的服务工作。
  图1显示了一个十分有趣的软件缺陷,它是由我的学生在Word 2000中发现的。在Word 2000中错误提示会莫名其妙的出现两次。该缺陷是在用单一输入值探查法攻击错误处理例程时发现的。

  

  请务必迫使软件建立默认值。
  开发人员经常忘记当用户输入超出范围的数据或者错误的设置参数时,要为用户建立合适的程序默认值。有时强行的默认值能做任何事情,即使优秀的开发人员也能从中获益,因为它能产生意想不到的效果。例如:在Word 2000如图2所示的对话框中有一个选项菜单,当左边无变化,在对话框重新显示之前实际上控制是无效的。比较图2、图3两个对话框,注意到任何丢失的控制了吗?

    

  

版权声明:51Testing软件测试网及相关内容提供者拥有51testing.com内容的全部版权,未经明确的书面许可,任何人或单位不得对本网站内容复制、转载或进行镜像。51testing软件测试网欢迎与业内同行进行有益的合作和交流,如果有任何有关内容方面的合作事宜,请联系我们

41/41234>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号