掌握snort规则的编写及应用。
Snort规则
Snort规则分为两个部分:规则的头部和规则选项。首先,规则头部包含着规则、动作、协议、源地址和目标地址、源端口、目标端口。第二部分是规则选项,它包含着一个警告消息和某数据包有关部分的信息(如果要采取某个动作的话,就应当看一些这种信息)。
规则的头部包含规则所做的动作的信息,也包含与包所比对的一些条件。选项部分通常包含一个告警消息以及包的那个部分被用来产生这个消息。一条规则可以用来探测一个或多个类型的入侵活动,一个好的规则可以来探测多种入侵特征。
在2.x中,只有包和所有相应规则比对后,才根据最严重的情况发出告警。
snort有5个预定义的动作,分别为:
Alert:alert动作用来在一个数据包符合规则条件时发送报警消息,并记录。
Log:log动作用来记录数据包,可以记录在文件或者数据库中。
Pass:snort会直接跳过该包,在设置该动作时可以加快snort的操作速度。
activate:该动作用来产生报警然后激活其他规则来进行进一步的检验。
dynamic:该规则动作由其他用activate动作的规则调用。正常情况下不进行数据包的检测。一个动态规则仅能被一个“activate”激活。
Snort当前分析可疑包的ip协议有四种:tcp,udp,icmp和ip。将来可能会更多,例如ARP、IGRP、GRE、OSPF、RIP、IPX等。
规则头的下一个部分处理一个给定规则的ip地址和端口号信息。关键字"any"可以被用来定义任何地址。Snort没有提供根据ip地址查询域名的机制。地址就是由直接的数字型ip地址和一个cidr块组成的。Cidr块指示作用在规则地址和需要检查的进入的任何包的网络掩码。/24表示c类网络,/16表示b类网络,/32表示一个特定的机器的地址。
例如:192.168.1.0/24代表从192.168.1.1到192.168.1.255的地址块。
在这个地址范围的任何地址都匹配使用这个192.168.1.0/24标志的规则。这种记法给我们提供了一个很好的方法来表示一个很大的地址空间。
IP地址可以用非运算符“!”来表示,下面会进行实例介绍。
端口号可以用几种方法表示,包括"any"端口、静态端口定义、范围以及通过否定操作符。"any"端口是一个通配符,表示任何端口。静态端口定义表示一个单个端口号,例如111表示portmapper,23表示telnet,80表示http等等。端口范围用范围操作符“:”表示。
范围操作符可以有数种使用方法,如下所示
:logudpanyany->192.168.1.0/241:1024
记录来自任何端口的,目标端口范围在1到1024的udp流。
logtcpanyany->192.168.1.0/24:6000
记录来自任何端口,目标端口小于等于6000的tcp流。
logtcpany:1024->192.168.1.0/24500:
记录来自任何小于等于1024的特权端口,目标端口大于等于500的tcp流。
端口否定操作符用“!”表示,它可以用于任何规则类型,除了any。表示方法如下所示:
logtcpanyany->192.168.1.0/24!6000:6010
记录除6000到6010端口以外的所有一切
方向操作符“->”表示规则所施加的流的方向。方向操作符左边的ip地址和端口号被认为是流来自的源主机,方向操作符右边的ip地址和端口信息是目标主机,还有一个双向操作符“<>”。
规则选项组成了snort入侵检测引擎的核心,既易用又强大还灵活。所有的snort规则选项用分号“;”隔开。规则选项关键字和它们的参数用冒号“:”分开。按照这种写法,snort中有42个规则选项关键字。
msg:在报警和包日志中打印一个消息。
logto:把包记录到用户指定的文件中而不是记录到标准输出。
ttl:检查ip头的ttl的值。
tos:检查IP头中TOS字段的值。
3id:检查ip头的分片id值。
ipoption:查看IP选项字段的特定编码。
fragbits:检查IP头的分段位。
dsize:检查包的净荷尺寸的值。
flags:检查tcpflags的值。
seq:检查tcp顺序号的值。
ack:检查tcp应答(acknowledgement)的值。
window测试TCP窗口域的特殊值。
itype:检查icmptype的值。
icode:检查icmpcode的值。
icmp_id:检查ICMPECHOID的值。
icmp_seq:检查ICMPECHO顺序号的值。
content:在包的净荷中搜索指定的样式。
content:list在数据包载荷中搜索一个模式集合。
offset:content选项的修饰符,设定开始搜索的位置。
depth:content选项的修饰符,设定搜索的最大深度。
nocase:指定对content字符串