基于索引分簇的网络协议特征匹配方法组成比例

技术编号:14549570 阅读:156 留言:0更新日期:2017-02-04 22:39
本发明专利技术公开了基于索引分簇的网络协议特征匹配方法,目的是优化设计载荷特征与协议识别规则的关联关系,提高规则匹配性能。技术方案是第一步预处理,输入协议识别规则集合,建立深度报文检查索引分簇和固定位置引分簇;第二步深度报文检查;采用当前主流的深度报文匹配引擎遍历检查网络报文的报文载荷中是否包含字符串集合中字符串,输出命中结果;第三步规则匹配;首先,借助深度报文检查索引分簇表,重构深度报文检查引擎返回的命中结果,其次,对深度报文检查特征串索引分簇的规则进行匹配,然后对固定位置索引分簇的规则进行匹配。本发明专利技术相比于目前基于报文深度检查的协议识别方法,显著减少了协议规则的匹配次数,提高了协议识别的性能。

【技术实现步骤摘要】

本专利技术涉及计算机领域中网络协议识别方法,特别是网络协议特征匹配方法。
技术介绍
协议识别是网络带宽管理和安全防护的关键支撑技术。现有的协议识别方法可大致分为基于端口匹配的协议识别方法、基于深度报文检查的协议识别方法、基于数据流特征的协议识别方法三种。其中,基于深度报文检查的协议识别方法是对基于端口匹配协议识别方法的扩展,除了分析报头信息外,还对报文数据载荷特征进行匹配,相比较而言,该类方法具有识别速度快、更新方便、准确率高等优点,已在业界广泛使用。基于深度报文检查的协议识别方法主要包含三个步骤:(1)预处理,提取协议识别规则中的载荷特征,放到深度报文检查引擎,并建立载荷特征与协议识别规则的映射关系;(2)深度报文检查,对报文数据载荷进行遍历,返回命中的载荷特征编号及其所在的偏移位置;(3)规则匹配:根据命中的载荷特征匹配相应的协议识别规则,返回协议识别结果。在既往研究中,协议识别规则多以单载荷特征规则为主,因此,规则匹配的开销常被忽略,一般侧重从深度报文检查改进的角度提升协议识别性能。然而,随着网络应用的不断丰富,单数据载荷特征的识别准确率降低,协议识别需要依赖多个载荷特征共同判定,规则匹配对整体性能的影响越来越大。一方面,载荷特征和协议规则的映射关系更加复杂,另一方面,载荷特征含有大量单字节或双字节特征,直接将这些载荷特征加入深度报文检查引擎,会导致大量命中结果,若在规则匹配过程中多次遍历命中结果,性能开销极大。如何优化载荷特征和协议规则的映射关系、降低规则匹配开销是协议识别亟需解决的技术问题。
技术实现思路
本专利技术要针对已有基于报文深度检查的协议识别方法存在载荷特征和协议识别规则间关联关系复杂而导致规则匹配开销大的技术问题,提供一种基于索引分簇的网络协议特征匹配方法,优化设计载荷特征项与协议识别规则间的关联关系,提高规则匹配性能。不失一般性,假定基于报文深度检查的协议识别规则至少包含一个载荷特征,载荷特征包括浮动位置特征和固定位置特征,浮动位置特征不限定载荷特征的命中位置,固定位置特征会指定载荷特征相对于报文TCP/UDP数据载荷起点的偏移位置。本专利技术中“=”为赋值操作符,即将等号“=”右边的值赋值给等号左边的变量。本专利技术技术方案:第一步:预处理。输入:协议识别规则集合R,R中包含N条协议规则,N为整数。记Ri表示第i条协议规则,Ri包含Mi个载荷特征,ri,j为Ri第j个载荷特征,1≤i≤N,1≤j≤Mi,i、j、Mi均为整数。载荷特征包含字符串和固定位置(即载荷特征所在位置相对于报文TCP/UDP数据载荷起点的偏移)两个元素,记ri,j=<string[K],offset>,其中,string[K]表示长度为K的字符串,令stringk表示ri,j中第k个字符,1≤k≤K,k、K均为整数;令offset表示固定位置要求,若offset等于-1,则ri,j为浮动位置串;通过ri,j.string[K]访问ri,j中的string[K],通过ri,j.offset访问ri,j中的offset。为了加速协议处理过程,采用空间换时间的策略,对于预处理阶段得到的静态数据结果尽量采用数组存储。对此,假定一条规则最多包含M个载荷特征,一个索引要素最多关联L条规则,报文数据载荷的最大长度为P字节,M、L、P均为整数。输出:(1)深度报文检查字符串集合D,D初始值为空,D中不包含重复字符串。(2)载荷特征映射表S[N][M](N行M列矩阵),S[N][M]初始值为全0,Si,j表示协议规则Ri的载荷特征ri,j在集合D中的编号,若Si,j等于0,说明ri,j的字符串ri,j.string[K]不属于集合D。(3)深度报文检查索引分簇表A,Ad表示D中第d个字符串的描述信息,d为整数,Ad包含4部分信息,记Ad=<float,location[P],index,rule[L]>。其中:●float为浮动位置标记,若float等于1,表示Ad字符串属于浮动位置载荷特征,通过Ad.float访问Ad的float元素;●location[P]表示长度为P的固定位置向量,若locationp等于1,说明Ad来自某个固定位置载荷特征,且该特征载荷的offset等于p,1≤p≤P,p、P均为整数,通过Ad.locationp访问Ad的locationp元素;●index为索引标记,若index等于1,表示Ad为某协议规则的索引要素,通过Ad.index访问Ad的index元素;●rule[L]为长度为L的向量,其中存储Ad作为索引要素的协议规则的编号,由于一个索引要素最多关联L条协议规则,因此,设置rule为长度为L的向量,通过Ad.rule[L]访问Ad的rule[L]元素,通过Ad.rulel访问Ad的rulel元素,1≤l≤L,l为整数。(4)固定位置索引分簇表F,Ff表示第f个固定位置索引,包含2部分信息,记Ff=<offset,rule[ROW][L]>,f为整数,其中:●offset表示Ff所在的偏移位置,采用索引偏移位置为offset的字节为索引,通过Ff.offset访问Ff的offset元素;●rule[Row][L]为ROW行L列矩阵,存储对应该字节的ROW种取值的协议识别规则编号,其中ruler,s表示编号等于ruler,s的协议规则包含某个固定位置特征,该固定位置特征要求偏移位置为offset的字节取值等于r,1≤r≤256,1≤s≤L,r、s均为整数,通过Ff.rule[ROW][L]访问Ff的rule[ROW][L]元素,由于一共有256个ASCII字符,所以设置ROW≥256,ROW优选为256。(5)协议识别规则处理状态向量B[N],初始值为全0,Bi标记第i条协议识别规则Ri的处理状态,若Bi等于0,表明该规则尚未处理,若Bi等于1,表明该规则已完成索引分簇。预处理流程如下:步骤1.1建立深度报文检查索引分簇。输入协议识别规则集合R,从协议识别规则的载荷特征中提取深度报文检查字符串集合D,针对每条规则按照长度优先原则筛选深度报文检查字符串作为索引要素,建立深度报文检查索引分簇表A,记录规则处理状态B[N]及未处理规则数Y,Y为整数。具体步骤如下:1.1.1遍历协议识别规则的载荷特征,将浮动位置特征的字符串及固定位置长度大于阈值W的字符串加入集合D,得到集合D,W为正整数,优选为3。具体步骤为:1.1.1.本文档来自技高网
...
基于索引分簇的网络协议特征匹配方法

【技术保护点】
基于索引分簇的网络协议特征匹配方法,其特征在于包含以下步骤:第一步,预处理,流程如下:步骤1.1建立深度报文检查索引分簇;输入协议识别规则集合R,从协议识别规则的载荷特征中提取深度报文检查字符串集合D,针对每条规则按照长度优先原则筛选深度报文检查字符串作为索引要素,建立深度报文检查索引分簇表A,记录规则处理状态B[N]及未处理规则数Y,Y为整数;其中变量定义如下:协议识别规则集合R,R中包含N条协议规则,N为整数;记Ri表示第i条协议规则,Ri包含Mi个载荷特征,ri,j为Ri第j个载荷特征,1≤i≤N,1≤j≤Mi,i、j、Mi均为整数;载荷特征包含字符串和固定位置两个元素,记ri,j=<string[K],offset>,其中,string[K]表示长度为K的字符串,令stringk表示ri,j中第k个字符,1≤k≤K,k、K均为整数;令offset表示固定位置要求,若offset等于‑1,则ri,j为浮动位置串;通过ri,j.string[K]访问ri,j中的string[K],通过ri,j.offset访问ri,j中的offset;深度报文检查字符串集合D初始值为空,D中不包含重复字符串;载荷特征映射表S[N][M]为N行M列矩阵,S[N][M]初始值为全0,Si,j表示协议规则Ri的载荷特征ri,j在集合D中的编号,若Si,j等于0,说明ri,j的字符串ri,j.string[K]不属于集合D;深度报文检查索引分簇表A,Ad表示D中第d个字符串的描述信息,d为整数,Ad包含4部分信息,记Ad=<float,location[P],index,rule[L]>,其中:●float为浮动位置标记,若float等于1,表示Ad字符串属于浮动位置载荷特征,通过Ad.float访问Ad的float元素;●location[P]表示长度为P的固定位置向量,若locationp等于1,说明Ad来自某个固定位置载荷特征,且该特征载荷的offset等于p,1≤p≤P,p、P均为整数,通过Ad.locationp访问Ad的locationp元素;●index为索引标记,若index等于1,表示Ad为某协议规则的索引要素,通过Ad.index访问Ad的index元素;●rule[L]为长度为L的向量,其中存储Ad作为索引要素的协议规则的编号,通过Ad.rule[L]访问Ad的rule[L]元素,通过Ad.rulel访问Ad的rulel元素,1≤l≤L,l为整数;固定位置索引分簇表F,Ff表示第f个固定位置索引,包含2部分信息,记Ff=<offset,rule[ROW][L]>,f为整数,其中:●offset表示Ff所在的偏移位置,采用索引偏移位置为offset的字节为索引,通过Ff.offset访问Ff的offset元素;●rule[Row][L]为ROW行L列矩阵,存储对应该字节的ROW种取值的协议识别规则编号,其中ruler,s表示编号等于ruler,s的协议规则包含某个固定位置特征,该固定位置特征要求偏移位置为offset的字节取值等于r,1≤r≤256,1≤s≤L,r、s均为整数,通过Ff.rule[ROW][L]访问Ff的rule[ROW][L]元素,ROW≥256;协议识别规则处理状态向量B[N],初始值为全0,Bi标记第i条协议识别规则Ri的处理状态,若Bi等于0,表明该规则尚未处理,若Bi等于1,表明该规则已完成索引分簇;一条规则最多包含M个载荷特征,一个索引要素最多关联L条规则,报文数据载荷的最大长度为P字节,M、L、P均为整数;步骤1.2建立固定位置索引分簇;输入协议识别规则集合R,针对未处理的协议识别规则,按照信息熵评估结果选择固定位置载荷作为索引要素,建立固定位置索引分簇表F,规则处理状态B[N]及未处理规则数Y;第二步,深度报文检查,流程如下:向深度报文检查引擎输入字符串集合D、网络报文;深度报文检查引擎遍历检查网络报文的报文载荷DATA中是否包含D中字符串,输出命中结果Result,Result中包含rnum个命中结果,其中第ci个命中结果Resultci=<offset,id>,分别通过Resultci.offset、Resultci.id访问offset和id元素,其中Resultci.offset表示命中位置,Resultci.id表示命中的字符串编号;Result按照offset从小到大排序,ci、rnum均为正整数,1≤ci≤rnum;第三步,规则匹配,流程如下:步骤3.1深度报文检查结果重构;根据深度报文检查索引分簇表A,将命中结果Result筛选和重构,提取命中结果中包含的深度报文检查索引要素编号,构成索引要素命中队列HIT,及字符串命中明细表C,其...

【技术特征摘要】
1.基于索引分簇的网络协议特征匹配方法,其特征在于包含以下步骤:
第一步,预处理,流程如下:
步骤1.1建立深度报文检查索引分簇;输入协议识别规则集合R,从协议识别规则
的载荷特征中提取深度报文检查字符串集合D,针对每条规则按照长度优先原则筛选深
度报文检查字符串作为索引要素,建立深度报文检查索引分簇表A,记录规则处理状态
B[N]及未处理规则数Y,Y为整数;
其中变量定义如下:
协议识别规则集合R,R中包含N条协议规则,N为整数;记Ri表示第i条协议
规则,Ri包含Mi个载荷特征,ri,j为Ri第j个载荷特征,1≤i≤N,1≤j≤Mi,i、j、
Mi均为整数;载荷特征包含字符串和固定位置两个元素,记ri,j=<string[K],offset>,
其中,string[K]表示长度为K的字符串,令stringk表示ri,j中第k个字符,1≤k≤K,
k、K均为整数;令offset表示固定位置要求,若offset等于-1,则ri,j为浮动位置
串;通过ri,j.string[K]访问ri,j中的string[K],通过ri,j.offset访问ri,j中的offset;
深度报文检查字符串集合D初始值为空,D中不包含重复字符串;
载荷特征映射表S[N][M]为N行M列矩阵,S[N][M]初始值为全0,Si,j表示协议
规则Ri的载荷特征ri,j在集合D中的编号,若Si,j等于0,说明ri,j的字符串ri,j.string[K]
不属于集合D;
深度报文检查索引分簇表A,Ad表示D中第d个字符串的描述信息,d为整数,
Ad包含4部分信息,记Ad=<float,location[P],index,rule[L]>,其中:
●float为浮动位置标记,若float等于1,表示Ad字符串属于浮动位置载荷特
征,通过Ad.float访问Ad的float元素;
●location[P]表示长度为P的固定位置向量,若locationp等于1,说明Ad来自
某个固定位置载荷特征,且该特征载荷的offset等于p,1≤p≤P,p、P均为整
数,通过Ad.locationp访问Ad的locationp元素;
●index为索引标记,若index等于1,表示Ad为某协议规则的索引要素,通过
Ad.index访问Ad的index元素;
●rule[L]为长度为L的向量,其中存储Ad作为索引要素的协议规则的编号,通
过Ad.rule[L]访问Ad的rule[L]元素,通过Ad.rulel访问Ad的rulel元素,1≤l≤L,
l为整数;
固定位置索引分簇表F,Ff表示第f个固定位置索引,包含2部分信息,记
Ff=<offset,rule[ROW][L]>,f为整数,其中:
●offset表示Ff所在的偏移位置,采用索引偏移位置为offset的字节为索引,通
过Ff.offset访问Ff的offset元素;
●rule[Row][L]为ROW行L列矩阵,存储对应该字节的ROW种取值的协议识
别规则编号,其中ruler,s表示编号等于ruler,s的协议规则包含某个固定位置特
征,该固定位置特征要求偏移位置为offset的字节取值等于r,1≤r≤256,1≤s≤L,
r、s均为整数,通过Ff.rule[ROW][L]访问Ff的rule[ROW][L]元素,ROW≥256;
协议识别规则处理状态向量B[N],初始值为全0,Bi标记第i条协议识别规则
Ri的处理状态,若Bi等于0,表明该规则尚未处理,若Bi等于1,表明该规则已
完成索引分簇;
一条规则最多包含M个载荷特征,一个索引要素最多关联L条规则,报文数据
载荷的最大长度为P字节,M、L、P均为整数;
步骤1.2建立固定位置索引分簇;输入协议识别规则集合R,针对未处理的协议识
别规则,按照信息熵评估结果选择固定位置载荷作为索引要素,建立固定位置索引分簇
表F,规则处理状态B[N]及未处理规则数Y;
第二步,深度报文检查,流程如下:向深度报文检查引擎输入字符串集合D、网络
报文;深度报文检查引擎遍历检查网络报文的报文载荷DATA中是否包含D中字符串,
输出命中结果Result,Result中包含rnum个命中结果,其中第ci个命中结果
Resultci=<offset,id>,分别通过Resultci.offset、Resultci.id访问offset和id元素,其中
Resultci.offset表示命中位置,Resultci.id表示命中的字符串编号;Result按照offset从小到
大排序,ci、rnum均为正整数,1≤ci≤rnum;
第三步,规则匹配,流程如下:
步骤3.1深度报文检查结果重构;根据深度报文检查索引分簇表A,将命中结果
Result筛选和重构,提取命中结果中包含的深度报文检查索引要素编号,构成索引要素
命中队列HIT,及字符串命中明细表C,其中HIThi表示第hi个索引要素编号,Cck表示
集合D中第ck个字符串的命中位置列表,采用链表结构存储,Cck,cz表示链表Cck中存储
的第cz个命中位置,hi、ck、cz均为正整数;
步骤3.2深度报文检查索引类规则匹配;根据索引要素命中队列HIT中记录的字符串
编号遍历相关规则;
步骤3.3固定位置类索引规则匹配;根据固定位置索引分簇表F遍历相关规则,输出
命中的协议规则编号,结束。
2.如权利要求1所述的基于索引分簇的网络协议特征匹配方法,其特征在于所述步
骤1.1建立深度报文检查索引分簇,包括以下步骤:
1.1.1遍历协议识别规则的载荷特征,将浮动位置特征的字符串及固定位置长度大
于阈值W的字符串加入集合D,得到集合D,W为正整数;具体步骤为:
1.1.1.1清空集合D;
1.1.1.2令循环变量ii=1;
1.1.1.3读取协议规则Rii,提取载荷特征个数Mii;遍历Rii的载荷特征,将浮动位
置特征的字符串及固定位置长度大于W的字符串加入集合D;流程如下:
1.1.1.3.1循环变量jj置为1;
1.1.1.3.2读取Rii的第jj个载荷特征rii,jj=<string[K],offset>;
1.1.1.3.3如果offset等于-1,说明rii,jj为浮动位置串,则将rii,jj.string[K]添加到
D,跳转至1.1.1.3.5;否则,offset不等于-1,说明rii,jj为固定位置特
征字符串,进入1.1.1.3.4;
1.1.1.3.4如果K大于W,则将rii,jj.string[K]添加到D;
1.1.1.3.5循环变量jj增1;
1.1.1.3.6如果循环变量jj不等于Mii+1,跳转至1.1.1.3.2;否则,进入到1.1.1.4;
1.1.1.4循环变量ii增1;
1.1.1.5如果循环变量ii不等于N+1,跳转至1.1.1.3;否则,进入1.1.2;
1.1.2遍历协议识别规则的载荷特征,若载荷特征的字符串属于集合D,则填写载
荷特征映射表S[N][M]及深度报文检查索引分簇表A;协议识别规则Ri包含
Mi个载荷特征,记其中Mi’个载荷特征的字符串属于集合D,Mi’为整数,
Mi’≤Mi;若Mi’≥1,则规则Ri属于深度报文检查索引分簇,将规则Ri的Mi’
个载荷特征中的最长字符串作为Ri的索引要素;流程如下:
1.1.2.1清空载荷特征映射表S[N][M]、深度报文检查索引分簇表A、协议识别规
则处理状态向量B[N],令Y=N;
1.1.2.2令循环变量iii=1;
1.1.2.3读取协议规则Riii,提取载荷特征个数Miii;遍历Riii的载荷特征,若载荷

\t特征的字符串属于集合D,则标记S[N][M]及A,记录属于集合D的最长
字串编号max_id及长度max_len,max_id、max_len为正整数;流程如下:
1.1.2.3.1max_len置为-1;
1.1.2.3.2循环变量jjj置为1;
1.1.2.3.3读取Riii的第jjj个载荷特征riii,jjj=<string[K],offset>;
1.1.2.3.4在集合D中查找字符串riii,jjj.string[K],若找不到,说明字符串
riii,jjj.string[K]不属于集合D,跳转至1.1.2.3.9;若找到,说明字符串
riii,jjj.string[K]属于集合D,进入1.1.2.3.5;
1.1.2.3.5令临时变量id记录字符串riii,jjj.string[K]在集合D中编号;
1.1.2.3.6填写协议识别规则载荷特征映射表S[N][M],方法是:Si,j=id;
1.1.2.3.7如果riii,jjj.string[K]的长度K大于max_len,则更新max_id、max_len
的值:max_len=K,max_id=id;
1.1.2.3.8若riii,jjj.offset等于-1,记录D中编号为id的字符串属于浮动位置特征,
方法是:Aid.float=1;若riii,jjj.offset不等于-1,记录该固定位置特征
对D中编号为id的字符串的位置要求,方法是:令临时变量
kk=riii,jjj.offset,Aid.locationkk=1;
1.1.2.3.9循环变量jjj增1;
1.1.2.3.10如果循环变量jjj不等于Miii+1,跳转至1.1.2.3.3;否则,进入1.1.2.4;
1.1.2.4如果max_len等于-1,转1.1.2.7;否则,进入1.1.2.5;
1.1.2.5选择集合D中编号为max_id的字符串作为规则Ri的索引要素,将规则编
号iii插入至Amax_id.rule[L],方法是:令变量kkk从1递增,若首次出现
Amax_id.rulekkk等于零,则Amax_id.rulekkk置为iii,即完成将规则编号iii插入
至Amax_id.rule[L],进入1.1.2.6;
1.1.2.6至此规则Riii完成深度报文检查索引分簇,更新Biii、Y的值:Biii=1,Y=Y-1;
1.1.2.7循环变量iii增1;
1.1.2.8如果循环变量iii不等于N+1,跳转至1.1.2.3;否则,结束。
3.如权利要求2所述的基于索引分簇...

【专利技术属性】
技术研发人员:孙一品陈曙晖庞立会王飞钟求喜张博锋刘宇靖闫晓明
申请(专利权)人:中国人民解放军国防科学技术大学
类型:发明
国别省市:湖南;43

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1