[发明专利]一种生成特征码确定状态机的方法和装置有效
| 申请号: | 200710118296.7 | 申请日: | 2007-07-04 |
| 公开(公告)号: | CN101079890A | 公开(公告)日: | 2007-11-28 |
| 发明(设计)人: | 常利民 | 申请(专利权)人: | 杭州华三通信技术有限公司 |
| 主分类号: | H04L29/06 | 分类号: | H04L29/06 |
| 代理公司: | 北京德琦知识产权代理有限公司 | 代理人: | 王琦;王诚华 |
| 地址: | 310053浙江省杭州市高新技术产业*** | 国省代码: | 浙江;33 |
| 权利要求书: | 查看更多 | 说明书: | 查看更多 |
| 摘要: | |||
| 搜索关键词: | 一种 生成 特征 确定 状态机 方法 装置 | ||
技术领域
本发明涉及网络安全技术领域,特别是涉及一种生成特征码确定状态机的方法和装置。
背景技术
为了保证计算机或网络安全,通常需要检查文件或报文中是否存在妨害安全的信息,比如:病毒、攻击程序等。由于这些病毒或攻击程序一般具有某种特征码,所以在检查文件或报文时,特征码就常常作为被检查的对象。如果检查出文件或报文中存在某种特征码,则可以认为该文件或报文有妨害安全的信息。
特征码一般用正则表达式(Regular Expression)的形式进行描述。由于正则表达式可以表示字符串输入状态的情况,所以通常又将正则表达式编译为确定状态机(DFA,Deterministic Finite Automation)的形式。其中,DFA中的一个状态可以表示字符串输入过程的一个状态,DFA的状态数则可以表示字符串输入过程中所存在的状态数。另外,DFA占用存储空间的大小与状态数呈正比关系,即状态数越多,DFA占用存储空间也越多。
正则表达式编译为DFA之后,就可以将文件或报文中的字符串作为输入字符串,利用DFA对输入的字符串的状态进行匹配,如果匹配成功,则确定输入字符串中存在特征码,从而实现特征码的匹配。
实际应用中,不同的病毒或攻击程序存在不同的特征码。如果为每一个特征码单独编译一个DFA,在检查某文件或报文时,由于不清楚该文件或报文是否存在妨害安全信息的特征码,也不清楚存在哪种特征码,就需要利用多个DFA依次对文件或报文进行检查,其查找速度非常缓慢。
为了提高查找特征码的速度,可以将多个特征码对应的正则表达式进行分组,并分别将每一个分组的正则表达式进行合并编译,生成对应的DFA。这样,在利用某一个DFA检查文件或报文时,就可以对多个特征码同时进行匹配,从而提高查找速度。
在生成DFA的过程中,现有技术一般是将正则表达式随机进行分组,再对每一个分组分别进行编译。在这种方式下,如果分组不合理可能会导致生成的DFA的状态数过多,占用内存过多的现象。比如,某正则表达式为:/ALTER/s.*?FILE/s+((AS|MEMBER|TO)/s+)?(/x27[^/x27]{512})/smi;另一达式为:/ALTER/s.*?FILE/s+((AS|MEMBER|TO)/s+)?(/x22[^/x22]{512})/smi。如果将这两个正则表达式合并编译为同一个DFA,编译后将产生3.67M个状态数,生成的DFA将占用3.67G字节的内存。但如果将两条正则表达式单独进行编译,每一条正则表达式仅生成8.6K个状态数,占用8.6M字节的内存。
可见,由于在生成DFA过程中分组不合理,多个正则表达式编译后产生的状态数可能比正则表达式单独编译后总的状态数多得多,增加了占用内存的容量,不利于实现特征码的匹配工作。
发明内容
有鉴于此,本发明的第一个发明目的在于提供一种生成特征码确定状态机的方法,可以保证分组的合理性,避免合并编译生成的确定状态机产生大量的状态,占用过多的存储空间。
本发明的第二个发明目的是提供一种生成特征码确定状态机的装置,可以保证分组的合理性,避免合并编译生成的确定状态机产生大量的状态,占用过多的存储空间。
为了达到上述第一个发明目的,本发明提出的技术方案为:
一种生成特征码确定状态机的方法,该方法包括以下步骤:
a、将第一条特征码对应的正则表达式作为当前表达式;
b、判断是否存在未与当前表达式合并编译过的未处理分组,如果有,则将未处理分组中的一个作为当前未处理分组,执行步骤c;否则,将当前表达式加入新建的分组中并单独编译生成确定状态机DFA,执行步骤d;
c、将当前表达式与当前未处理分组进行合并编译,如果合并编译获得的状态数不大于当前表达式与当前未处理分组单独编译的状态数之和,则将当前表达式加入当前未处理分组中,将合并编译的结果作为生成的DFA,再执行步骤d;否则,返回步骤b;
d、将下一条特征码对应的正则表达式作为当前表达式,返回步骤b,直至处理完所有特征码对应的正则表达式。
上述方案中,步骤b所述将当前表达式加入新建的分组中并单独编译生成DFA之后,步骤b进一步包括:
保存单独编译后获得的状态数;
步骤c所述当前未处理分组单独编译的状态数为事先保存的状态数。
上述方案中,所述步骤c包括:
c1、将当前表达式进行单独编译,获得当前表达式单独编译的状态数;
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于杭州华三通信技术有限公司,未经杭州华三通信技术有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/200710118296.7/2.html,转载请声明来源钻瓜专利网。
- 上一篇:形成高深宽比连接孔的方法
- 下一篇:一种探究光影成像原因的实验装置





