如何编写snort的检测规则前言 snort是一个强大的轻量级的网络入侵检测系统。它具有实时数据流量分析和日志IP网络数据包的能力,能够进行协议分析,对内容进行搜索/匹配。它能够检测各种不同的攻击方式,对攻击进行实时报警。此外,snort具有很好的扩展性和可移植性。本文将讲述如何开发snort规则。 1.基础 snort使用一种简单的规则描述语言,这种描述语言易于扩展,功能也比较强大。下面是一些最基本的东西:
这是一个例子: alert tcp any any -> 192.168.1.0/24 111(content:"|00 01 86 a5|";msg:"mountd access";)表1.一条简单的snort规则 从开头到最左边的括号属于规则头部分,括号内的部分属于规则选项。规则选项中冒号前面的词叫做选项关键词(option keywords)。注意对于每条规则来说规则选项不是必需的,它们是为了更加详细地定义应该收集或者报警的数据包。只有匹配所有选项的数据包,snort才会执行其规则行为。如果许多选项组合在一起,它们之间是逻辑与的关系。让我们从规则头开始。 1.1 include snort使用的规则文件在命令行中指定,include关键词使这个规则文件可以包含其它规则文件中的规则,非常类似与C语言中的#include。snort会从被包含的文件读出其内容,取代include关键词。 格式: include <文件路径/文件名> 注意:行尾没有分号。 1.2 varriables 在snort规则文件中可以定义变量。 格式: var 例子: var MY_NET 192.168.1.0/24,10.1.1.0/24]表2.变量的定义和使用 规则变量名可以使用多种方式来修改,你可以使用$操作符来定义元变量(meta-variables)。这些修改方式可以结合变量修改操作符:?和-来使用。
例如: var MY_NET $(MYU_NET:-192.168.1.0/24) tcp any any -> $(MY_NET:?MY_NET is undefined!) 23表3.高级变量应用 2.规则头(Rule Headers) 2.1 Rule Action 规则头包含一些信息,这些信息包括:哪些数据包、数据包的来源、什么类型的数据包,以及对匹配的数据包如何处理。每条规则的第一项就是规则行为(rule action)。规则行为告诉snort当发现匹配的数据包时,应该如何处理。在snort中,有五种默认的处理方式:alert、log、pass、activate和dynamic。
你也可以定义自己的规则类型,把它们和一个或者几个输出插件联系在一起。然后你就可以在snort规则中使用这些规则类型了。 这个例子将建立一个类型,它将只以tcpdump格式输出日志: ruletype suspicious{ type log output log_tcpdump: suspocious.log } 下面这个例子将建立一个类型,把日志发送到syslog和MySql数据库: ruletype redalert{ type alert output alert_syslog:LOG_AUTH LOG_ALERT output database:log,user=snort dbname=snort host=localhost } 2.2 协议 每条规则的第二项就是协议项。当前,snort能够分析的协议是:TCP、UDP和ICMP。将来,可能提供对ARP、ICRP、GRE、OSPF、RIP、IPX等协议的支持。 2.3 IP地址 规则头下面的部分就是IP地址和端口信息。关键词any可以用来定义任意的IP地址。snort不支持对主机名的解析。所以地址只能使用数字/CIDR的形式。/24表示一个C类网络;/16表示一个B类网络;而/32表示一台特定的主机地址。例如:192.168.1.0/24表示从192.168.1.1到192.168.1.255的地址。 在规则中,可以使用使用否定操作符(negation operator)对IP地址进行操作。它告诉snort除了列出的IP地址外,匹配所有的IP地址。否定操作符使用!表示。例如,使用否定操作符可以很轻松地对表1的规则进行改写,使其对从外部网络向内的数据报警。 alert tcp !192.168.1.0/24 any -> 192.168.1.0/24 111(content:"|00 01 86 a5|";msg:"external mountd access";)表4.使用IP地址否定操作符的规则 上面这条规则中的IP地址表示:所有IP源地址不是内部网络的地址,而目的地址是内部网络地址。 你也可以定义一个IP地址列表(IP list)。IP地址列表的格式如下: [IP地址1/CIDR,IP地址/CIDR,....]注意每个IP地址之间不能有空格。例如: alert tcp ![192.168.1.0/24,10.1.1.1.0/24] any ->[192.168.1.0/24,10.1.1.0/24] 111 (content:"|00 01 86 a5|";msg:"external mountd access";)2.4 端口号 在规则中,可以有几种方式来指定端口号,包括:any、静态端口号(static port)定义、端口范围,以及使用非操作定义。any表示任意合法的端口号;静态端口号表示单个的端口号,例如:111(portmapper)、23(telnet)、80(http)等。使用范围操作符:可以指定端口号范围。有几种方式来使用范围操作符:达到不同的目的,例如: 上一篇:Linux和Solaris建立Apache的虚拟根环境 下一篇:强大的轻量级网络入侵检测系统SNORT 更多相关文章
|
推荐文章
精彩文章
|