第三章 使用Snort规则

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第三章使用Snort规则

如同病毒,大多数入侵行为都具有某种特征,Snort的规则就是用这些特征的有关信息构建的。在第1章中我们提到,你可以用蜜罐来取得入侵者所用的工具和技术的信息,以及他们都做了什么。此外,还有入侵者会利用的已知的系统弱点数据库,如果入侵者试图利用这些弱点来实施攻击,也可以作为一些特征。这些特征可能出现在包的头部,也可能在数据载荷中。Snort的检测系统是基于规则的,而规则是基于入侵特征的。Snort规则可以用来检测数据包的不同部分。Snort 1.x可以分析第3层和第4层的信息,但是不能分析应用层协议。Snort v 2.x增加了对应用层头部分析的支持。所有的数据包根据类型的不同按顺序与规则比对。

规则可以用来产生告警信息、记录日志,或使包通过(pass):对Snort 来说,也就是悄悄丢弃(drop),通过在这里的意义与防火墙或路由器上的意义是不同的,在防火墙和路由其中,通过和丢弃是两个相反的概念。Snort规则用简明易懂的语法书写,大多数规则写在一个单行中。当然你也可以行末用反斜线将一条规则划分为多个行。规则文件通常放在配置文件snort.conf文件中,你也可以用其他规则文件,然后用主配置文件引用它们。

本章将提供给你不同类型规则的信息以及规则的基本结构。在本章的最后,你可以找到一些用来检测入侵活动的规则的例子。读完本章以及后面两章后,你所获得的信息就可以使你建立一个基本的Snort入侵检测系统了。

3.1 TCP/IP 网络分层

在你开始书写规则之前,我们先来简要讨论一下TCP/IP的网络层次结构nort规则是常重要的,因为Snort规则依赖于这些层中的协议。

TCP/IP协议族分为5层,这些层之间相互作用来完成通讯处理工作,它们是:

1、物理层

2、数据链路层,某些文章中也把它们叫做网络接口层。物理层和数据链路

层由物理介质、网络接口适配器和网络适配器驱动所构成。以太网地址在数据链路层定义。

3、网络层,也就是IP层。这一层负责点到点的数据通信并提供数据完整

性。在这一层,所有的主机以IP地址来区分彼此。除了IP协议之外,这一层的主要协议还有ICMP。关于IP协议的更多信息参见RFC791,关于ICMP协议的更多信息查看RFC792。

4、传输层,也就是TCP/UDP层。TCP(传输控制协议)用来建立从源到目

的的可靠的、面向连接的数据传输。而UDP(用户数据报协议)提供无连接的数据传输,UDP在进行数据传输的时候,并不提供数据送达的保证,常用在可以容忍数据丢失的情况下。参见RFC 768获取UDP的更多信息。参见RFC 793来获得更多的关于TCP的信息。

5、应用层,包含提供用户与网络接口的应用程序,例如Telnet、Web浏

览器、ftp客户端等。这些应用程序常有自己用来进行数据通信的应用层协议。

Snort规则可以在网络层和传输层进行操作,另外也有一些方法来探测数据链路层和应用层的异常。Snort规则的第二个部分显示了对应的协议,你很快将了解如何书写这些规则。

3.2 第一个不可用的规则

这里有个非常不好用的规则,事实上,也许是最差的规则,但是它可以很好的检测Snort是否正常工作,并可以产生告警:

alert ip any any -> any any (msg: "IP Packet detected";)你可以在你第一次安装Snort的时候在snort.conf的末尾加上这条规

则,这个规则可以使每当捕获一个IP包都产生告警信息,如果你就这样离开的话,你的硬盘空间很快就会被填满。这个规则之所以不可用,是因为它不信任任何信息。难道你用一个永久规则的目的就是为了检测Snort是否在工作吗?它应该是用来在你安装完Snort后做测试,以确定其工作正常,然后就去掉这条规则。下面的部分你可以了解Snort规则的不同部分,但为完整性起见,下面将简要解释一下刚才的那条规则所用的语句:

●“alert”表示如果包与条件匹配,就产生一个告警信息。条件由下面

的语句定义。

●“ip”表示规则将被用在所有的IP包上。

●第一个“any”是对IP包源地址部分的条件定义,表示来自任何一个

IP地址的IP包都符合条件,任何IP包都符合本条件。

●第二个“any”用来定义端口号,因为端口号与IP层无关,任何IP包

都符合条件。

●“->”符号表示数据包传送的方向。

●第3个“any”用来定义目的地址的条件,any表示这条规则并不关心

所有包的目的地址。

●第4个“any”用来定义目的端口条件,再说明一次,因为IP层与端口

无关。

●最后一部分是规则的选项,,并包含一条将被纪录的告警消息。

下一条规则不想前面那个那么糟糕,它将对所有捕获的ICMP包产生告警。重申一次,这条规则也是来检测Snort是否正常工作的。

如果你想测试Snort,就发送一个ping(在UNIX机器中,基本上是发送ECHO请求)包。再次重复,它应该是用来在你安装完Snort后做测试,以确定其工作正常,然后就去掉这条规则。以下面的命令为例,你可以向你的网关或

其他什么主机发送ICMP包。

ping 192.168.2.1

注意,192.168.2.1是与Snort机器在同一网络的网关、路由器或其他机器。你可以在你安装Snort的机器上运行这个命令,这个命令在UNIX和Windows机器上都可以运行。

3.3 CIDR

RFC 1519定义了无类域间路由或称CIDR。目前有将不同的地址类(比如A和B)做更好的利用的趋势。在CIDR的支持下,你可以用任意长度的掩码,这在基于地址类的网络中是不行的,因为基于类的网络中,掩码的长度是固定的。使用CIDR的时候,网络地址的后面附加上掩码所用的位数,例如192.168.1.0/24表示一个网络的网络地址是192.168.1.0,掩码是24位。24位掩码相当于255.255.255.0。表示一个主机可以用到所有的掩码位,也就是32位。下面的规则表示:只有发送到IP地址为192.168.2.113的主机的ICMP包才会触发告警:

alert icmp any any -> 192.168.1.113/32 any \

(msg: "Ping with TTL=100"; ttl:100;)

3.4 规则的结构

你已经看到了一些规则,尽管它们不那么好,但在某种意义上还是有用的。现在让我们来看一下Snort规则的结构。所有的Snort规则都可以分为两个逻辑组成部分:规则头部和规则选项。参见图3-1

图3-1 Snort 规则的基本结构。

规则的头部包含规则所做的动作的信息,也包含与包所比对的一些条件。选项部分通常包含一个告警消息以及包的那个部分被用来产生这个消息。一条规则

相关文档
最新文档