一种面向高速网络的模式匹配方法转让专利
申请号 : CN200810143729.9
文献号 : CN101409623B
文献日 : 2010-09-01
发明人 : 秦拯 , 赵远 , 武年华 , 张生华
申请人 : 湖南大学
摘要 :
权利要求 :
1.一种面向高速网络的模式匹配方法,首先由计算机对每种攻击网络的数据流提取出特征值并按照规则语言将其写成规则模式;网络通信中,计算机通过检测系统将捕获到的数据包与所述规则模式进行匹配;如果匹配成功,则检测系统将其判断为攻击行为,其特征在于,所述匹配包括如下步骤:(1)设所述捕获到的数据包中的正文串T=T[1]…T[n],其中长度为n;
所述规则模式的模式串P=P[1]...P[m],其中长度为m,n>>m;
(2)给出滑动距离函数
上述函数给出了正文串中可能出现的任意字符c在模式串中的位置;
(3)给出判断字符在模式串中出现的频次的函数;
(4)T[1]和P[1]对齐,对P[m]与T[m]匹配;
若P[m]与T[m]匹配不成功,则按步骤(5)计算出模式串向右移动的距离,右移相应距离;若P[m]与T[m]匹配成功,则比较模式P[1]与文本相应的字符,若P[1]匹配不成功,则按步骤(5)将模式串右移;若p[1]匹配成功,则依次对P[m-1]P[2]P[m-2]P[3]...进行匹配,依次类推,直到匹配完成;
(5)计算向右移动距离,其移动步骤为:
1):在失去匹配时,首先计算出由文本串最后一个字符,设为T[k],启发得到的右移位置k+Skip[k],其值记为k1;
2):计算由文本串的下一个字符T[k+1]启发得到的右移位置k+1+Skip[k+1],其值记为k2;
3):判断k1、k2的大小,如果k1>k2,再判断T[k+1]在模式串出现频次,用步骤(3)中的函数B(c)判断T[k+1]在模式串出现的频次;若B(T[k+1])=1,即T[k+1]在模式串只出现一次,则将模式串末端和T[k+1+m]处对齐进行新一轮的匹配;若B(T[k+1])=0,即T[k+1]在模式串只出现大于一次,则将模式串末端和T[k1]处对齐进行新一轮的匹配;如果k2>=k1,则将模式串末端和T[k2]对齐进行新一轮的匹配。
说明书 :
技术领域
本发明是一种字符串模式匹配的方法,适用于高速网络环境下网络入侵检测、网络入侵保护、计算机病毒特征码匹配等需要进行字符匹配的领域的应用。
背景技术
著名的轻量级入侵检测系统Snort的核心部分检测引擎中就采用了BM方法进行规则的匹配。但是由于该方法没有考虑已匹配的后缀与导致匹配失败的当前字符之间的相邻关系,使得字符串匹配的效率不够高。
发明内容
本发明的解决方案是,结合BM方法的比较方式,提出一种面向高速网络的模式匹配方法,首先由计算机对每种攻击网络的数据流提取出特征值并按照规则语言将其写成规则模式;网络通信中,计算机通过检测系统将捕获到的数据包与所述规则模式进行匹配;如果匹配成功,则检测系统将其判断为攻击行为;所述匹配具体包括如下步骤:
(1)设所述捕获到的数据包中的正文串T=T1…Tn(长度为n)
所述规则模式的模式串P=P1...Pm(长度为m),(n>>m)
(2)给出滑动距离函数
上述函数给出了正文串中可能出现的任意字符c在模式串中的位置
(3)给出判断字符在模式串中出现的频次的函数;
(4)T[1]和P[1]对齐,对P[m]与T[m]匹配;
若P[m]与T[m]匹配不成功,则按步骤(5)计算出模式串向右移动的距离,右移相应距离;若P[m]与T[m]匹配成功,则比较模式P[1]与文本相应的字符,若P[1]匹配不成功,则按步骤(5)将模式串右移;若p[1]匹配成功,则依次对P[m-1]P[2]P[m-2]P[3]...进行匹配,依次类推,直到匹配完成。
(5)计算向右移动距离,其移动步骤为:
1):在失去匹配时,首先计算出由文本串最后一个字符,设为T[k],启发得到的右移位置k+Skip[k],其值记为k1;
2):计算由文本串的下一个字符T[k+1]启发得到的右移位置k+1+Skip[k+1],其值记为k2;
3):判断k1、k2的大小,如果k1>k2,再判断T[k+1]在模式串出现频次,用步骤(2)中的函数B(c)判断T[k+1]在模式串出现的频次。若B(T[k+1])=1,即T[k+1]在模式串只出现一次,则将模式串末端和T[k+1+m]处对齐进行新一轮的匹配;若B(T[k+1])=0,即T[k+1]在模式串只出现大于一次,则将模式串末端和T[k1]处对齐进行新一轮的匹配;如果k2>=k1,则将模式串末端和T[k2]对齐进行新一轮的匹配。
本发明提供的上述面向高速网络的模式匹配方法HPMM,结合BM方法从比较方式和移动策略两个方面出发实现创新突破:一是打破了传统的从左向右或是从右向左的匹配方式,采用从模式两端向中间位置交替的匹配顺序,减少了在BM方法匹配过程中,出现模式的一部分后缀与文本匹配,而模式的前缀却不匹配情况下不必要的比较;二是同时考虑字符串后一位字母的唯一性,提高最大位移m+1的出现概率。本发明适合于高速网络环境下网络入侵检测、网络入侵保护和计算机病毒特征码匹配等需要进行快速字符匹配的领域应用。
附图说明
图2是实施例中BM与HPMM方法的测试数据结果;
图3是实施例中测试数据包类型统计;
图4是Snort中用BM方法和HPMM方法的处理时间的比较;
图5是Snort中用BM方法和HPMM方法的所需内存的比较;
图6是HPMM方法总体流程图;
图7是Snort工作流程图。
具体实施方式
具体的匹配过程包括如下步骤:
(1)设所述捕获到的数据包中的正文串T=T1…Tn(长度为n)
所述规则模式的模式串P=P1...Pm(长度为m),(n>>m)
(2)给出滑动距离函数
上述函数给出了正文串中可能出现的任意字符c在模式串中的位置
(3)给出判断字符在模式串中出现的频次的函数;
(4)T[1]和P[1]对齐,对P[m]与T[m]匹配;
若P[m]与T[m]匹配不成功,则按步骤(5)计算出模式串向右移动的距离,右移相应距离;若P[m]与T[m]匹配成功,则比较模式P[1]与文本相应的字符,若P[1]匹配不成功,则按步骤(5)将模式串右移;若p[1]匹配成功,则依次对P[m-1]P[2]P[m-2]P[3]...进行匹配,依次类推,直到匹配完成。
(5)计算向右移动距离,其移动步骤为:
1):在失去匹配时,首先计算出由文本串最后一个字符,设为T[k],启发得到的右移位置k+Skip[k],其值记为k1;
2):计算由文本串的下一个字符T[k+1]启发得到的右移位置k+1+Skip[k+1],其值记为k2;
3):判断k1、k2的大小,如果k1>k2,再判断T[k+1]在模式串出现频次,用步骤(2)中的函数B(c)判断T[k+1]在模式串出现的频次。若B(T[k+1])=1,即T[k+1]在模式串只出现一次,则将模式串末端和T[k+1+m]处对齐进行新一轮的匹配;若B(T[k+1])=0,即T[k+1]在模式串只出现大于一次,则将模式串末端和T[k1]处对齐进行新一轮的匹配;如果k2>=k1,则将模式串末端和T[k2]对齐进行新一轮的匹配。
本实施例将BM方法和HPMM方法分别应用到Snort进行比较,操作过程为:
(1)找到BM方法在Snort源文件中所在的位置。
BM方法应用在Snort源文件中的mstring.c文件中的mSearch函数中,mSearch函数在检测插件sp_pattern_match.c中的函数uniSearchReal中调用。
(2)将mSearch函数中BM方法的实现替换为HPMM方法来实现,并修改相应的参数与接口。
HPMM方法的核心实现程序按图6的方法流程用C语言来实现。
(3)增加相应变量,测试系统性能。
在Snort源程序文件detect.c中的Preprocess(Packet*P)函数里,增加了计算时间的计时变量,用来计算执行时间,在这个函数里增加了三个变量,在函数执行前增加当前时间start,在这个函数执行结尾增加finish,两者相差得出函数执行的时间spenttime.因为最后显示结果在Util.c文件里,于是在输出结果后面添加一条输出语句,用以显示执行时间spenttime。
(4)编译Snort源文件,重新生成Snort可执行程序。
在VC环境中生成应用了HPMM方法的snort.exe文件,为安装Snort作好准备,然后在Snort的配置文件snort.conf中进行设置,配置网络环境及相应的参数。在Linux操作系统下,在安装好Libpcap后,利用安装Snort,待Snort成功安装后即可开始对系统性能进行测试。性能比较步骤:
(1)规则匹配方法处理时间比较
将Snort工作在入侵检测模式进行数据采集(采集1000个数据包,数据包类型如图3),然后使用采集的数据分别使用BM方法及HPMM方法进行测试,比较它们各自处理的时间。结果如图3,图4所示,HPMM方法由于提高了最大位移出现的概率,减少了移动次数进而减少了匹配次数,使得检测时间比BM方法减少了20%。
(2)系统资源消耗比较
在进行时间比较的同时,我还进行了两种方法在内存使用上的比较,如图5所示,对于相同的样式库,BM方法的所需内存差不多为HPMM方法所需的60%,HPMM方法以内存的增加换取了速度的提高,在当前内存价格不断下降,计算机内存不断增加,入侵特征不断增加的情况下,使用HPMM方法具有现实意义。
(3)系统丢包率测试
不适当的规则将极大的消耗内存或者造成丢包,对系统进行压力测试,可验证极限处理能力,对NIDS而言就是验证它的处理分析数据能力。丢包可能是由于硬件不足或规则不当而消耗过多的CPU。通过加大数据流量检测系统的丢包率,从产生的报警信息看出,在数据流量越大的情况下,应用BM方法的系统的丢包率明显增加,而应用HPMM方法系统的丢包率不明显。
以上测试结果显示,改进前后的系统在性能上比较,原系统比较节约内存,而改进后系统匹配速度快,对于现在内存比较便宜,增加内存比较容易实现,所以新系统的改进很具有现实意义的。