zoukankan      html  css  js  c++  java
  • 模糊测试(Fuzz testing)

    模糊测试(fuzz testing)是一种安全测试方法,他介于完全的手工测试和完全的自动化测试之间。为什么是介于那两者之间?首先完全的手工测试即是渗透测试,测试人员可以模拟黑客恶意进入系统、查找漏洞,这对测试人员的要求比较高。能力强的测试人员可以发现比较多或者高质量的安全性问题,但是如果测试人员的能力不够,可能就不能找到足够多、威胁大的安全漏洞。所有渗透测试对人员能力的依赖性强,成本高,难以大规模的实施。

    但是想用完全的自动化来实现渗透测试也不可行,同一套测试用例和方法不可能不加修改的就用在不同的产品上,因为各个产品的需求、实现、功能等等都不一样。测试过程中还需要测试人员的介入来分析结果、判断漏洞等等。那么,这种情况下我们就可以引入模糊测试。

    为了简单起见,假定我们要测试的应用是一个C/S应用的服务端程序。这个程序运行在Unix平台上,名字叫做Tserver。我们唯一知道的信息就是客户端和Tserver之间使用基于TCP/IP的自定义协议进行通讯。这种情况下,我们该如何尝试找到应用系统中可能的漏洞?

    方法1:
    如果我们手头上有Tserver的源代码,通过代码审查显然可以找到可能的漏洞。就算没有源代码,通过逆向工程方式,用代码审查的方式也可以达到找到漏洞的目的。当然,这必然要求审查者具有足够好的技能,而且,被测应用规模越大,需要付出的成本也就越高。

    方法2:

    我们可以在知道产品服务器端和客户端的通信协议后,根据协议的格式、定义,自己准备大量的测试数据,从客户端发送给服务器端,从而试图找到一些安全漏洞。

    但是分析通信协议很难,而且自己准备数据成本太高,那么我们就可以用模糊测试的方式,让机器生成测试数据,病发送给服务器,最后测试人员再对测试结果进行分析。

    模糊测试充分利用了机器的能力:随机生成和发送数据;同时,也尝试将安全专家在安全性方面的经验引入进来。从执行过程来说,模糊测试的执行过程非常简单:

    1. 测试工具通过随机或是半随机的方式生成大量数据;
    2. 测试工具将生成的数据发送给被测试的系统(输入);
    3. 测试工具检测被测系统的状态(如是否能够响应,响应是否正确等);
    4. 根据被测系统的状态判断是否存在潜在的安全漏洞。

    比如我们知道一个Tserver和客户端的通信协议的定义和格式,我们就可以用一种模糊测试工具用模板方式把协议描述出来,然后工具根据模板生成大量的测试数据,然后把测试数据发送给Tserver。同时测试人员监控Tserver(可以通过其他工具),假如Tserver出现异常比如无响应、响应错误等等,测试人员就可以通过日志等资料分析问题,并报告异常。

    可以阅读《模糊测试——强制发掘安全漏洞的利器》来了解更多模糊测试。

    模糊测试工具:

    一般有Spike,Bunny,teenage mutant ninja turtles,sulley等等,Cisco用Codenomicon。

    参考:http://www.ibm.com/developerworks/cn/java/j-fuzztest.html

            https://en.wikipedia.org/wiki/Fuzz_testing

  • 相关阅读:
    树链剖分 (模板) 洛谷3384
    ST表 (模板) 洛谷3865
    IOI 2005 River (洛谷 3354)
    IOI 2005 River (洛谷 3354)
    poj1094 Sorting It All Out
    poj1094 Sorting It All Out
    spfa(模板)
    HAOI 2006 受欢迎的牛 (洛谷2341)
    HAOI 2006 受欢迎的牛 (洛谷2341)
    洛谷1850(NOIp2016) 换教室——期望dp
  • 原文地址:https://www.cnblogs.com/forwill/p/5756634.html
Copyright © 2011-2022 走看看