Snort Rules规则

Writing Snort Rules

来源
https://paginas.fe.up.pt/~mgi98020/pgr/writing_snort_rules.htm

基础

Snort使用一种简单,轻量级的规则描述语言,该语言灵活且强力。在开发Snort规则时,需要遵守以下准则:1)首先,Snort规则必须完全包含在一行上,因为Snort规则解析器不知道如何处理多行上的规则。
Snort规则被分为两个逻辑部分,规则头和规则选项。规则头包含规则的操作、协议、源和目标IP地址和网络掩码,以及源和目标端口信息。规则选项部分包含警报消息和关于应该检查数据包的哪些部分,以确定是否应该采取规则操作的信息。
例如

alert tcp any any -> 192.168.1.0/24 111 (content:"|00 01 86 a5|"; msg: "mountd access";)

第一个括号之前的文本是规则头,括号中包含的部分是规则选项。规则选项部分中冒号前的单词称为选项关键字。值得注意的是,规则选项部分并不是任何规则特别要求的,它们只是为了定义更严格的数据包来收集或警告(或删除) 。组成规则的所有元素都必须真实有效,才能采取所指示的规则动作。同时,可以考虑在一个Snort规则库文件中的各种规则来形成一个大的逻辑OR语句。首先来看规则头部分。
Includes
incuce关键字允许将其他规则文件包含在Snort命令行中指示的规则文件中。它的工作原理类似于C编程语言中的“#include”,读取命名文件的内容,并将它们放在文件中包含出现的位置。
规范

include: <include file path/name>

请注意,在这一行的末尾没有分号。所包含的文件将把任何预定义的变量值替换为它们自己的变量引用。更多相关信息,请参见Snort规则文件中定义和使用变量的Variables section 。

Variables
变量可以在Snort中定义。这些都是用var关键字设置的简单替换变量。

var: <name> <value>
var MY_NET [192.168.1.0/24,10.1.1.0/24]
alert tcp any any -> $MY_NET any (flags: S; msg: "SYN packet";)

规则变量名称可以通过数种方式进行修改。可以使用“$”操作符来定义元变量。该关键字可以与修饰符‘ ?’和 ‘ - ’ 一起使用。

$var - define meta variable
$(var) - replace with the contents of variable "var"
$(var:-default) - replace with the contents of the variable "var" or with "default" if "var" is undefined.
$(var:?message) - replace with the contents of variable "var" or print out the error message "message" and exit

规则头

规则动作:

规则头包含定义包的“谁、在哪里、做什么”的信息,以及当出现符合规则中指示的数据包时该如何响应。规则中的第一项是规则动作。规则动作会告诉Snort在找到符合规则条件的数据包时要做什么。这里有五种可用的默认操作:alert, log, pass, activate, 和 dynamic。

  • alert - 使用所选的警报方法生成一个警报,然后记录该数据包
  • log - 记录包
  • pass - 忽略包
  • activate - 发出警报,然后打开另一个动态规则
  • dynamic - 保持空闲,直到被激活规则激活,然后充当日志规则
    您还可以定义您自己的规则类型,并将一个或多个输出插件与它们关联起来。然后,您可以将规则类型作为Snort规则中的操作使用。
这个示例将创建一个类型,其日志仅为tcpdump:
ruletype suspicious
{
   type log
   output log_tcpdump: suspicious.log
}

Protocols:
规则中的下一个字段是协议。Snort目前正在分析的有三种IP协议的可疑行为:tcp、udp和icmp。

IP Addresses:
规则标头的下一部分将处理给定规则的IP地址和端口信息。关键字“any”可以用来定义任何地址。Snort没有为规则文件中的IP地址字段提供主机名查找的机制。这些地址由一个直接的数字IP地址和一个CIDR块组成。CIDR块指示应该应用于规则的地址和根据规则进行测试的任何传入数据包的网络掩码。例如,地址/CIDR组合192.168.1.0/24将表示从192.168.1.1到192.168.1.255的地址块。任何使用此指定的规则,例如目标地址,都将与该范围内的任何地址相匹配。CIDR名称为我们提供了一种很好的短写方法来用几个字符指定大地址空间。
有一个运算符可以应用于IP地址,即否定运算符。此操作符告诉Snort匹配除了列出的IP地址所指示的地址以外的任何IP地址。否定运算符用 “ ! ” 表示。例如,对初始示例的一个简单修改是让它对来自本地网络之外的任何流量发出警报。

alert tcp !192.168.1.0/24 any -> 192.168.1.0/24 111 (content: "|00 01 86 a5|"; msg: "external mountd access";)
此规则的IP地址表示“任何具有源IP地址不是来自内部网络和内部网络上的目标地址的tcp数据包”。

Port Numbers:
端口号可以通过多种方式指定,包括“任何”端口、静态端口定义、范围和否定方式。任何“端口都是通配符值,字面意思是任何端口。静态端口 由单个端口号表示,如端口映射器111,telnet23,或http80等。端口范围用范围操作符“:”表示。范围运算符可以应用 关于获取不同含义的方法,如下所示。

  • log udp any any -> 192.168.1.0/24 1:1024
    日志来自从1到1024的任何端口和目的地端口的udp流量
  • log tcp any any -> 192.168.1.0/24 :6000
    记录从任何端口转到小于或等于6000的端口的tcp流量
  • log tcp any :1024 -> 192.168.1.0/24 500:
    记录从小于或等于1024的私有端口发送到大于或等于500的端口的tcp流量

端口否定是通过使用否定运算符 " ! "。否定运算符可以应用于任何其他规则类型(除了任何规则,这将转换为无,如何Zen…)

log tcp any any -> 192.168.1.0/24 !6000:6010

The Direction Operator
方向操作符“->”表示该规则适用的流量的方向或“方向”。方向操作符左侧的IP地址和端口号为边界 d为来自源主机的流量,操作员右侧的地址和端口信息为目标主机。还有一个双向运算符,即籼稻 带有“<>”符号。这告诉Snort要考虑源方向或目标方向上的地址/端口对。这对于记录/分析对话的双方都很方便,例如 Telnet或POP3会话。

log !192.168.1.0/24 any <> 192.168.1.0/24 23

规则选项

规则选项构成了Snort入侵检测引擎的核心,结合了易用性、功能和灵活性。所有的Snort规则选项都使用分号“;”字符相互分隔 cter.规则选项关键字用冒号分隔“:”字符。目前有15个规则选项关键字:

  • msg - 打印警告和包日志信息
  • logto - 将数据包记录到用户指定的文件名中,而不是记录在标准的输出文件中
  • ttl - 测试IP标头的TTL字段值
  • tos - 测试IP标头的TOS字段值
  • id - 测试IP头的片段ID字段
  • ipoption - 查看IP选项字段中的特定代码
  • fragbits - 测试IP报头的分片位
  • dsize - 根据一个值来测试数据包的有效负载大小
  • flags - 测试TCP标志的内容
  • seq - 测试特定值的TCP序列号字段
  • ack - 测试TCP的ACK域
  • itype - 根据特定的值测试ICMP类型字段
  • icode - test the ICMP code field against a specific value
  • icmp_id - test the ICMP ECHO ID field against a specific value
  • icmp_seq - test the ICMP ECHO sequence number against a specific value
  • content - search for a pattern in the packet’s payload
  • content-list - search for a set of patterns in the packet’s payload
  • offset - modifier for the content option, sets the offset to begin attempting a pattern match
  • depth - modifier for the content option, sets the maximum search depth for a pattern match attempt
  • nocase - match the preceeding content string with case insensitivity
  • session - dumps the application layer information for a given session
  • rpc - watch RPC services for specific application/proceedure calls
  • resp - active response (knock down connections, etc)
  • react - active response (block web sites)
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值