新闻中心

EEPW首页>手机与无线通信>设计应用> 基于网络引擎入侵检测系统的研究与实现

基于网络引擎入侵检测系统的研究与实现

作者: 时间:2011-08-01 来源:网络 收藏

3)数据分析 数据分析模块的功能是分析某一特定协议数据。一个数据分析函数检查一种协议类型的,这样可以方便地进行配置。一个协议数据可能有多个数据分析函数来处理它,这些函数地被放到一个链表中。一般情况下,数据分析尽可能地放到树结构的叶子节点上或尽可能地靠近叶子节点,因为树根部分调用次数最多,过多的数据分析函数聚集在此会严重影响系统的性能。同时叶子节点上的协议明确,分析程序可以少做一些冗余的工作,也由此提高了系统的处理速度。数据分析函数不仅仅由数据包触发,也可以是系统定义的某一个事件来触发。如时间、特定的数据包到来、管理员启动、某种数据分析的结果等都可以触发一个数据分析函数的启动检测。这些灵活的触发方式提供了良好的可配置性,也提供了一个开放的、分布的平台使各种分析技术在一个系统中工作。
数据分析的方法是的核心。使用了快速的模式匹配算法,所有的攻击方法被表示为模式信号,存放在特征数据库中,当前的数据如果和数据库中某种特征匹配,就指出这是这种入侵行为。如发现一个HTTP请求某个服务器上的“/cgi—bin/phf”,这很可能是一个攻击者正在寻找系统的CGI漏洞。
本文设计这个体系结构时充分考虑了系统的开放性,可以向系统中添加任何一种分析方法,也可以把多种分析方法同时运用到系统中,甚至在不关闭系统的状态下向系统动态地添加新的数据分析功能。这充分保证了系统的可靠安全服务。动态添加数据分析功能是通过添加新的动态连接库中的数据分析函数来的。对于已经有的分析功能,可以在入侵特征数据库中添加新的入侵特征,以增强现有模式匹配分析方法的检测能力。

2 检测规则和匹配算法
中,最为关键的部分是数据分析模块。该模块中涉及到两个问题:如何描述入侵行为;使用什么算法来快速检测入侵行为的存在。
中,本文使用了与SNORT兼容的检测规则来描述入侵行为,使用一种改进的Boyer-Moore-Horspool算法来进行匹配。模式匹配是第一代和第二代入侵所使用的攻击特征的数据包分析技术。它的分析速度快、误报率小等优点是其他分析方法不可比拟的。协议分析有效利用了协议的层次性和相关协议的知识,快速地判断攻击特征是否存在。它的高效使得匹配的计算量大幅度减小。
本文在网络的数据分析模块中使用协议分析和模式匹配结合的方法来分析网络数据包。首先使用协议分析来判断要进行哪种类型的特征检测,然后使用检测规则来进行匹配。
2.1 检测规则
每一个模式匹配的人检测方法都需要一个已定的入侵模式。这就需要一种对入侵行为的描述方法。现在的各种入侵中的描述方法各有不同,每个厂商定义自己的描述方法,每种方法各有优缺点。在网安入侵检测系统中,采用了Snort的入侵行为描述方法。Snort是一个开放源代码的轻量级的网络的入侵检测系统。这种描述方法简单、易于实现,能够描述绝大多数的入侵行为。由于其简单,因此检测速度比较快。每条规则分为逻辑上的两部分:规则头部和规则选项。规则头部包含规则的操作、协议、源IP地址和目标IP地址及其网络掩码和端口。规则选项包括报警信息及需要检测模式信息。以下是一个例子:
alert tcp any any->192.168.1.0/24 111(content:“|00 01 86 a5|”;msg:“mounted access”;)
以上规则描述了:任何使用TCP协议连接网络IP地址192.168.1.1到192.168.1.255的任何主机的111端口的数据包中,如果出现了二进制数据00 01 86 a5,便发出警告信息mounted access。在圆括号前的部分是规则头部,在圆括号中的部分是规则选项。规则选项部分中冒号前面的词组称为选项关键字。规则选项不是规则的必需部分,它只是用来定义收集特定数据包的特定特征。一条规则中不同部分必须同时满足才能执行,相当于“与”操作。而同一个规则数据库文件中的所有规则之间相当于一个“或”操作。规则头部包含了定义数据包“从哪里来,到什么地方去、干什么”以及发现满足这个规则所有条件的数据包时应该干什么的信息。规则的第一项是规则操作,第二项是协议,第三项是IP地址和端口。规则操作说明当发现适合条件的数据包时应该做些什么。有3种操作:alert、log和pass。
alert:使用选定的告警方法产生警报,并记录这个数据包。
log:记录该数据包。
pass:忽略该数据包。
规则头部的第二部分是协议。
规则头部的第三部分是IP地址和端口。关键字“any”可以用来定义任何IP地址。网络不提供从主机名称到IP地址的转换,所以IP地址规定为点分十进制的IP地址格式,在IP地址后指定网络掩码。例如任何由外部网络发起的连接可以表示为:
alert tcp ! 192.168.1.0/24 any->192.168.1.0/24 111
端口号可以用几种方法指定:用“any”、数字、范围以及用“非”操作符。“any”指定任意端口。静态数值指定一个单一端口,如80为HTYP,23为TELNET等。指定端口范围用“:”,它可以指定一个范围内的所有端口。如:
log udp any any->192.168.1.0/24 1:1024
记录从任意主机发起的到目标网络的任何主机上的1~1 024端口的UDP协议数据包。
log tcp any any->192.168.1.0/24:6000
记录从任意主机发起的到目标网络的任何主机上的端口号小于等于6 000的TCP协议数据。
log top any:1024->192.168.1.0/24 500:
2.2 匹配算法
匹配算法是检测引擎的关键,它直接影响系统的实时性能。在网络数据包搜索入侵特征时,需要一个有效的字符串搜索算法。字符串搜索算法中,最著名的两个是KMP算法(Knuth-Morris-Pratt)和BM算法(Boyer-Moore)。两个算法在最坏情况下均具有线性的搜索时间。在实用上,KMP算法并不比最简单的c库函数strstr()快多少,而BM算法则往往比KMP算法快上3~5倍。但是BM算法还不是最快的算法,还有很多改进的BM算法存在。
第一次匹配结果是在第二个字符处发现不匹配,于是要把子串往后移动。但是该移动多少呢?最简单的做法是移动一个字符位置;KMP是利用已经匹配部分的信息来移动;BM算法是做反向比较,并根据已经匹配的部分来确定移动量。Boyer-Moore-Hompool算法根据被比较串对齐的最后一个字符(r)来决定位移量的多少。本文的方法是根据紧跟在当前子串之后的那个字符(例子中的i)获得位移量。
显然,由于上一次匹配的失败,移动是必然的,因此,设移动步数为N,则N≥1。但N的最大值是多少?如果这个字符在模式串中,显然应该根据模式串的位置来决定。如果它在模式串中就没有出现,显然连它自己也不用比较了,因此可以移动到该字符的下一个字符开始比较。以上面的例子,子串“search”中并不存在“i”,则说明可以直接跳过一大片,从“i”之后的那个字符开始作下一步的比较,如下:
substring searching procedure
search^
比较的结果,第1个字符又不匹配,再看子串后面的那个字符,是“r”,它在子串中出现在倒数第3位,于是把子串向前移动3位,使2个“r”对齐,如下:
substring searching procedure
search
这次匹配成功了。回顾整个过程,只移动了两次子串就找到了匹配位置,可以看出,用这个算法,每一步的移动量都比BMH算法要大,所以比BMH算法更快。
以下是用类封装的搜索算法:
c.jpg

c++相关文章:c++教程




评论


相关推荐

技术专区

关闭