网络协议模糊测试
模糊测试技术研究综述

模糊测试技术研究综述模糊测试技术研究综述一、引言随着软件领域的快速发展,软件测试已经成为软件开发过程中不可或缺的一部分。
模糊测试作为软件测试中的一种重要技术手段,越来越受到研究者和工程师的关注。
本文将对模糊测试技术进行综述,对其基本概念、原理和应用进行探讨,以及目前存在的问题和未来发展方向进行分析。
二、模糊测试的基本概念模糊测试(Fuzz Testing),也称为随机测试(Random Testing),是指以随机性为基础,对软件系统的输入进行测试的一种方法。
其基本思想是将随机生成的测试输入输入到被测软件系统中,然后观察是否能触发系统的错误行为。
模糊测试通常以一种黑盒测试的方式进行,即对软件内部的具体实现细节一无所知,仅关注其对输入的反应。
三、模糊测试的原理模糊测试的原理可以归纳为以下几点:1. 输入生成:模糊测试通过随机生成测试输入数据,其中包括对输入长度、格式、类型等进行随机性变异,以提高测试用例的覆盖率。
2. 输入注入:将生成的测试输入注入到被测软件系统中,模拟真实用户的输入动作。
3. 错误检测:通过监控被测软件系统的行为,识别是否发生异常或错误行为。
如果发现异常或错误,模糊测试算法将会记录测试输入,以便进行后续的深入分析和修复。
4. 演化策略:模糊测试通常采用一种演化策略,即根据之前的成功测试用例对新的测试输入进行变异和演化,以找到更多可能的错误和漏洞。
四、模糊测试的应用领域模糊测试广泛应用于软件安全领域,其中最为重要的应用领域包括以下几个方面:1. 操作系统和驱动程序:模糊测试能够发现潜在的漏洞和系统错误,提高系统的稳定性和安全性。
2. 网络协议和通信软件:模糊测试可以揭示网络协议和通信软件中存在的漏洞,帮助开发者及时修复。
3. 数据库管理系统:模糊测试可以测试数据库管理系统的各种操作,从而发现潜在的性能问题和安全隐患。
4. Web应用程序:模糊测试可以对Web应用程序进行安全测试,发现可能存在的漏洞,如跨站脚本攻击、SQL注入等。
网络协议的自动化模糊测试漏洞挖掘方法

关键词
协 议 逆 向 工 程 ; 糊 测 试 ; 洞 挖 掘 模 漏 T 33 P 9 Do 号 :1 . 7 4 S . . 0 6 2 1 . 0 4 l 0 3 2 / P J 1 1 . 0 10 2 2
中图法分类号
An Au o a i t r o o o z s i n t m tc Ne wo k Pr t c lFu z Te tng a d
V u n r b lt ic v r n e ho l e a iiy D s o e i g M t d
LIW e— ig Z ANG — n LI Ja — i L h— n i n H — M Ai — g Fa U in— IZ i Ca — Ta g
( c o l f C mp trS in e S h o o u e ce c ,Hu z o g U i est f S in ea d T c n lg Wu a 4 0 7 ) o a h n n v r i o ce c n eh o o y, h n y 3 0 4
第 3 4卷 第 2 期 21 0 1年 2月
计
算
机
学
报
Vo1 3 N o 2 . 4 . Fe . 20 b 11
CHI NES OURNAL OF COM P TERS EJ U
网络 协 议 的 自动 化 模 糊 测 试 漏 洞 挖 掘 方 法
棠 李伟明 张爱芳 刘建财 李之
Ab ta t Al g wih t nc e sng c mpl x t ft e wo k a lc to sr c on t he i r a i o e iy o he n t r pp ia i n,ne wo k p ot o e t r r oc ls —
软件测试中的模糊测试技术研究与应用

软件测试中的模糊测试技术研究与应用随着互联网的快速发展,各种应用软件的涌现,软件测试工作变得越来越重要。
在软件测试中,模糊测试技术被广泛应用。
模糊测试技术可以通过生成模糊的、随机的输入对软件进行测试,有效地发现软件中的缺陷。
本文将介绍模糊测试的概念、实现方法以及其在软件测试中的应用。
一、模糊测试的概念模糊测试,也称为随机测试或基于输入的测试,是一种软件测试方法,它通过输入模糊且随机的数据来触发软件漏洞或异常,从而检测软件的缺陷。
在模糊测试中,测试工程师通过生成各种可能的随机输入数据,包括字符串、数字、二进制数据等,不断地向被测试软件发送输入数据,来触发软件中的错误。
这些模糊的输入数据对于软件的测试是非常重要的,因为它们能够覆盖大量的测试场景,并发现软件中的潜在缺陷。
二、模糊测试的实现方法在模糊测试中,生成模糊的输入数据是关键之一。
生成模糊数据有多种方法,包括随机生成、遗传算法、符号执行、混合生成等。
其中,随机生成是最简单、最常见的生成方法之一。
在随机生成方法中,输入数据由一个随机数生成器生成,然后通过一种特定的协议发送到被测试软件中。
另外一种方法是遗传算法。
遗传算法是一种基于自然界生态进化模型的搜索算法,在模糊测试中被广泛应用。
它通过某种适应度函数来评估测试用例的质量,然后再将优秀的测试用例进行组合,并对它们进行变异操作(增删字符、约束等操作),从而生成新的测试用例。
符号执行是对程序或代码的静态分析方法,它可以发现代码中的路径覆盖问题,同时可以生成最小测试用例集合。
在模糊测试中,符号执行的作用是在分析代码时,探索符号执行路径上的变量和条件约束,而避免了随机生成数据的过程。
混合生成方法则是以上几种方法的组合使用,利用几种不同的生成方法,来生成一些复杂的测试用例。
三、模糊测试的应用模糊测试技术被广泛应用于不同的领域和应用软件中,如应用程序、操作系统、网络协议和Web应用程序等。
其中最常见的应用是以应用程序为对象的模糊测试。
软件测试中的模糊测试方法

软件测试中的模糊测试方法在软件开发过程中,测试是一个至关重要的环节。
而软件测试的方法也是多种多样的,其中一种常用的测试方法就是模糊测试(Fuzz Testing)。
本文将介绍模糊测试的概念、原理和常见的应用场景,以及如何执行模糊测试来提高软件的质量和安全性。
一、模糊测试的概念与原理1. 模糊测试的概念模糊测试是指通过向输入接口或者外部接口中输入非法或异常的数据,来测试软件的稳定性和安全性的一种方法。
它模拟了现实世界中的非预期输入,以发现软件在处理这些意外情况时的漏洞和错误。
2. 模糊测试的原理模糊测试的原理基于以下假设:当软件在面对意外或异常输入时不能正确处理的时候,它很有可能存在漏洞或错误。
模糊测试通过向软件输入大量的随机、无效或非法的数据,以及特定的边界情况,来触发这些潜在的漏洞和错误。
二、模糊测试的应用场景模糊测试通常应用于以下场景:1. 嵌入式设备和物联网设备:对于嵌入式设备和物联网设备来说,安全性是至关重要的。
通过模糊测试可以发现这些设备在处理异常输入时的漏洞,从而提高其安全性。
2. 网络协议和通信:网络协议和通信软件常常面临恶意攻击和黑客入侵的风险。
模糊测试可以检测这些软件在处理不正确或者恶意构造的网络数据包时的漏洞。
3. Web应用程序:Web应用程序是互联网时代最重要的应用之一。
通过模糊测试可以发现Web应用程序中的输入验证和安全性问题,从而保护用户数据的安全。
三、如何执行模糊测试以下是一般的模糊测试执行流程:1. 确定目标:明确需要测试的软件或系统,以及测试的目的和范围。
2. 确定测试用例:创建或收集一组输入数据样本,包括随机、无效和非法的数据,以及特定的边界情况。
3. 执行测试:将测试用例作为输入发送给目标软件,并观察软件在处理这些输入时的行为和输出。
记录任何异常、崩溃或错误。
4. 分析结果:对测试结果进行分析,确定漏洞和错误,并进行分类和优先级评估。
5. 提交报告:编写测试报告,详细描述发现的漏洞和错误,并提供修复建议。
基于网络协议的模糊测试工具设计

第52卷 第11期2019年11月通信技术Communications Technology Vol.52 No.11Nov. 2019* 收稿日期:2019-07-17;修回日期:2019-10-25 Received date:2019-07-17;Revised date:2019-10-25文献引用格式:赵鑫,巫忠跃,易冬阳,等.基于网络协议的模糊测试工具设计[J].通信技术,2019,52(11):2819-2828.ZHAO Xin,WU Zhong-yue,YI Dong-yang,et al.Design of Fuzzy Test Tool for Network Protocol[J].Communications Technology,2019,52(11):2819-2828.doi:10.3969/j.issn.1002-0802.2019.11.042基于网络协议的模糊测试工具设计*赵 鑫,巫忠跃,易冬阳,付 枭(成都国信安信息产业基地有限公司,四川 成都 610000)摘 要:在网络环境中,由于网络协议的不正确实现触发的安全漏洞常导致严重的后果,因此网络协议安全测试成为网络与信息安全领域的重大课题和研究热点。
随着软件规模和复杂度的不断增大,模糊测试在网络协议安全测试方面表现出无可比拟的优势。
相较于静态分析和动态分析安全测试分析方法,模糊测试具有误报率低和可准确定位缺陷的特点。
在分析和研究模糊测试的原理、流程、测试数据生成方法和现有模糊测试工具的基础上,将FSM 模型引入模糊测试工具设计中,使用图形化协议状态机建模,通过拖拽图形生成协议的状态模型。
同时,工具设计实现了可配置参数的数据生成策略,依据模糊数据产生的本质,对协议模型中数值类型的字段使用对数函数取值的变异方法,对字符串类型的字段使用字符替换和宽度变换的变异方法,并支持双字段同时模糊的方法。
关键词:模糊测试;协议状态机;Scoket;Json ;测试数据变异方法中图分类号:TP311 文献标志码:A 文章编号:1002-0802(2019)-11-2819-10Design of Fuzzy Test Tool for Network ProtocolZHAO Xin, WU Zhong-yue, YI Dong-yang, FU Xiao(Chengdu Guoxinan Information Industry Base Co., Ltd, Chengdu Sichuan 610000, China)Abstract: In the network environment, the incorrect implementation of network protocols would often trigger the security vulnerabilities and lead to serious consequences, so network protocol security testing becomes an important topic and research focus in the field of network and information security. With the increasing scale and complexity of software, fuzzy testing exhibits incomparable advantages in network protocol security testing. Compared with security testing methods of static analysis and dynamic analysis, fuzzy testing method has the characteristics of low false alarm rate and accurate location of defects. Based on analysis and exploration of the principles, processes, test data generation methods and existing fuzzy testing tools, the FSM model is introduced into the design of fuzzy testing tools, and by using the graphical protocol state machine, the model established, and by dragging and drawing graphs, the state model of the protocol generated. At the same time, the testing tool designs and implements the data generation strategy of configurable parameters. According to the essence of fuzzy data generation, the method of variation of logarithmic function values is used for numerical field in protocol model, the method of variation of character substitution and width transformation used for string field, and the method for simultaneous ambiguity of two fields supported.Key words: fuzzy testing; protocol state machine; Scoket; Json; test data variation method通信技术2019年0 引 言随着互联网的不断发展,计算机网络已经成为人们工作和生活不可或缺的部分。
安全测试中的模糊测试技术

安全测试中的模糊测试技术在安全测试中,模糊测试技术是一种常用的方法,用于检测软件或系统中的潜在安全漏洞。
本文将介绍模糊测试技术的定义、原理和应用,并探讨其在安全测试中的重要性和挑战。
一、模糊测试技术的定义模糊测试(Fuzzing)是一种软件测试方法,通过向输入参数、文件格式、网络协议等系统输入部分或全部注入大量随机、异常或者非预期的数据,来模拟真实环境下的输入,以发现系统中的异常行为和潜在漏洞。
模糊测试技术可以自动化进行,并且可以覆盖大量的测试输入。
二、模糊测试技术的原理模糊测试技术的原理是基于黑盒测试的思想,即不了解被测试系统内部实现细节,只关注其对输入的处理结果。
通常,模糊测试技术通过以下步骤实施:1. 生成模糊测试数据:根据被测试系统的输入参数或协议规范,生成大量的随机、异常或者非预期的测试数据。
2. 注入测试数据并执行:将生成的测试数据注入到被测试系统中,并执行相应的操作。
3. 监控系统行为:监控系统在处理测试数据时的行为,包括崩溃、错误信息输出等。
4. 分析测试结果:对测试过程中发生的异常行为或崩溃进行分析,以确定是否存在安全漏洞。
三、模糊测试技术的应用模糊测试技术可以广泛应用于软件、操作系统、网络协议和硬件设备等方面的安全测试。
下面以软件安全测试为例进行展开。
1. 操作系统安全测试:模糊测试可以用于发现操作系统内核或驱动程序中的漏洞,如缓冲区溢出、空指针解引用等。
2. 网络协议安全测试:模糊测试可以用于测试网络协议的实现是否存在安全漏洞,如网络协议解析中的错误处理、缓冲区溢出等。
3. Web应用程序安全测试:模糊测试可以用于测试Web应用程序在处理用户输入时是否存在漏洞,如SQL注入、跨站脚本攻击等。
4. 移动应用程序安全测试:模糊测试可以用于发现移动应用程序中的安全漏洞,如不安全的接口调用、数据泄露等。
四、模糊测试技术的重要性在软件和系统开发过程中,安全性一直是至关重要的因素。
模糊测试技术可以在早期发现安全漏洞,减少被黑客利用的风险。
测试中的模糊测试技术与挖掘潜在漏洞
测试中的模糊测试技术与挖掘潜在漏洞在软件开发和测试领域中,模糊测试技术被广泛应用于发现潜在漏洞和提高系统的安全性。
模糊测试是一种自动化的测试方法,它通过向程序输入异常、不合法或随机生成的数据,以寻找可能的漏洞和异常行为。
本文将介绍和探讨模糊测试技术以及其在挖掘潜在漏洞方面的应用。
一、模糊测试简介模糊测试,也称为低级测试或随机测试,是一种测试方法,旨在发现软件或系统对异常输入的处理能力。
模糊测试的基本原理是通过向程序输入非预期、不合法或随机生成的数据,观察程序的响应和行为,以寻找潜在的异常情况和漏洞。
不同于传统的测试方法,模糊测试不需要事先了解程序的内部结构和逻辑。
它不依赖于对系统的具体了解,而是通过随机生成测试用例并输入系统,观察其行为和相应结果。
这种测试方法可以帮助发现一些可能隐藏在代码中的漏洞,例如缓冲区溢出、空指针引用和格式化字符串漏洞等。
二、模糊测试的技术原理模糊测试的原理是通过输入非正常的数据来挑战程序的健壮性和鲁棒性。
这些数据可以是随机生成的,也可以是针对特定程序的一些预定义输入集合。
模糊测试通常通过以下几个步骤实现:1. 生成测试用例:利用随机算法或预定义输入集生成各类异常数据,例如错误的数据类型、无效的输入范围或格式错误的数据。
2. 输入测试用例:将生成的测试用例输入目标程序进行测试。
测试用例可以作为输入参数传递给程序,也可以作为文件输入进行测试。
3. 监控程序的行为:观察程序对测试用例的响应和行为,包括崩溃、异常终止、错误报告或输出变化等。
4. 分析测试结果:对程序的响应和行为进行分析,识别异常情况和潜在的漏洞。
三、模糊测试的应用模糊测试技术已经被广泛应用于软件开发、安全测试和漏洞挖掘等领域。
以下是模糊测试在不同领域的具体应用:1. 操作系统和内核:模糊测试可用于发现操作系统和内核中的潜在漏洞,如驱动程序的错误处理和内存管理等方面。
2. 应用程序:模糊测试可用于测试各种应用程序,如浏览器、媒体播放器和办公软件等。
软件测试中的模糊测试技术探索
软件测试中的模糊测试技术探索软件测试是确保软件质量和可靠性的重要环节。
在测试过程中,为了发现软件中的潜在问题和漏洞,测试人员采用了多种测试方法和技术。
其中,模糊测试技术成为了近年来备受瞩目的一种方法。
本文将探索软件测试中的模糊测试技术,并探讨其在实际应用中的优势和挑战。
一、模糊测试技术简介模糊测试(Fuzz Testing)是一种自动化测试技术,其思想是随机、大规模地输入各种异常、非法或不符合预期的数据,检测被测试软件在这些数据输入下的反应。
模糊测试可以帮助测试人员发现输入验证、缓冲区溢出、空指针引用等常见的软件漏洞。
模糊测试的基本步骤包括:选择输入数据的生成策略、生成模糊测试输入数据、执行模糊测试,对软件进行监控并记录错误信息,最后对错误进行归纳和分析。
二、模糊测试技术的优势1. 自动化程度高:模糊测试技术可以通过自动化工具实现,大大减少了测试人员的工作量。
测试人员只需要设计好测试用例的生成策略,然后交由工具自动生成测试用例和执行测试过程。
2. 发现潜在漏洞:通过模糊测试,可以发现软件中潜在的漏洞和缺陷。
由于模糊测试输入的随机性和不确定性,使得测试人员可以在较短时间内发现一些传统测试方法难以覆盖到的问题。
3. 提高软件质量:模糊测试能够帮助测试人员提前发现软件中的问题,并在软件发布前进行修复,从而提高软件质量和可靠性。
三、模糊测试技术的挑战尽管模糊测试技术在软件测试中有着诸多优势,但也面临一些挑战。
1. 输入空间巨大:现代软件的输入空间往往非常巨大,涉及到各种数据类型、格式和协议。
因此,对于复杂的软件系统来说,设计有效的模糊测试用例仍然是一个挑战。
2. 生成有效测试用例:模糊测试需要生成有效的测试用例,以确保能够有效地覆盖软件的不同功能和路径。
但是,如何设计生成有效测试用例的算法和策略是一个复杂的问题,需要测试人员有一定的经验和专业知识。
3. 错误信息分析:模糊测试生成的大量测试用例可能会引发大量的错误信息,如崩溃、异常等。
安全测试中的模糊测试技术介绍
安全测试中的模糊测试技术介绍安全测试是保障软件、网络和系统的安全性的重要工作。
在安全测试中,模糊测试技术是一种常用的测试方法,它通过输入异常、无效或随机的数据来检测系统的潜在漏洞和弱点。
本文将介绍模糊测试技术在安全测试中的应用和相关原理。
一、模糊测试的定义和原理模糊测试,又称为“fuzzing”,是一种自动化测试技术。
它通过向软件或系统输入异常、随机或无效数据,来触发潜在的漏洞和错误。
模糊测试的理论基础是黑盒测试,即对系统进行测试时,只关注输入和输出,而忽略内部的运行机制。
通过随机生成的数据输入系统,模糊测试可以发现一些未经详细检查的漏洞。
二、模糊测试的应用范围模糊测试技术广泛应用于软件、网络和系统的安全测试中。
它可以用于检测Web应用程序、操作系统、协议、文件格式、浏览器等等的安全问题。
由于模糊测试方法能够模拟真实世界中的攻击行为,因此它在发现和修复软件和系统漏洞方面起到了重要的作用。
三、模糊测试的步骤和方法在进行模糊测试时,一般可以遵循以下步骤和方法:1. 确定测试目标:确定需要进行模糊测试的软件、系统或网络组件。
2. 收集样本:收集已知可以引起问题的恶意样本或异常数据。
3. 构建模糊测试工具:根据测试目标和收集到的样本,构建适合的模糊测试工具。
4. 生成输入数据:使用模糊测试工具生成一系列异常、无效或随机的输入数据。
5. 执行测试:执行模糊测试,并监控系统的行为和结果。
6. 发现漏洞:如果系统在模糊测试过程中出现异常行为或崩溃,则可能存在潜在的漏洞。
7. 重新测试和验证:对于发现的漏洞,进行修复后重新进行模糊测试,确保问题已解决。
四、模糊测试工具的种类和特点模糊测试技术的应用离不开相应的工具。
以下是常见的模糊测试工具种类及其特点:1. Peach Fuzzer:这是一种强大的模糊测试工具,支持多种操作系统和编程语言,具有高度的可定制性和扩展性。
2. American Fuzzy Lop:它是一种用于C、C++、Rust和Go等编程语言的模糊测试工具,通过动态符号执行技术,有着较高的漏洞发现能力。
软件测试中的模糊测试方法
软件测试中的模糊测试方法在软件开发过程中,测试是不可或缺的环节。
而在测试中,模糊测试是一种被广泛应用的方法。
模糊测试通过输入各种随机的、异常的或无效的数据来评估软件系统的鲁棒性和稳定性。
本文将介绍模糊测试的定义、原理及方法,并探讨其在软件测试中的应用。
一、模糊测试的定义和原理模糊测试,又称为Fuzz测试、黑盒测试,是一种通过随机生成输入来评估软件系统的方法。
其原理是向被测试的软件系统输入非预期的、无效的或异常的数据,观察系统的反应并分析结果。
模糊测试基于以下两个假设:第一,软件系统的边界条件和异常情况处理可能存在问题;第二,攻击者可能利用这些问题来发动恶意攻击。
模糊测试的基本原理是构造输入数据,包括正常数据、异常数据和边界数据,并通过随机变异这些输入数据,以便尽可能地覆盖软件系统的各种情况。
通常,模糊测试通过以下几个步骤来实现:1. 构造种子输入: 首先,选择一组合适的种子输入,这些输入应该代表软件系统可能接收的各种输入。
例如,对于图像处理软件,可以选择不同类型和分辨率的图像作为种子输入。
2. 变异输入数据: 通过对种子输入进行变异生成多个测试用例。
变异方法可以包括随机更改字符、添加或删除数据、对输入进行格式化等。
3. 输入数据注入和执行: 将变异后的输入数据注入到被测试的软件系统中,并执行相应的操作,观察系统的反应和输出结果。
4. 异常与错误处理: 分析软件系统对模糊输入的处理情况。
观察系统是否崩溃、产生异常或者输出错误结果。
二、模糊测试方法在实际应用中,模糊测试有许多方法和技术。
下面介绍几种常见的模糊测试方法:1. 随机模糊测试(Random Fuzzing): 这是最简单和最基础的模糊测试方法。
它通过对输入数据进行随机变异来生成测试用例。
然后将变异后的输入数据注入到被测试的软件系统中,观察系统的反应和输出结果。
2. 边界值模糊测试(Boundary Value Fuzzing): 边界值模糊测试是一种将输入数据限制在边界情况的模糊测试方法。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
网络协议模糊测试
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.4Pop3模糊测试脚本
在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次。
<XX>-表示字符串,从用户控制的文本文件中获得预定义的,可变长的,以十六进制方式表示的字符串进行模糊测试。
6.5发送数据
创建一个可以有用户指定数据包中任何字节的值的裸数据包,由程序员来保证数据包符合RFC定义的结构,提供更好的细节控制能力,是的用户可以对协议头进行模糊测试。
6.6ProtoFuzz工具代码结构。