基于网络协议的模糊测试工具设计*
2019-12-04巫忠跃易冬阳
赵 鑫,巫忠跃,易冬阳,付 枭
(成都国信安信息产业基地有限公司,四川 成都 610000)
0 引 言
随着互联网的不断发展,计算机网络已经成为人们工作和生活不可或缺的部分。网络协议起到了重要作用,是计算机网络中进行数据交换建立的规则、标准或约定的集合[1]。网络协议是计算机网络的基础,也是计算机网络中各信息系统、信息设备、各通信实体信息交换正常运作的前提。然而,由于协议定义和协议实现的复杂化,程序开发人员在编写协议处理程序时,时常会出现不当的假设和不正确的逻辑处理,造成不断有基于网络程序的漏洞被发现。例如,2018年思科高危漏洞CVE-2018-0171被黑客利用,国内多家机构配置文件被清空,即通过此漏洞,攻击者无需身份验证即可远程执行任意代码,实现对该设备的完全控制;360公司Vulcan团队发现区块链平台EOS的一系列高危安全漏洞。经证实,可利用部分漏洞在EOS某一节点上远程攻击,最终控制和接管EOS上运行的所有节点。由于区块链网络去中心化的计算特点,一个节点出现漏洞很可能引发成千上万的节点遭到攻击,对整个数字货币系统造成巨大的安全风险。
网络安全事件表明,具有安全漏洞的网络设备、生产系统和应用系统一旦开始投入运行,当安全漏洞被利用后,会给个人、企业带来不可估计的损失。另外,安全漏洞的分析和修补会影响甚至中断业务的正常运转,致使修复代价较高。因此,良好状态是产品部署之前就发现其中的潜在漏洞。
协议测试是保证一个标准化协议的不同实现之间能够成功进行通信的关键技术,也是基于协议的设备、软件和系统正常运转的关键技术。协议测试有4个内容,分别是:一致性测试,检查协议实现与协议规范是否一致;性能测试,检查协议实现的性能指标,如连接时间、执行速度、吞吐量等;互操作性测试,检查协议实现在各个版本之间的互连操作性和互通能力;安全性测试,检测协议实现在遭受攻击时行为是否正确。国际标准化组织ISO制订的国际标准ISO/IEC 9646,描述了基于OSI七层参考模型的协议测试过程、概念和方法,并在实际协议测试过程中起到了指导作用。但是,在实际网络环境中,由于存在着各式各样的数据报文,甚至人为构造的攻击报文,因此触发安全漏洞的可能性更高。本文以协议测试4个内容中的安全测试为重点,着重研究基于网络协议的模糊测试方法,将数据变异方法和FSM模型引入模糊测试工具设计中,实现网络协议的自动化测试。
1 基于网络协议的模糊测试研究
1.1 概述
模糊测试是一种发现程序漏洞的方法,正逐渐被安全研究者应用和推广。例如,微软公司的产品在正式推向市场之前,有20%~25%的安全漏洞是通过模糊测试发现的[2]。基于网络协议的模糊测试,主要原理是通过Socket与被测目标之间进行通信,向被测目标发送变异或包含错误的数据包,监视目标以发现缺陷。测试过程中的关键是遵守各类协议的规范、标准和状态机制,产生具备有效模糊测试数据的测试用例,同时监视并记录被测试目标的响应或是异常情况。
基于网络协议的模糊测试,用于发现和分析网络协议在实现时存在的漏洞和缺陷时,相较于漏洞分析方法中的静态和动态分析方法,模糊测试具备许多优点。
(1)误报率低。静态分析技术是一种白盒分析技术,需对目标的源代码进行全面分析检测。静态分析过程主要是找到不正确的函数调用及返回状态,特别是可能未进行边界检查或边界检查不正确的函数,以及可能造成缓冲区溢出的函数、共享内存函数等。此方法的特点是注重代码“特征”,不验证应用程序功能逻辑。因此,静态分析结果数据量较大、误报率高。模糊测试不关心被测目标的内部实现细节和复杂程度,与被测目标是动态交互关系,程序的缺陷在测试过程中表现形式多样,可被记录与重现,因此误报率低。
(2)可结合动态分析技术定位缺陷。动态分析技术需在调试器中运行目标程序,通过观察执行过程中目标程序的运行状态、内存使用状况以及寄存器的值等发现目标缺陷。目标程序在执行过程中异常出现时间的不确定性,使监控和分析点的定位变得困难。模糊测试可结合动态分析技术定位缺陷位置。在模糊测试过程中,当目标程序出现异常时,可提取出现异常的用例重新执行,完成动态分析的预判工作,确定目标程序异常的出现,从而定位缺陷所在位置。
1.2 测试过程与测试环境搭建模型
网络协议的模糊测试过程根据被测目标不同,测试的具体操作步骤存在差异。例如,通过与被测目标的交互点的分析和选择,Web网站可使用爬网工具分析其所有的URL地址入口,Windows应用程序则可结合静态分析方法查找入口点。但是,从总体上看,测试过程可分为5个步骤[3]。
(1)确定输入与输出的目标:确定测试目标是测试的第一步。当被测目标确定后,才可以根据被测目标的特点选取正确的分析方法,确定与目标程序的交互点。
(2)产生模糊测试数据:分析目标在协议实现时的数据输入和输出,产生尽可能覆盖代码所有路径的输入数据,是进行有效模糊测试的关键一步,也是模糊测试向自动化、智能化发展与研究的重要方向。
(3)执行测试数据:测试数据准备完成后,将数据发送给被测试目标。此过程的执行也与被测目标相关,需选择正确的自动化执行工具。
(4)监测目标异常:测试过程中,监视异常是一个非常重要但经常被忽视的步骤。由于模糊测试产生的数据包数据量非常大,目标异常的定义具有多样性。当被测目标出现不响应、崩溃、CPU使用100%或是返回数据不正确时,若无法确定哪个数据包是真正引发服务器崩溃的原因,那么整个测试过程都没有意义。实时监测和记录目标程序的运行,能找到引发目标程序异常的测试数据,从而重现异常。
(5)确定其利用性。当目标异常被准确定位后,确定其利用性不是模糊测试的必要步骤。此步骤一般通过手工完成,需依赖测试人员安全领域丰富的相关经验。
完成上述测试步骤的典型测试环境搭建模型,如图1所示。
图1 典型测试环境搭建模型
基于网络协议的模糊测试环境搭建模型是典型的客户端和服务端测试模式。在服务端,被测目标一般有两类:一类是应用软件程序,如在线视频音乐软件、聊天工具、在线办公工具以及各类不同用途的网站等;另一类是网络设备,如防火墙、交换机、路由器等。在客户端,可部署测试数据产生、协议分析、异常监控等测试工具。模糊测试工具通过Socket与被测目标之间进行通信,向被测目标发送变异或包含错误的数据包,监视目标以发现缺陷。
1.3 测试数据生成
优化模糊测试数据生成方法,提高模糊测试数据对被测目标程序代码的覆盖宽度和深度,是模糊测试研究的重点和难点。目前,已有的模糊测试数据生成方法主要有3种。
(1)随机生成。随机方法简单地将产生的大量伪随机数据输入目标软件,能否触发异常、发现漏洞有很大的运气成分。此种方法产生的畸形数据包数量巨大,数据包的产生时间和被测目标响应的时间急剧增长,时间和设备资源被耗费,测试的时间不可评估,不能达到发现缺陷的目的。
(2)基于样本的变异。基于样本变异的生成方法从一个有效的协议样本开始,持续不断地打乱或修改数据包的每一个字节、字、双字。这是一个数据生成相当早期的方法,几乎不需要事先对被测目标进行任何研究,实现相对简单直接,模糊测试工具只需要将篡改后数据传送给目标,监视和记录测试结果。此种方法与随机生成的方法相同,具备低效性,测试目标对协议格式提供了各种类型的验证,如完整性通常采用校验和哈希值进行验证。这些验证机制将会给模糊测试带来障碍,大量的测试数据因为不能通过验证机制而被直接丢弃,造成测试的无效性。
(3)基于生成和变异的方式。基于生成和变异的方式需要进行前期的研究以理解协议规范。测试前先创建一个描述协议规范的语法模板,在识别数据包中的静态字段和动态字段的前提下,识别可以被模糊的字段。用于分析和变异的协议样本数据,保持静态数据值不变,被识别为可模糊的字段发生修改,动态字段根据协议模板的计算规则计算对应的值,如字段长度、校验和等。这种数据生成方式减少了无效数据包的产生,因而具有更高的效率,但也存在许多不足之处。根据网络协议相邻的数据包内容是否相关,可把协议分为无状态协议和有状态协议。有状态的协议相邻数据包之间具有上下文关联性。例如,RTSP协议从会话初始到会话终止会有一系列相关状态的变化,被测目标可能在一个特定的状态才会存在漏洞。因此,针对有状态协议,基于生成和变异的方式产生的测试数据无法适应测试目标对相邻数据包之间上下文关联性的验证。此外,此种方式还将耗费测试人员大量时间研究协议规范和制作协议模板。
1.4 测试工具情况
经过长期的研究与发展,模糊测试的方法和工具都有了快速发展。其中,Peach是最具有代表性并受到测试工作人员广泛关注的模糊测试框架。它提供了方便的数据构造与变异功能,不仅可以对报文格式规范进行测试,而且初步支持基于协议状态机的测试,很大程度上可以提高模糊测试数据的有效性。它的测试对象包括文件系统、程序API以及协议等。测试者需根据Peach的格式规范,自行编写测试脚本来驱动此框架进行测试。
与Peach类似的框架式工具还有SPIKE、Sulley等。它们都以模糊数据的生成工作为重点,并以多种方式对测试数据进行变异及延伸。这些框架提供对软件程序、网络协议、操作系统等几乎所有可测试对象的支持,同时规定了一系列驱动脚本的编写规范。这些规范通常包含较多条目及严格的格式要求。测试者除了要学习测试目标的技术规范外,还要熟练掌握每一种需要使用的测试工具脚本的编写规范,导致协议测试的预备工作量增大,并拖延了实际的测试工作。
本工具设计提供给用户协议状态机图形建模界面,测试人员可以不再关注测试脚本繁琐冗长的语法结构,通过拖拽图形生成协议的状态模型,提高测试的工作效率。同时,工具设计实现了可配置参数的数据生成策略,依据模糊数据产生的本质,对协议模型中数值类型的字段使用对数函数取值的变异方法,对字符串类型的字段使用字符替换和宽度变换的变异方法,并支持双字段同时模糊的方法。工具使用时,所有的变异方法可根据协议特点配置参数,从而使得生成的模糊数据具备一定的畸形度和覆盖宽度,提高了协议模糊测试的有效性。
2 系统框架设计
2.1 总体构架
工具总体技术构架,如图2所示。工具的运行环境为Window 7,运行框架为.net FrameWork 3.5,采用C#语言开发。Microsoft .NET Framework是适用于Windows的新托管代码编程模型。它将强大的功能与新技术结合起来,用于构建具有视觉上引人注目的应用程序,实现跨技术边界的无缝通信,并且支持各种业务流程[4]。此外,.NET Framework3.5具备与Windows 7的无缝集成,无需额外安装其他组件的特点,因此是工具技术框架的首选。
图2 工具总体技术构架
工具的测试构架组件包含人机交互界面、协议分析器、协议状态机、执行器、变异器、监视器以及日志记录器7个部分。工具各组件间的工作关系如图3所示。
如图3所示,工具的使用以人机交互界面为起点,主要包括协议模型管理、模糊策略管理、协议状态机管理、测试执行管理、监视与分析以及日志管理6个主要的可视化界面。用户可以以直观、简洁的方式构造出待测目标的协议模型、状态机模型和策略模型,并分别为后端协议分析器、变异器、协议状态机运行提供驱动脚本。协议模型包含待测目标数据格式的信息;状态机模型包含待测目标状态转换信息;策略模型包含测试数据生成的方法和参数。3种模型均使用Json格式文件存储,实现图形界面向协议分析器、变异器以及协议状态机的相互转换。Json是一种基于对象表示法的数据交换格式,用于不同平台、系统或对象之间的交换数据。它独立于编程语言,使用一种在许多编程语言中都能找到共同元素的表示法,并具备可移植性[5]。所以,Json格式文件非常适用于存储协议模型、状态机模型和策略模型,并作为组件间数据交换的格式。
图3 工具各组件间的工作关系
协议分析器用于解析和校验协议格式规范,包含协议字段类型、字段长度、字段间相互关系等信息,并具有计算字段长度、校验值等协议相关计算值的计算能力。协议分析器同时具备正向和逆向协议格式解析能力,可将变异后的模糊测试数据的计算值字段重新计算,也可将从执行器收到的协议数据包解释成类似PCAP文件的格式,方便用户阅读和分析。
变异器根据策略模型生成基于字段变体的模糊测试数据。变异器的策略模型具备可替换的参数脚本和样本文件。参数脚本包含可变异的字段总数以及变异字段的长度、范围、类型、初始值和变异范围。样本文件包含的内容是由用户定义或是工具本身已经定义的一组数据。例如:变异字段类型是字符串,值为“A11B11C11”,变异样本提供的数组为 {“%”,“&”,“@#”,“@*&”,“0”,“232”},跳变长度为3,跳变位置修改次数为2,那么变异器会从变异样本中先后随机抽取3次值如“@#”“%”“0”将初始值替换为“@#11%11011”,然后根据跳变位置修改次数为2,重复第1次变异的步骤。本工具变异器的设计是一种折中方式,变异细节和复杂程度由用户提供的策略控制,以此改进完全随机的变异和模糊测试数据过多的问题。
协议状态机是各个组件联合工作的核心,控制整个测试流程如何进行数据发送和数据接收等行为。通常情况下,网络协议规范定义两方面内容——数据包内部的格式规范和数据包之间的时序规范。因此,协议的测试也是基于这两个方面展开的。协议分析器解决了协议测试数据包内部的格式规范问题,协议状态机解决了数据包之间的时序规范问题。由协议分析器、协议状态机、变异器协同工作产生的测试用例,能有效提高协议测试所能达到的深度和广度。
执行器是测试工具发送和接收数据的I/O接口。执行器设计支持5种类型的I/O接口,分别是发送和接收带有IP头的raw IPv4数据包、发送和接收带有IP头的raw IPv6数据包、发送和接收TCP数据包、发送和接收UDP数据包、发送和接收HTTP数据包。协议分析器、协议状态机、变异器以及执行器4个模块协同运行,在有效的规则下产生随机测试数据,并将这些数据作为输入发送给待测目标,因此也可以一起合并称为“产生引擎”。
工具的监视器可分为两种。一种与测试工具同时运行,在本框架设计过程中作为工具组件的一部分,采用侦察包确认法,即当执行器向被测目标发送一组畸形测试数据后,再引入一个正常的“侦察包”,通过观察分析被测目标对侦察包数据的响应情况来监控被测目标的运行状态。例如,被测对象是Web服务器时,使用HTTP协议交互,执行器可以在发送完一组畸形测试数据后向被测目标发送一个“Http Get”请求侦察包,并确认在发送下一组畸形数据包之前收到一个回应,以判断被测目标系统是否已经在畸形报文作用下出现异常。默认情况下,Web服务器应针对请求返回Http状态码。如果被测对象对侦察包的响应不符合RFC的标准[6],则可进行重点分析。另一种情况,当无法利用测试目标响应的方法监测目标对象时,本框架设计采用调试跟踪法监测被测目标异常,借助WinDbg工具查看进程运行状态和内存地址等内容。
日志记录器、监视器可合并叫做“监控引擎”。后台监控引擎可以通过日志的方式记录待测目标的异常信息,以协助用户定位产生异常位置,从而修复该错误。
从工具各组件间的工作关系可以看出,各组件在设计上采用了面向对象的设计方式,人机交互界面、协议分析器、协议状态机、执行器、变异器、监视器以及日志记录器等组件,各自完成组件内的功能,之间的协作依靠Json格式的参数文件进行交互。因此,各组件的可重用性、移植性较强。
2.2 关键技术实现
2.2.1 协议模型的设计与实现
协议模型可以使用手工输入和PCAP文件导入两种方式定义。PCAP文件的导入可实现协议模型的辅助输入、字段长度以及校验和等动态字段,用户仍需分析协议特点,定义其计算规则。
协议模型模板包括字段类型(数值类型、字符串类型、引用类型、计算值类型)、字段长度、字段的值类型(十六进制、十进制、二进制)以及字段计算值规则(数据包长度、指定目标长度和CRC校验码,工具包含CRC8、CRC16、CRC32、CRCCCITT共4个常用的CRC校验方法)。可自定义规则函数,编写动态链接库,利用Windows内核文件“kernel32.dll”加载非托管动态链接库实现函数的调用。定义完成的协议模型,系统使用Json格式文件存储,并使用Json.Net[7]类库中JsonConvert.SerializeObject和JsonConvert.DeserializeObject方法,实现对象的序列化和反序列化。
2.2.2 变异器的设计与实现
变异器的实质是对协议模型中数值类型和字符串类型的协议字段进行变异和模糊处理,测试工具支持双字段同时模糊处理,在具体设计中重点考虑模糊次数的有限性,确保模糊测试的有效性。
(1)数值模糊的方法
数值模糊根据协议中的数值字段的初始值确定变异范围。例如,数值字段的初始是100,那么变异范围在初始值-50和+50的范围内,即在闭区间[50,150]内取值。为保证区间内取值的非线性变化,取值函数使用对数函数y=logax+b(a≠1),变异范围对应函数曲线上的点的Y轴坐标值,如图4所示。
图4 数值变异取值函数图形
实现的方法步骤如下:
①根据数值字段初始值V,确定变异范围[V-50,V+50];
②确定变异函数y=logax+b(a≠1);其中,a和b使用伪随机算法获得,以确保变异策略多次运行可产生不同的变异值。
③通过已确定的变异函数,使用变异范围[V-50,V+50]的边界值V-50、V+50和公式x=ay-b(a≠1)计算x的取值范围[X1,Xn]。
④根据设定的变异次数C={5,10,50,100},计算x在[X1,Xn]范围内的取值。例如,C=5,计算步径L=[Xn-X1]/5,那么x的取值分别是{X1,X1+L,X1+2L,X1+4L,Xn}。
⑤最后根据确定的变异函数,计算Y值,即为最后的变异值。
使用对数函数的取值方法可保证模糊数据具有一定的变化速度和覆盖宽度。
(2)字符串模糊的方法
字符串模糊的方法主要采取字符替换和宽度变换,或将两种方式结合使用的方式模糊已知的初始字符串。
字符替换需结合样本文件实现。用户可选择使用测试工具本身具备的样本文件,也可以自定义输入。例如:当初始字符串值为“A11B11C11”,用户提供变异样本数组为{“%”“&”“@#”“@*&”“0”“232”},跳变长度为3,跳变位置修改次数为2。那么变异器会从变异样本中先后随机抽取3次值如“@#”“%”“0”将初始值替换为“@#11%11011”,然后根据跳变位置修改次数为2,重复第一次变异的步骤。
宽度变换指对已知的初始字符串做长度的倍数增加。例如:当初始字符串值为“A11B11C11”,长度倍数是3,那么变异后的字符串共有2个,分 别 为“A11B11C11A11B11C11A11B11C11” 和“A11B11C11A11B11C11”。当字符替换和宽度变换方法结合起来进行字符串变异时,变异器先执行宽度变换,后对执行宽度变换后的字符串进行字符替换,因此字符替换和宽度变换结合的方式进行字符串变异。单字段变异需执行的次数是(m-1)*m,其中m是宽度变换设定的字符串长度倍数,取值范围(1≤m≤50,m是整数);n是字符替换跳变位置修改次数,取值范围(1≤n≤50,n是整数)。
(3)双字段模糊的方法
单字段变异产生的测试数据对多点触发型漏洞无能为力。测试工具支持双字段模糊测试,以增加测试数据的覆盖范围。当定义变异器策略模板时,可定义多个可模糊的字段。例如:定义策略模板时,定义5个可模糊测试的字段。变异器在执行字段变异时,任意取2个字段进行模糊测试。这时字段选取的次数等于组合数C=C25。根据字符串模糊方法和数值模糊方法可以得到,单字段模糊的最大执行次数是(m-1)*n=2 450,其中m=50,n=50。因此,双字段模糊的最大执行次数MAXC=Cj2*2 4502,其中j的取值范围为(j≥2),表示协议的可变异字段数量。从网络协议的定义来分析,协议的字段数量是有限的,因此双字段模糊的最大执行次数MAXC也是有限的。在本工具中设计实现双字段模糊是可行的。
学生从题干出发,多从运输距离和运输重量来分析运费成本进行分析,而图中没有具体运输重量,难以计算。最终根据运输距离推断,O点到原料M1、M2产地和市场距离距离相等,这说明M1、M2这两种原料对工厂的影响相等,即原料指数相等。当M1、M2和产品的重量都为1个单位时,将工厂建在这三者的中间,使之到三地的距离相等,这时的运输费用会最低,据此可推断选项D正确。这样讲解学生对原料和产品重量没有直观的认识,理解存在一定困难。
2.2.3 协议状态机的设计与实现
协议状态机决定了测试工具应该如何进行工作。当测试一个协议时,状态机需要重建一个基本的状态逻辑。使用拖拽的方式在可视化界面编辑多个状态节点之间的相互转换,建模使用的工具栏包括4个图形,分别是开始、结束、状态和状态转移,如图5所示。协议状态机每个状态节点可包含若干个操作、状态转移条件和跳转动作。这个设计与有限状态机(Finite State Machine,FSM)设计包含的3个要素——状态操作(状态对应的操作)、跳转判断(状态跳转的判断条件)和状态跳转(现态跳转到次态)相一致。
图5 状态机定义界面
协议状态机定义的5种操作类型分别是start(开始)、startListen(开始侦听)、startListen(结束侦听)、sendData(发送数据)、receData(接收数据)、changeState(改变状态)和end(结束)。其中,开始和结束操作是系统默认的操作,不需要显示的定义;开始侦听和结束侦听需成对定义,可出现在不同的状态节点中。针对发送数据操作和接收数据操作,需包含对应的协议模型和模糊策略模型,指导状态机、变异器和协议分析器共同协同工作。
3 试验分析
本次试验测试目标为Uplus FTP Server 1.7.0.13。Uplus FTP Server是一款轻量级的FTP文件服务端软件,支持标准的FTP协议,提供FTP文件传输服务,运行平台为Windows系列操作系统。此次试验按照模糊测试流程对Uplus FTP Server软件进行模糊测试,并分析该软件对FTP协议实现时存在的漏洞。
3.1 试验步骤
3.1.1 安装测试目标,分析目标协议,确定测试入口点
在Windows 7操作系统下正常安装并配置启动Uplus FTP Server 1.7.0.13,开放端口21。使用客户端工具连接访问,登录成功后查看Uplus FTP Server软件支持的命令。如图6所示,FTP服务端访问正常。
图6 查看FTP服务端工具指令
访问Uplus FTP Server的客户端包含42个有效指令,完成整体测试应针对42个入口点。本次试验选择user、mkdir、delete以及cd做为测试入口点。在客户端运行Wireshark抓包软件,监控目标软件的登录、创建目录、更改目录、删除目录以及退出5个步骤,查看发送和收到的数据包,截取部分图片如图7所示。
分析得出FTP的数据报文格式,如图8所示。
图7 USER指令的数据包内容和格式
图8 FTP的数据报文格式
根据FTP的数据报文格式,在控制字保持不变的情况下,内容字段做模糊处理。变异的初始数据使用第一个分析步骤中WireShark软件所抓数据包,变异方法分别使用字符替换和宽度变换,针对user、mkdir、delete以及cd合计8个用例流程。
3.1.3 执行用例
选择测试工具执行器的发送和接收TCP数据包IO接口,配置被测目标的IP和端口,执行测试用例。
3.1.4 过程监控
user、mkdir、delete以及cd命令执行成功后,均有返回信息到客户端。因此,在用例流程设计时不用引入额外的侦查包监控服务端运行情况,使用测试工具已设计的日志工具模块完成过程监控与记录。
3.2 试验结果
本次试验共运行了8个用例,选择被测目标支持的user、mkdir、delete以及cd共4个指令进行模糊测试,其中7个用例执行完成、1个失败。失败的用例日志记录如图9所示。
图9 运行失败日志
有日志可以看出,失败的用例测试使用的指令是mkdir,初始变异样本值是200个“Z”。当发送指令内容部分长度超过400个字节时,被测目标正常返回响应代码550,拒绝访问;当发送指令内容部分长度超过4 000个字节时,被测目标停止返回响应代码,此时观察被测目标发现,被测目标已终止服务。最后,重新手工启动Uplus FTP Server服务端,再次运行此用例,结果和第一次运行结果保持一致。因此可得出结论:被测目标Uplus FTP Server软件在FTP协议实现时存在潜在漏洞,可导致FTP服务崩溃,漏洞严重程度较高。如需要进一步分析确定漏洞的利用性,可在FTP服务器部署WinDbg工具,使用动态分析法确认漏洞类型和位置。
4 结 语
本文对“网络协议模糊测试工具”的总体构架和关键技术方法做了详细设计与分析,但是面对网络协议的快速发展和安全漏洞层出不穷的形势,仍然存在两方面内容需要进一步优化和研究。
(1)知识智能获取。工具使用协议和状态机图形建模界面替代手工编写测试脚本,为测试人员测试工作提供了便利。但是,建模前首先需要对目标协议的内部格式规范和时序规范进行深入学习与研究,在知识获取的基础上创建协议模型和状态机模型,并识别协议中的可变字段。这种协议测试方式测试结果的有效性很大程度依赖于测试人员的经验,因此工具需继续研究对于一个网络协议如何自动生成对应的协议模型和状态机模型,即知识的智能获取。
(2)模糊数据生成策略优化。工具从本质上使用了基于生成和变异的方法产生模糊测试数据。具体实现上,对协议模型中数值类型的字段使用对数函数取值的变异方法,对字符串类型的字段使用字符替换和宽度变换的变异方法,并在一定范围内引入了多维模糊测试技术,但仍需在初始变异样本选取时进行优化改进,在测试过程中智能筛选出有效初始样本,使得最小测试用例集合能够覆盖最大的执行路径,以发掘隐藏较深的协议漏洞,进一步提高协议测试的有效性。