Fuzz Test

  Fuzz Test概念

  传统的Fuzz指的是一种黑盒测试技术或随机测试技术,用来发现软件的缺陷(flaws)。模糊测试是这样的一个过程:向产品有意识地输入无效数据以期望触发错误条件或引起产品的故障。这些错误条件可以指导找出那些可挖掘的安全漏洞.

  1990年Miller等人发现,通过简单的Fuzz testing可以使运行于UNIX系统上的至少25%的程序崩溃;2002年Aitel通过自己设计实现的Fuzz工具SPIKE成功地发现了多个未知漏洞;安全漏洞困扰了许多流行的客户端应用程序,包括Microsoft的Internet Explorer、Word和Excel,它们中的许多漏洞在2006年通过模糊测试技术被发现。模糊测试技术的有效应用产生了许多新的工具和日益广泛的影响。可见,Fuzz测试在安全领域的重要性。

  安全性必须被融入软件开发生命周期(SDLC),而不是到了后才草率处理。模糊测试可以并且应该是任何完整SDLC的一部分,不仅在测试阶段需要考虑,在开发阶段也同样需要考虑。缺陷被发现得越及时,修补缺陷的成本越低。

  Fuzz技术的原理

  Fuzz技术的原理简单,基本的思想是将随机数据作为程序的输入,并监视程序执行过程中产生的任何异常,记录下导致异常的输人数据,从而定位软件中缺陷的位置。

  Fuzz 阶段

  模糊测试方法的选择依赖不同的因素,可能有很大的变化。没有一种正确的模糊测试方法。模糊测试方法的选择完全取决于目标应用程序、研究者的技能,以及需要测试的数据所采用的格式。然而,无论要对什么进行测试,也不论确定选择了哪种方法,模糊测试总要经历几个基本的阶段。

  其中,识别输入:几乎所有可被人利用的漏洞都是因为应用程序接受了用户的输入并且在处理输入数据时没有首先清除非法数据或执行确认例程。

  经验介绍

  API测试:

  Memory Boundary Test for GetPluginVersion:

  Buffer is bigger than needed Buffer;

  content is setted to be 0xFF before calling the fuction

  Input buffer with sizeWChar is bigger than the actual value

  Expected Results:The lower bytes of the buffer is the actual vertion information,and other bytes is the setted 0xFF before calling the fuction.

  阅读源代码,也可以查找这类Bug,如查看Strcpy,memcopy等函数调用之前,是否有做判断?另外,不安全调用CreateProcess()也会引起漏洞。

  借助工具如Prefast,Fxcop等工具进行测试。

  AP测试:

  黑盒测试:

  举例,假设Name域应该接受一个字符串值,Age域应该接受一个整数值。如果用户偶然改变了两个域的实际输入范围并且在Age域输入了一个字符串后会发生什么呢?字符串值会被自动转换为基于ASCII码的整数值吗?是否会显示一条错误报告消息?应用程序会崩溃吗?借助模糊自动化测试实现;

  也可以通过工具或源代码检查来进行。