Snort规则检测引擎 |
您所在的位置:网站首页 › 规则引擎原理解析 › Snort规则检测引擎 |
1. 规则头和规则选项
snort将所有已知的攻击以规则的形式放在规则库中,规则库中的每条规则条目分为两个部分:规则头(RuleHeader)和规则选项(RuleOption)。 规则头包括:规则行为、协议、源/目的IP地址、子网掩码以及源/目的端口、数据流方向。规则选项包含:报警信息和异常包的信息 (特征码)这是Snort中一条事件定义:alert tcp $EXTERNAL_NET any-> $HOME_NET any(msg:”SCANNULL”;flags:0;seq:0;ack:0;reference:arachnids,4;classtype:attempted-recon; sid:623; rev:1;) 2. 规则的内存结构:二维链表:RTN+OTNSnort采用了一种二维链表的结构,维护规则库: 其中RuleHeader决定了该规则条目处于二维链表横向的哪一个节点上RTN(Rule Tree Node); RuleOption决定了该规则条目处于二维链表纵向的哪一个节点上OTN(Optional Tree Node)。 规则头部的动作相同的单元都放在对应动作的管理链表中。 规则选项简称为OTN;每个RTN持有RuleFpList和OTN链表,前者是使用RTN中属性触发进行二次处理的回调函数,后者是规则选项集合。 Snort从2.0版本开始引入规则快速匹配引擎,基本思想是通过规则中的目的端口和源端口,进行二次分类,以提高规则的检测匹配效率: 如果源端口为特定值,目的端口为ANY,该规则加入到源端口对应的集合中如果目的端口为特定值,源端口为ANY,该规则加入到目的端口对应的集合中如果目的端口为ANY,源端口为ANY,该规则加入到目的端口对应的集合中对于ICMP,目的端口按照ICMP type进行指定。快速匹配引擎,包含四个重要结构.构建快速规则匹配引擎,主要是对这几个数据结构进行填充: PORT_RULE_MAP:顶层数据结构,按照TCP/UDP/ICMP/IP定义4个PORT_RULE_MAP类型的变量。PORT_GROUP:特定端口值划分的规则子集,按照端口将规则添加到顶层结构中某一个PORT_GROUP数组中。RULE_NODE:规则节点链表,ONTX:OTN和RTN链表,用于将快速匹配的数据结构和原始规则链表联系起来。PORT_RULE_MAP->PORT_GROUP->RULE_NODE->RULE_PRT指向的就是ONTX,ONTX指向原始链表中的RTN和OTN。 4. 规则检测引擎流程 Detect函数是检测引擎的入口Detect->fpEvalPacket,主要是判断IP协议号TCP/UDP/ICMP/IP,然后调用响应的fpEvalHeaderXXX检测函数以最常用的fpEvalHeaderTcp为例: 3.1 首先调用prmFindRuleGroupTcp函数获取适合当前规则的子集合(根据快速匹配算法查找端口匹配的子集合) 3.2 然后调用fpEvalHeaderSW,对相应端口组中的规则进行检测 (1)每一类规则子集合(PORT_GROUP)包含三类结点:包含content,包含uricontent,没有包含content的结点,每个数据包要分别匹配这三个结点 (2)tcp重组后,才能匹配content和uricontent结点,调用 mpseSearch,采用多模匹配算法进行匹配 (3)没有content的结点,就是各个选项关键字,主要依靠调用关键字插件函数来实现:fpEvalOTN/fpEvalRTN |
今日新闻 |
点击排行 |
|
推荐新闻 |
图片新闻 |
|
专题文章 |
CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭 |