snort源码分析之一:规则模块

一、规则描述
1.1 规则描述
snort源码分析之一:规则模块_第1张图片
说明:(1) 规则划分为两个部分:规则头(RTN,RuleTreeNode)和规则选项(OTN,OptionTreeNode)。规则头包含了规则动作、协议类型、源IP地址、目的IP地址、子网掩码、源端口和目的端口等。
(2)规则选项包含报警信息和需要检查的数据包相关位置的信息。
1.2 规则链表
snort源码分析之一:规则模块_第2张图片
snort源码分析之一:规则模块_第3张图片
说明:(1)snort对这些规则用三维链表的数据结构来组织,三维包含:规则头(RTN,RuleTreeNode)、规则选项(OTN,OptionTreeNode)和检测函数。
(2)整个三维链表有四类节点:动作链表节点、协议链表节点、规则树节点(RTN,RuleTreeNode)、选项树节点(OTN,OptionTreeNode)。所有规则经过三个步骤的分类,从而构成了这个三维链表。
(3)先将所有规则按照动作划分为5类:Activation、Dynamic、Alert、Pass、Log,构成了顶层的链表,链表的每个节点表示一类规则动作。
(4)然后所属动作类别的规则再划分,从而构成协议链表,这是第二层链表。
(5)最后每类协议下的规则按照规则头的特征分类,这样构成的规则头链表的节点被称为规则树节点(RTN,RuleTreeNode),它是三维链表的第一维。
(6)而每类规则头又指向具有该规则头规则的规则选项构成的链表,这个规则选项链表的节点被称为选项树节点(OTN,OptionTreeNode),它是三维链表的第二维。
(7)每个OTN节点又指向一个检测函数链表OptFpLiSt,用来检测规则选项中包含的某些选项的内容,是辅助对数据包检测的,这是三维链表的第三维。
二 规则解析
2.1 规则头解析
snort源码分析之一:规则模块_第4张图片
说明:(1)规则头包含了规则动作、协议、源IP地址、目的IP地址、子网源码、源端口和目的端口等;
(2)规则头链表的节点,规则树节点(RTN,RuleTreeNode),是三维链表的第一维。其对应结构RuleTreeNode,结构中定义了除协议类型和动作外的其他规则头内容。
(3)snort在初始化的时候,ProcessHeadNode负责解析规则库文件中的规则头部分,ProcessHeadNode功能是处理规则头,创建RTN节点,并插入到相应的链表,搭建第三层规则头链表;
2.2 规则选项解析
snort源码分析之一:规则模块_第5张图片
流程说明:(1)具有相同规则头的规则的全部规则选项构成了规则选项链表,该链表的节点用选项树节点OTN(OTN,OptionTreeNode)表示,它是三维链表的第二维。规则选项关键字有40多个,这保证了snort具有强大的功能,同时也带来OTN(OTN,OptionTreeNode)结构的复杂;
(2)ParseRuleOptions函数负责对规则选项进行解析,创建OTN(OTN,OptionTreeNode)节点并连接入相应的第四层规则选项链表。从而完成最后一层链表的搭建。OTN(OTN,OptionTreeNode)节点中的规则选项关键字可分为两类,一类是一般的关键字,函数需要在OTN结构中相应数据域填入相应关键字的数值;另一类是需要用检测插件检测的关键字,函数需要先对这些插件进行初始化,然后 OTN(OTN,OptionTreeNode)构中(OptFpLists opt_func)设置指向这些检测插件的指针;
2.3 规则优化–快速匹配规则集
snort源码分析之一:规则模块_第6张图片
说明:(1)为了提高规则检测的速度,就提出了基于集合的新检测方法。 集会划分总的分两个步骤进行。首先,按照规则的内容匹配选项的情况进行分类,有三种情况:包含Content内容匹配选项;包含Uricontent匹配选项;没有内容匹配选项.然后,再按照源端口和目的端口进行分类。
(2)TCP/UDP协议规则:①源端口:特定端口,目的端口:任意值,该规则添加到源端口值对应的规则集合中。如果该规则目的端口也为特定端口,则该规则同时也添加到目的端口值对应的规则集合中。②源端口:任意值,目的端口:特定端口,该规则添加到目的端口值对应的规则集合中。如果该规则源端口也为特定端口,则该规则同时也添加到源端口值对应的规则集合中。③源端口:任意值,目的端口:任意值,该规则添加到通用规则集合中。需要说明的是,这罩的“任意值”有三种情况:端口确实定义为any;端口值取反;端口被指定了范围。
(3)ICMP协议规则:如果该ICMP协议规则中指定了ICMP类型,则目的端口值被指定为ICMP的类型值,源端口设置为任意值。否则目的端口指定为任意值。该规则接下来的处理参照TCP/UDP协议规则的操作。
(4)IP协议规则:如果该IP规则中指定了运输层协议的类型值,则目的端口指定为运输层协议的类型值,源端口设置为任意值。否则目的端口指定为任意值。该规则接下来的处理参照TCP/UDP协议规则的操作.

你可能感兴趣的:(snort规则,snort,规则解析,规则选项,快速匹配)