一种私有协议分析与识别方法

文档序号:7819177阅读:312来源:国知局
一种私有协议分析与识别方法
【专利摘要】本发明涉及协议通信【技术领域】,本发明公开了一种私有协议分析与识别方法,其具体为:步骤一:先将采用私有协议进行通信的客户端软件进行脱壳处理;再对原始程序进行反汇编;然后对其汇编代码中的关键函数进行动态调试;步骤二:抓取该私有协议的网络流数据,并按协议交互的不同阶段进行报文数据包分类,然后分别解析出每类报文数据包的字段结构;步骤三:对交互过程中的协议特征进行提取和归纳;其中:协议特征包括交互过程信息和报文数据包的字段结构特征;步骤四:利用步骤三中所得到的协议特征,设置协议识别的匹配表达式,对网络中获取到的流量进行识别。通过上述方法实现了私有协议的分析和识别。
【专利说明】 一种私有协议分析与识别方法

【技术领域】
[0001]本发明涉及协议通信【技术领域】,尤其涉及一种私有协议分析与识别方法。

【背景技术】
[0002]协议规范是进行网络通信的必要条件,也是网络安全技术和网络监管的基础,如模糊测试,漏洞挖掘,入侵检测,协议重用,流量审计等关键技术都依赖于协议的详细描述信息。当前互联网承载了、流媒体、网络游戏、文件共享等越来越多的新的应用,它们所使用的网络协议大多是未公开的。人们对这些私有协议开展了分析和识别研究,分析目标是恢复协议规范的报文格式和交互过程,并进一步利用所得到的协议特征进行识另I」,判断出具体的协议名称。
[0003]协议分析方面,最早的研究是1虹8匕11 86(1(106在2004年启动的?I项目中通过引入生物信息学的序列比对算法对目标协议的结构进行分析,但该算法对样本集数量有很高的要求。化1等人提出的'方法主要用于分析报文结构中用户参数、状态标识和长度等动态字段,但不对协议的完整结构进行分析。观察到报文结构解析是一个层次化的过程,逐层解析时通常有一些格式标识字段决定了子结构的解析方式,该团队进一步提出了以递归分类为核心的协议分析方案0^211161X1等人于2007年首次提出采用动态污点的协议分析方法,并设计了相应的原型系统?017810〖,该系统采用离线的方式对报文格式中的分隔符、定位符和关键字进行分析和识别。在?017810〖的基础上,
基于多次监控的分析结果,将所有格式相同的报文进行语义信息融合,从而提出了一种改进方案。国内的学者李伟明在?I的基础上,提出了自动化网络协议模糊测试的方案,采用类型匹配提取和多序列比对算法推断报文中的文本字段、二进制字段和长度字段,但由于没有考虑字段序号等约束语义,该方案并不能保证所生成的模糊测试数据绝对有效。何永君等人对基于指令序列的协议分析方法进行了研究,开发了在动态二进制分析平台0711肅01?10上的原型系统冊?诎。
[0004]协议识别方面,最早的方法是基于协议所使用的端口进行识别,但由于现在多数新出现的应用已经不再采用固定端口,该方法的准确率已经低于50%,识别算法的错误率高。2002年至2004年主要研究的是基于协议载荷内容特征的识别方法,通过详细分析目标应用协议,找出协议在交互过程中所特有的字段作为特征,再以此特征去匹配网络流进行识别。该方法虽然准确率高,但需要消耗大量的人力和系统资源去发现协议特征,工作量过于庞大。2007年以后,研究主要集中在将机器学习的方法引入到协议识别领域,利用对协议交互流量数据的机器学习过程辨别出协议之间的差异,然后利用这些差异性进行协议识另I」。该方法的准确率较高,而且可以解决大量标注数据的问题。值得注意的是,由于协议识别本质上是根据对协议规范的特征进行提取而实现的,因此对私有协议来说,协议分析是进行协议识别的基础。
[0005]当前针对私有协议分析和识别方法主要存在以下问题:
(1)协议分析和识别的准确性不高。由于当前的网络应用协议一般都比较复杂,现有的方法只能恢复出报文格式的少量信息,进而影响了协议识别阶段的准确性。
[0006](2)难以对加密协议进行分析和识别。现有方法主要针对私有的非加密协议进行分析,由于加密协议对协议载荷甚至字段结构等进行了加密处理,现有方法难以适用。
[0007](3)分析时所依赖的样本集数量较大,时空复杂度高。在对报文格式进行提取时,特别是对长报文的情况,字段结构的解析往往需要大量的报文样本集。而指令序列的分析方法由于指令较多,由此带来处理过程复杂,时间和空间需求较大。
[0008](4)缺乏完整的方法,难以对以后新出现的协议开展分析和识别。现有的方法大多只关注分析和识别流程的一个部分,没有提出整体的识别方法。此外,这些方法一般针对某种具体类型的协议进行分析,缺乏通用性。


【发明内容】

[0009]针对现有技术中的协议识别方法存在的不能识别私有的加密协议的技术问题,本发明公开了一种私有协议分析与识别方法。
[0010]本发明公开了一种私有协议分析与识别方法,其具体包括以下的步骤:步骤一:先将采用私有协议进行通信的客户端软件进行脱壳处理,得到脱壳后的原始程序;再对原始程序进行反汇编,得到该原始程序的汇编代码;然后对其汇编代码中的关键函数进行动态调试,从而得到该私有协议的报文类型的字段长度和构造特征;其中关键函数包括:1.报文数据包的构造函数;2.发送和接收报文数据包的函数;3.加密和解密函数;步骤二:抓取该私有协议的网络流数据,并按协议交互的不同阶段进行报文数据包分类,然后分别解析出每类报文数据包的字段结构;步骤三:对交互过程中的协议特征进行提取和归纳;其中:协议特征包括交互过程信息和报文数据包的字段结构特征;步骤四:利用步骤三中所得到的协议特征,设置协议识别的匹配表达式,对网络中获取到的流量进行识别。
[0011]更进一步地,上述脱壳的具体过程为:首先确定壳的类型;其次找出程序入口点,进而将内存中的进程数据抓取出来转存为文件格式,调整并对齐相对虚拟地址和文件地址;最后修复转存文件的输入地址表,形成最终脱壳后的原始程序。
[0012]更进一步地,上述步骤二中的协议交互的不同阶段具体通过以下的方式得到:对报文数据包进行聚类分析,通过提取报文数据包的字段结构特征将报文数据包归类为协议交互的不同阶段,从而明确该协议的交互过程有几个阶段。
[0013]更进一步地,上述报文数据包的字段结构特征具体采用递归聚类的解析方法得到。
[0014]更进一步地,上述递归聚类的解析方法具体为:首先对报文样本集进行基本块序列的划分,然后对同类型的基本块进行多序列比对,从而得到所有可能的子字段划分和特征标识,最后利用递归算法的回溯过程确定最有可能正确的字段结构划分,从而完成报文数据包结构解析和特征提取。
[0015]更进一步地,上述方法还包括在完成聚类分析后,进行污点数据的指令分析。
[0016]更进一步地,上述污点数据的指令分析的具体过程为:挑选出协议的每个交互阶段的一条报文数据进行标识,被标示的报文称为污点数据,然后利用对协议软件的动态调试的方法对这条数据的处理过程进行跟踪,利用协议实体本身的解析过程得到该报文的数据格式;其中对这条数据的处理过程所选取的指令包括软件的报文数据包接收函数和解密函数的指令。
[0017]更进一步地,上述步骤三具体为:根据步骤二得到的信息,进一步对协议特征进行提取和汇总;协议特征包括交互过程信息和报文数据包的格式特征,逐个对解析出的字段记录其特征,先记录下固定字段的特征,对可变的字段部分采用机器学习对其特征进行样本集的学习和挖掘,提取出与这些可变字段相关的信息。
[0018]更进一步地,上述步骤四具体为:首先根据报文数据包格式特征对数据流量进行筛选,忽略不符合该协议的报文数据包;然后在剩下的报文数据包中按照协议交互过程的特征进行判断,若网络流报文数据包的聚类符合交互过程,则属于目标协议,否则不属于目标协议。
[0019]通过采用以上的技术方案,本发明的有益效果为:该方法能通用地分析和识别私有的加密和非加密协议,弥补了以前的同类方法只能用于识别非加密协议的缺点,通过对加解密函数的分析,使得能够解密报文数据中的密文字段部分,从而将加密协议转化为难度相对较低的非加密协议进行分析。
[0020]可能行压缩和加密操作关键函数进行动态调试,该方法能有效地分析和识别不同加密程度的私有协议,适用于分析协议数据部分加密或全部加密的情况。该方法实现简单,准确性较高,并且具有分析和识别过程仅需要较少的网络流数据包的优点,按协议交互的不同阶段进行报文数据包分类,然后分别解析出每类报文数据包的字段结构,由于网络协议交互过程的种类有限,因此识别阶段只需要较少的报文数据包即可完成结果的识别。该方法提供了一套私有协议分析和识别的方法,能用于分析将来出现的私有协议。

【专利附图】

【附图说明】
[0021]图1为本发明的私有协议的识别方法的流程图。
[0022]图2为软件实体逆向分析及结果的流程图。
[0023]图3为网络流数据分析流程及结果的流程图。
[0024]图4为协议特征提取过程及结果的流程图。
[0025]图5为协议识别过程及判断结果的流程图。

【具体实施方式】
[0026]下面结合说明书附图,详细说明本发明的【具体实施方式】。
[0027]本发明公开了一种私有协议分析与识别方法,其具体包括以下的步骤:
步骤一:先将采用私有协议进行通信的客户端软件进行脱壳处理,得到脱壳后的原始程序;再对原始程序进行反汇编,得到该原始程序的汇编代码;然后对其汇编代码中的关键函数进行动态调试,从而得到该私有协议的报文类型的字段长度和构造特征;其中关键函数包括:1.报文数据包的构造函数;2.发送和接收报文数据包的函数;3.加密和解密函数。对于加密协议的分析,该步骤是得到协议数据字段划分及其特征的方法,通过该步骤至少可以解析出协议数据包中一部分数据字段的结构,比如长度和格式特征,一方面这可以为后续网络流数据分析(步骤二)中的整条协议数据的解析提供必要字段格式划分参考模板,从而帮助完成整条数据的协议格式规范标注。另一方面,所得到的报文类型和结构特征也可用于和后续抓取的实际的网络流数据包进行比对,提高协议格式恢复的准确性。这些经过比对后相符的协议特征就可以加入步骤三中所要提取的目标特征集,最终用于对以后获取的协议数据进行识别。步骤二:抓取该私有协议的网络流数据,并按协议交互的不同阶段进行报文数据包分类,然后分别解析出每类报文数据包的字段结构;步骤三:对交互过程中的协议特征进行提取和归纳;其中:协议特征包括交互过程信息和报文数据包的字段结构特征;步骤四:利用步骤三中所得到的协议特征,设置协议识别的匹配表达式,对网络中获取到的流量进行识别。本发明能够识别出私有的加密协议,弥补了以前的同类方法只能用于识别非加密协议的缺点。加解密函数是私有加密协议分析中最重要的部分,实验表明,多数加密协议的数据加解密部分和报文构造、发送和接受部分是相互独立的。对这类函数的分析使得解密报文数据中的密文字段部分,从而将加密协议转化为难度相对较低的非加密协议进行分析。
[0028]如图1所示的本发明的私有协议的识别方法的流程图。该方法主要包括如下四个步骤:步骤一、对协议实体进行逆向分析;步骤二、网络流数据分析、步骤三、协议特征提取和归纳;步骤四、协议流量数据识别。
[0029]步骤一:对协议实体进行逆向分析,获取协议数据处理的关键函数和交互信息。协议在运行过程中总是存在报文的交互过程,这具体是由协议实体负责完成的。在网络环境下协议实体主要是指该协议的客户端和服务器软件,由于服务器端软件不太容易获得,因此我们主要对协议的客户端软件进行逆向分析。逆向分析的主要工作内容有三个方面(如图2所示的软件实体逆向分析及结果的流程图):
(1)对软件进行脱壳处理。
[0030]对于目前大多数的网络应用软件,软件开发者一般都会对这些软件进行加壳处理。加壳的原理就是在原程序上附上一段额外的代码,采用某种算法对原程序进行压缩和加密,并改变程序的执行入口点。加壳后的软件代码变化很大,无法直接采用反汇编方式获取原程序的执行代码进行分析,因此必须进行脱壳。脱壳就是将加壳后的程序解压或者解密,使程序从原始入口点开始运行。脱壳的步骤首先是利用?210或者或者等查壳工具确定壳的类型。其次,根据程序实现语言的代码特征找出程序入口点,进而将内存中的进程数据抓取出来转存为文件格式,调整并对齐相对虚拟地址和文件地址。最后修复转存文件的输入地址表,形成最终脱壳后的原始程序。
[0031](2)对软件进行反汇编分析
得到脱壳的软件后,就可以利用10八?如等反汇编工具对软件进行反汇编,得到程序的汇编代码,然后进行分析。这里需要重点定位三类函数,一是报文数据包的构造函数,二是发送和接收报文数据包的函数,三是加密和解密函数,分析前两类函数,其目的是找出与之相关的函数调用关系以及所使用的操作系统接口函数等关键信息。第三类加解密函数是私有加密协议分析中最重要的部分,实验表明,多数加密协议的数据加解密部分和报文构造、发送和接受部分是相互独立的。对这类函数的分析使得解密报文数据中的密文字段部分,从而将加密协议转化为难度相对较低的非加密协议进行分析。
[0032](3)对关键函数进行动态调试。
[0033]利用10八?1?0工具提供的强大的动态调试功能,对这三类函数进行动态的跟踪调试,从而弄清协议产生的各种类型的报文数据包的构造过程和字段信息。其中较为重要的是跟踪协议对加解密函数的调用信息,找出密钥的产生和使用过程,从而进一步得到协议对加密后将要发送的报文数据包的信息。对这三类函数的动态调试可以得到协议的不同报文类型的字段长度和构造特征,并且可以用于分析私有的加密协议。
[0034]步骤二:抓取协议的网络流数据进行分析,获得协议的交互阶段以及报文字段结构的划分信息(如图3所示的网络流数据分析流程及结果的流程图X该步骤主要对网络流依次进行两种类型的分析,第一种是对这些报文数据包进行聚类分析,目标是通过提取这些报文数据包的字段结构特征将这些报文数据包归类为协议交互的不同阶段,从而明确该协议的交互过程有哪几个阶段,这也是协议的重要特征。比如对一个典型的网络即时通讯协议,交互的阶段可分为用户登录验证阶段和随后的聊天数据通讯阶段。实际中,由于报文数据包字段结构特征提取是一个逐层解析的过程,即子字段的解析由上一个级别的字段结构解析决定,因此我们主要采用递归聚类的解析方法。递归聚类的方法首先对报文样本集进行基本块序列的划分,然后对同类型的基本块进行多序列比对方法得到所有可能的子字段划分和特征标识,最后利用递归算法的回溯过程确定最有可能正确的字段结构划分,从而完成报文数据包结构解析和特征提取。第一种分析完成后,我们就可以开展第二种分析,即污点数据的指令分析。挑选出协议的每个交互阶段的一条报文数据进行标识(称为污点数据),然后利用对协议软件的动态调试的方法对这条数据的处理过程进行跟踪,利用协议实体本身的解析过程为我们得到报文的数据格式提供帮助,这其中我们选取的指令主要是软件的报文数据包接收函数和解密函数的指令。对于加密协议而言,该方法能发现软件解密函数的调用实施过程并获取到解密后的报文信息,从而适用于对加密协议的分析。与传统的网络流分析和指令分析方法相比,我们的方法有两个优点:第一,由于在对网络流量的报文进行递归聚类的分析阶段仅需要判断出报文属于哪一个协议交互阶段,而不同阶段的报文一般具有明显的特征差别,因此很大程度上降低了对网络流量报文数据包的样本集需求量。第二,指令序列并不需要该软件的全部指令,而只是重点关注接收函数和解密函数的指令。此外,对要分析的报文,仅仅是选择不同交互阶段的一个报文数据包进行分析,这就大大减少了需要调试和跟踪的指令数量,降低了实现的复杂度。
[0035]步骤三:对协议特征的进行提取和归纳(如图4所示的协议特征提取过程及结果的流程图根据步骤二得到的信息,进一步对协议特征进行提取和汇总。协议特征包括交互过程信息,比如交互轮数,每轮双方所发的报文数据包个数等,然后就是报文数据包的格式特征,我们逐个对解析出的字段记录其特征,先记录下固定字段的特征,对可变的字段部分我们采用机器学习对其特征进行样本集的学习和挖掘,从而提取出与这些可变字段相关的信息,比如可变字段的长度范围,取值范围等。由于给予机器学习的样本集已经是明确的某个交互阶段的报文数据包集合,因此可以采用有监督的机器学习方法。该方法利用同类型的网络流报文数据包作为训练样本集,并提取网络流数据的统计特征,得到的结果准确性高。在训练过程中,可以利用特征过滤或特征选择算法求出对协议识别最有效的特征组合,减少算法学习时所需要的数据量和执行时间,并能提高下一步进行识别的正确性。
[0036]步骤四:进行协议流量数据的识别。根据步骤三中所得到的协议特征,设置协议识别的匹配表达式,对网络中获取到的流量进行识别。整个识别过程如图5所示的协议识别过程及判断结果的流程图。具体为首先根据报文数据包格式特征对数据流量进行筛选,忽略不符合该协议的报文数据包。然后在剩下的报文数据包中按照协议交互过程的特征进行判断,若网络流报文数据包的聚类符合交互过程,则属于目标协议,否则不属于目标协议。由于网络协议交互过程的种类有限,因此识别阶段只需要较少的报文数据包即可完成结果的识别。
[0037]上述的实施例中所给出的系数和参数,是提供给本领域的技术人员来实现或使用发明的,发明并不限定仅取前述公开的数值,在不脱离发明的思想的情况下,本领域的技术人员可以对上述实施例作出种种修改或调整,因而发明的保护范围并不被上述实施例所限,而应该是符合权利要求书提到的创新性特征的最大范围。
【权利要求】
1.一种私有协议分析与识别方法,其具体包括以下的步骤:步骤一:先将采用私有协议进行通信的客户端软件进行脱壳处理,得到脱壳后的原始程序;再对原始程序进行反汇编,得到该原始程序的汇编代码;然后对其汇编代码中的关键函数进行动态调试,从而得到该私有协议的报文类型的字段长度和构造特征;其中关键函数包括:1.报文数据包的构造函数;2.发送和接收报文数据包的函数;3.加密和解密函数;步骤二:抓取该私有协议的网络流数据,并按协议交互的不同阶段进行报文数据包分类,然后分别解析出每类报文数据包的字段结构;步骤三:对交互过程中的协议特征进行提取和归纳;其中:协议特征包括交互过程信息和报文数据包的字段结构特征;步骤四:利用步骤三中所得到的协议特征,设置协议识别的匹配表达式,对网络中获取到的流量进行识别。
2.如权利要求1所述的私有协议识别方法,其特征在于所述脱壳的具体过程为:首先确定壳的类型;其次找出程序入口点,进而将内存中的进程数据抓取出来转存为文件格式,调整并对齐相对虚拟地址和文件地址;最后修复转存文件的输入地址表,形成最终脱壳后的原始程序。
3.如权利要求2所述的私有协议的识别方法,其特征在于所述步骤二中的协议交互的不同阶段具体通过以下的方式得到:对报文数据包进行聚类分析,通过提取报文数据包的字段结构特征将报文数据包归类为协议交互的不同阶段,从而明确该协议的交互过程有几个阶段。
4.如权利要求3所述的私有协议的识别方法,其特征在于所述报文数据包的字段结构特征具体采用递归聚类的解析方法得到。
5.如权利要求4所述的私有协议的识别方法,其特征在于所述递归聚类的解析方法具体为:首先对报文样本集进行基本块序列的划分,然后对同类型的基本块进行多序列比对,从而得到所有可能的子字段划分和特征标识,最后利用递归算法的回溯过程确定最有可能正确的字段结构划分,从而完成报文数据包结构解析和特征提取。
6.如权利要求5所述的私有协议的识别方法,其特征在于所述方法还包括在完成聚类分析后,进行污点数据的指令分析。
7.如权利要求6所述的私有协议的识别方法,其特征在于所述污点数据的指令分析的具体过程为:挑选出协议的每个交互阶段的一条报文数据进行标识,被标示的报文称为污点数据,然后利用对协议软件的动态调试的方法对这条数据的处理过程进行跟踪,利用协议实体本身的解析过程得到该报文的数据格式;其中对这条数据的处理过程所选取的指令包括软件的报文数据包接收函数和解密函数的指令。
8.如权利要求6所述的私有协议的识别方法,其特征在于所述步骤三具体为:根据步骤二得到的信息,进一步对协议特征进行提取和汇总;协议特征包括交互过程信息和报文数据包的格式特征,逐个对解析出的字段记录其特征,先记录下固定字段的特征,对可变的字段部分采用机器学习对其特征进行样本集的学习和挖掘,提取出与这些可变字段相关的信息。
9.如权利要求8所述的私有协议的识别方法,其特征在于所述步骤四具体为:首先根据报文数据包格式特征对数据流量进行筛选,忽略不符合该协议的报文数据包;然后在剩下的报文数据包中按照协议交互过程的特征进行判断,若网络流报文数据包的聚类符合交互过程,则属于目标协议,否则不属于目标协议。
【文档编号】H04L29/06GK104506484SQ201410628565
【公开日】2015年4月8日 申请日期:2014年11月11日 优先权日:2014年11月11日
【发明者】张李军, 吉庆兵, 于飞, 兰天, 陈曼, 刘丹, 罗杰 申请人:中国电子科技集团公司第三十研究所
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1