一、Fuzzing概述
模糊测试——我们常常称其为Fuzzing,被定义为一种通过提供非预期的输入并监视异常结果来发现软件故障的方法。 Fuzzing的乐趣在于探索一些出人意料或隐藏很深的安全性缺陷,这些安全性缺陷不乏如缓冲区溢出、服务器异常崩溃等,一旦确认这些缺陷事实存在,它们往往都是致命性的。当然这并不限制通过为Fuzzing模糊器精心构造一系列的规则和数据库来发现诸如SQL注入、XSS攻击、目录遍历/弱访问控制、弱认证、远程命令执行等缺陷,规则设计的越加智能、针对已知漏洞的数据字典内容越加丰富,Fuzzing测试的效率和结果也会越理想。当然,也同样可以使用暴力构造畸形数据的方式来生成Fuzzing数据。
Fuzzing测试需要借助于上文提到的Fuzzing模糊器,最常见的Fuzzing模糊器主要有两类:
(1)基于变异的模糊器,这种模糊器对已有数据样本应用变异技术以创建测试用例;
(2)基于生成的模糊器,这种模糊器通过对目标协议或文件格式建模的方法从头开始产生测试用例。
二、SPIKE概述及其特点
SPIKE Fuzzer Creation Kit作为最著名的Fuzzing模糊器框架(spike fuzzing framework),是immunitysec公司的Dave Aitel写的一个黑盒安全性测试工具集SPIKE Suite Tools的一个重要组成部分,为我们提供了一个包含长字符串、带有格式串的字符串、大整数、负数、各种畸形字符等的Fuzzing数据库,一套基于Block-Based Protocol Analysis方法的测试框架以及丰富的API,我们不仅可以利用SPIKE提供的各类实用脚本直接实现Fuzzing测试,更可以利用框架,对API进行轻量级封装,从而构建属于我们自己的模糊器。
我们可以从http://www.immunitysec.com/resources-freesoftware.shtml网站获取并了解它。
SPIKE对于寻找安全性缺陷或脆弱性具备以下特点,了解这些对于利用该框架构建模糊器非常重要:
(1)利用它可以便捷快速地重构一个复杂的二进制协议;
(2)利用它可以很容易地使用Fuzzing数据来混乱协议结构和内容;
(3)SPIKE发展出了一套关于Fuzz的基础理论,该理论总结为构造一些特殊的数字或者字符串作为程序的输入,检查程序是否能够处理这些异常数据;
(4)利用已知的安全缺陷测试新的程序。
SPIKE的数据域类似于FIFO队列或称其为“BufferClass”的结构,格式支持多种的数据类型:Word、halfword、string、Big endian、 little endian 等;
主要包括三种基础的Fuzzing数据构造的方法:
(1)通过调用s_push(buffer,size)向SPIKE数据域下方填充数据,支持基于perl语言的脚本s_push("perl -e 'print "A" x5000'");的实现方式;
(2)通过调用字符串数据构造函数s_string("hi");s_string_variable("hi");向SPIKE数据域下方填充普通字符串或带有Fuzzing变量字符串数据;
(3)通过调用二进制数据构造函