Snort规则的分析与制定
随着网络应用的普及,安全性变得日益重要,作为网络安全的一个重要组成部分网络入侵检测系统(network in.trusion detection system,nids)受到业界更多的关注,snort正是一款基于libpcap库、开放源码的nids系统。这些开放源代码的数据分析软件包,为我们构建规则处理模块提供了便利条件,但通常它又有一定的局限性,所以,要开发一个真正功能强大、实用的网络入侵检测系统,开发者需要对各种网络协议、系统漏洞、攻击手法、可疑行为等有一个很清晰、深入的研究,才能制定相应的安全规则集和安全策略。它正是构建nids的工作重点。也是本文关注的焦点。
1 snort简介写作论文
snort是用c语言编写的开放源代码软件,它是一个功能强大、跨平台、轻量级的网络入侵检测工具。当前最新的版本是snort-2.7.0.1.tar.gz mon aug 6 10:14:59 edt 2007(last modified)⋯。新版与以前的版本相比,增加的核心功能就是引入了数据匹配相对偏移的概念。在规则方面增加了若干选项,如content选项增加了distance和within修饰选项,可以使匹配多个有一定顺序和固定间隔的模式成为可能。目前ourcdire公司开始推行snort的许可证协议,以使其可以对一些具有及时性的,经过测试的规则进行收费。nort系统由四个基本模块组成,如1所示。数据采集模块,在数据采集模块中可以加入预处理模块,对网络数据进行合并、去除冗余信息,从而提高系统的效率;预处理模块,用来扩展snort的功能;检测引擎,这是snort的核心模块;日志与报警输出模块,管理员通过它来指定记录日志和告警的输出。用户还可以自己编写模块来扩展snort的功能,以应对不断出现的威胁。
2 snort规则与制定
2.1 snort的规则与链表
snort的工作原理是解析规则集形成规则树,然后利用lihpcap对采集来的数据进行模式匹配,若匹配成功,则认为是有入侵行为发生,进入报警理模块。所以snort规则是它的核心,必须拥有一个强大的入侵特征数据库,才能准确、高效地捕捉入侵行为。snort规则被写成“规则头(选项)”的形式。规则头包含规则动作、协议、源和目标ii,地址与网络掩码、源和目标端口信息和、方向操作符;规则选项部分包含报警消息内容和要检查的包的具体部分]。规则选项中可能有一个或多个选项,不同选项之间使用“;”分隔开了,它们之间为“与”的关系。选项由关键字和参数组成,每个关键字和它的参数问使用冒号“:”分隔。一条规则可书写为:alert tcp“external—net any 一>”home —net
l(msg:“f site cpwd overflow attempt”:flow:estab-lished,to — server;content“site ”;nocase;content“cp-这条规则的动作选项是发出alert,协议类型是tcp,源ip地址是“external。net,指任意外网地址,源端口为任意端口(any),目的ip地址是”home—net,指任意内网地址.目的端口是21号端口,网络流量的方向是一> ,指需要从外网到内网的网络流量中匹配该特征。snort将检测规则利用链表的形式进行组织,建立链表时,首先按规则类型分类,分成了五个单独的规则链;然后针对这五个规则链的每一个按协议类型分成相应的节点链表;在节点链表之下又分为若干规则树节点(rule treenode rtn);每个规则树节点下又有若干规则选项,称为选项树节点(opfion~tree node otn)。每一个rtn对应于规则头,其中包含协议类型、源和目的地址、源和目的端口号等;每一个otn对应于规则选项结点,其中包含报警信息(msg)、匹配内容(content),tcp标志位(flags)等选项。当数据包到达检测引擎时,snort将首先匹配规则链,然后根据数据包协议匹配相应的节点链表,于是从左至右遍历rtn,参看源、目的ip及端口号是否匹配,找到一个匹配后,算法向下进行,再进入otn中寻找匹配,每个otn结点包含一条规则所对应的全部选项,当数据包与所有函
数都匹配成功时,即判断此数据包为攻击数据包,进入告警模块。
2.2 snort规则的制定
在设计检测方案时,既要考虑快速地结束一个无效的检测过程,也应该尽量减少检测的范围。如何从众多的参数中选出最适合的、最容易达到匹配目的的参数先进行匹配?以tcp报文来说,独特的属性就是源端口和目的端口。端口可以分为两种,保留端口和非保留端口。对于一般的连接来说,通常在服务器端采用保留端口,在客户端采用非保留端口,所以可以利用保留端口作为独特的参数。snort可以观察保留端口的位置,如果保留端口在源端口,通常情况下就意味着这是从服务器端发出的网络流量,反之,如果在目的端口,就是从客户端发出的流量。比如当snort观察到一个htyp请求报文,先检查它的源端日和目的端口,看是否能找到一个参数来组成独特的集合。一般来说,htrp请求报文的源端口是超过1024的非保留端口,而它的目的端口是80或者其他已知的htrp服务端口,此时就可以从特征库中选出目的端口是80,源端口任意的特征组成一个集合,再进行接下来的匹配工作。netbus是一个流行的用于远端控制的黑客软件。net—bus通过tcp/ip协议,可以远程将应用程序指派到某一套接字端口来运行,netbus的执行行为具有典型性,它发出的l12信息包具有多种可分辨的特性。下面就分析ids是如何针对它制定规则的。
1.netbus木马的客户端有两种,开放的都是12345或12346端口,如果仅仅连接其中任一端口,如tcp 12345就触发事件,那么就定义规则为:
alert tcp $ exte rnal_net any 一> $ home— net12345(msg:“backdoor netbus backdoor”;flow:to—serv—er,established;)
该规则仅仅指定目的端口为tcp 12345的即为netbus后门,这样即便是其它链接,如telnet host 12345也会触发该事件,容易产生误报。
2.如果对tcp 12345端口发送“getlnfo/0di”,触发事件.那么就定义规则为:alert tcp $ exte rnal—net an y 一> $ home— ne2345(msg:“backdoor netbus getinfo”;flow:to—server,established;content:“getlnfo10di”;)
该规则相对第一种来说好些,它同时对端口和字符特征进行匹配,但是也存在很大的局限,因为如果黑客将木马的通讯端口改为tcp 2345,而不是用默认的tcp 12345,那么该规则也就失效了。
3.如果对非tcp12345端口的其他端口发送“g~info10di”就可以触发事件,那么定义规则为:alert tcp $ exte rnal— net any 一> $ home— netny(msg:“backdoor netbus getinfo”;flow:to—server,e8-tablished;content:“getlnfo10di”;)该规则只要对非tcp 12345端口的其他端口发送包含“getlnfo10di”就可以触发该事件。由于端口并不是肯定的共性,因此这种定义方式也容易产生误报。从以上规则的定义,可以看出多数tcp规则定义的特点是以端口为特征、以标志位或者协议的字段为特征、以某个数据段为字符串特征。在定义规则时,抓住这些特征或特征的组合,可以有效提高ids的工作效率。
3结语
准确、快速是ndis的两个重要指标。由于规则是根据若干属性分类组织成为规则集,当一个数据包被检测时,snort检测每个规则集的预设参数,当该规则集中的所有规则被检测完后,接着搜索下一规则集中的参数,检测过程重新开始。每一个数据包又必须经过从头到尾的匹配过程。这对于规则集中有很多条规则时,这样的检测方法就难以符合快速的要求。所以要实现这两个指标,对规则集改进将是大有可为的。
参考文献:
[1] snort[eb/ol].http:///gongxue/">工业出版社,2005,1.
[4] 严书亭,刘佳新,王新生.snort规则链表结构的分析与改进[j].燕山大学学报.2006,30(3):272~275.
[5] 方杰,许峰,黄皓.一种优化入侵检测系统的方案
[j].计算机应用.2005,25(1):147—149
上一篇:主题门户理论研究