可编辑可修改,欢迎下载
合同协议模板
网络协议模糊测试
1. 网络协议模糊测试
网络协议模糊器的测试对象主要是各类网络产 品中的网络协
议解析模块 ,目的是测试其在组装、解 析网络协议过程中是否存
在漏洞。其思想是模糊器通过 Socket 与被测目标之间进行通信,
向被测目标 应用发送变异或包含错误的模糊值, 并监视目标应
用以发现错误。使用网络协议模糊器进行模糊测试, 需要首先 研
究各类协议的规范和标准 ,以便创建合理的测试 数据。
目前 ,最常见的网络协议模糊测试实施方案 有两种 :方案Ⅰ
为客户端和服务端测试模式, 即模糊器和被测对象分别为测试过
程的两个端点。此时, 模糊器可充当客户端的角色, 用来测试服务
端程序的安全性, 例如 Web 服务程序。同 时 ,模糊器也可以充当
服务端的角色 ,用来测试客户 端程序的安全性. 模糊器中的监控
模块用来对被测对象的行为进行收集、分析以判断是否存在异常
情况。
方案Ⅱ网络协议模糊测试的实施方案是为了测试防火墙、路由
器、安全网关等等部署在网络中间的设备。模糊器构造的数据被
发送至协议服务器的过程中, 位于模糊器和协议服务器之间的被
测对象对其起到了重组和解析的作用 ,一旦重组和解析过程中出
错,可能造成被测对象出现异常状态。模糊器中的监控模块用来对
被测对象的异常状态进行收集、分析,最终定位漏洞所在。通过此
可编辑可修改,欢迎下载
合同协议模板
方法可发现被测对象在网络协议处理过程中的安全漏洞。
2. 测试对象
理论上,潜在测试目标包括任何能够接受网络数据的任务软
件。OSI7层模型中从数据链路层到应用层每一层都有可能存在实
现问题,再对测试目标进行全面审计时,每一层都要进行测试。
3. 测试方法
3.1 强制(基于变异)模糊测试
先使用嗅探器抓取合法的协议数据,随后对抓到的数据进行变
异,将其发送给目标应用。但在目标应用实现了基本回放攻击保
护或协议包含校验码的两种情况下,这种模糊测试无法达到期望
的测试效果。
3.2 智能强制(基于生成)模糊测试
智能强制模糊测试首先需要实际研究协议规范。智能模糊测试
器仍然依靠强制性攻击,可以依赖用户提供的配置文件,使模糊
测试的过程更智能。
3.3 通过修改客户端进行变异模糊测试
将测试嵌入到已经实现了用我们期望的协议与服务进行通信
的应用中,这样就不用实现在模糊测试器中实现整个协议,给模
糊测试器的开发者带来好处,最小化所需投入的经历。
4. 错误检测
4.1 手工方式(基于调试器)
在进程上附加使用调试器
可编辑可修改,欢迎下载
合同协议模板
4.2 自动化方式(基于代理)
设计一个方案来代替手工调试过程。不使用调试器,由模糊测
试者编写一个面向目标平台的调试代理并在目标应用上运行之。
监视目标进程中发生的异常,并于远程系统上的模糊测试器进行
通信。
5. UNIX平台自动化网络协议模糊测试
5.1 使用SPIKE模糊测试框架
SPIKE用模糊字符串库中的内容迭代模糊变量,达成模糊测
试。模糊此符传可以是任何数据类型,甚至是XDR编码的二进制
数据数组。SPIKE是一个GPL的API和一套工具,它使你可以快
速创建任何网络协议压力测试的测试器。大多数协议都是围绕着
非常类似的数据格式化建立的。这些协议中的许多都已经在
SPIKE中得到支持。其他的协议也很快会得到支持。
SPIKE使用C语言编写,运行平台UNIX,框架结构如下图所
示
可编辑可修改,欢迎下载
合同协议模板
框架试图方便逆向工程师和安全研究人员复制一个未知的协议,框架
包括模糊测试器和支持代码,包括以下内容:
(1).webfuzz,提供一许多小工具,以组合一个灵活而全面的web
应用程序模糊测试工具。Webfuzz完全依赖于浏览器来生成它的要求,
它总是正确解析java和脚本语言。
(2). Msrpcfuzz:尝试运行ncan_tcp程序,它基本上是随机发送参
数,如果端口突然关闭,就发现了一个潜在的严重错误。
5.2 针对协议的模糊测试器
SPIKE包含一部分预先写好的针对具体协议的模糊测试器,以
下是这些模糊测试器的列表:
HTTP模糊测试器
Microsoft RPC模糊测试器
X11模糊测试器
Citrix模糊测试器
Sun RPC模糊测试器
可编辑可修改,欢迎下载
合同协议模板
针对协议的模糊测试脚本
SPIKE还包含一些可以嵌入到多个SPIKE内涵的通用模糊测
试器中的脚本。脚本列表如下所示
5.3 基于脚本的通用模糊测试器
SPIKE有几个通用模糊测试器,他们接收脚本作为输入,下面列出能
在SPIKE中找到的通用模糊测试器:
TCP监听模糊测试器(客户端)
TCP/UDP发送模糊测试器
行缓冲TCP发送模糊测试器
5.4 Pop3模糊测试脚本
在pop3中可以查看pop3.spk查看pop3模糊测试脚本
s_string_variable("USER");
s_string(" ");
s_string_variable("Administrator");
s_string("\r\n");
可编辑可修改,欢迎下载
合同协议模板
s_string("PASS ");
s_string_variable("jbone");
s_string_variable("\r\n");
s_string_variable("STAT");
s_string("\r\n");
s_string("LIST ");
s_string_variable("1");
s_string("\r\n");
s_string("RETR ");
s_string_variable("1");
s_string("\r\n");
s_string("DELE ");
s_string_variable("1");
s_string("\r\n");
s_string_variable("NOOP\r\n");
s_string_variable("RSET\r\n");
s_string_variable("QUIT\r\n");
5.5 常用API
s_string(char *listring):该函数将一个固定字符串添加到SPIKE,被加
入的字符串的值不会被修改。
s_string_variable(unsigned char *variable):该函数将一个可变字符串添
加到SPIKE。这个字符串在相应的ibanliang被处理的时候会被模糊
字符串替换掉。
s_binary(char * instring):该函数将二进制数据添加到SPIKE。加入的
数据值不会被修改。
6. Windows平台上的网络协议的模糊测试
在windows下使用C#进行模糊测试工具开发,可以创建友好的用户
可编辑可修改,欢迎下载
合同协议模板
界面。直接调用。Net封装函数,节省工作量。
6.1 构建数据包
利用数据包变异方法,用户基于已有的合法数据包创建一个模板,在
模板中知名需要修改的部分,从而满足模糊测试的需要。
6.2 抓取数据
WinPcap使用c语言编写,所以在C#环境下,使用Metro Packet库来
抓取数据包。
6.3 解析数据
在抓取到数据后,对被抓取的数据进行解析,以易于被理解的格式展
现数据都的内容。
6.4 模糊测试变量
在观察和抓取到网络数据后,我们需要允许用户表示数据包中适合进
行变异的位置,以便进行模糊测试。为此我们允许用户在以十六进制
方式显示的数据内容中加入简单的标签,表明进行模糊测试的部分。
ProtoFuzz工具使用下面这些标签:
[XX]-表示强制,将使用所有可能的字节值用方括号括起来的字节
进行模糊测试。将每一个字节模糊测试256次。
变长的,以十六进制方式表示的字符串进行模糊测试。
6.5 发送数据
创建一个可以有用户指定数据包中任何字节的值的裸数据包,由程序
员来保证数据包符合RFC定义的结构,提供更好的细节控制能力,
是的用户可以对协议头进行模糊测试。
6.6 ProtoFuzz工具代码结构
可编辑可修改,欢迎下载
合同协议模板