一种自动协议识别方法及系统发明专利说明书.docx
- 文档编号:24610013
- 上传时间:2023-05-29
- 格式:DOCX
- 页数:18
- 大小:157.97KB
一种自动协议识别方法及系统发明专利说明书.docx
《一种自动协议识别方法及系统发明专利说明书.docx》由会员分享,可在线阅读,更多相关《一种自动协议识别方法及系统发明专利说明书.docx(18页珍藏版)》请在冰豆网上搜索。
一种自动协议识别方法及系统发明专利说明书
说明书
一种自动协议识别
方法及系统
启明星辰叶润国(发明专利已授权)
技术领域
本发明涉及一种可用于入侵检测防御(IDS/IPS)产品中的自动协议识别方法及系统,它依据网络数据流中报文特征智能地识别出其所属协议类别,属于网络技术领域。
背景技术
入侵检测/防御系统(IntrusionDetection/ProtectionSystem,IDS/IPS)作为网络安全防护的重要手段,通常部署在关键网络内部/网络边界入口处,实时捕获网络内或进出网络的报文数据流并进行智能综合分析,发现可能的入侵行为并进行实时阻断。
应用层协议深层解析技术在当前主流IDS/IPS产品中被广泛采用,可用来实现基于协议攻击特征和协议异常的入侵检测。
目前多数IDS/IPS产品都基于端口映射表来判别网络报文所属协议类型,比如,如发现捕获的网络报文中源/目端口为80,则认为它为HTTP(HypertextTransferProtocol)协议报文,则将该报文交给HTTP协议分析引擎进行协议解码和入侵检测。
通常这种端口映射表在IDS/IPS产品出厂时已确定,但允许管理员修改以适应实际环境的需要。
近年来,出现了一批新型的网络协议,包括SIP(SessionInitiationProtocol)和P2P(Peertopeerprotocol)协议等,它们并不采用固定协议端口,而是在协议运行过程中动态协商端口;此外,目前各种木马、间谍软件为躲避IDS/IPS产品的入侵检测都采用了一些特殊的处理方式,主要表现为:
1)并不使用固定通信端口进行通信;2)采用公知端口进行私有协议通信(比如80端口);3)采用隧道技术进行私有协议通信(比如HTTP隧道技术)。
在这种情况下,IDS/IPS产品无法根据端口映射表来正确识别报文所属协议类型,而需要根据网络报文特征智能识别报文所属协议类别,否则,IDS/IPS产品将产生大量的误报或漏报。
因此,有必须发展不单纯依赖于协议端口的智能协议识别技术,以减少IDS/IPS产品的误报或漏报。
并且,该智能协议识别技术必须满足以下要求:
智能地根据报文特征自动识别报文所属协议类型,而不单纯依赖于端口映射表;
尽可能依据协议数据流早期报文特征快速识别出所属协议类型,以尽早进行协议解码分析和入侵检测目的;
具有非常高的协议识别效率,算法实现尽可能简单;
方法通用性强,支持几乎所有协议,并要求协议识别结果准确率高。
发明内容
为了克服现有技术的不足,本发明提供一种自动协议识别方法及系统。
本发明解决其技术问题所采用的技术方案是:
一种自动协议识别方法,包括协议样本特征提取和协议识别两个阶段步骤,其中,所述的协议样本特征提取阶段步骤包括协议类型样本的协议指纹提取和相应协议验证规则建立,协议识别阶段步骤包括协议指纹快速匹配和协议识别结果快速验证。
协议识别方法之协议样本特征提取阶段,其中所述的协议指纹提取方法有如下步骤:
对于文本命令类型协议样本,用{命令+参数}或{状态码+参数}格式描述,直接提取协议样本中命令和状态码作为协议指纹;
对于固定报头类型协议样本,将固定报头中所含字段类型分为静态字段和动态字段类型,寻找尽可能多的连续静态类型字段,并将其取值组合定义为该类型协议指纹。
对于其它无固定格式类型协议样本,寻找可以标识该协议样本服务类型的单词作为协议指纹。
协议样本特征提取阶段,其中所述的协议验证规则建立方法具有如下步骤:
提取协议样本中除协议指纹之外其它特征作为该类型协议样本的协议验证规则,包括可进一步标识协议样本类型的字段、单词或者其它要求协议消息满足的规范等。
采用控制流图(CFG)的步骤,描述为某类型协议样本建立的协议验证规则集,在CFG图中:
存在TRUE和FALSE两个特殊节点,其中FALSE节点只有一个,而TRUE节点可以有多个;除TRUE和FALSE节点外,CFG中每一个节点表示一条协议验证规则(布尔逻辑),其执行结果为真或假;CFG中每一条有向边表明当有向边源节点执行结果为true或false时CFG图的实际执行路径;该CFG图从根节点开始执行,直到遇到TRUE或FALSE节点为止。
协议识别方法之协议识别阶段,其中所述的协议指纹快速匹配方法具有如下步骤:
将IP报文应用层数据作为文本输入,将所有协议指纹作为模式集合,采用多模式配算法找到IP报文所属的可能协议集合;
在执行多模式匹配算法前,先按协议指纹偏移对所有协议指纹进行分类并分别建立哈希表;
对每一类协议指纹,从IP报文应用载荷相应偏移处开始,依次对前i=1,2,3..个字节进行哈希,同时检查哈希表子链,在子链非空情况下遍历子链,即调用子链中每一项的相关协议验证规则:
如果IP报文通过了协议验证规则验证,则识别出了IP报文所属协议类型。
协议识别方法之协议识别阶段,其中所述协议验证规则执行过程具有如下步骤:
采用虚拟机模型来实现相关协议验证规则的解释执行;
将用CFG描述的协议验证规则集翻译成可在虚拟机上直接执行的虚拟机程序;
由一虚拟机解释程序解释执行由协议验证规则集翻译而来的虚拟机程序,程序执行结果即是本次协议识别结果。
一种自动协议识别系统,其特征在于:
所述协议识别系统包括协议指纹库、协议验证规则库、协议指纹匹配引擎和协议验证引擎,其中,协议指纹库和协议验证规则库分别存储了协议样本特征提取阶段产生的协议指纹和协议验证规则集,协议指纹匹配引擎实现所述的协议指纹快速匹配算法,协议验证引擎实现了所述的虚拟机模型;
协议样本特征提取阶段提取的协议指纹和相应协议验证规则集用配置文件描述,系统工作时,将基于该配置文件构建协议指纹哈希表,将相应协议验证规则集翻译成虚拟机程序供协议验证引擎执行。
本发明的有益效果是,本发明解决了IDS/IPS产品中对于非标准端口网络协议的自识别问题。
本发明能够在网络协议通信初期根据前期报文特征自动识别所属协议类型,并采用协议验证规则集进一步验证协议识别结果正确性。
与已有方法相比,本发明完全基于网络协议通信初期报文特征智能识别出所属协议类别,而不单纯依赖于固定端口,可以对所有动态端口协议、隧道协议进行自动识别,具有协议识别速度快和准确率高等优点,可广泛应用于IDS/IPS等所有需要智能协议自识别的网络安全产品中。
附图说明
下面结合附图和实施例对本发明进一步说明。
图1为本发明涉及的协议识别方法两阶段工作流程图;
图2为固定报头格式协议指纹提取举例;
图3为采用CFG描述相关协议验证规则集举例;
图4为基于快速Hash协议指纹匹配图例;
图5为基于快速Hash协议指纹匹配和协议验证流程图。
具体实施方式
实施例1;本发明所述协议识别过程方法包括两个工作阶段:
前期协议样本特征提取阶段和在线协议识别阶段,各阶段步骤如下(见图1):
A.协议样本特征提取阶段;
依据协议指纹提取方法从协议类型样本中提取该类协议的协议指纹(每一类协议一般有多个协议指纹),并建立该类协议相应的验证规则集。
将提取的协议指纹和相应协议验证规则集分别存储到协议指纹库和协议验证规则库中,供协议识别阶段指纹匹配引擎和协议验证引擎使用。
B.在线协议识别阶段;
捕获未知协议类型数据流前期IP报文,从应用层载荷中提取所有可能协议指纹,采用多模式匹配算法与协议指纹库中各指纹进行匹配,识别出可能的协议集合;
对于上述可能协议集合中每一协议,调用相应协议验证规则进行验证,如果协议验证规则验证通过,则识别出该IP报文所属正确协议类型,否则继续执行下一个候选协议相关验证规则,直到识别出正确协议为止。
一旦识别出IP报文所属协议类型,将创建一个<源IP,目IP,源端口,目端口,协议ID>五元组,从而使得属于该协议数据流的后续报文无需执行本协议识别方法,以减轻系统计算开销。
本协议识别方法一般只需要捕获到应用协议初期交互过程中第1-2回合中带应用数据载荷的报文。
因此,对于基于TCP协议的应用层协议,需要捕获TCP三次握手结束后第1-2个带应用层数据的报文。
本协议识别方法可以在网络通信协议初期交互的第1-2个协议消息数据中识别出所属协议类别,因此具有很好的协议识别速度。
本协议识别方法为每一类型协议样本建立一个协议指纹集合(SigSet)和相应协议验证规则集(RuleSet),其中,协议指纹是一个有限长度的连续字节串,它标识一种特定类型的协议消息;当协议指纹正确建立后,通过IP报文携带的协议指纹特征就可以识别其所属协议类型。
举例,”GET”可以标识HTTP协议中的HTTPRequest消息类型,可以用它来作为HTTP协议指纹;反过来,如果发现某一IP报文携带协议指纹”GET”,则该IP报文所属协议类型为HTTP的可能性很大。
但是,单纯基于协议指纹特征得到的协议识别结果可能错误,因此需要额外措施来进一步验证本次协议识别结果正确性。
本协议识别方法在识别出IP报文所属可能协议类型之后采用协议验证规则集来验证协议识别结果正确性。
协议验证规则集与具体协议相关,它为一个集合,集合中每一条规则定义了将一个IP报文判别为该类型协议时该IP报文必须满足的布尔表达式。
因此,可以将为某一协议类型建立的协议验证规则集看作是该类型协议规范的一个必要条件集合。
为某一类型协议建立的协议验证规则集可用布尔表达式树或者控制流图(ControlFlowGraph,CFG)来描述,本协议识别方法选择控制流图描述每种类型协议验证规则集,采用虚拟机模型来实现协议验证规则集的解释执行。
HTTP协议指纹和验证规则建立举例;
首先为HTTP协议建立协议指纹集合,并建立相应协议验证规则集:
为HTTP协议指纹“GET”建立的验证规则集为:
Rule1:
文本中必须含有”HTTP”字串;
Rule2:
文本中必须包含“\r\n”;
Rule3:
等等。
为HTTP协议指纹”POST”建立的验证规则集为:
Rule1:
文本中必须含有”\r\n\r\n”字串;
Rule2:
文本中必须包含Content-Length字串;
Rule3:
等等。
为HTTP协议指纹”HEAD”建立的验证规则集为:
Rule1:
文本中必须含有”HTTP”字串;
Rule2:
文本中必须包含”If-Modified-Since”字串;
Rule3:
等等。
然后,在协议识别过程中,如果发现一IP报文包含”GET”协议指纹,通过协议指纹匹配算法可以识别其所属协议类别可能为HTTP,这时进一步执行前面定义的HTTP协议协议指纹”GET”所对应的验证规则集来验证该IP报文:
如果该IP报文通过了集合中所有验证规则的验证,则HTTP就为该IP报文所属的正确协议类型;否则,继续从IP报文中提取其它协议指纹、进行指纹匹配找到可能所属协议类型、并执行相关协议验证规则进行验证,直到找到正确结果为止。
实施例2;自动协议识别方法协含有以下步骤;
协议指纹提取;
将所有协议分为三类:
1)文本命令格式协议;2)固定报头格式协议;3)无固定格式协议。
下面分别描述这三类协议的指纹提取方法。
文本命令格式协议;
文本命令格式协议中,所有消息都可能用{命令+参数}方式描述,这里的命令不但包括通常的协议命令,还包括服务端响应的状态码。
文本命令格式协议的例子很多,包括POP3,SMTP,FTP,HTTP等。
对于这类协议,只需要提取协议命令和协议响应状态码作为协议指纹即可。
比如,对于HTTP协议,提取的HTTP协议指纹集合为{GET,POST,HEAD,HTTP/0.9,HTTP/1.0,HTTP/1.1}。
这些协议指纹在HTTP协议报文应用载荷中偏移为0,在这种情况下,可以省略协议指纹偏移的标示。
固定报头格式协议;
固定报头格式协议一般都为二进制格式协议,在该类协议中,所有协议消息都具有一个固定长度的报头,然后是可变长度数据。
固定报头格式协议例子很多,包括DB2、TDS、DNS和MSRPC协议等。
固定报头中,一般包含Type、version、Length、Flags和ID等字段。
根据在网络协议交互过程中取值变化情况的不同,可以将这些字段分为两类:
a)静态类型字段,即字段取值为常数或者只能取少数几个值,比如Type,Version,Flags等字段;b)动态类型字段,即字段取值情况预先不可预测,比如Length、ID等字段。
因此,只能从第一种类型字段中提取协议指纹。
如果提取的协议指纹标识某一类型协议的精确度越高,则协议识别过程中第一次通过协议指纹匹配算法找到正确协议类型的可能性就越高,因而可能只需少量协议验证规则条目就可识别出IP报文所属协议类别,并可明显减少协议识别算法的计算开销。
为达到这个目的,通常将尽可能多的连续静态字段组合起来作为该类协议样本的指纹。
固定报头类型协议指纹提取举例(见图2):
对于TDS(TabularDataSystem)协议,其固定报头中有两个连续静态字段(Type和Status),因此如果将Type+Status组合作为TDS协议的指纹,可以提高协议指纹标识该类型协议的准确度;
对于MSRPC(MicrosoftRemoteProcedureCall)协议,其固定报头中存在5个连续静态字段(Major_Ver、Minor_Ver、PktType、PktFlags和DataRepresentation),因此如果将上述5字段组合作为MSRPC协议指纹,可以提高协议指纹标识该类型协议准确度。
通过该方法提取的协议指纹一般都有2-4个字节长度,并且各协议指纹之间出现碰撞的可能性很小,因此可明显加快协议识别速度。
无固定格式协议;
对于无固定格式协议,无法采用通用方法提取协议指纹,而只能针对特定协议特定分析提取协议指纹的可能性。
所幸的是,属于该类型的应用层协议很少,目前只看到Auth协议。
因此,对于这种情形可以单独对待。
协议验证规则集(RuleSet)建立;
协议验证规则集与具体协议类型相关,为各种类型协议建立协议验证规则集目的主要有以下3个:
1)通过协议验证规则集可以检验本次协议识别结果正确性,即在识别出某一IP报文可能所属协议类型后进一步验证其是否真正符合该类型协议规范(双重检查);
2)在两个协议之间的协议指纹出现碰撞时,可以通过协议验证规则排除错误协议类型,找到正确的协议识别结果(识别结果筛选);
3)协议验证规则可以深入检查协议数据载荷,发现那些隧道型协议,比如MSN-over-HTTP和SMB-over-NetBIOS等。
在协议识别过程中,找到一个IP报文可能所属协议类型后,必须执行相关协议验证规则集,并只有在该IP报文通过相关协议规则集中所有规则验证后才算找到了所属的正确协议类型。
为某一类型协议建立的协议验证规则集为一个规则集合,采用控制流图(CFG)模型来描述协议验证规则集。
如图3所示,在CFG模型表示方法中,每一条协议验证规则用一个椭圆节点表示,这里除TRUE和FALSE两条用于返回协议验证结果的特殊规则外,其余验证规则都是一个布尔逻辑,其执行结果只能为真或假。
这个协议验证规则集合从根节点开始执行,如果当前协议验证规则执行结果为真,则执行其左侧的验证规则树,如果为假,则执行其右侧的验证规则树,直到执行到TRUE或FALSE节点为止。
图3为两个协议验证规则集例子:
左图定义了与HTTP协议指纹“GET“相关的协议验证规则集,该协议验证规则集的执行从根节点开始,某一IP报文只有全部通过了
条验证规则的验证,才可能返回HTTP协议ID,否则返回FALSE。
右图定义了与HTTP协议指纹”HTTP/1.1”相关的验证规则集,它支持HTTP隧道协议深层解析,该规则集从根节点开始执行:
如果某一IP报文通过了前两个(
)协议验证规则的验证,则识别它为HTTP协议类型;进一步,如果该IP报文还满足第
条协议验证规则,则识别它为MSN-Over-HTTP协议;对于其它情况则识别失败。
为某一协议指纹建立的协议验证规则集大小直接影响到本类型协议的识别结果准确性和算法效率:
当为某一类型协议指纹定义的协议验证规则条目越多,则协议识别结果的准确性就越高,但是协议识别效率会较低;当为某一类型协议指纹定义的协议验证规则条目越少,则协议识别效率会很高,但可能会降低协议识别结果准确性,因此,应根据需要合理定义协议验证规则集。
建议:
如果协议指纹较长,与其它协议指纹冲突可能性很小,则定义的协议验证规则条目可以很少甚至没有;如果协议指纹较短,则与其它协议指纹冲突的可能性较大,因此需要考虑定义多一些的协议验证规则条目来筛选通过协议指纹匹配引擎得到的协议识别结果集以得到最可能的协议类型。
协议指纹快速匹配;
在前期协议样本提取阶段定义好各种类型协议指纹和相关协议验证规则后,需要设计一种高效的协议指纹匹配算法,用于在协议识别阶段对IP报文应用数据进行协议指纹发现和快速匹配,从而找到该IP报文所属的可能协议类型集合。
可以采用多模式匹配算法来执行这种协议指纹快速匹配过程:
将IP报文应用层载荷数据作为多模式匹配算法的Text,所有定义的协议指纹集合作为模式集合,使用多模式匹配算法找到所有可能的协议类型集合,然后对该集合中每一协议类型执行相应协议验证规则,排除错误的协议类型,直到找到合适的协议类型为止。
基于传统多模型匹配算法实现协议指纹快速匹配算法具有算法实现快、通用性好等优点,但它没有充分利用协议指纹通常位于IP报文应用载荷头部这个特点,因此,本协议识别方法设计了一个高效的协议指纹快速匹配算法。
观察到:
95%协议类型的协议指纹偏移为0,对于偏移不为0的协议指纹(占5%),偏移位置都出现在IP报文应用层载荷靠前位置并且取值都有规律,比如在偏移2,4,8,12,16;此外,所有协议指纹长度都较短,一般不超过8字节。
因此,本协议识别方法首先按指纹偏移值对协议指纹进行分类,然后对每一类协议指纹采用快速Hash定位算法进行协议指纹匹配。
协议指纹快速Hash定位算法描述;
以偏移为0的所有协议指纹为例描述该快速Hash定位算法,对于其它偏移不为0的协议指纹类别,同样可以采用该快速Hash定位算法。
快速Hash算法准备阶段;
将偏移为0的所有协议指纹按照指定Hash算法插入哈希表,将Hash值相同(即协议指纹冲突)的协议指纹串连起来,形成图4所示的协议指纹Hash表。
快速Hash检索阶段;
该协议指纹快速Hash定位和协议验证算法工作流程图见图5。
对于捕获的IP报文应用层数据m,从偏移位置0开始,依次对m前i(i=1,2,3,…)个连续字节进行哈希(Hash)运算(分别用H(m1-1),H(m1-2),…,H(m1-maxsig)表示,这里maxsig为最大协议指纹长度),并同时检查Hash表中相应Hash子链情况:
如果对应Hash子链为空,则进行下一个Hash运算;
否则,依次执行子链中具体协议验证规则集:
如果协议验证规则验证通过,则识别出了正确的协议类型。
否则,继续执行子链中下一候选协议的协议验证规则集,直到找到合适的协议类型为止。
该快速Hash协议指纹匹配和协议验证算法伪代码描述如下:
HTab[index]={NULL}//偏移为0的协议指纹哈希表
…
//依次扫描Payload前maxsig字节
For(i=1;i<=maxsig;i++){
index=Hash(payload,i);//对前i个字节进行Hash
if(HTab[index]!
=NULL){//如果Hash子链不为空
//遍历子链,并调用相应的协议验证规则
prec=HTab[index];
do{//callprotocolverifyfunctionpointer.
ret=proto_verify(payload,len,prec->rules);
//如果协议验证通过,则返回协议ID
if(ret>0)returnret;
prec=prec->next;//否则继续验证子链下一元素
}while(prec!
=NULL);}}
协议验证规则执行;
本协议识别方法中,在通过IP报文携带的协议指纹检索到所属的可能协议类型时,需要调用为该类型协议定义的协议验证规则来进一步验证该IP报文是否满足该类型协议规范,即上述伪代码中的proto_verify函数的实现问题。
本发明采用CFG模型来描述协议验证规则,并采用虚拟机来解释执行由协议验证规则生成的CFG图,因此,在前期协议样本特征提取阶段需要将为各类型协议定义的协议验证规则集(即CFG图)编译成可在虚拟机上直接执行的程序代码;然后,在协议识别阶段,在协议指纹匹配引擎识别出IP报文所属的可能协议类型后,由协议验证引擎加载该类型协议的虚拟机程序代码进行解释执行,程序返回结果为识别出的协议类型ID或者0(0表示未知协议ID)。
本协议识别方法中协议验证引擎使用的虚拟机模型类似于BPF过滤器中使用的虚拟机模型,它基于寄存器操作,专为IP报文处理设计,是一个非常简单高效的虚拟机模型。
该虚拟机模型由一个存储器,一个索引寄存器。
一个可擦除存储器,一个隐含程序计数器组成。
它能执行加载与存储指令,分支与算数指令等。
基于虚拟机模型设计的协议验证引擎以IP报文应用层载荷为虚拟机程序输入数据,程序执行结果为该IP报文所属的协议类型ID或者0(表示识别失败)。
通过采用CFG图来描述某种类型协议的协议验证规则集,并通过虚拟机引擎来执行协议验证规则集,使得该发明所述的协议识别方法支持非常复杂的协议验证规则集定义,协议验证规则表达能力可以达到非常细的粒度,可满足所有类型协议的协议验证规则表达需求。
在本发明所述之协议识别方法中,前期协议样本特征提取阶段定义的协议指纹和相关协议验证规则集由配置文件给出,管理员可通过修改配置文件中协议验证规则集在协议识别结果准确性和协议识别效率之间作出调整,无需修改协议指纹匹配引擎和协议验证引擎虚拟机代码,因而本协议识别方法具有非常好的架构灵活性、跨平台移植能力。
说明书附图
图1
图2
图3
图4
图5
摘要附图
权利要求书
1.一种自动协议识别方法,其特征在于:
所述协议识别方法包括协议样本特征提取和协议识别两个阶段,其中,所述的协议样本特征提取阶段包括协议类型样本的协议指纹提取和相应协议验证规则建立,协议识别阶段包括协议指纹快速匹配和协议识别结果快速验证步骤。
2.如权利要求1所述的一种自动协议识别方法,其特征在于:
协议识别方法之协议样本特征提取阶段,其中所述的协议指纹提取方法具有如下特征:
对于文本命令类型协议样本,用{命令+参数}或{状态码+参数}格式描述,直接提取协议样本中命令和状态码作为协议指纹;
对于固定报头类型协议样本,将固定报头中所含字段类型分为静态字段和动态字段类型,寻找尽可能多的连续静态类型字段,并将其取值组合定义为该类型协议指纹;
对于其它无固定格式类型协议样本,寻找可以标识该协议样本服务类型的单词作为协议指纹。
3.如权利要求1所述的一种自动协议识别方法,其特征在于:
所述协议识别方法之协议样本特征提取阶段,其中所述的协议验证规则建立方法具有如下特征:
提取协议样本中除协议指纹之外其它特征作为该类型协议样本的协议验证规则,包括可进一步标识协议样本类型的字段、单词或者其它要求协议消息满足的规范。
4.如权利要求3所述的一种自动协议识别方法,其特征在于:
其中所述的协议验证规则建立方法具有如下特征:
采用CFG的步骤,CFG有一个FALSE节点,有多个TRUE节点;除TRUE和FALSE节点外,CFG中每一个节点表示一条协议验证规则布尔逻辑,其执
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 一种 自动 协议 识别 方法 系统 发明专利 说明书
![提示](https://static.bdocx.com/images/bang_tan.gif)