一种网络协议漏洞挖掘方法

文档序号:7553193阅读:689来源:国知局
专利名称:一种网络协议漏洞挖掘方法
技术领域
本发明涉及一种网络协议漏洞挖掘方法,特别涉及一种基于特征数据动态变异的网络协议漏洞挖掘方法,属于软件工程和信息安全技术领域。
背景技术
模糊测试作为一项著名的漏洞挖掘技术,已经能成功的在许多大型软件中挖掘漏洞、查找bug。模糊测试的思路很简单:生成变异数据并且输入到需要测试的应用程序中,如果程序出现异常或者崩溃,则说明该应用程序存在一个潜在的漏洞。如今,已经有很大数量的软件漏洞是由模糊测试的方法挖掘出来。
在网络协议漏洞挖掘方面,也已经有许多运用模糊测试的原理,进行漏洞挖掘的方法及工具。主要有两类,一类是针对具体网络协议的专用测试工具,比如针对TFTP协议的fuzz工具、针对P2P协议的fuzz工具等;另一类是针对未知网络协议的,主要通过程序自动生成测试数据,或者通过截获原始数据进行变异生成测试数据。
目前这部分网络协议漏洞挖掘技术均存在一些缺点,由于网络协议一般都会设计数据有效性检测,比如校验算法、加密算法等,而且如今新设计的网络协议普遍开始使用多级校验或者动态加密算法。使得大量数据包因为无效而丢弃,导致现有的模糊测试工具对目标协议的测试覆盖范围很窄,效率甚低。而现在一些模糊测试方法,为了解决该问题,也仅仅复现目标协议的校验算法,仍采用生成或者截获数据的方式进行变异。操作过程复杂,对于复杂的校验算法复现难度太大,覆盖范围很窄,并且无法检测具有多重校验或者动态加密算法的网络协议。发明内容
鉴于上述问题,提出了本发明以便提供一种克服上述问题或者至少部分解决上述问题的针对未知网络协议的漏洞挖掘系统和漏洞挖掘方法。特别是当未知网络协议存在多级校验以及动态加密算法等安全机制的情况下,本发明依然能对目标网络协议进行有效测试。
本技术的提出,是利用采用未知网络协议的软件本身的客户端,绕过其未知网络协议的多级校验以及动态加密等安全机制,直接针对核心部分进行模糊测试,使得漏洞挖掘的覆盖范围更加全面深入。
本发明所提出的一种网络协议漏洞挖掘方法,其步骤包括:
步骤1,配置针对目标客户端程序的正常数据输入模块。
步骤2,配置针对目标服务端程序的异常状态监控模块。
步骤3,构造一个具有特征码的正常数据(即特征数据),使用步骤I中的模块输入到目标程序。
步骤4,通过劫持系统调用,挂起目标程序,扫描目标客户端程序的内存空间,记录特征数据的数量、偏移位置,同时记录目标程序已执行系统调用的次数。
步骤5,重新执行目标客户端,根据步骤4中记录的系统调用次数,挂起目标程序,并修改所记录偏移地址的内存数值,对该内存数值进行动态变异。
步骤6,继续执行目标程序,通过目标客户端程序的后续发包流程,将数据发给服务端。使用步骤2中的监控模块进行结果监控。
步骤7,结果记录,当达到记录条件,记录变异数据方式以及发送的数据包内容,并且报告一个潜在漏洞。重新执行程序,重复步骤5、6,直到5中动态变异数据的情况全部尝试完成或者监控模块监控到异常行为,则结束。
进一步的,上述步骤I中,在配置客户端输入模块时,对控制台程序,使用命名管道通信的方法。在Windows系统中,使用系统函数CretePipe、ReadFile、WriteFile等系统调用,将系统输入,通过管道传递给目标客户端;对瓜界面程序,采用系统消息的方法,在Windows系统中,使用SendMessage等系统调用,将系统输入,通过消息传递给目标客户端。
进一步的,上述步骤2中,在配置服务端异常状态监控模块时。
I)定时扫描系统进程列表,当目标进程不存在时,视为严重异常。
2)劫持系统异常调用,当目标程序调用系统异常时,视为物理异常。
3)对控制台程序,采用管道通信的方法,扫描目标程序输出;对瓜界面程序,采用系统钩子的方法,监听目标程序输出。如果目标程序输出符合异常条件,视为逻辑异常。
进一步的,上述步骤5所述进行内存动态变异时,使用内存操作函数,修改对应的偏移位置中内存数值。变异时采取偏移地址由小到大,变异数值由小到大的方式,避免重复变异。
进一步的,上述动态变异方法,是按字节长度,对内存中原始值通过某种替换,变成一个新数据。该变异共有5种可选方式。
I)简单变异:快速的变异方法,对于需要快速检测的固定数据位,采用简单变异。即将该数据位直接替换为一个固定非原始值,如0x11。
2)简单随机变异:快速的变异方法,对于需要快速检测的固定数据位,且不确定其原始正常值,可以采用随机简单替换。方法I和方法2适合具有漏洞概率较小的数据位,比如原始值全是O的数据位,一旦有漏洞也可以通过这两类简单替换挖掘出来。
3)普通变异:实用的变异方法,普通漏洞都能够通过该变异挖掘出来。即将原始值分别替换为:原始值加1、原始值减1、0、255等4个数。
4)重点变异:较全面的变异方法,适用于数据值取值规律不确定的情况。将原始值替换为2~0-1到2~16-1,共17个数。
5)完全变异:最全面的变异方法,同时也是速度最慢的变异方法。对于重要性很高的数据位,可以采用完全替换方式进行变异,即替换从0,到255共256个数。


图1为本发明的实例的漏洞挖掘系统结构图。
图2为本发明的实例的漏洞挖掘系统流程图。
具体实施方式
为了更好的说明本发明的目的和优点,下面结合附图1和附图2,更详细的描述本发明的具体实施方式
。本实施实例以已经开发完成的一套漏洞挖掘系统附图1作为工作系统,该系统分为客户端控制器10和服务端控制器20。并且以北京理工大学BFS实验室开发的BFSERP管理系统为漏洞挖掘目标,给出详细的实施方式和操作步骤,但本发明保护范围不限于本实施例。
BFSERP管理系统分为客户端12,服务端22。主要功能有学生管理、考勤、评分、周报、通知、聊天等等,其网络通信协议是基于TCP\IP协议,具有多次校验,并且基于AES对网络数据进行动态密钥的数据加密。使用本发明能够更全面的加强其安全性能。
主要实施步骤如下:
步骤I,配置针对BFSERP客户端12的数据输入模块11。
在配置客户端输入模块时,需要针对客户端不同情况,采取不同的接口方法:对于控制台程序,使用命名管道通信的方法。在Windows系统中,使用系统函数CretePipe、ReadFile, WriteFile等系统调用,将系统输入,通过管道传递给目标客户端;对Π界面程序,采用系统消息的方法,在Windows系统中,使用SendMessage等系统调用,将系统输入,通过消息传递给目标客户端。由于本例中的BFSERP客户端12为UI界面程序,所以采用系统消息的方法,将特征数据通过系统消息,输入到BFSERP客户端12中。
步骤2,配置针对BFSERP服务端22的异常状态监控模块21。通过步骤I和步骤2,后续循环过程不需要人工干预,完全由系统自动完成。
目标程序异常状态一共有系统进程关闭,调用系统异常,目标程序异常输出等三种异常现象。因此针对三种不同的异常情况,采用三种不同的异常监听方法进行检测。
I)定时扫描系统进程列表,当BFSERP服务端进程不存在时,视为严重异常。2)劫持系统异常调用,当BFSERP服务端调用系统异常时,视为物理异常。3)对控制台程序,采用管道通信的方法,扫描目标程序输出;对瓜界面程序,采用系统钩子的方法,监听目标程序输出。由于BFSERP服务端为控制台程序,所以采用管道通信的方法,使用CreatePipe创建命名管道进行通信,然后使用ReadFile读取BFSERP服务端所输出的内容。通过判断其输出的内容是否正常输出,作为检测条件,如果BFSERP服务端输出符合异常条件,视为逻辑异常。
步骤3,构造一个具有特征码的正常数据,比如构造一个输入字符流为tAInT,作为输入数据中一部分。特别指出该字符流,以二进制形式存在,并非一定要可见字符。只是为了方便手工调试,这里使用了 Ascii码作为特征码。将具有特征码的特征数据,通过系统消息发送函数SendMessage,输入到BFSERP客户端。
步骤4,通过劫持系统调用,挂起目标程序,扫描目标客户端程序的内存空间,记录特征数据的数量、偏移位置,同时记录目标程序已执行系统调用的次数。具体操作流程为:
I)设置触发条件为执行SendMessage次数3次和拷贝特征数据次数3次。
2)采用线程注入的方法,劫持目标客户端所使用的系统调用,在执行SendMessage接口之后,挂起目标线程。
3)使用系统的内存操作函数ReadProcessMemory扫描内存,记录扫描结果中特征数据的数量、偏移位置信息。继续执行目标线程,直到BFSERP客户端进程中特征数据的数量大于或等于3个,或者步骤2中已执行的系统调用SendMessage3次。
4)将系统调用执行次数信息和特征数据的数量、偏移位置信息,发送给系统动态变异模块13进行处理。
特别指出,具体劫持的系统调用函数选择,以及系统调用次数和特征数据拷贝次数都与具体实例相关,本发明保护范围不限于此。
步骤5,重新执行BFSERP客户端,根据步骤4中记录的SendMessage调用次数,挂起BFSERP客户端进程。并由动态变异模块13修改步骤4中所记录偏移地址的内存数值,对该内存数值进行动态变异。
使用内存操作函数WriteProcessMemory,修改对应的偏移位置中内存数值。变异时采取偏移地址由小到大,变异数值由小到大的方式,避免重复变异。其中变异方法是按字节长度,对内存中原始值通过某种替换,变成一个新数据。该变异共有5种可选方式。
I)简单变异:快速的变异方法,对于需要快速检测的固定数据位,采用简单变异。即将该数据位直接替换为一个固定非原始值,如0x11。
2)简单随机变异:快速的变异方法,对于需要快速检测的固定数据位,且不确定其原始正常值,可以采用随机简单替换。方法I和方法2适合具有漏洞概率较小的数据位,比如原始值全是O的数据位,一旦有漏洞也可以通过这两类简单替换挖掘出来。
3)普通变异:实用的变异方法,普通漏洞都能够通过该变异挖掘出来。即将原始值分别替换为:原始值加1、原始值减1、0、255等4个数。
4)重点变异:较全面的变异方法,适用于数据值取值规律不确定的情况。将原始值替换为2~0-1到2~16-1,共17个数。
5)完全变异:最全面的变异方法,同时也是速度最慢的变异方法。对于重要性很高的数据位,可以采用完全替换方式进行变异,即替换从0,到255共256个数。
本实例中,首先对所有数据位采用简单随机变异,检测完毕后,再采用普通变异的方式重新检测一遍。
步骤6,恢复BFSERP客户端进程,通过目标客户端程序的后续发包流程,将数据发送给BFSERP服务端。并使用步骤2中配置的监控模块进行结果监控。由于客户端控制器与服务端控制器,并不一定位于同一主机,所以客户端控制器,需要给出变异信息给服务端控制器进行记录。主要变异信息有,变异时间是在执行第几次系统调用时,变异方法是通过什么方法,用哪个数据,替换哪个数据位的值,得到的结果。
步骤7,结果记录模块23进行结果记录。当BFSERP服务端出现异常现象时,达到记录条件,记录此时变异数据方式以及发送的数据包内容,并且报告一个潜在漏洞。重新执行BFSERP客户端程序,重复步骤5、6,直到步骤5中动态变异数据的情况全部尝试完成或者监控模块监控到异常行为,则结束退出。
权利要求
1.一种网络协议的软件漏洞挖掘方法,其特征在于,所述方法包括以下步骤: 步骤1,配置针对目标客户端程序的正常数据输入模块。
步骤2,配置针对目标服务端程序的异常状态监控模块。
步骤3,构造一个具有特征码的正常数据(即特征数据),使用步骤I中的模块输入到目标程序。
步骤4,通过劫持系统调用,挂起目标程序,扫描目标客户端程序的内存空间,记录特征数据的数量、偏移位置,同时记录目标程序已执行系统调用的次数。
步骤5,重新执行目标客户端,根据步骤4中记录的系统调用次数,挂起目标程序,并修改所记录偏移地址的内存数值,对该内存数值进行动态变异。
步骤6,继续执行目标程序 ,通过目标客户端程序的后续发包流程,将数据发给服务端。使用步骤2中的监控模块进行结果监控。
步骤7,结果记录,当达到记录条件,记录变异数据方式以及发送的数据包内容,并且报告一个潜在漏洞。重新执行程序,重复步骤5、6,直到5中动态变异数据的情况全部尝试完成或者监控模块监控到异常行为,则结束。
2.根据权利要求1所述的方法,其特征在于,步骤4中挂起目标客户端程序的方法及步骤为: O设置触发条件为,执行系统PostMessage调用次数η和拷贝特征数据次数m。
2)采用线程注入的方法,劫持目标客户端所使用的系统调用,在执行i次系统调用之后,挂起目标线程,记录此时已执行的系统调用的次数i。
3)使用系统的内存操作函数扫描内存,记录扫描结果中特征数据的数量、偏移位置信息,继续执行步骤2,直到特征数据的数量大于或等于步骤I中所设置的拷贝次数m,或者步骤2已执行的系统调用次数i大于或等于步骤I中所设置的系统调用次数η。
4)将系统调用执行次数信息和特征数据的数量、偏移位置信息,发送给系统动态变异模块进行处理。
3.根据权利要求1所述的方法,其特征在于,步骤I中所述配置客户端输入模块方法为: 1)对于控制台程序,采用管道通信的方法,将输入传递给目标客户端; 2)对于Π界面程序,采用系统消息的方式,将输入传递给目标客户端。
4.根据权利要求1所述的方法,其特征在于,步骤2中所述配置服务端异常状态监控模块方法为: O定时扫描系统进程列表,当目标进程不存在时,视为严重异常。
2)劫持系统异常调用,当目标程序调用系统异常时,视为物理异常。
3)对控制台程序,采用管道通信的方法,扫描目标程序输出;对瓜界面程序,采用系统钩子的方法,监听目标程序输出。如果目标程序输出符合异常条件,视为逻辑异常。
5.根据权利要求1所述的方法,其特征在于,数据变异的时间,处于程序外部输入之后、内部数据包封装之前的中间动态运行时,跳过客户端程序的输入检测以及异常处理过程,同时通过客户端的加密、压缩、校验等流程与服务端通信。
6.根据权利要求1所述的方法,其特征在于,数据变异的时间,处于程序外部输入之后、内部数据包封装之前的中间动态运行时,跳过客户端程序的输入检测以及异常处理过程, 同时通过客户端的加密、压缩、校验等流程与服务端通信。
全文摘要
本发明公开了一种针对网络协议的漏洞挖掘方法,其步骤包括1构造一个具有特征码的正常数据并输入到目标客户端。2劫持系统调用,挂起目标客户端进程,记录特征数据的偏移位置。3对内存中的特征数据,进行动态变异。4继续执行目标客户端进程,使得变异后的特征数据通过目标客户端的发包流程,发送给目标服务端。5监测目标服务端状态,如果监测到异常状态,则记录异常和变异信息,并报告一个安全漏洞。与现有技术相比,本发明可以大大提高未知网络协议的漏洞挖掘效率。
文档编号H04L29/06GK103209173SQ201310075248
公开日2013年7月17日 申请日期2013年3月8日 优先权日2013年3月8日
发明者罗森林, 郭亮, 潘丽敏, 闫广禄, 张弛 申请人:北京理工大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1