网络协议模糊测试
- 格式:docx
- 大小:118.89 KB
- 文档页数:8
模糊测试技术研究综述模糊测试技术研究综述一、引言随着软件领域的快速发展,软件测试已经成为软件开发过程中不可或缺的一部分。
模糊测试作为软件测试中的一种重要技术手段,越来越受到研究者和工程师的关注。
本文将对模糊测试技术进行综述,对其基本概念、原理和应用进行探讨,以及目前存在的问题和未来发展方向进行分析。
二、模糊测试的基本概念模糊测试(Fuzz Testing),也称为随机测试(Random Testing),是指以随机性为基础,对软件系统的输入进行测试的一种方法。
其基本思想是将随机生成的测试输入输入到被测软件系统中,然后观察是否能触发系统的错误行为。
模糊测试通常以一种黑盒测试的方式进行,即对软件内部的具体实现细节一无所知,仅关注其对输入的反应。
三、模糊测试的原理模糊测试的原理可以归纳为以下几点:1. 输入生成:模糊测试通过随机生成测试输入数据,其中包括对输入长度、格式、类型等进行随机性变异,以提高测试用例的覆盖率。
2. 输入注入:将生成的测试输入注入到被测软件系统中,模拟真实用户的输入动作。
3. 错误检测:通过监控被测软件系统的行为,识别是否发生异常或错误行为。
如果发现异常或错误,模糊测试算法将会记录测试输入,以便进行后续的深入分析和修复。
4. 演化策略:模糊测试通常采用一种演化策略,即根据之前的成功测试用例对新的测试输入进行变异和演化,以找到更多可能的错误和漏洞。
四、模糊测试的应用领域模糊测试广泛应用于软件安全领域,其中最为重要的应用领域包括以下几个方面:1. 操作系统和驱动程序:模糊测试能够发现潜在的漏洞和系统错误,提高系统的稳定性和安全性。
2. 网络协议和通信软件:模糊测试可以揭示网络协议和通信软件中存在的漏洞,帮助开发者及时修复。
3. 数据库管理系统:模糊测试可以测试数据库管理系统的各种操作,从而发现潜在的性能问题和安全隐患。
4. Web应用程序:模糊测试可以对Web应用程序进行安全测试,发现可能存在的漏洞,如跨站脚本攻击、SQL注入等。
软件测试中的模糊测试技术研究与应用随着互联网的快速发展,各种应用软件的涌现,软件测试工作变得越来越重要。
在软件测试中,模糊测试技术被广泛应用。
模糊测试技术可以通过生成模糊的、随机的输入对软件进行测试,有效地发现软件中的缺陷。
本文将介绍模糊测试的概念、实现方法以及其在软件测试中的应用。
一、模糊测试的概念模糊测试,也称为随机测试或基于输入的测试,是一种软件测试方法,它通过输入模糊且随机的数据来触发软件漏洞或异常,从而检测软件的缺陷。
在模糊测试中,测试工程师通过生成各种可能的随机输入数据,包括字符串、数字、二进制数据等,不断地向被测试软件发送输入数据,来触发软件中的错误。
这些模糊的输入数据对于软件的测试是非常重要的,因为它们能够覆盖大量的测试场景,并发现软件中的潜在缺陷。
二、模糊测试的实现方法在模糊测试中,生成模糊的输入数据是关键之一。
生成模糊数据有多种方法,包括随机生成、遗传算法、符号执行、混合生成等。
其中,随机生成是最简单、最常见的生成方法之一。
在随机生成方法中,输入数据由一个随机数生成器生成,然后通过一种特定的协议发送到被测试软件中。
另外一种方法是遗传算法。
遗传算法是一种基于自然界生态进化模型的搜索算法,在模糊测试中被广泛应用。
它通过某种适应度函数来评估测试用例的质量,然后再将优秀的测试用例进行组合,并对它们进行变异操作(增删字符、约束等操作),从而生成新的测试用例。
符号执行是对程序或代码的静态分析方法,它可以发现代码中的路径覆盖问题,同时可以生成最小测试用例集合。
在模糊测试中,符号执行的作用是在分析代码时,探索符号执行路径上的变量和条件约束,而避免了随机生成数据的过程。
混合生成方法则是以上几种方法的组合使用,利用几种不同的生成方法,来生成一些复杂的测试用例。
三、模糊测试的应用模糊测试技术被广泛应用于不同的领域和应用软件中,如应用程序、操作系统、网络协议和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.发送模糊测试数据:将构造好的模糊测试数据发送给目标协议实现,在目标系统中触发协议处理代码,进而导致潜在的漏洞条件。
4.监控目标系统的响应:通过监控目标系统的响应,收集协议处理过程中的错误提示、响应时间、内存占用等信息,判断是否发现潜在的漏洞条件。
5.分析测试结果:对模糊测试的结果进行分析,找出异常响应和错误信息。
可以使用调试工具进行代码跟踪,帮助识别和分析漏洞发现的原因。
6.进一步挖掘漏洞:对于发现的漏洞条件,可以根据其特点进一步挖掘漏洞,包括构造更复杂的恶意输入、模拟攻击行为等。
7.漏洞验证和修复:对发现的漏洞进行验证和修复。
验证漏洞的利用条件,尝试攻击目标系统,确认漏洞存在性和利用难度。
修复漏洞并改进协议的安全性。
1.不需要了解协议的具体实现细节:模糊测试方法不依赖于协议的具体实现细节,只需要了解协议的结构和字段定义即可进行测试,在没有协议实现的情况下也可以进行漏洞挖掘。
2.高效的漏洞挖掘:模糊测试可以生成大量的随机测试数据,并自动化地发送给目标,从而能够广泛地测试协议的处理代码,发现潜在的漏洞条件。
网络协议书模糊测试甲方(以下简称“甲方”):____________________乙方(以下简称“乙方”):____________________鉴于甲方为一家从事网络服务的公司,乙方为一家提供网络协议测试服务的公司,双方本着平等自愿、诚实信用的原则,就网络协议的模糊测试服务达成如下协议:第一条服务内容1.1 乙方应向甲方提供网络协议的模糊测试服务,包括但不限于对甲方网络协议的安全性、稳定性和兼容性进行测试。
1.2 乙方应确保测试服务的专业性、准确性和有效性,以帮助甲方发现并解决网络协议中可能存在的问题。
第二条服务期限2.1 本协议自双方签字盖章之日起生效,有效期为___年/月/日。
第三条服务费用3.1 甲方应按照本协议约定向乙方支付服务费用,具体金额为人民币(大写):__________________。
3.2 服务费用的支付方式为:__________________。
第四条保密条款4.1 双方应对在本协议履行过程中知悉的对方商业秘密和技术秘密予以保密,未经对方书面同意,不得向任何第三方披露。
4.2 保密义务在本协议终止后仍然有效。
第五条违约责任5.1 如一方违反本协议约定,应承担违约责任,并赔偿对方因此遭受的损失。
5.2 因不可抗力导致不能履行或完全履行本协议的,双方互不承担违约责任。
第六条争议解决6.1 本协议在履行过程中发生的任何争议,双方应首先通过友好协商解决。
6.2 如果协商不成,任何一方均可向甲方所在地人民法院提起诉讼。
第七条其他7.1 本协议的任何修改、补充均需双方协商一致,并以书面形式确认。
7.2 本协议一式两份,甲乙双方各执一份,具有同等法律效力。
甲方代表(签字):__________________ 日期:____年__月__日乙方代表(签字):__________________ 日期:____年__月__日。
网络协议模糊测试(共8页)--本页仅作为文档封面,使用时请直接删除即可----内页可以根据需求调整合适字体及大小--网络协议模糊测试1.网络协议模糊测试网络协议模糊器的测试对象主要是各类网络产品中的网络协议解析模块 ,目的是测试其在组装、解析网络协议过程中是否存在漏洞。
其思想是模糊器通过 Socket 与被测目标之间进行通信, 向被测目标应用发送变异或包含错误的模糊值, 并监视目标应用以发现错误。
使用网络协议模糊器进行模糊测试, 需要首先研究各类协议的规范和标准 ,以便创建合理的测试数据。
目前 ,最常见的网络协议模糊测试实施方案有两种 :方案Ⅰ为客户端和服务端测试模式, 即模糊器和被测对象分别为测试过程的两个端点。
此时, 模糊器可充当客户端的角色, 用来测试服务端程序的安全性, 例如 Web 服务程序。
同时 ,模糊器也可以充当服务端的角色 ,用来测试客户端程序的安全性. 模糊器中的监控模块用来对被测对象的行为进行收集、分析以判断是否存在异常情况。
方案Ⅱ网络协议模糊测试的实施方案是为了测试防火墙、路由器、安全网关等等部署在网络中间的设备。
模糊器构造的数据被发送至协议服务器的过程中, 位于模糊器和协议服务器之间的被测对象对其起到了重组和解析的作用 ,一旦重组和解析过程中出错,可能造成被测对象出现异常状态。
模糊器中的监控模块用来对被测对象的异常状态进行收集、分析,最终定位漏洞所在。
通过此方法可发现被测对象在网络协议处理过程中的安全漏洞。
2.测试对象理论上,潜在测试目标包括任何能够接受网络数据的任务软件。
OSI7层模型中从数据链路层到应用层每一层都有可能存在实现问题,再对测试目标进行全面审计时,每一层都要进行测试。
3.测试方法3.1强制(基于变异)模糊测试先使用嗅探器抓取合法的协议数据,随后对抓到的数据进行变异,将其发送给目标应用。
但在目标应用实现了基本回放攻击保护或协议包含校验码的两种情况下,这种模糊测试无法达到期望的测试效果。
第34卷 第2期2011年2月计 算 机 学 报CH INESE JOURNA L OF COM PU TERSVo l.34N o.2Feb.2011收稿日期:2010 04 16;最终修改稿收到日期:2010 12 15.本课题得到国家自然科学基金(60573120)资助.李伟明,男,1975年生,博士,讲师,主要研究方向为网络安全.E mail:lw m@.张爱芳,女,1978年生,讲师,主要研究方向为网络安全.刘建财,男,1985年生,硕士研究生,主要研究方向为网络安全.李之棠,男,1951年生,博士,教授,博士生导师,主要研究领域为系统结构、网络安全.网络协议的自动化模糊测试漏洞挖掘方法李伟明 张爱芳 刘建财 李之棠(华中科技大学计算机学院 武汉 430074)摘 要 随着网络应用越来越复杂和重要,对网络协议的安全性要求也越来越高.模糊测试(F uzz T esting)作为一种重要的测试手段,通过大量数据的注入来测试网络协议的安全,能够发现拒绝服务、缓冲区溢出和格式化字符串等多种重要漏洞.但是手工进行Fuzz T esting 需要精确了解网络协议细节并需要繁重的工作来构造大量测试数据集,导致覆盖率有限,效果也不好.为了解决这个问题,文中结合网络协议逆向工程和F uzz T esting 技术,提出了一种能够自动化识别各种网络协议并产生模糊器进行Fuzz T esting 的漏洞挖掘方法.这种方法通过报文分类、多序列比对、特定域识别、模糊器生成多个阶段,自动识别网络协议报文结构并进行Fuzz T esting.经过测试FT P 、T NS 、EM 、ISQ LP lus 等多种已知和未知网络协议,结果表明这种方法在漏洞挖掘方面效果超过手工分析,并显著提升了测试效率,为提高网络协议的安全性提供了良好的基础,具有重要的应用价值.关键词 协议逆向工程;模糊测试;漏洞挖掘中图法分类号T P 393 DOI 号:10.3724/SP.J.1016.2011.00242An Automatic Network Protocol Fuzz Testing andVulnerability Discovering MethodLI W ei M ing ZH A NG Ai Fang LIU Jian Cai LI Zhi Tang(S ch ool of Comp ute r Sc ienc e ,H ua zh ong Univ er sity of Sc ienc e and Te chnology ,W uhan 430074)Abstract Alo ng w ith the increasing co mplex ity of the netw ork application,netw ork pro to col se cur ity is now beco me more and mo re im portant.Fuzz T esting often is used to disco ver DoS,buff er overflow ,format string and other kinds o f serious v ulnerabilities of netw o rk pr otoco ls.But manually Fuzz Testing is very lo w effectiv e and need adequate detail inform ation abo ut the pro to cols.T he paper presents an auto matic vulnerability disco vering m ethod w hich combines auto matic Protocol Reverse Eng ineering technolog y and Fuzz Testing.The method is a four steps pr ogram,invo lving packets cluster ing,multiple sequences alig nment,special fields recognitio n and fuzzer pro duction,w hich find the structure o f netw ork packets and pursue Fuzz Testing.After testing FT P,TN S,EM and ISQLPlus protocols,the results show that this method is mo re effective and accurate than m anually analysis.T he m ethod is o f the important application v alue and can im prov e the security o f netw ork protocols.Keywords pr otoco l reverse engineering;fuzz testing ;v ulnerability discovering1 引 言网络协议只有安全的设计和实现才能保护用户传输的敏感信息.但是如何测试网络协议安全性一直是个非常困难的问题.特别是测试未公开网络协议(clo sed pro to cols)的安全性对于网络安全有着重要的意义,因为大量厂商并没有公开自己软件系统使用的网络协议细节,例如M icro Soft的网络文件共享SM B协议、Oracle数据库访问的T NS协议、各种IPT V和及时通信软件使用的协议.这些未公开网络协议在网络中被大量使用,一旦其未公开漏洞被攻击者利用,将产生巨大的危害.因此,本文提出了一种自动化识别各种网络协议报文结构并进行模糊检测(Fuzz T esting)的方法,能够找到协议中拒绝服务、缓冲区溢出和格式化字符串等多种重要漏洞,既可以避免手工测试带来的繁重工作和低效率,又能深入测试网络协议的安全性.本文第2节介绍网络逆向工程以及模糊检测漏洞挖掘方法的研究现状,并提出本文的总体思路和实现结构;第3节介绍数据报文分类方法;第4节详细介绍如何对未知网络协议进行识别,并对采用的多序列比对中的渐进比对和遗传算法进行比较,提出改进的渐进比对算法和优化的Needlem an Wunsch 算法;第5节则进一步介绍如何自动化识别网络协议的特定域;第6节描述如何将识别出的网络协议转化为Fuzzer,构造针对目标协议的模糊测试器;第7节是实验测试,通过具体数据分析自动化漏洞挖掘方法的有效性;第8节对工作进行总结和展望.2 介 绍在网络协议逆向工程领域,国内外进行了较为深入的研究,主要分为两个大的方向:一个方向是单纯利用网络流量来推测网络协议,这类方法也称为基于 Netw or k T race的方法;另外一个方向是对实现网络协议的服务器程序进行二进制的动态跟踪分析,通过跟踪二进制文件对报文的处理流程对报文进行解析,这种方法也称为基于 Tainted Data的方法.基于 Netw or k Trace的方法,典型的有2004年由M arshall Beddo e启动的 Pro to co l Infor matics pro ject分析未知或者未公开的网络协议的结构!.这个项目的目标是类比生物学从DNA中查找产生氨基酸的蛋白质的算法,通过对大量网络流量进行对比分析,最终分析协议结构.具体方法是首先读取目标协议的抓包文件形成序列集.然后通过局部序列比对算法计算这些序列之间的相对距离,形成距离矩阵.接着使用非加权成对群算术平均法(unw eig hted pair g roup method w ith arithmetic m ean),构造一棵向导树,实现序列的聚类,每一类中的序列被认为是具有很大相似性.最后,针对每一个聚类,利用渐进比对算法遍历系统树,完成多序列比对.根据比对结果,就可以区分固定不变的区域和动态改变的区域.但是这种方法仅仅提取了协议中的可变和不可变域,划分粒度很粗,同时分析结论也对流量的依赖性很强.另外,其聚类方法以LCS(Lo ng est Com mon Subsequence)匹配数量作为参考标准,因此无法区分和提取序列中相对简短的协议域.总之PI项目只是处于初步阶段,算法还很不成熟.2005年Cor rado Leita、Ken M ermoud和Marc Dacier提出使用PI项目改造H oney d,实现H o neyd 配置脚本的自动提取[1].文章的主要设计思路由4个步骤组成:首先从网络抓包文件中获取数据包的M essag e序列,然后分析这些序列,为每个请求维护一个状态机,记录客户端和服务器之间的信息交互过程.然而,此时的状态机没有进行任何的语义分析,不能完成实际的交互动作,因此需要优化状态机,最后完成脚本的自动生成.同样Cui和Paxson 等人提出了一种网络协议识别和自动恢复的解决方案RolePlayer[2].其设计思路是,在获取用户输入参数的条件下,通过分析少量样例数据流,采用算法定位终端信息(IP、host name)、用户参数、长度域、Cookie、任意域,然后根据这些信息生成交互脚本.此后,该系统根据这些脚本信息识别任意一段新的流量是否符合已经学习的协议,并且可以通过关键域替换,实现自动交互的效果.在另外一篇论文中[3],他们结合H oneyFarm和上面提到的Role Play er技术,实现了一种全新的恶意代码捕获框架GQ:所有进入的流量,首先进行匹配,如果发现是已知协议,则直接由Ro lePlayer响应,一旦发现未知协议,则将这些流量重定向到高交互蜜罐中并扮演代理服务器的角色,以便捕获到最新的恶意代码和恶意攻击.连续4个月的测试中,GQ捕获了66种不同的蠕虫,这充分说明,Ro lePlayer在GQ中确实发挥了重要而且有效的作用.但是这种方法没有分析协议结构,可变性不高,流量稍微有点变化就导致无法正常响应.在随后的研究中,他们引入了Disco ver 系统[4],试图从大量的网络报文中识别出同类型报文,然后分析报文格式,这种方法显然比Ro lePlayer 更加实用,但是文章缺乏对于Discover所采用方法的精确定义.2432期李伟明等:网络协议的自动化Fuzz T esting漏洞挖掘方法!Netw ork protocol analysis u sing b ioinform atics algorithms.http://w ww.4tphi.n et/~aw alter s/PI/PI.html,2004基于 Tainted Data的协议识别方法是建立在动态污点分析技术基础之上的.动态污点分析技术是近几年兴起的一种解决方案,它可以在二进制代码层实现对不可信数据的传播情况的跟踪和分析, Argo s[5]和T aintCheck[6]就是两个典型的实例.基于 T ainted Data的协议识别方法将所有网络传输数据作为不可信数据源,通过监控服务器处理这些不可信数据的流程,获取协议结构信息,因此其准确性要好于第一种方法.例如服务器程序在污点数据中搜索非污点数据 User name,那么就可以肯定污点数据中的 U sername是报文结构中的一个关键字.W ondracek详细描述了这种方法的机制[7]:利用网络报文作为输入的T ainted Data,在指令级对其进行监控,然后根据监控信息分析对应报文的语义特征.最后根据多次监控的分析结果,将所有相同格式报文的语义信息融合,提取出一个通用的报文结构.Caballero等人提出的Po lyglo t系统也是基于类似的思想实现的[8].Com paretti设计的Pr ospex[9]在引用以上方法识别单个报文结构的同时,也利用污点数据跟踪过程中获取的统计特征(包括系统调用特征、文件系统操作特征等)对报文进行聚类.此外,文中还引入状态机识别机制并简化,最终将客户机和服务器的交互过程以DFA的方式显示出来,达到解析交互流程和报文结构的目的.然而这种基于 T ainted Data的方法也存在一些限制:它需要得到服务器程序并让其在指定环境中运行;其次,跟踪复杂程序运行也会产生大量数据需要分析并且降低服务器性能.关于Fuzz Testing的研究也很活跃.Fuzz Testing 是一种通过外部输入数据影响内部程序执行的测试技术.它的基本原理是将尽可能多的可能导致程序出现问题的错误数据注入应用程序中,观察运行结果,通过观察和分析程序运行的错误来挖掘软件的脆弱点.Fuzz Testing看似简单并且需要大量数据和注入点,但它却能揭示出程序中的重要漏洞,而且通过Fuzz T esting挖掘到的漏洞通常都比较严重. Miller[10]用Fuzz Testing测试了大量的Unix程序,结果发现超过40%的命令行程序可以出现内存出错和死循环,同样超过40%的X Windo w s程序也会出错,显示了Fuzz Testing的有效性.在此基础上For rester[11]采用类似的方法对Window s GUI程序进行Fuzz T esting,测试数据注入点是键盘鼠标输入和消息,同样使21%的程序内存出错和24%的程序陷入死循环,说明了Fuzz T esting对不同平台程序都是有效的.现在Fuzz Testing已经发展成为一种模块化的测试方法,典型的软件是SPIKE[12]. SPIKE是Im munitysec公司的Dave A itel写的一个黑盒安全测试工具,主要可以测试应用程序输入和网络协议报文.微软的Godefro id Patr ice在Fuzz T esting方法中引入了白盒测试的方法,使得Fuzz 更加精确,覆盖率也更高[13].国内研究者张玉清教授分别对M P3播放器、TFTP客户端进行了Fuzz T esting[14 15].Fuzz T esting的主要问题在于它是一种盲注入的方式,手工进行Fuzz Testing工作量过大,甚至几乎无法进行比较全面的测试,导致Fuzz T esing的实用价值受到很大影响.本文提出的方法建立在这两个领域的研究基础上,提出一个适用于Fuzz Testing的网络协议自动识别的方法.由于Fuzz Testing需要输入大量数据,为了避免在服务器端产生过量的二进制执行信息,本方法基于 Netw or k T race,但是也引入了简单的服务器监控机制.重点在通过分析网络协议的报文,自动化精细识别网络报文中各个域,并推断其数据类型.然后根据域的划分,自动产生SPIKE所需的Fuzz T esting脚本,对每个域进行注入测试.测试过程中仅仅对服务器端运行结果进行监控,一旦发现服务器端出现拒绝服务或者溢出错误则记录相应的输入和输出.通过这种方式来发现网络协议设计和实现中的漏洞.经过对典型的公开和未公开网络协议的测试,证明这种方法是非常有效的,其主要的系统结构如图1所示.图1描述了本方法的核心流程.本方法主要部分都采用自动化的方法,但是需要一个手工截获报文的阶段,即使用Tcpdum p或者WireShar k等工具,截获网络协议的报文.这个阶段需要用户对网络服务多次使用(一般3~4次),然后将每次截获的报文保存到一个PCAP文件中,以多个PCAP文件作为自动化阶段的输入.这个阶段不需要进行协议识别或者测试工作,因此易于操作和实现.在自动化部分主要分为两个阶段:协议识别和Fuzz T esting.在协议识别阶段,首先采用类型匹配,将不同的PCAP 文件中同类型的报文序列提取出来,作为一个报文组.然后对这个报文组进行多序列比对,将不变域和可变域分离出来,得到一个初步的报文域划分.报文域识别模块再进行进一步的ANSII字符串域、U nicode字符串域、二进制域、长度域的识别,得到一个较为准确的报文格式.报文格式得到后,可以根244计 算 机 学 报2011年图1 系统结构图据此格式生成SPIKE脚本,由SPIKE根据脚本构造实际的报文对服务器进行测试.而服务器主要安装FaultMo n等监控软件,一方面监控内存使用情况,监控内存异常和系统服务状态;另外一个方面是记录被测试服务程序的异常和日志.通过这两个部分的信息,可以反推漏洞可能的类型和存在的位置.在这样的系统结构下,可以实现自动化地对网络服务器进行Fuzz T esting,测试网络协议在设计和实现上的安全性.3 报文聚类为了能够识别未知网络协议,首先需要人工对网络协议进行多次访问,每次访问为一个Session,每一个Session的报文都截获保存到一个PCAP文件中.为了提取同类型报文,需要对多个PCAP文件中的报文进行聚类,将相同类型的报文序列组成一个报文组,属于同一个报文组的报文被认为是网络协议中相同格式的报文,它们将被作为多序列比对算法的基本输入.具体方法为,提取PCA P文件中的非空负载报文,每个报文以各自原始序号标记,具有相同序号的报文作为一组.此时的报文组,并不能保证它们是相同类型的,因为考虑到网络传输中可能出现丢包、乱序等情况,甚至相同类型的数据包的内容也极有可能有很大差异.因此需要对每个报文组进行进一步分析.对每个报文序列的每个字节识别相应的类型,如果是可打印字符用∀A#表示,非可打印字符用∀B#表示,此时这个报文序列对应的类型就形成一个由若干∀A#、∀B#组成的字符串.考虑到字符串长度是可变的,我们将连续的∀A#合并成一个∀A#,如此形成一个新的序列,我们称这个序列为类型序列(T ype Squence).对类型序列进行聚类的算法如下.def cluster Sequences(ty peSquences)typeCo mpar e=Falsefor seq in t ypeSquences dofor byte in seq doif byte is not printable dotypeCompare=tr uebreakdonedo nedoneif ty peCompare domodel=GetH ig hestF requencyT y peM o del(ty peSquences) elsemodel=GetL ong estCommo nStr ing(ty peSquences)donefor seq in t ypeSquences doif!M at chM o del(model,seq)dotypeSquences.remo ve(seq)donedone算法判断如果是纯文本的协议通过查找报文之间的最频繁最长共同串(lo ng est co mmo n string),找到具有共同类型序列的报文.而具有不可打印字符的报文,说明不是纯文本协议,通过找到最频繁的类型序列,发现具有共同类型的报文,移除不符合要求的报文.4 多序列比对已有的多序列比对算法大体分3类:精确比对2452期李伟明等:网络协议的自动化Fuzz T esting漏洞挖掘方法算法、渐进比对算法和迭代比对算法[16].精确比对算法最为经典的是多维Needlman Wunsch 算法,但其可行的计算维数为3,Carrillo Lipman 算法通过减小计算空间,将计算维数提高到10.渐进比对算法由H o geweg 首先提出,Feng 和T aylor 又加以完善,被广泛使用的多序列比对软件包CLUSTA L W 就是基于渐进比对思想构建.近年来,迭代比对算法被越来越多地用于求解多序列比对问题,基于模拟退火、遗传算法、H idden M arkov M odel 、Gibbs 抽样等的多序列比对算法被广泛应用于多序列比对问题的求解.由于网络报文的多序列比对具有序列很长、报文数量多的特点,精确匹配需要大量的计算时间和内存空间,因此我们放弃了精确比对,主要考虑了基于序列长度的渐进比对算法和基于遗传算法的迭代比对算法.通过比较这两种算法,我们发现简单的基于序列长度的渐进比对算法在效果和效率上大大优于后者,所以最终选择渐进比对算法作为协议分析的多序列比对算法.在本节,分别介绍我们对这两种算法的改进,以及对两种序列比对算法的效果和性能测试.4 1 基于遗传算法的迭代比对算法本文利用基于遗传算法的多序列比对算法对多个数据包进行比对,得到反映这些报文共性和差异的比对结果.具体的遗传算法设计如下.目标函数.在序列比对结果中,每个序列插入的空位(Gap)数量越少越好,因此目标函数加大了对Gap 的惩罚力度,设多个序列为seqs ={s 1,s 2,∃,s n },经过遗传算法填充序列长度相等都为len,则SP (seqs)=%leni =1S PCol(s 1,i ,s 2,i ,∃,s n,i ),S PCol(c 1,c 2,∃,c len )=%i =leni =1%j=lenj =1,j!=iCmp (c i ,c j ),Cmp (c 1,c 2)=2,c 1=c 2&c 1!=gap-1,c 1!=c 2&c 1!=gap2,c 1!=c 2&(c 1=gap |c 2=g ap )-2,c 1=gap &c 2=gap(1)式(1)即为Sum of Pairs 目标函数的评分规则(简称SP ),注意如果遇到全部为Gap 的列,直接删除,不计算分数.可以看出,对于空位Gap 的限制比其它字符要大,因此,最终比对结果中出现的Gap 数量也相应减少.遗传算子.这里实现了9种遗传算子,假设每个个体包含N 个序列,下面分别简要介绍[17].(1)CrossOver .随机选择两个个体p 1和p 2,然后将p 1的前i 个序列和p 2的后(N -i)个序列进行组合,形成新的个体.(2)M utate .随机选择一个个体及这个个体中的一个序列,删除这个序列中所有的空格,然后随机插入相同数量的空格,形成新的个体.(3)LocalShuffle .随机选择一个个体及这个个体中的一个序列,将这个序列中的一个Gap 和相邻字符交换.(4)BlockShuffle .随机选择一个个体及这个个体中的一个序列,将这个序列中的一个Gap 和相邻字符串交换.(5)InsertGap .随机选择一个个体及这个个体中的一个序列,随机删除这个序列中的一个Gap 并随机插入一个Gap .(6)DeleteGap .随机选择一个个体及这个个体中的一个序列,随机删除这个序列中的一个Gap,并在序列末尾添加一个Gap .(7)U nion .随机选择一个个体及这个个体中的一个序列,将这个序列中两个相邻的字符串合并,即删除一个连续的Gap 串,然后在相邻字符串的左边或右边插入相同数量的Gap .(8)Division .随机选择一个个体及这个个体中的一个序列,将这个序列的一个字符串拆分,即随机删除一个Gap,然后随机插入一个Gap 到这个字符串中.(9)CleanU pGapColumn .检查是否存在全为Gap 的列,如果存在的话,将此列删除并在每个序列的末尾添加一个全为Gap 的列.动态退出流程.在遗传算法的实现中,所有序列的长度都是固定的(默认设置为最大长度的1 2倍).在编程实现中,采用轮盘赌算法随机选择SP 值比较大的个体进入下一代种群的演变.我们知道,轮盘赌算法中,对应的特征值不能为负值.但是根据以上算法计算的目标函数很有可能是一个小于0的整数.为了避免出现负值的现象,在进行轮盘赌选择的时候,需要将所有值转换为正值,然后进行选择.目前实现了9中遗传算子.但是这些遗传算子的一个特点在于,它们随机性较强,增加了种群的多样性,不过这也是它们的一个缺点,即如果进入一个246计 算 机 学 报2011年很差的解空间,有可能一直在这个空间内迭代,无法再优化.为了得到更优的结果,本文从每次产生的最优个体中提取免疫因子,通过免疫因子,产生新个体.实验测试表明,免疫算子可以在很大程度上优化比对的结果.在程序中增加实现了两种免疫算子:单一免疫因子和多免疫因子.单一免疫因子每次提取最优个体中最长的连续的相同的列作为免疫因子,产生新个体,而多免疫因子则提取最优个体中多个连续的相同的列为免疫因子,产生新个体.遗传算法测试.为了测试遗传算法在多个报文序列对比中的效果,本文设计了6组测试数据,每组数据包含4个相似的网络报文,对每组数据进行基于遗传算法的多序列比对,共测10次,取平均结果.表1为测试数据描述,表2左侧是不引入免疫因子的测试结果,右侧为引入免疫因子后的实验结果.表1 多序列比对数据报文组平均报文长度相似性描述1200字节左右每行大约0~10个字节发生不同2200字节左右每行大约10~20个字节发生变化3200字节左右每行大约0~10个字节发生变化,最后一个报文多10个字节4200字节左右每行大约10~20个字节发生变化,最后一个报文多10个字节5200字节左右每行大约0~10个字节发生变化,最后一个报文少10个字节6200字节左右每行大约10~20个字节发生变化,最后一个报文少10个字节表2 遗传算法测试结果普通遗传算法测试结果报文组平均SP值平均个体数量平均种群数量免疫遗传算法测试结果报文组平均SP值平均个体数量平均种群数量1793.346639.6446.511206.248839.4727.7 250048020.8448.82962.745829.7666.3 3353.352084.6494.23816.751674.6770.2 4-64.737862.4381.84695.352858.6775.2 5570.952065.8508.451096.857300.78296212.638786.7389.86906.570889.5985.9总体而言,遗传算法实现多序列比对还是存在一些不足.首先,遗传算法本身存在很大的随机性.即便是相同的序列,多次比对的结果也并不一定相同,最佳分析结果得到的SP值也较低.而在协议自动分析中,对序列比对结果要求极为苛刻,任何错误的比对,都将直接影响后续分析工作.此外,遗传算法消耗的时间相对比较长,当序列数量或者序列长度达到一定阈值之后,运行时间甚至无法忍受.因此遗传算法不适合用于协议自动分析的多序列比对中.4.2 基于序列长度的渐进比对算法渐进比对算法建立在二维N eedleman Wunsch 算法基础上,基于相似序列通常具有进化相关性这一假设,它的思想是通过迭代地利用双序列动态规划比对算法,先由两条序列的比对开始,逐渐添加新序列,直到所有序列都加入为止.但是不同的添加顺序会产生不同的比对结果.因此确定适合的比对顺序是渐进比对算法的一个关键问题.渐进比对算法主要由3个步骤组成:(1)计算距离矩阵;(2)构建向导树;(3)依据向导树进行渐进比对.针对报文序列比对的特点,我们实现了一种优化的N eedleman Wunsch算法.优化的Needleman W unsch算法.Needleman Wunsch算法属于动态规划算法,算法结束时通过回溯得到一个全局的比对结果,根据该比对的结果计算出的序列相似度值最大.算法有两个步骤:(1)根据状态转换函数计算两个序列的相似分值,得到一个相似度矩阵.(2)根据相似度矩阵,按照动态规划的方法回溯寻找最优的比对.核心的状态转换函数定义如下:M ij=maxM i-1,j-1+S ijM i,j-1+wM i-1,j+w(2)其中,M ij表示当前状态得分,S ij是字母匹配得分(如果不匹配就是罚分),w是加入空位的惩罚.因为空位不属于原始报文,为了保持报文长度和增加匹配的可信度,应该尽量少加入空位,所以我们设置字母匹配S ij得分为2,不匹配S ij罚分为-1,w=-2.这样的设置在大部分情况下有效,但是经典的Needleman Wunsch算法的每个状态仅仅基于上一个状态得到,没有考虑对于连续匹配进行奖励,因此可能出现为了避免增加空位导致不能对齐的现象.图2上侧截取了两个互相比对的报文中的部分序列,采用经典的N eedleman Wunsch算法匹配后,发现这两个序列没有正确地对齐字符串Referer:ht tp://192 168 1 1/,这是因为为了避免过多的插入空位,算法宁可选择字符串不匹配.那么最终得到的Fuzz Testing报文模板不会把这个部分作为不可变域,影响分析效果.因此我们修改了Needleman Wun sch算法的状态转换函数,增加对于连续匹配的奖励.M ij=m axM i-1,j-1+S ij+(n-1)&bM i,j-1+wM i-1,j+w(3)其中,n是连续匹配的字母数目,b为连续匹配奖励,2472期李伟明等:网络协议的自动化Fuzz T esting漏洞挖掘方法。
AFLNeTrans:状态间关系感知的网络协议模糊测试洪玄泉;贾鹏;刘嘉勇【期刊名称】《信息网络安全》【年(卷),期】2024()1【摘要】网络协议是现代通信系统中不可缺少的部分,其实现程序的安全性不容忽视。
模糊测试已经成为现代漏洞挖掘的主流方式,并在软件安全领域中取得了较大的成功。
网络协议模糊测试通常指对网络协议实现程序进行模糊测试,然而传统模糊测试在此类程序的测试上仍存在一些问题。
首先,由于网络协议实现程序中不同状态对应不同代码,传统灰盒模糊测试中使用的代码覆盖不能表示网络协议实现程序的内部状态。
其次现有灰盒协议模糊器中的状态引导机制依赖于代码覆盖率,不能很好地挖掘网络协议实现程序的状态间关系。
对此,文章提出了一种由协议状态间关系和程序代码覆盖率共同引导模糊测试过程从而提升模糊测试效果的模糊器AFLNeTrans,其利用状态间关系作为主要引导机制,引导模糊测试快速探索协议实现程序更多的状态空间,并在Profuzzbench上对其进行了评估实验。
实验结果表明,AFLNeTrans在发现状态转移数量上有较明显的提升,并且在代码覆盖率和unique_crash数量上相比现有工具也有提升。
【总页数】12页(P121-132)【作者】洪玄泉;贾鹏;刘嘉勇【作者单位】四川大学网络空间安全学院【正文语种】中文【中图分类】TP309【相关文献】1.基于模糊测试技术的网络协议安全性测试2.基于Q-学习算法的有状态网络协议模糊测试方法研究3.基于模糊测试技术的网络协议安全性测试4.体力活动水平在医学生压力感知与抑郁状态关系间的中介作用5.面向有状态网络协议的模糊测试优化方法因版权原因,仅展示原文概要,查看原文内容请购买。
tcp协议堆栈模糊测试方法
TCP协议堆栈模糊测试是一种针对TCP协议实现的漏洞检测技术,其基本原理是通过发送大量随机或者异常的数据包,来检测TCP协议堆栈的实现是否存在漏洞或者错误。
以下是TCP协议堆栈模糊测试的基本步骤:
确定测试目标:首先,你需要明确你要测试的目标系统,例如特定的操作系统或应用程序。
生成模糊测试数据:根据TCP协议的规范和目标系统的具体情况,生成大量的随机或者异常的TCP数据包。
这些数据包应该覆盖各种可能的情况,包括正常的、边界的、异常的等等。
发送模糊测试数据:将这些数据包发送到目标系统上,观察目标系统的响应。
如果目标系统崩溃、挂起或者返回异常结果,那么可能存在漏洞。
分析结果:分析目标系统的响应,确定哪些数据包导致的问题,然后根据这些信息推测可能存在的漏洞类型。
修复和验证:一旦发现漏洞,开发人员需要修复这个问题,然后重新进行模糊测试以验证漏洞是否已经被修复。
基于模糊测试的网络协议自动化漏洞挖掘工具设计与实现的开题报告一、课题背景网络安全一直是互联网发展过程中关注的重点,网络协议栈漏洞也是网络安全中一个重要的方面。
网络协议自动化漏洞挖掘工具是自动化挖掘协议栈漏洞的重要手段,其能够帮助安全研究人员快速发现网络协议的漏洞并进行修复。
现有的网络协议自动化漏洞挖掘工具大多是基于符号执行、模糊测试等技术进行漏洞挖掘,其中模糊测试是一种成本较低、易于实现的漏洞挖掘方法,具有广泛的应用价值。
二、课题意义随着互联网的发展,网络攻击日益增多,网络协议栈漏洞的挖掘和修复已经成为当前的重要课题。
网络协议自动化漏洞挖掘工具作为网络安全的辅助工具,能够帮助安全研究人员快速发现漏洞并进行修复,因此具有广泛的应用价值。
目前,国内外已有一些针对网络协议自动化漏洞挖掘工具的研究,例如AFL(American Fuzzy Lop)、Peach Fuzzer、Sulley等,但这些工具大多只考虑了网络协议的语法规则,没有考虑网络协议的语义规则和协议栈环境因素,因此存在一定的局限性。
本课题旨在基于现有的网络协议自动化漏洞挖掘技术,结合网络协议的语义规则和协议栈环境因素,设计和实现一种高效、准确、可靠的网络协议自动化漏洞挖掘工具。
三、研究内容本课题的主要研究内容包括以下方面:1. 基于模糊测试技术的网络协议自动化漏洞挖掘算法设计:设计一种能够针对网络协议进行模糊测试的自动化漏洞挖掘算法,该算法应该考虑网络协议的语法规则、语义规则和协议栈环境因素,以提高漏洞挖掘效率和准确率。
2. 实现网络协议自动化漏洞挖掘工具:基于设计的算法,实现一个高效、准确、可靠的网络协议自动化漏洞挖掘工具,该工具应该能够自动化地生成测试用例,并能够自动化地运行测试用例以发现潜在的网络协议漏洞。
3. 漏洞挖掘效果评估和对比:对设计的漏洞挖掘工具进行漏洞挖掘效果评估和对比实验,评估结果应该能够客观、全面地反映出漏洞挖掘工具的优点和局限性。
网络协议模糊测试
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工具代码结构。