一种基于扩展前缀树的私有协议报文格式推断方法与流程

文档序号:13619745阅读:298来源:国知局

本发明涉及网络技术领域,尤其是一种基于扩展前缀树的私有协议报文格式推断方法,该方法能够依据同类报文在结构和语义上的相似性,推断私有协议的报文格式。



背景技术:

协议规范是对网络协议语法、语义以及同步等信息的具体描述,在网络安全领域扮演着重要角色。僵尸网络中,攻击者使用c&c(commandandcontrol)协议来控制存在漏洞的主机实施分布式拒绝服务攻击,网络管理员需要依据c&c协议规范来发现和分析僵尸网络。入侵检测领域,需要基于协议规范从繁杂的网络流量中辨识出恶意流量。在模糊测试过程中,需要利用协议规范指导测试用例生成以实现高效的自动化漏洞挖掘。

实际的网络环境中有大量私有协议存在。所谓私有协议,就是协议规范没有进行公开的网络协议。例如,微软使用的网络文件共享smb(servermessageblock)协议,oracle数据库访问的tns(transparencenetworksubstrate)协议以及微信、qq、飞秋等即时通信软件所使用的协议都没有公开协议细节。大量恶意软件也会采用自定义的私有协议实现网络通信。这些私有协议在网络中的广泛使用,给网络安全防护带来了极大的阻碍。

对于私有协议而言,目前主要通过协议逆向分析方法获取其协议规范。依据分析对象的不同,逆向分析方法可分为两类:基于网络流量的分析方法和基于指令执行轨迹的分析方法。基于网络流量的分析方法对截获的网络数据流进行分析,通过生物信息学、统计分析、数据挖掘等方法,对报文样本进行聚类分析,依据相同格式报文在取值上的相似性,分析获取协议语法、语义信息,并利用报文间的时序关系推断协议状态机。基于指令执行轨迹的分析方法以协议解析过程中的指令执行轨迹为分析对象,将协议输入数据作为污点数据源,利用动态污点分析方法跟踪数据解析过程,依据协议解析程序如何使用污点数据以及相应的上下文信息获取协议规范。

基于指令执行轨迹的分析方法通常具有较高的准确率,能够获得更全面的语义信息,但这类分析方法的实施需要分析人员拥有协议终端的可执行程序,并要求依据协议解析环境进行分析,依赖于底层平台,无法移植,通用性不强,还需操作人员具备较高的专业水平。基于网络流量的分析方法以网络数据流为输入,虽然其准确率依赖于捕获样本的丰富程度,但实现灵活,适用于各种应用场景,便于实施自动化分析。

目前国内外已有一些基于网络流量进行私有协议报文格式推断的研究成果。pi(protocolinformation)项目引入了生物学中的多序列比对算法,通过将报文样本进行比对对齐的方式提取协议格式信息。discoverer协议格式提取方案按照文本和二进制两种属性对报文字节流进行标注,得到报文属性序列,通过对报文属性序列进行序列比对得到初始聚类结果,随后依据格式标志字段进行递归聚类获取协议格式。asap是一种基于特征词的格式推断方法,利用分隔符以及自然语言处理中的n-gram方法对报文进行分词,构建特征向量,利用非负矩阵分解得到向量基,在此基础上进行聚类以提取协议格式。prodecoder是一种基于概率模型的格式推断方法,利用lda(latentdirichletallocation)主题生成模型描述“特征词构成协议关键词”以及“协议关键词构成报文”两层语义关系,得到协议关键词及其对应的概率,随后对报文样本进行聚类,并使用多序列比对算法得到最终的协议格式。autoreengine是一种基于位置信息的协议格式推断方法,采用apriori算法获取特征词,利用位置信息对特征词进行合并和筛选,得到协议关键词集合,最终再次利用apriori算法对协议关键词进行组合提取协议格式及协议状态机。

现有的私有协议报文格式推断方案都存在一些缺陷。pi项目对完整的报文样本进行序列比对,时间复杂度较高。discoverer虽然采用构造报文属性序列的方式降低了时间复杂度,但其采用常见文本类分隔符对报文样本进行划分的处理方法并不适用于二进制协议。此外,对于私有协议而言哪些分隔符会在协议中使用无法确定。asap中对文本协议使用分隔符方法进行划分,也存在类似问题。且asap在处理二进制协议时,采用n-gram方法选取固定长度的特征词,而实际报文中特征词的长度并不固定。autoreengine通过apriori算法结合位置信息提取协议关键词,对于字段位置可变的协议,如http协议、sip协议,可能会遗失部分关键词导致无法得到准确的协议格式信息。

总体上看,目前基于网络流量的报文格式推断方法主要面临的问题是报文样本的序列长、数量多,分析算法的时间复杂度高,此外,由于一些推断方法预设的推断条件不完全合理,导致推断结果的准确率不高。



技术实现要素:

发明目的:针对现有技术中存在的问题,本发明旨在提供一种基于网络流量的私有协议报文格式推断方法。针对私有协议的协议关键词长度无法事先预知的问题,采用n-gram方法对报文进行分词,依据点间互信息pmi(pointmutualinformation)判断候选关键词的关联关系,确保获得准确的协议关键词。针对长报文比对的计算开销高、准确率低的问题,采用构建协议关键词序列,并以扩展前缀树(extendedprefixtree,ept)对协议关键词序列进行描述,实施分段的多序列比对,降低序列比对的计算开销,提高比对结果的准确率。针对字段位置可变的协议以及存在枚举字段的协议,容易被划分出较多冗余报文格式的问题,依据协议报文结构和语义对扩展前缀树实施合并,获取准确的协议格式。

技术方案:为解决上述技术问题,实现上述技术效果,本发明提供的技术方案为:

一种基于扩展前缀树的私有协议报文格式推断方法,包括步骤(1)至(4):

(1)报文预处理:从原始网络数据流中提取出所有独立的报文,形成报文集合;

(2)协议关键词提取:对报文集合中的每条报文进行n-gram分词处理,得到所有在报文集合中出现过的长度为n的字符串;将在报文集合中出现的频率大于预设频率阈值的所有字符串选取出来作为候选关键词;采用点间互信息衡量相邻候选关键词的相关程度,并将相关程度大于预设相关阈值的相邻候选关键词进行合并,合并的结果作为协议关键词;确定所有协议关键词后,将报文集合中的所有报文转换为协议关键词序列,使每个报文由其所包含的协议关键词表示;

(3)报文结构与语义推断:构建扩展前缀树,按顺序将每个协议关键词序列中的协议关键词作为叶子节点插入扩展前缀树中;扩展前缀树中从起点开始到叶子节点结束的每条路径代表一种报文格式;确定扩展前缀树中所有的边,并对每条边对应的报文片段采用needleman-wunsch多序列比对算法进行比对,得到相应报文片段的格式信息;综合每条边的needleman-wunsch多序列比对结果,得到扩展前缀树所包含的所有报文的格式信息;

(4)协议格式合并:对步骤(3)获取的报文格式信息进行合并,包括:对字段前后位置可变的同类报文进行格式合并,以及对协议关键词属于枚举类型的同类报文进行格式合并。

进一步的,所述步骤(1)中报文预处理的具体步骤为:

针对连续的网络数据流,先以会话为粒度进行分割,将通信实体间的独立会话分离出来;再对每一次独立会话进行报文定界,从独立会话中分离出单个协议报文。

进一步的,所述步骤(2)中候选关键词合并的具体步骤为:

如果两个候选关键词位置相邻、存在n-1个连续的相同字符且相关性大于所设置的相关性阈值,则将两个候选关键词合并为一个长度大于n的协议关键词;重复合并步骤即可获得任意长度的协议关键词。

进一步的,所述步骤(3)中确定扩展前缀树所有边的方法为:采用深度搜索策略遍历整个扩展前缀树,得到扩展前缀树的所有边。

进一步的,所述步骤(3)中还包括步骤:

根据得到的所有报文的格式信息,采用正则表达式对报文中的常见语义进行提取分析,所述常见语义包括:url字段、ip地址字段、e-mail字段、域名字段。

进一步的,所述步骤(4)中,对字段前后位置可变的同类报文进行格式合并的具体步骤为:

若扩展前缀树中存在两条路径所包含的节点类型完全相同,或某一条路径中包含的节点类型是另一条路径上包含的节点类型的子集,且两条路径上相同节点对应的边结构相似、语义相同,则认为这两条路径为字段前后位置可变的报文格式,将两者合并为一种格式。

进一步的,所述步骤(4)中,对协议关键词属于枚举类型的同类报文进行格式合并的具体步骤为:

若扩展前缀树中存在两条路径,这两条路径仅有一个节点不同,且与此节点相关的边在两条路径上结构相似、语义相同,则认为这两条路径中的不同节点对应同种报文格式的枚举字段的两种取值,将两节点合并为一个节点,将两条路径合并为一种协议格式

有益效果:与现有技术相比,本发明的有益效果在于依据点间互信息,准确推断报文中的协议关键词,并通过构建协议关键词序列,实施分段的多序列比对,降低序列比对的计算开销,提升比对结果的准确率,同时提高报文格式推断的效率。此外,针对实际协议灵活性强的特点,通过有效的格式合并,减少冗余的报文格式,增强推断结果的实用性。

附图说明

图1为本发明的整体实现流程示意图;

图2为报文所对应的协议关键词序列的样例;

图3为与图2相对应的扩展前缀树的样例;

图4为报文分段进行多序列比对的样例;;

图5为用于语义推断的正则表达式样例。

具体实施方式

下面结合附图和具体实施例对本发明作更进一步的说明。

图1为本发明的整体实现流程示意图;如图所示,本发明提出的一种基于扩展前缀树的私有协议报文格式推断方法,主要包括以下步骤:

首先是报文预处理。针对连续的网络数据流,先以会话(session)为粒度进行分割,将通信实体间的一次次完整会话分离出来。而后再进行报文定界,从一次独立会话中分离出单个协议报文。

其次是协议关键词提取。对经过预处理的报文,采用n-gram分词方法对报文进行处理,得到所有在样本集合中出现的长度为n的字符串。大部分字符串出现的频率较低,通常对应着报文中的变值字段,这些字段取值不确定甚至完全随机,所携带的信息较少。协议格式提取的目的是获取相对稳定的协议报文组成结构,故设置阈值对出现频率较低的字符串进行过滤。将频率高于阈值的字符串作为候选关键词添加到集合中。由于实际的协议关键词长度不固定,因此,采用点间互信息(pointmutualinformation)衡量候选关键词之间的相关程度,将位置相邻的候选关键词实施合并。最后将报文表示为由协议关键词所构成的序列。

然后是报文结构与语义推断。由于相同格式报文对应的协议关键词序列往往相同,因此可以依据协议关键词序列对报文样本进行聚类分析。采用扩展前缀树描述协议关键词序列,树中的节点对应协议关键词,节点间的边代表报文中两个协议关键词之间的报文片段。在扩展前缀树的基础上进行分段的序列比对,以树节点之间的边为基础,将所有对应于该边的报文片段,采用needleman-wunsch多序列比对算法进行比对,获取树边的两个节点所对应的两个协议关键词之间报文片段的详细格式信息。此后,依据常见的报文语义特征,通过正则表达式对报文中的字段语义进行分析。

最后是协议格式合并。在一些协议中,字段的位置是可变的,比较典型的是http协议,一些字段的位置可以灵活变化。比如,host和user-agent两个字段的先后顺序是可变的,“getadmin.phphttp/1.1\r\nhost:www.foobar.com\r\nuser-agent:opera/9.20”和“getindex.htmlhttp/1.1\r\nuser-agent:mozillia/5.0\r\nhost:www.baidu.com\r\n”都会在实际报文中出现。此外,一些协议中有部分报文关键词属于枚举类型,例如,http协议中的请求方法字段,取值只有“get”、“post”、“head”等方法,在协议格式分析时将它们归为一类更为合理。格式合并是在扩展前缀树的基础上,对同类报文进行合并,减少报文格式的冗余。

前述报文预处理阶段的工作流程如下:对于网络监听捕获的网络数据流,首先进行会话划分。所谓会话划分,指的是从连续的网络数据流中分离出两个协议实体之间的每一次的完整会话。会话划分主要依靠底层协议提供的信息实现。如果是基于tcp协议的网络应用,一次会话往往由tcp协议的三次握手开始,当tcp连接中断时停止。如果是基于udp协议的网络应用,一次会话往往由通信的间隔时间来区分,如果通信双方停止通信的时间超过特定时长,则推断一次会话已经完成。在完成会话划分后,进行报文定界。报文定界的目的是从一次会话中分离出每个协议报文。协议逆向领域关注的私有协议主要是应用层协议。对于应用层协议,可以依据传输层协议的报文首部和首部的长度字段等信息确定应用层的数据负载,作为后一阶段分析的基础。

前述协议关键词提取阶段的工作流程如下:由于协议规范以及使用条件的制约,一种协议中同一类格式的报文样本往往会体现出一些统计相似性或相关性,具体来说就是在报文样本中有一些具有固定模式、频繁出现的比特串或字符串。这些具有固定模式的串通常被统称为协议关键词。以http协议报文为例,请求报文中的请求方法字段“get”和协议版本字段“http/1.1”,响应报文中的响应码“200ok”都属于协议关键词。此外,http协议中有很多“key-value”格式的字段,例如,“host:my.csdn.net”中的“host”属于起标识作用的key,其中的“my.csdn.net”为对应于host的value。此类“key-value”格式的字段中,起标识作用的“key”字符串也被属于协议关键词。一些文献将分隔符也作为协议关键词。但由于分隔符可能在单个报文中频繁出现且位置变化较大,对于协议逆向分析会造成较大困扰,因此,本发明的技术方案将分隔符定义在协议关键词之外。将上一阶段获得的所有报文的应用层数据负载作为分析对象。采用n-gram分词方法对报文数据进行逐一处理,得到所有在报文集合中出现过的长度为n的字符串,计算每一个字符串相对于报文总数的出现频率。在得到的长度为n的字符串中,大部分字符串出现频率较低,它们通常对应着报文中的变值字段或者是变值字段的子串,这些字段取值不确定甚至完全随机产生,所携带的信息较少。协议格式提取希望确定的是相对稳定的协议报文构成结构,故设置阈值tfreq,对出现频率较低的字符串进行过滤。将频率高于阈值的字符串作为候选关键词保留。由于协议关键词的长度无法事先预知,如果限定关键词的长度均为n,必然与实际情况不吻合。本发明采用的方法是依据点间互信息对候选关键词进行合并,得到不同长度的协议关键词。点间互信息(pointmutualinformation)是在熵的基础上提出来的概念,这一概念经常被用于自然语言处理以及数据挖掘领域来衡量两个单词间的相关程度。如果两个候选关键词都是一个协议关键词的子串,那么它们之间将具有较大的相关性。如果两个候选词位置相邻、存在n-1个连续的相同字符且相关性较大,则将两者合并为一个长度大于n的候选词,如此重复可以获得任意长度的协议关键词。在确定所有的协议关键词之后,将所有报文转换为协议关键词的序列,每个报文由其中所包含的协议关键词表示。例如,http报文“getadmin.phphttp/1.1\r\nhost:www.foobar.com\r\nuser-agent:opera/9.20”所对应的协议关键词序列为<“get”,“http”,“host”,“user-agent”>。

前述报文结构与语义推断阶段的工作流程如下:由于相同格式的报文对应的关键词序列往往相同,因此可以依据协议关键词序列对报文样本进行聚类,将关键词序列相同的报文聚为一类,进而依据同类报文在结构上的相似性分析协议格式。前缀树(prefixtree)是一种有序多叉树结构,本发明对前缀树进行扩展,将报文对应的协议关键词序列作为输入,按顺序将协议关键词序列中的协议关键词作为节点插入前缀树。代表不同报文类型的协议关键词序列加入到树中,树中从起点开始到叶子节点结束的每条路径即代表一种报文格式。构建扩展前缀树的过程实际是对报文样本进行聚类的过程,同种格式的报文会汇聚在同一条路径上,此外,依据节点对应的协议关键词,一条报文被分为多个片段。例如,对于http协议报文“post/eapi/pl/counthttp/1.1\r\nhost:music.163.com\r\nuser-agent:mozilla/5.0”,若其所对应的关键词序列为<“post”,“http”,“host”,“user-agent”>,则“post”与“http”两个协议关键词之间的字符串是一个报文片段,“http”与“host”两个协议关键词之间的字符串也是一个报文片段,“host”与“user-agent”两个协议关键词之间的字符串又是一个报文片段。对于构建的扩展前缀树,采用先深搜索策略进行遍历,确定树中所有的边。树中的每条边,实际对应于两个协议关键词之间的报文片段。将对应于树中一条边的所有报文片段,采用needleman-wunsch多序列比对算法进行比对,分析获取此部分报文片段的格式信息。将分段序列比对的结果进行综合,最终可以获得扩展前缀树所包含的所有报文的格式信息。为了获取更全面的协议格式信息,在得到基本的报文格式信息之后,本发明采用正则表达式的方式对url字段、ip地址字段、e-mail字段、域名字段等网络通信报文中常见的语义进行提取分析。

前述格式合并阶段的工作流程如下:由于实际使用的通信协议往往具有较强的灵活性,例如,一些报文字段的位置顺序是可变的。像在http协议中,http请求报文首部行中字段的位置并不固定。“getadmin.phphttp/1.1\r\nhost:www.foobar.com\r\nuser-agent:opera/9.20”和“getindex.phphttp/1.1\r\nuser-agent:mozillia/5.0\r\nhost:www.baidu.com\r\n”两条报文实际上对应于一种报文格式,其中“host”关键词和“user-agent”关键词的先后顺序可以灵活调整。但是在扩展前缀树中,两条报文对应的协议关键词序列不同,会作为不同的报文格式,造成不必要的冗余。此外,一些报文中的协议关键词属于枚举类型,例如,http请求报文的请求方法字段可以设置为“get”、“post”、“head”等数值。例如,“getadmin.phphttp/1.1\r\nhost:www.foobar.com\r\nuser-agent:opera/9.20”和“post/eapi/pl/counthttp/1.1\r\nhost:music.163.com\r\nuser-agent:mozilla/5.0”两条报文仅仅是请求方法不同,实际上属于一种报文格式,也可以在扩展前缀树中加以合并。因此,在进行报文格式合并时,若扩展前缀树中两条路径所包含的节点类型完全相同,或某一条路径中包含的节点类型是另一条路径上包含的节点类型的子集,并且两条路径上相同节点对应的边结构相似、语义相同,则认为这两条路径对应着位置可变的报文格式,将两者合并为一种格式。若两条路径仅有一个节点不同,且与此节点相关的边在两条路径上结构相似、语义相同,则认为这两条路径中的不同节点对应着同种报文格式的枚举字段的两种取值,可以将两节点合并为一个节点,两条路径合并为一种协议格式。

下面通过具体的实施方式进一步阐释上述技术方案的实现原理。

(1)报文预处理

本发明实施例首先采用网络抓包软件收集协议实体程序在网络通信过程中产生的网络通信流作为分析对象。在此基础上,对网络通信流进行会话划分与报文定界。

会话划分是从连续的网络数据流中分离出通信实体间的单次会话,主要依靠底层协议提供的信息实现。网络协议研究领域,已经有不少成熟的识别网络会话的方法。上层应用使用下层协议提供的服务。如果是基于tcp协议的网络应用,一次会话往往由tcp协议的三次握手开始,当tcp连接中断时停止。如果是基于udp协议的网络应用,一次会话往往由通信的间隔时间来区分,如果通信双方停止通信的时间超过特定时长,则推断一次会话已经完成。

报文定界是从一次独立会话中分离出单个协议报文。由于所关注的私有协议是应用层协议,因此可以依据传输层协议的报文首部信息,特别是首部中的长度字段实施报文定界。定界之后得到的报文样本被作为后续阶段的输入。

(2)协议关键词提取

此阶段的目的是从经过预处理的报文样本中提取协议关键词,并使用协议关键词对报文进行标注得到协议关键词序列。

在获得上一阶段经过预处理的报文集合以后,采用n-gram分词方法对每个报文逐一处理,得到所有在报文集合中出现过的长度为n的字符串。计算每一个字符串相对于报文集合的出现频率。在得到的字符串中,大部分字符串出现的频率较低,它们通常对应于报文中的变值字段,这些字段取值不确定甚至完全随机产生,所携带的信息较少。协议格式提取希望获取的是相对稳定的协议报文组成结构,故设置阈值tfreq,对出现频率较低的字符串进行过滤。将频率高于阈值的字符串加入到候选协议关键词集合g。

由于候选关键词集合g中的元素都是通过n-gram分词得到,其长度皆为n,而实际协议报文中,协议关键词长度并不完全相同。对于长度大于n的协议关键词,可以由长度为n的子串合并得到,如http协议中的关键词“host”可以由“hos”和“ost”合并得到。基于这种相关性,本发明使用点间互信息对集合g中的协议关键词进行合并,以得到不同长度的协议关键词。

点间互信息(pointmutualinformation)是在熵的基础上提出来的概念,这一概念经常被用于自然语言处理以及数据挖掘领域来衡量两个单词间的相关程度。单词wi和wj之间的互信息可以定义为:pmi(wi,wj)=p(wi,wj)/(p(wi)×p(wj))。其中,p(wi,wj)表示单词wi和wj同时出现在一个报文中的概率,p(wi)表示单词wi出现在报文样本中的概率,p(wj)表示单词wj出现在报文样本中的概率。pmi(wi,wj)衡量的是两个单词之间的相关性,即确定了一个单词后另一个单词的不确定性(即熵值)的减少量,pmi(wi,wj)的值越大,表示两个单词之间的相关性越高。

为了对候选关键词进行合并,首先,需要依据候选关键词集合g对报文进行标注,明确候选关键词在报文中相对于报文起始位置的偏移位置。此后,对报文进行遍历,寻找位置相邻且有连续n-1个字符重叠的2个候选关键词,计算两者的点间互信息。如果2个相邻候选关键词的点间互信息超过设定的阈值,则将2个候选关键词合并得到新的候选关键词。如此反复,将相邻且点间互信息超过阈值的候选关键词进行合并,可以得到最终的协议关键词集合。

此后,依据协议关键词集合,将所有报文映射为协议关键词构成的有序序列。图2是以http协议为例的协议关键词序列的样例。举例来看,如果http协议中“get”、“http”、“host”和“user-agent”被判定为协议关键词,则报文“getadmin.phphttp/1.1\r\nhost:www.foobar.com\r\nuser-agent:opera/9.20”所对应的协议关键词序列为<“get”,“http”,“host”,“user-agent”>。

(3)报文结构与语义推断

相同格式的报文对应的关键词序列往往相同,因此可以依据协议关键词序列对报文样本进行聚类,将同种格式的报文聚成一起分析它们在结构上的相似性。

为了便于分析,本发明采用扩展前缀树描述协议关键词序列。前缀树(prefixtree)是一种有序的多叉树结构,通常以字符串为输入,利用字符串的公共前缀来实现快速检索以及字符串匹配等操作。本发明对前缀树加以扩展,将协议关键词序列作为输入,按照顺序将协议关键词作为树节点插入前缀树中,以扩展前缀树描述报文样本对应的协议关键词序列。

在构建扩展前缀树时,遍历每个报文所对应的协议关键词序列,将其中的元素依次插入树结构中。同时,为了排除样本中的噪声,将记录每种协议关键词序列对应的报文总数,删除样本数小于阈值的关键词序列,即不考虑出现频率过低的协议关键词序列。

举例说明,构建扩展前缀树时,对于图2所包含的协议关键词序列,首先构建根节点“start”表示起点,随后依次遍历各个报文所对应的协议关键词序列,将协议关键词序列的信息加入扩展前缀树中。最终,图2包含的协议关键词序列将构建出图3所示的扩展前缀树。

扩展前缀树中的每条路径表示一种报文格式,图3对应6种报文格式。树中的每一个节点表示一个协议关键词,节点之间的边表示真实报文中对应协议关键词之间的报文片段。例如,图3中扩展前缀树第1条和第2条路径中“get”节点与“http”节点之间的边,对应于图2中第1条或第3条关键词序列对应的协议关键词“get”和“http”之间的报文片段“admin.php”和“index.php”。

构建扩展前缀树的过程实际是对报文进行聚类并加以分段的过程。同种格式的报文会汇聚在同一条路径上,同时依据节点对应的协议关键词,报文被划分为多个片段。扩展前缀树的表示方式有利于细粒度的分析每个报文片段的结构。

对于扩展前缀树,采用先深搜索遍历每一条路径,对同一路径上相邻两节点所对应的报文采用needleman-wunsch多序列比对算法进行比对,以提取详细的协议格式信息。包括协议字段取值类型(字符串、整数或二进制数等)、取值范围(包含常量字段、枚举字段、随机字段)等,并在扩展前缀树上做相应标注。

若图3扩展前缀树中第1条路径所对应的报文经过分段的多序列比对后的结果如图4所示,其协议关键词序列为<“get”,“http”,“host”,“user-agent”>(图4中“_”表示报文中本身包含的空格,“--”表示序列比对填充的空格)。通过多序列比对能够得到详细的格式信息,如第2个片段的取值为一个浮点数后接回车换行符,且浮点数取值为“1.1”或“1.0”。

通过分段的多序列比对,能够抽象出每个序列片段的报文结构,相对于pi(protocolinformation)等项目直接对整个报文进行序列比对,降低了时间复杂度。同时这种分段的格式提取方法,将报文依据协议关键词进行划段,也解决了多序列比对方法应用于结构复杂、报文过长的协议报文时效果不佳的问题。

为了获取更加全面的协议格式信息,对报文片段进行多序列比对的同时还需要进行语义提取。本实施例主要考虑语义由自身取值决定的字段,如url字段、ip地址字段、域名字段等。语义的推断采用正则匹配的方式实现,图5为用来提取部分独立语义的正则表达式。依据正则表达式对扩展前缀树中的每条边进行正则匹配,将符合相应表达式的片段标注上相应语义信息。例如,通过正则匹配能够发现图4报文中的“host”关键词与“user-agent”关键词之间的片段为url字段。

(4)协议格式合并

实际使用的通信协议往往具有较强的灵活性,完全依据协议关键词序列进行协议格式推断容易产生较多的冗余格式,即一种报文格式在推断时被划分为多种不同的报文格式。过多的格式冗余将导致推断结果的实用性降低。

例如,一些报文字段的位置顺序是可变的。像在http协议中,“getadmin.phphttp/1.1\r\nhost:www.foobar.com\r\nuser-agent:opera/9.20”和“getindex.phphttp/1.1\r\nuser-agent:mozillia/5.0\r\nhost:www.baidu.com\r\n”两条报文实际上对应于一种报文格式,其中“host”关键词和“user-agent”关键词的先后顺序是可以变化。但是在扩展前缀树中,两条报文对应的协议关键词序列不同,会作为不同的报文格式,造成不必要的冗余。

一些报文中的协议关键词属于枚举类型,例如,http请求方法字段可以在“get”、“post”、“head”等协议关键词组成的集合中枚举。例如,“getadmin.phphttp/1.1\r\nhost:www.foobar.com\r\nuser-agent:opera/9.20”和“post/eapi/pl/counthttp/1.1\r\nhost:music.163.com\r\nuser-agent:mozilla/5.0”两条报文仅仅是请求方法不同,实际上隶属于同一种报文格式。

本发明实施例根据网络协议的常见特点,对字段前后位置可变的同类报文进行格式合并,同时对协议关键词属于枚举类型的同类报文进行格式合并。若扩展前缀树中两条路径所包含的节点类型完全相同,或某一条路径中包含的节点类型是另一条路径上包含的节点类型的子集,并且两条路径上相同节点对应的边结构相似、语义相同,则认为这两条路径对应着位置可变的报文格式,将两者合并为一种格式。若两条路径仅有一个节点不同,且与此节点相关的边在两条路径上结构相似、语义相同,则认为这两条路径中的不同节点对应着同种报文格式的枚举字段的两种取值,故将两节点合并为一个节点,两条路径合并为一种协议格式。

由以上本发明的技术方案可知,本发明的基于扩展前缀树的私有协议报文格式推断方法,采用n-gram分词方法对报文进行处理,得到定长的字符串集合,将出现频繁的字符串作为候选关键词,并依据点间互信息对报文中相邻的候选关键词进行合并,从而得到与实际协议相符的各种长度的协议关键词。将报文映射为协议关键词序列,通过构建扩展前缀树的方法将相同协议关键词序列的报文聚集在树中相同的路径上。在扩展前缀树的基础上,将报文划分为报文片段,利用needleman-wunsch多序列比对算法对报文片段进行比对,获得相应的格式信息,并利用正则表达式提取字段语义。最后,对同类报文格式进行合并,减少冗余。

综上所述,本发明的基于扩展前缀树的私有协议报文格式推断方法,依据点间互信息对候选的协议关键词进行合并,能够准确获得长度任意的协议关键词。其次,构建扩展前缀树对报文进行描述,能够有效将同种格式的报文汇聚在一起,在此基础上实施分段的多序列比对,降低序列比对的计算开销,提高报文格式推断的准确率和效率。此外,针对协议实际特点实施格式合并,能够减少报文格式的冗余,增强推断结果的实用性。

以上所述仅是本发明的优选实施方式,应当指出:对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1