阅读:2961回复:11
特征检测的实现及应用
以貌取人――特征检测的实现及应用
◇ 李毅 入侵检测系统在判断一个行为是否属入侵可采用两种方法: 1. 基于行为的检测:根据使用者的行为或资源使用状况来判断是否入侵,而不依赖于具体行为是否出现来检测,所以也被称为异常检测(Anomaly Detection)。这类检测包括概率统计方法和神经网络方法。 2. 基于知识的检测:运用已知的攻击方法定义好入侵模式,通过这些入侵模式判断是否是入侵行为。这类方法包括模型推理、状态转换分析和特征检测。 概率统计方法在实现上的困难在于统计检测对事件发生的次序不敏感,定义入侵的阀值比较困难;神经网络方法目前在理论上还不成熟,其应用还不够成熟,主要是网络拓扑结构及各元素的权重难以确定;模型推理在系统实现中,决策器如何有效翻译脚本是个问题;状态转换方法对与系统状态无关的入侵无能为力。 特征检测是根据已有知识库的知识,对网络上的数据流做分析,当其中某个或某部分条件满足时,系统就被判断为入侵行为发生。由于计算机程序对单纯的匹配比较容易实现,因而特征检测也就成了今天众多入侵检测系统的基本实现手段。 一、基于特征检测的IDS组成 基于特征检测的入侵检测系统的实现如图1所示,其中“包抓取引擎”从网络上抓取数据包;“包分析引擎”对数据包做简单处理如IP重组、TCP流重组,并根据规则库判断是否为可疑或入侵的数据包;“规则库”是入侵检测系统的知识库,定义了各种入侵的知识;“响应模块”是当系统发现一个可疑的数据包的时候所采取的响应手段。其中,“包分析引擎”是整个系统的核心所在,对入侵特征的检测在这里完成。 图1 基于特征检测的入侵检测系统的实现 二、特征分类 对一个数据包或数据流的分析是通过对这段数据里验证一条条的规则来实现的。规则就是对一个或多个入侵特征的描述。规则描述的入侵特征可以分为以下两类: ● 协议本身的特征 这类特征由于协议的公开性和确定性,因此检测一般比较容易,可以排他性地确定一个数据包是否为攻击包。 例如:一个IP包(如图2所示)如果我们要检查某条规则的匹配数据包为一个TCP协议包的时候,我们检查数据包的Protocol字段是否为6,如果不是6就可以排除掉这条规则。 图2 IP包结构 ● 特定“字节串”的组合 这类特征主要与特定攻击相关,一个数据包有这样的“字节串”不一定说明这是个攻击包,但“有嫌疑”。它要结合其他特征来确定。“字节串”的匹配与位置有关,因此简单的“等于”或“不等于”的匹配的性能也依赖于算法的实现。 三、特征检测的实现 特征检测的实现要求能够很好地匹配入侵检测的规则,同时不能降低系统的性能。 ● 协议的分层 TCP/IP是一组不同层次上多个协议的组合,上层协议的实现要通过下层协议的实现来完成。因此,从分类上来说,下层协议可以看成是上层协议数据包的大类,首先要下层协议的特征满足才考虑上层协议的特征。此外,在TCP/IP协议实现时上层协议的一些细节可以在下层协议的实现时得到体现。比如在IP的首部有协议字段可以确定是TCP协议还是UDP协议,而TCP首部有端口可以确定上层应用协议的类型究竟是HTTP还是SMTP或者其他协议。 据此,我们实现一棵规则树时(如果我们仅分析TCP/IP协议族),树根是IP协议的字段,靠近树根的是TCP、UDP和ICMP的包特征,再远一点是HTTP、SMTP等高层协议的特征。这样,当遍历规则树的时候,首先判断其是否为IP包,以决定是否匹配IP的规则,再分析其是TCP包还是UDP包,以决定是否匹配TCP或UDP的规则,最后再确定其对应的高层协议,以决定是否匹配HTTP或SMTP的规则(如图3所示)。 图3 基于协议特征的数据包判断过程 ● 特征的分层 在实现对具体规则的匹配时,一般先检测基于协议的特征匹配情况,然后再匹配特定字串的特征。比如图4所示的规则是检测那些不成功的Telnet尝试企图。它首先是个TCP规则,其次,它有几个特征: 图4 轻量级入侵检测系统――Snort的规则格式 1. 端口为23; 2. TCP状态标志为A、P; 3. 从数据载荷的开始搜索包含字串“Login incorrect”。 这里前2个都是基于协议的特征,而第3个是匹配特定字串(“Login incorrect”)的特征。因此,当对一个数据包做检测的时候,先检验特征1、2,再检测特征3。 如果反过来的话,由于字符串匹配本身比较费时,因而效率较低。 ● 匹配算法问题 字节串的匹配算法直接影响系统的检测效率。当对网络数据包匹配特定字节串的特征时,需要一个有效的字符串搜索算法。 字符串搜索算法中,最著名的两个是KMP算法(Knuth-Morris-Pratt)和BM算法(Boyer-Moore)。另外,还有很多改进的BM算法存在,比如Boyer-Moore-Horspool算法。经过研究发现,Boyer-Moore-Horspool也存在可以改进的地方。 四、优势和缺陷 1. 优势 ● 容易实现 基于特征的入侵检测的计算模型比较容易实现。主要的匹配算法也都是成熟算法。因此实现上技术难点比较少。 ● 检测精确 对入侵特征的精确描述使入侵检测系统可以很容易将入侵辨别出来。同时,因为检测结果有明显的参照,可以帮助系统管理员采取相应的措施来防止入侵。 ● 升级容易 不少基于特征检测的入侵检测系统都提供了自己的规则定义语言,当新的攻击或漏洞出现时,厂商或用户只要根据该攻击或漏洞的特征编写对应的规则,就可以升级系统。 2. 缺陷 ● 依赖性太强 这种系统的检测能力很大程度上依赖于规则库的广度与精度,因此规则库的维护工作量较大。 ● 对变体攻击适应性比较差 由于入侵特征的确定性,当入侵者改动部分特征,入侵检测系统就可能视而不见。 ● 规则冗余 有时候同一种特征可能采用多种方式表达,为了检测所有这些方式,必须分别提供规则来描述入侵。 ● 对不利用系统脆弱性的入侵不敏感 难以检测出内部人员的入侵行为,如合法用户的泄漏。 |
|
最新喜欢:cyliu
|
沙发#
发布于:2002-07-05 11:32
图2
|
|
|
板凳#
发布于:2002-07-05 11:35
图3
|
|
|
地板#
发布于:2002-07-05 11:35
图4
|
|
|
地下室#
发布于:2002-07-10 09:31
大佬,能否作为附件的方式贴出来啊!
|
|
5楼#
发布于:2002-07-10 11:10
大佬,能否作为附件的方式贴出来啊! 打算累死我呀?待我试试吧。 |
|
|
6楼#
发布于:2002-07-10 11:16
[quote]大佬,能否作为附件的方式贴出来啊! 打算累死我呀?待我试试吧。 [/quote] 快点,不然打PP |
|
7楼#
发布于:2002-07-10 11:31
[quote][quote]大佬,能否作为附件的方式贴出来啊! 打算累死我呀?待我试试吧。 [/quote] 快点,不然打PP [/quote] 这世道,。。。。。 |
|
|
8楼#
发布于:2003-10-28 13:12
打不开
|
|
9楼#
发布于:2005-03-29 12:02
snort的设计思想很不错的
|
|
10楼#
发布于:2005-05-27 09:58
snort检测引擎做的比较好,分析规则之后,将其相应的检测函数加入到选项结构中,之后对包的检测,只要调用这些检测函数。最新版本,采用的规则端口分组的方法,加快选择匹配。
|
|
11楼#
发布于:2005-05-27 10:02
snort的缺点,对所有的包都进行匹配、检测,检测效率比较低。我想是不是可以加入一些认证特性,比如通信过程中,当进行认证之后,之后的包就可以不用匹配检测了。不知道是否可行,只是一个想法。
[编辑 - 5/27/05 by Jahnacs] |
|