你了解模糊测试(fuzz testing)吗?

模糊测试(fuzz testing)是一类安全性测试的方法。说起安全性测试,大部分人头脑中浮现出的可能是一个标准的“黑客”场景:某个不修边幅、脸色苍白的年轻人,坐在黑暗的房间中,正在熟练地使用各种工具尝试进入某个系统。这种由安全人员“模拟黑客进入系统”的测试方法的确是安全性测试中的一种有效测试手段,名叫“渗透测试”。渗透测试方法完全依靠测试执行者的能力,能力强的“白客”能够发现有价值的安全性漏洞,而不具备很强的攻击能力的测试者就无法有效发现系统中的安全性漏洞。必须承认,渗透测试是一种有效的安全性测试手段,当然,前提是你要能够找到足够好的测试执行者。

  渗透测试是一种有效的测试方法,但由于它对执行者的能力要求太高,因此很难被大规模应用。站在测试的角度,我们是否能够用“自动化测试”这个强有力的武器帮助降低安全性测试的门槛呢?一个容易想到的“录制/回放”方法是:将渗透测试的执行者们的操作录制下来,形成脚本,期望这些脚本可以在不加修改或是稍加修改时应用在对其他应用的安全性测试中。但由于渗透测试的过程并不具有可重复的特点(测试执行主要依赖执行者的经验,类似调试),这种想法在真实的安全性测试环境下完全不可行。完全自动化的工具通常只能发现那些可被用标准化方式发现的特定安全漏洞(如简单的SQL注入漏洞)。

  模糊测试是一种介于完全的手工渗透测试与完全的自动化测试之间的安全性测试类型。它充分利用了机器的能力:随机生成和发送数据;同时,也尝试将安全专家在安全性方面的经验引入进来。从执行过程来说,模糊测试的执行过程非常简单:

  测试工具通过随机或是半随机的方式生成大量数据;

  测试工具将生成的数据发送给被测试的系统(输入);

  测试工具检测被测系统的状态(如是否能够响应,响应是否正确等);

  根据被测系统的状态判断是否存在潜在的安全漏洞。

  显然,模糊测试的整个执行过程是依靠工具进行的自动化测试。但是,看起来它完全是一个类似MonkeyTest工具的随机数据生成器嘛,这怎么能和安全专家的经验结合起来呢?别着急,我们用一个例子来演示一下。

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

方法1:

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

  方法2:

  尝试抓取到客户端和服务器之间的通信数据,根据这些数据分析出客户端与服务器之间的通信协议,然后根据协议的定义,自行编造数据发起攻击,尝试找到可能的漏洞。

  方法2在成本上比方法1要低,而且由于方法2关注的是协议层面的攻击,效率会更高。但是,稍微想一下,方法2还是存在一些问题:

  完整的协议分析难度很大;

  人工编造数据的成本很高;

  在方法2的基础上,我们尝试引入模糊测试的概念,由于机器生成和发送数据的能力足够强,因此我们完全可以把生成数据的任务交给机器去完成。当然,协议的分析主要还是依赖人工来进行,模糊测试领域内有一些自动化的协议分析手段(《模糊测试》一书中有专门的章节描述),但从效率和效果上来说,在面对复杂协议的时候,人工分析的方式更为有效。

  假如根据抓取到的数据包,我们发现被测应用使用的协议如下(|仅表示字段间的分割,不是实际的数据内容):

  |00 01| GET | 11 | user:dennis

  2字节的包头(00 01)

  10字节定长的命令(GET)

  一个1字节的数据,表示命令参数的长度

  不定长的命令参数

  根据这些信息,使用模糊测试方法,我们就可以借助通用的模糊测试工具(如Spike),用模板方式将协议描述出来,并让模糊测试工具自动填充可变字段的内容,生成大量的测试用例并发送给TgServer。同时,通过模糊测试工具提供的功能监视TgServer,一旦TgServer出现可被识别的问题(如性能下降,不再响应,或是返回异常数据等),我们就可以停止模糊测试,并通过日志找到导致问题的请求,进而确认问题。

  简单的说,模糊测试尝试降低安全性测试的门槛,通过半随机方式的数据发送来找出被测系统的漏洞。显然,测试这对被测应用越了解,模糊测试的生成就能越准确。但与渗透测试或是代码审查相比,模糊测试显然更加易于进行。而且,通过自动化工具,模糊测试可以把安全方面的经验积累到工具中,为组织持续的安全性测试提供帮助。

  这是本系列的第一篇,后续还将写两篇来介绍不同类型应用的模糊测试,以及常用的模糊测试工具。

  《模糊测试——强制发掘安全漏洞的利器》这本书全面覆盖了模糊测试这一技术。

最新内容请见作者的GitHub页:http://qaseven.github.io/

时间: 2024-11-08 19:42:02

你了解模糊测试(fuzz testing)吗?的相关文章

[Fuzz]Android模糊测试

fuzz模糊测试理论应用于android端  1.单独调用Activity 2.发布针对性广播 3.调用查看Apps数据库 等...  方法: 1.反编译apk,可以使用apktool 2.查找AndroidManifest.xml文件内activity,service等,修改Export="true",意味着可以由第三方程序调用该服务 3.修改过配置文件后,重新打包成apk 4.对重新打包过的apk进行签名  以Activity为例,想要启动apps的activity有3种方法: 1

炒鸡棒的模糊测试技术

本文讲的是炒鸡棒的模糊测试技术,安全软件的重点是能使系统更加安全.在开发软件时,绝对不想引入新的故障点,或者增加软件运行系统的攻击面.所以我们自然会认真对待安全的编码实践和软件质量.在这篇文章中,我们想解释一下我们在内部使用的用来发现漏洞和缺陷的模糊测试技术,以便在这些漏洞发生在客户那里以及我们亲爱的bug赏金猎人之前找到它们. 一种已经被漏洞赏金猎人证明是非常有效的发现软件安全漏洞的一种称为fuzzing的技术,这种技术需要在目标程序中注入意外或畸形的数据,以便导致输入错误处理,例如可利用的内

在内部应用安全测试中使用模糊测试

问:一位研究员最近用模糊测试发现了许多苹果和微软的漏洞.在内部软件开发过程中如何使用模糊测试来发现漏洞呢?答:现在,很多软件开发员.正规的安全研究者和网络罪犯都在使用模糊测试技术--一种用 大量无效的.意料之外的,或者随机的数据来轰击运行中的程序的输入的技术--来测试代码的坚固性.如果模糊数据导致程序在响应这个参数操作时出现失效.崩溃.锁起.消耗内存,或者不可控制的错误的话,开发者或研究者就会知道代码中存在缺陷.这就是模糊工具常被称为错误注入器的原因,而模糊测试也被称为坚固性测试或者负面测试.最

《Metasploit渗透测试手册》—第8章8.8节编写FileZilla FTP模糊测试器

8.8 编写FileZilla FTP模糊测试器Metasploit渗透测试手册前面已分析过模糊测试模块的工作过程,本节中将进一步构建自己的小型FTP模糊测试器,用于对FileZilla FTP服务器进行模糊测试. 怎样实现构建模糊测试器的基本模板与前面开发辅助模块所用的模板类似,基本模板应具有如下的形式. require 'msf/core' class Metasploit3 < Msf::Auxiliary include Msf::Auxiliary::Scanner def initi

模糊测试: 为Team System创建自定义的测试接口提供程序

在奥兰多参加 Microsoft Tech•Ed 2007 会议时,我有幸在"The Learning Center"的一个开发人员展位工作过.这次经历让我感触最深的是围绕最新的应用程序生命周期管 理 (ALM) 工具所展开的讨论.同时还有大量关于热门方法的讨论,例如敏捷编程和测试驱动的开发 (TDD).因此,Microsoft 的最新 ALM 套件 - Visual Studio Team System (VSTS) 产品倍 受关注. VSTS 为测试人员提供了一些强大的功能和可扩展

如何使用Burp Suite模糊测试SQL注入、XSS、命令执行漏洞

本文讲的是如何使用Burp Suite模糊测试SQL注入.XSS.命令执行漏洞,今天我将使用打包的套件攻击工具对bwapp应用程序进行模糊测试,手动执行此测试是一个耗时的时间,可能对任何一个渗透性测试的安全人员来说都是无聊的过程. 模糊测试在软件测试中起着至关重要的作用,它是一种工具,用于通过将一组称为模糊的部分地址输入注入到要测试的应用程序的程序中来查找错误,错误,故障. 漏洞检查工具采用文件格式的结构输入来区分有效和无效的输入.漏洞检查工具最适合识别sql注入,缓冲区溢出,xss注入和OS命

云端模糊测试挖洞实例

一.简介 Fuzzing(模糊测试)是一种用于识别软件bug以及漏洞的方法.就目前的发展趋势来说Fuzzing正向着云端迈进,相较于传统Fuzzing方式,云端Fuzzing使得模糊测试速度加快也更加灵活.在本教程中,我们将与你一同走完云端模糊测试的全过程(即部署,Fuzzing以及使用softScheck Cloud Fuzzing Framework (sCFF)框架检索结果).我们将以运行在Ubuntu 16.04上的tcpdump4.9版本为例进行演示,读者可下载sCFF框架,和我们一同

《Metasploit渗透测试手册》—第3章3.3节 在Windows XP SP2上进行渗透测试8.7 使用Metasploit进行模糊测试

3.3 在Windows XP SP2上进行渗透测试8.7 使用Metasploit进行模糊测试 Metasploit渗透测试手册 本节中我们将介绍如何使用Metasploit攻陷运行着Windows XP操作系统的目标机器,其中需要使用前面章节中讲到的一些命令,进一步选择漏洞利用代码和攻击载荷,并设置各种必需的参数. 准备 首先在msfconsole中进行渗透测试过程.启动控制台,扫描端口搜集目标机器的信息,前面已经详细讨论过端口扫描的相关内容,这里假设已搜集到目标机器的信息,并确定其运行的是

渗透测试的福音:既好用成本又低的云端模糊测试

6年前一篇研究文章中提出的微软理念--"云端模糊测试(Fuzzing)将彻底改变安全测试",以 Project Springfield 漏洞发现项目的登场亮相作为其实现形式. Project Springfield 是基于Azure云的服务,依靠自动向代码提交不良输入来发现软件漏洞. 微软提出的"云端模糊测试即服务" 9月26号在亚特兰大Ignite大会上推出的 Project Springfield,为开发者在微软Azure云端虚拟机上进行持续性二进制文件测试的能