发明名称 基于索引分簇的网络协议特征匹配方法
摘要 本发明公开了基于索引分簇的网络协议特征匹配方法,目的是优化设计载荷特征与协议识别规则的关联关系,提高规则匹配性能。技术方案是第一步预处理,输入协议识别规则集合,建立深度报文检查索引分簇和固定位置引分簇;第二步深度报文检查;采用当前主流的深度报文匹配引擎遍历检查网络报文的报文载荷中是否包含字符串集合中字符串,输出命中结果;第三步规则匹配;首先,借助深度报文检查索引分簇表,重构深度报文检查引擎返回的命中结果,其次,对深度报文检查特征串索引分簇的规则进行匹配,然后对固定位置索引分簇的规则进行匹配。本发明相比于目前基于报文深度检查的协议识别方法,显著减少了协议规则的匹配次数,提高了协议识别的性能。
申请公布号 CN105515917A 申请公布日期 2016.04.20
申请号 CN201511028457.4 申请日期 2015.12.31
申请人 中国人民解放军国防科学技术大学 发明人 孙一品;陈曙晖;庞立会;王飞;钟求喜;张博锋;刘宇靖;闫晓明
分类号 H04L12/26(2006.01)I;H04L29/06(2006.01)I 主分类号 H04L12/26(2006.01)I
代理机构 国防科技大学专利服务中心 43202 代理人 陆平静
主权项 基于索引分簇的网络协议特征匹配方法,其特征在于包含以下步骤:第一步,预处理,流程如下:步骤1.1建立深度报文检查索引分簇;输入协议识别规则集合R,从协议识别规则的载荷特征中提取深度报文检查字符串集合D,针对每条规则按照长度优先原则筛选深度报文检查字符串作为索引要素,建立深度报文检查索引分簇表A,记录规则处理状态B[N]及未处理规则数Y,Y为整数;其中变量定义如下:<img file="FDA0000898549730000011.GIF" wi="53" he="55" />协议识别规则集合R,R中包含N条协议规则,N为整数;记R<sub>i</sub>表示第i条协议规则,R<sub>i</sub>包含M<sub>i</sub>个载荷特征,r<sub>i,j</sub>为R<sub>i</sub>第j个载荷特征,1≤i≤N,1≤j≤M<sub>i</sub>,i、j、M<sub>i</sub>均为整数;载荷特征包含字符串和固定位置两个元素,记r<sub>i,j</sub>=&lt;string[K],offset&gt;,其中,string[K]表示长度为K的字符串,令string<sub>k</sub>表示r<sub>i,j</sub>中第k个字符,1≤k≤K,k、K均为整数;令offset表示固定位置要求,若offset等于‑1,则r<sub>i,j</sub>为浮动位置串;通过r<sub>i,j</sub>.string[K]访问r<sub>i,j</sub>中的string[K],通过r<sub>i,j</sub>.offset访问r<sub>i,j</sub>中的offset;<img file="FDA0000898549730000012.GIF" wi="53" he="54" />深度报文检查字符串集合D初始值为空,D中不包含重复字符串;<img file="FDA0000898549730000013.GIF" wi="53" he="55" />载荷特征映射表S[N][M]为N行M列矩阵,S[N][M]初始值为全0,S<sub>i,j</sub>表示协议规则R<sub>i</sub>的载荷特征r<sub>i,j</sub>在集合D中的编号,若S<sub>i,j</sub>等于0,说明r<sub>i,j</sub>的字符串r<sub>i,j</sub>.string[K]不属于集合D;<img file="FDA0000898549730000014.GIF" wi="53" he="55" />深度报文检查索引分簇表A,A<sub>d</sub>表示D中第d个字符串的描述信息,d为整数,A<sub>d</sub>包含4部分信息,记A<sub>d</sub>=&lt;float,location[P],index,rule[L]&gt;,其中:●float为浮动位置标记,若float等于1,表示A<sub>d</sub>字符串属于浮动位置载荷特征,通过A<sub>d</sub>.float访问A<sub>d</sub>的float元素;●location[P]表示长度为P的固定位置向量,若location<sub>p</sub>等于1,说明A<sub>d</sub>来自某个固定位置载荷特征,且该特征载荷的offset等于p,1≤p≤P,p、P均为整数,通过A<sub>d</sub>.location<sub>p</sub>访问A<sub>d</sub>的location<sub>p</sub>元素;●index为索引标记,若index等于1,表示A<sub>d</sub>为某协议规则的索引要素,通过A<sub>d</sub>.index访问A<sub>d</sub>的index元素;●rule[L]为长度为L的向量,其中存储A<sub>d</sub>作为索引要素的协议规则的编号,通过A<sub>d</sub>.rule[L]访问A<sub>d</sub>的rule[L]元素,通过A<sub>d</sub>.rule<sub>l</sub>访问A<sub>d</sub>的rule<sub>l</sub>元素,1≤l≤L,l为整数;<img file="FDA0000898549730000021.GIF" wi="52" he="55" />固定位置索引分簇表F,F<sub>f</sub>表示第f个固定位置索引,包含2部分信息,记F<sub>f</sub>=&lt;offset,rule[ROW][L]&gt;,f为整数,其中:●offset表示F<sub>f</sub>所在的偏移位置,采用索引偏移位置为offset的字节为索引,通过F<sub>f</sub>.offset访问F<sub>f</sub>的offset元素;●rule[Row][L]为ROW行L列矩阵,存储对应该字节的ROW种取值的协议识别规则编号,其中rule<sub>r,s</sub>表示编号等于rule<sub>r,s</sub>的协议规则包含某个固定位置特征,该固定位置特征要求偏移位置为offset的字节取值等于r,1≤r≤256,1≤s≤L,r、s均为整数,通过F<sub>f</sub>.rule[ROW][L]访问F<sub>f</sub>的rule[ROW][L]元素,ROW≥256;<img file="FDA0000898549730000022.GIF" wi="47" he="55" />协议识别规则处理状态向量B[N],初始值为全0,B<sub>i</sub>标记第i条协议识别规则R<sub>i</sub>的处理状态,若B<sub>i</sub>等于0,表明该规则尚未处理,若B<sub>i</sub>等于1,表明该规则已完成索引分簇;<img file="FDA0000898549730000023.GIF" wi="52" he="55" />一条规则最多包含M个载荷特征,一个索引要素最多关联L条规则,报文数据载荷的最大长度为P字节,M、L、P均为整数;步骤1.2建立固定位置索引分簇;输入协议识别规则集合R,针对未处理的协议识别规则,按照信息熵评估结果选择固定位置载荷作为索引要素,建立固定位置索引分簇表F,规则处理状态B[N]及未处理规则数Y;第二步,深度报文检查,流程如下:向深度报文检查引擎输入字符串集合D、网络报文;深度报文检查引擎遍历检查网络报文的报文载荷DATA中是否包含D中字符串,输出命中结果Result,Result中包含rnum个命中结果,其中第ci个命中结果Result<sub>ci</sub>=&lt;offset,id&gt;,分别通过Result<sub>ci</sub>.offset、Result<sub>ci</sub>.id访问offset和id元素,其中Result<sub>ci</sub>.offset表示命中位置,Result<sub>ci</sub>.id表示命中的字符串编号;Result按照offset从小到大排序,ci、rnum均为正整数,1≤ci≤rnum;第三步,规则匹配,流程如下:步骤3.1深度报文检查结果重构;根据深度报文检查索引分簇表A,将命中结果Result筛选和重构,提取命中结果中包含的深度报文检查索引要素编号,构成索引要素命中队列HIT,及字符串命中明细表C,其中HIT<sub>hi</sub>表示第hi个索引要素编号,C<sub>ck</sub>表示集合D中第ck个字符串的命中位置列表,采用链表结构存储,C<sub>ck,cz</sub>表示链表C<sub>ck</sub>中存储的第cz个命中位置,hi、ck、cz均为正整数;步骤3.2深度报文检查索引类规则匹配;根据索引要素命中队列HIT中记录的字符串编号遍历相关规则;步骤3.3固定位置类索引规则匹配;根据固定位置索引分簇表F遍历相关规则,输出命中的协议规则编号,结束。
地址 410073 湖南省长沙市开福区德雅路109号