Snort-入侵检测系统规则集的优化

摘要:随着网络的发展,入侵检测系统将成为一个重要瓶颈。本文根据TCP/IP协议的特点对Snort-入侵检测系统规则集进行了优化设计。
关键词:Snort,入侵检测系统,规则集
0 引言
入侵检测系统(IDS)从计算机网络系统的若干关键点收集信息(如系统日志、审计数据和网络数据包等),然后通过分析这些信息来判断网络系统中是否有违反安全策略的行为和是否存在攻击。入侵检测依赖于两个假设:①用户和程序的活动是可以观察的。例如:系统审计机制。②正常活动和入侵(异常)活动有截然不同的行为。异常的活动被标识为入侵。入侵检测系统有多种分类。
根据检测方法,入侵检测分为两种类型[①]:误用检测(misuse detection)和异常检测(anomaly detection)。误用检测是将已知的攻击方式以某种形式存储在知识库中,然后通过判断知识库中的入侵模式是否出现来实施检测,如果出现,说明发生了入侵。该方法的优点是检测准确率较高,缺点是只对已知攻击类型和已知系统安全漏洞进行检测。而异常检测是指将用户正常的习惯行为特征存储到特征数据库中,然后将用户当前行为特征与特征数据库中的特征进行比较,若两者偏差足够大,则说明发生了异常。这种方法的优点是能检测未知的攻击类型,缺点是误检率较高。
根据检测的数据源,入侵检测系统可以分为基于主机的入侵检测系统和基于网络的入侵检测系统。基于主机的入侵检测系统是通过分析审计数据和系统日志来发现可能的入侵。基于网络的入侵检测系统是通过分析网络数据包来检测可能的入侵。下面介绍一个免费的轻量级的入侵检测系统——Snort。
1 Snort 入侵检测系统
Snort是一种基于网络的入侵检测系统,通过误用检测规则来检测攻击。Snort规则就是使用“一种简单的、轻量级的描述语言”来描述网络上带有攻击标识的数据包。Snort规则文件是Snort的核心,是Snort的攻击知识库。如果只有Snort的可执行程序,而没有规则文件,那么Snort就不能真正实现入侵检测功能,即不能识别任何攻击。
Snort规则在逻辑上分为两部分:规则头(Rule Header)和规则选项(Rule Option)。规则头定义了规则的行为、所匹配网络包的协议、源地址、目标地址及其网络掩码、源端口和目标端口等信息;规则选项则包含了所要显示给用户查看的警告信息以及用来判定此数据包的其他信息(如:tcp的flags字段,数据字段的内容等)[②]。
下面是一个简单的规则:
alert tcp any any ->192.168.1.0/24 111(content:“|00 01 86 a5”|;msg:“mountd access”;)
上例中,括号左边部分为规则头,括号里面部分为规则选项,规则选项中冒号前的部分称为选项关键字(Option Keyword),这里需要注意的是规则选项并不是任何规则都必需的,它只是用来明确地定义表示的是某种攻击、需要采取某种行为(如警告等)。只有当组成规则的各个元素都为真时才能触发相应的操作。综合起来考虑,规则里限制数据包的各元素的关系是逻辑与;同时规则库中的各条规则之间的关系可以被认为一个大的逻辑或(进行逻辑或操作的各元素只要有一个为真时,整个表达式即为真)。
如图1,所有规则按照规则头排列成主链,然后根据规则选项把规则插入到这个链表中,构成规则集,这样每一个选项节点就对应一条规则。规则头节点主要记录了规则头信息,包括源IP/端口、目标IP/端口,并用指针指向下一个规则头节点、附属于它的规则选项列表和规则头列表结构。规则选项节点存放所有规则选项的信息和处理插件的处理函数列表(option function),分别指向规则头节点的指针和关联选项节点的指针。


图1 规则集
Snort就是这种基于规则匹配的网络入侵检测系统。而规则是根据源IP、目标IP、源端口范围和目标端口范围等属性分类组织成为规则集的。这样,当一个数据包被检测时,Snort检测每个规则集的上述四个参数以决定是检测该规则集还是转移到下一个规则集。如果数据包与规则集的四个参数相匹配,该规则集中的规则依次得到检测,并且每条规则中的其余的参数也按顺序检测。当该规则集中的所有规则被检测完以后,接着搜索下一条规则集中的四个参数,检测过程重新开始。每一个数据包都必须经过从头到尾的匹配过程。
这样,入侵检测就是把从网络上捕获的数据包和规则集进行匹配的过程。如果存在一条匹配该数据包的规则,就表示检测到了攻击,然后按照规则所指定的行为进行处理(如警告等);如果搜索完所有规则集都没有找到匹配的规则,就认为该数据包正常。
通常,当规则数量很少时,上述检测方法是很高效的。可是,当规则集中有很多条规则时,标准检测方法会变得非常低效。规则检测速度变慢,是由于每个数据包都必须检测每条规则集中的各个参数。
然而,根据规则集的结构和匹配过程的分析可知,许多匹配过程是根本不需要的,存在许多可优化的地方。另外,随着目前网络带宽的不断加大,IDS将成为网络带宽的一道瓶颈,入侵检测系统规则集的优化将给入侵检测系统的提供了更大的机遇。
2 规则的优化
为了提高规则检测的处理速度,需要使用基于规则集检测方法。规则优化器必须进行规则集的构造和选择。
2 1 规则集的构造
使用规则优化器构造规则集对基于规则集检测方法是必要的。规则优化器必须满足两个要求:(1)尽可能构造最小的、最高效的规则集;(2)构造离散化的规则集。这样,使得每个数据包仅需搜索一个规则集。
在初始化阶段,规则优化器利用最具独立性的Snort规则参数来构造规则集。因为每类传输协议有让其独立的不同参数,所以所选的规则参数对于不同传输协议是不同的。例如:TCP规则集可以根据源端口和目标端口来区别于其它的TCP规则集,而ICMP规则集可以根据该规则的ICMP类型加以区别。规则优化器利用具有独立性的参数构造规则子集。这样使得多规则检测引擎所需检测的规则集更小。更重要的是,它允许根据数据包的特征让其分别通过相应的规则子集。
2 .2 规则集的选择
当Snort运行时,规则优化器为每个数据包选择一个规则集。规则集的选择依赖于收到的数据包的一些参数和规则集中参数的匹配结果。这样,规则优化器只选择那些能匹配该数据包的规则并且只过滤多规则搜索引擎需要处理的规则。此后多规则搜索引擎可以进一步通过基于规则集的检测方法检测内容[③]。对于一些异常数据包,有可能会选择两个规则集,这种情况称为“独立冲突”。
3 规则优化器的实际应用
规则优化器根据传输协议的独立参数把规则分成可定义的、小规则集,以提高Snort检测速度。经分析,源端口、目标端口可作为TCP/UDP数据包的独立参数;ICMP类型可作为ICMP数据包的独立参数;传输协议ID可作为IP独立参数。下面将分别给予介绍:
3 1 TCP/UDP
TCP/UDP协议中最独立的属性是源端口和目标端口。通常情况下端口有两种类型:保留端口号和非保留端口号。这意味着主机之间大部分通讯有一个保留端口(通常是服务器端)和另一是非保留端口(大于1024且通常是客户端)。该属性允许规则优化器使用保留端口作为独立参数。大家都知道,TCP/UDP在客户和服务器之间是双向通讯的。也就是,Snort所检测的数据包是从客户到服务器和从服务器到客户的。因此不必应用所有规则到客户通讯和服务器通讯的每一个数据包。规则优化器根据独立端口位于源端口或还是位于目标端口来对规则分组。如果独立端口位于源端口,通常数据流来自服务器,选择服务器响应规则。而当独立端口位于目标端口时,通常数据流来自客户端,选择客户请求规则。如果源端口和目标端口都是非保留端口时,这样情况的比较少,使用通用规则对其进行处理。如图2所示。
 

图2 TCP/UDP规则的细化

可是,当源端口和目标端口都是保留端口,需要检测多个规则集,出现了独立冲突。独立冲突可分为两种类型:已定义独立冲突和未定义独立冲突。已定义独立规则出现是很正常的,未定义独立冲突很少发生,而当它发生时可能是恶意或异常事件。
对于已定义独立冲突通过检测由两个合法独立规则集合并而成的一个已定独立冲突规则集加以处理。一个合法的独立冲突的例子是在服务器之间DNS查询中。此时,两个端口号都是53,那么应该用哪一个规则集来处理这种数据包?应该是两个。这种情况下,合法独立冲突通过协议加以定义,把处理源端口和目标端口都为53的DNS查询规则合并,并加入到已定义独立冲突规则中。
当未定义的独立冲突发生时,也同样需要检测多个规则集。仿效已定义的独立冲突的处理那样处理所有的未定义独立冲突产不可能,因为地址空间太大。例如,如果有1000个独立的源端口和1000个独立目标地址规则集,这样将有1000000个独立冲突端口规则集。考虑到一个规则集需要的存储器,这是不现实的。现在,依赖于用户所需要的性能,未定义的独立冲突有三种处理的方法:双重检测、首先命中检测和随机检测。
(1 )双重检测
双重检测是处理未定义独立冲突的最基本类型。既然对应一个未定义独立冲突对两个规则集,双重检查就检查两个规则集,大约花两倍的检查时间。双重检测保证发现一个数据包中的所有事件,但是,这种方法更容易通过构造引起未定义独立冲突的数据包来强制双重检查而导致拒绝服务(DoS)攻击。
2 )首先命中检测
首先命中检测方法类似于双重检查方法,因为它也检查两个规则集。不同的是如果事件发生在首先被检测的第一个规则集中,那么第二个规则集将不检测。如果在第一规则集有一个产生的事件,这相对于双重检测来说能改善性能。
3 )随机检测
随机检查方法随机选择两个规则集中的一个。通过用这种方法,它阻止由于未定义独立冲突引起的DOS攻击。但是这也不能保证发现所有的事件。
在三种不同的检查方法中,首先命中检查方法是一种中间方案。它有助于阻止由于双重检测方法而导致的DoS攻击,也可以产生为对每个未定义独立冲突(如果可能)产生事件。但是,它不能保证像随机方法不可能产生DoS攻击,也不能保证像双重检查方法被发现所有事件。
3 .2  ICMP
ICMP规则只用ICMP类型域来优化ICMP规则集。没有类型域的规则被认为是通用ICMP规则并且被加到规则集后面。这样,当ICMP类型的某类数据包到来时,使用相应类型的规则进行处理,没有类型域则使用通用规则加以处理。例如,类型代码8(回显请求)的ICMP数据包把类型代码8作为参数选择类型8的规则集加以检测,而不需要检测其它规则。如图3所示。
 
 


图3 ICMP规则的细化
3 .3 IP

规则优化器使用IP传输协议域作为独立参数来对IP协议进行优化。包括TCP/UDP或ICMP在内的所有IP规则被分解成特殊的协议规则集。而除TCP/UDP或ICMP之外的其它协议根据传输协议域被分解成的IP规则集。而不包括IP协议域的规则被认为是通用IP规则并被添加到TCP/UDP、IP和ICMP规则集后面。如图4所示[④]。

 
                                  图4 规则优化设计       

  

图5 优化规则集的总体结构

如图5,这样就构造了一个规则集优化的总体结构,其实只是比图4的更详细一些。当获得一个数据包后,首先判断是否具有IP协议域,如果没有,使用通用IP规则加以处理;如果有IP协议域,则进一步判断是TCP/UDP,ICMP和其它,如果是TCP/UDP则根据独立参数据使用相应规则集予以处理,如图2所示;如果是ICMP类型则根据其独立参数,使用相应规则集予以处理,如图3;否则使IP规则加以处理;最后根据检测结果,判断是否是恶意的数据包或发生了入侵。
4 结论
规则优化器是通过构造最小的规则集,然后根据数据包的独立参数来选择合适的规则集,消除了对大量无关规则集的检测,大大提高了Snort入侵检测系统的检测效率,对解决其瓶颈问题大有帮助。
 
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值