Fuzz testing初探

上一篇 / 下一篇  2007-04-15 10:24:42 / 个人分类:Fuzz

Fuzz testing,中文可以翻译为模糊测试,简单的说来就是构造一些random或者unexpected的数据作为程序的输入,观察程序在这种情况下的工作状况。Fuzz testing是检查程序容错性的一个重要的测试手段。

虽然Fuzz testing的输入在正常情况下不大可能出现,但是hacker并不这么想,作为一个hacker,他可能千方百计的想要找到你程序的漏洞,或者使你的程序crash,用random的输入是hacker的一个很好的选择。因此,Fuzz testing也是security testing的重要组成部分。

关于Fuzz testing的最老网站是http://www.cs.wisc.edu/~bart/fuzz/fuzz.html,在这个网站中我们可以看到最早的paper/report是在1990年,可见Fuzz testing也不能算是一个新的东西。在这个网站的一个对于windowsNT的Fuzz test report中,我们看到一些很令人吃惊的数据。

  • 在random键盘或者鼠标输入的情况下,NT4.0有21%的程序crash
  • 在random键盘或者鼠标输入的情况下,NT4.0有另外24%的程序会hung掉
  • 在完全random的键盘或者鼠标的输入情况,几乎100%的程序会crash或者hung

如果NT4.0表现的都如此之差,其它的程序应该也好不到哪里去。

Fuzz testing的strategy:

对于Fuzz testing来讲,也并非完全random的数据输入就是最好的选择,程序crash也并非是hacker们最期望的事情。因此Fuzz testing也需要有一些strategy。

我们以一个网站的测试作为例子来过一下,假定我们现在是一个http server的提供者,hacker想要对这个网站进行攻击。通常来讲,他有几个选择:

  1. 用洪水攻击之类的方法使网站拒绝服务
  2. http报文注入,获得该机器的权限
  3. random的http报文,使http server(IIS/Apache/...)服务不可用

如果我是hacker,从获得的好处和攻击的难易程度上来考虑,选择的优先级会是2>3>1

因此,我们来看一下2如何做到。

一般来讲,http请求报文会像下面这样:

Get /mattmarg/ HTTP/1.0
User-Agent: Mozilla/2.0 (Macintosh; I; PPC)
Accept: text/html; */*
Cookie: name = value
Referer: http://www.webmonkey.com/html/96/47/index2a.html
Host:www.grippy.org

那我们如果要修改这样的报文(请参考http://sourceforge.net/projects/taof/)然后再转发,最合适的选择是1.Get后面的"/mattmarg/";2.Referer后面的那一长串网址。至于如何修改,那真的是需要一些背景知识,以及对于以往的网站安全漏洞研究的经验。

Fuzz的一些参考网站:

http://www.hacksafe.com.au/blog/2006/08/21/fuzz-testing-tools-and-techniques/

http://www.packetstormsecurity.org/fuzzer/

http://ivory.idyll.org/blog/nov-06/testing-is-hard.html

三个差不多了,慢慢研究。


TAG: Fuzz

引用 删除 petwan   /   2010-05-28 20:32:29
1
luxuabc的个人空间 引用 删除 luxuabc   /   2007-04-16 12:38:58
5
good
 

评分:0

我来说两句

日历

« 2024-04-25  
 123456
78910111213
14151617181920
21222324252627
282930    

我的存档

数据统计

  • 访问量: 4835
  • 日志数: 4
  • 建立时间: 2007-04-13
  • 更新时间: 2007-04-15

RSS订阅

Open Toolbar