Snort规则学习
Snort 是一个开源入侵防御系统(IPS)。Snort IPS 使用一系列规则来帮助定义恶意网络活动,并利用这些规则来查找与之匹配的数据包,并为用户生成警报。
下面来学习一下snort的规则语法
入门引言
从一条简单的snort规则开始
alert tcp any any -> 192.168.1.0/24 111(content:"|00 01 86 a5|";msg:"mountd access";)
snort 每条规则都可以分成逻辑上的两个部分:规则头(header)和规则选项(General Option)
从开头到括号前属于规则头部分,括号内的部分属于规则选项。规则选项中冒号前面的词叫做选项关键词(option keywords)。如果许多选项组合在一起,它们之间是逻辑与的关系
snort规则简介
下面是snort规则组成
snort 每条规则都可以分成逻辑上的两个部分:规则头(header)和规则选项(General Option)
- 规则头(header) - 规则行为(rule’s action)- 协议(protocol)- IP地址- 端口- 方向操作符
- 规则选项(options)
其他概念:
- Includes:include允许由命令行指定的规则文件包含其他的规则文件。
- Variables:变量可能在snort中定义
- Config:Snort的很多配置和命令行选项都可以在配置文件中设置。
snort规则详细介绍
- 规则头(header)- 规则行为(rule’s action) rule’s action告诉snort在发现匹配规则的包时要干什么 - Alert-使用选择的报警方法生成一个警报,然后记录(log)这个包。- Log-记录这个包。- Pass-丢弃(忽略)这个包。- activate-报警并且激活另一条dynamic规则。- dynamic-保持空闲直到被一条activate规则激活,被激活后就作为一条log规则执行。- 协议(protocol) 规则的下一部分是协议。支持的协议有四种:tcp 、udp、icmp和ip- IP地址关键词any可以用来定义任意的IP地址。 所以地址只能使用数字/CIDR 的形式。例如:192.168.1.0/24表示从 192.168.1.1到192.168.1.255的地址。 在规则中,可以使用使用否定操作符(negation operator)对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地址表示:所有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";)
- 端口 在规则中,可以有几种方式来指 定端口号,包括:any、静态端口号(static port)定义、端口范围,以及使用非操作定义。any表示任意合法的端口号;静态端口号表示单个的端口号,例如:111(portmapper)、 23(telnet)、80(http)等。使用范围操作符:可以指定端口号范围。有几种方式来使用范围操作符:达到不同的目的,例如: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数据包log tcp any any -> 192.168.1.0/24 !6000:6010 记录来自任何端口,其目的端口号在6000到6010之外的UDP数据包
- 方向操作符 方向操作符->表示数据包的流向。它左边是数据包的源地址和源端口,右边是目的地址和端口。此外,还有一个双向操作符<>,它使snort对这条规则中,两个IP地址/端口之间双向的数据传输进行记录/分析,例如telnet或者POP3对话。下面的规则表示对一个telnet对话的双向数据传输进行记录: log !192.168.1.0/24 any <> 192.168.1.0/24 23
- 规则选项 规则选项组成了snort入侵检测引擎的核心,既易用又强大还灵活。所有的snort规则选项用分号";“隔开。规则选项关键字和它们的参数用冒号”:"分开。按照这种写法,snort中有42个规则选项关键字。下面仅列举部分- msg:打印的警告信息- reference:详细信息的引用- gid/sid/rev:规则ID及版本号- classtype:类别,与优先级有关- priority:优先级- metadata:日期相关信息
详细信息参考(17条消息) Snort中文手册PDF_snort中文手册-系统安全文档类资源-CSDN文库
写一个简单的规则
我们来写一个规则
detect a tcp packet with
• Destination Port at 8080, TCPFLAG ACK set, a string “I am IDS Homework 1” in payload [100 th byte 200 th byte]
• alert message “TEST ALERT”
分析一下:(详细内容需要查阅snort手册)
- Header: - Rule‘s action:alert- Protocol: TCP- IP and Port: src(any,any)des(any,8080)
- option: - flag:A(TCPFLAG ACK set)- content:“I am IDS Homework 1”;offset:99;depth:101;- msg:“TEST ALERT”- sid:1 结果:
alert tcp any any -> any 8080 (flags:A;content:"I am IDS Homework 1";offset:99;depth:101;msg:"TEST ALERT";sid:1;)
版权归原作者 HuHuHu! 所有, 如有侵权,请联系我们删除。