Snort规则大探秘
版本联系
Snort规则可以用来检测数据包的不同部分。Snort 1.x可以分析第3层和第4层的信息,但是不能分析应用层协议。Snort v 2.x增加了对应用层头部分析的支持。所有的数据包根据类型的不同按顺序与规则比对。Snort规则用简明易懂的语法书写,大多数规则写在一个单行中。当然你也可以行末用反斜线将一条规则划分为多个行。规则文件通常放在配置文件snort.conf文件中,你也可以用其他规则文件,然后用主配置文件引用它们
规则

规则头部分
动作
当规则与包比对并符合条件是,会采取什么类型的动作,在snort中有五种动作:alert、log、pass、activate和dynamic
Alert-使用选择的报警方法生成一个警报,然后记录(log)这个包。
Log-记录这个包。
Pass-丢弃(忽略)这个包。
activate-报警并且激活另一条dynamic规则。
dynamic-保持空闲直到被一条activate规则激活,被激活后就作为一条log规则执行
协议
Snort当前分析可疑包的ip协议有四种:tcp 、udp、icmp和ip。将来可能会更多,例如ARP、IGRP、GRE、OSPF、RIP、IPX等
地址
一个表示数据包的访问的源地址,另外一个表示目的地址,关键字"any"可以被用来定义任何地址,Snort没有提供根据ip地址查询域名的 机制。地址就是由直接的数字型ip地址和一个CIDR块组成的,/24表示c类网络, /16表示b类网络,/32表示一个特定的机器的地址。详情请参照:CIDR
例如,192.168.1.0/24代表从192.168.1.1到192.168.1.255的 地址块。在这个地址范围的任何地址都匹配使用这个192.168.1.0/24标志的规则
有一个操作符可以应用在ip地址上,它是否定运算符(negation operator)。这个操作符告诉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地址和CIDR块组成,并且要放在方括号内“[”,“]”,例如
alert tcp ![192.168.1.0/24,10.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"端口、静态端口定义、范围、以及通过否定操作符。"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
端口否定操作符用"!"表示。它可以用于任何规则类型
方向操作符
方向操作符"->"表示规则所施加的流的方向。方向操作符左边的ip地址和端口号被认为是流来自的源主机,方向操作符右边的ip地址和端口信 息是目标主机,还有一个双向操作符"<>"。它告诉snort把地址/端口号对既作为源,又作为目标来考虑。这对于记录/分析双向对话很方 便,例如telnet或者pop3会话
log !192.168.1.0/24 any <> 192.168.1.0/24 23
规则选项
规则选项组成了snort入侵检测引擎的核心,既易用又强大还灵活。所有的snort规则选项用分号";"隔开。规则选项关键字和它们的参数用冒号":"分开。按照这种写法,snort中有42个规则选项关键字
msg - 在报警和包日志中打印一个消息。
logto - 把包记录到用户指定的文件中而不是记录到标准输出。
ttl - 检查ip头的ttl的值。
tos 检查IP头中TOS字段的值。
id - 检查ip头的分片id值。
ipoption 查看IP选项字段的特定编码。
fragbits 检查IP头的分段位。
dsize - 检查包的净荷尺寸的值 。
flags -检查tcp flags的值。
seq - 检查tcp顺序号的值。
ack - 检查tcp应答(acknowledgement)的值。
window 测试TCP窗口域的特殊值。
itype - 检查icmp type的值。
icode - 检查icmp code的值。
icmp_id - 检查ICMP ECHO ID的值。
icmp_seq - 检查ICMP ECHO 顺序号的值。
content - 在包的净荷中搜索指定的样式。
content-list 在数据包载荷中搜索一个模式集合。
offset - content选项的修饰符,设定开始搜索的位置 。
depth - content选项的修饰符,设定搜索的最大深度。
nocase - 指定对content字符串大小写不敏感。
session - 记录指定会话的应用层信息的内容。
rpc - 监视特定应用/进程调用的RPC服务。
resp - 主动反应(切断连接等)。
react - 响应动作(阻塞web站点)。
reference - 外部攻击参考ids。
sid - snort规则id。
rev - 规则版本号。
classtype - 规则类别标识。
priority - 规则优先级标识号。
uricontent - 在数据包的URI部分搜索一个内容。
tag - 规则的高级记录行为。
ip_proto - IP头的协议字段值。
sameip - 判定源IP和目的IP是否相等。
stateless - 忽略刘状态的有效性。
regex - 通配符模式匹配。
distance - < distance - 强迫关系模式匹配所跳过的距离。
within - 强迫关系模式匹配所在的范围。
byte_test - 数字模式匹配。
byte_jump - 数字模式测试和偏移量调整
Snort规则大探秘的更多相关文章
- snort规则
一.Snort规则分为两个部分 二.规则头的基本格式 动作: 动作描述一个数据包的"谁,在何处,什么"的问题,并指明规则被激发后,在事件中应当做什么.在编写规则时,你可以从下面的关 ...
- Snort规则中的逻辑关系
0x01 看一条规则alert tcp any any -> any any (content:"union";http_uri;nocase;content:"s ...
- snort规则中byte_test参数详解
例子: byte_test:4,>,1000,20 这里是从本规则内前面匹配的位置结尾开始,向后偏移20个字节,再获取后面的4个字节的数据,与十进制数据1000进行比较,如果大于1000,就命中 ...
- 实验 snort安装配置与规则编写
1 实验目的 在linux或windows任意一个平台下完成snort的安装,使snort工作在NIDS模式下,并编写符合相关情景要求的snort规则. 2 实验环境 物理机:windows 8.1 ...
- 如何编写snort的检测规则
如何编写snort的检测规则 2013年09月08日 ⁄ 综合 ⁄ 共 16976字 前言 snort是一个强大的轻量级的网络入侵检测系统.它具有实时数据流量分析和日志IP网络数据包的能力,能够进行协 ...
- Snort - 配置文件
Snort.conf 版本 2.9.8.3 编译可用选项: --enable-gre --enable-mpls --enable-targetbased --enable-ppm --enable- ...
- snort使用
http://jingyan.baidu.com/article/d8072ac45a626fec95cefd85.html 接上篇,如果编译安装snort并指定了prefix,那么须指定一个软链接, ...
- SNORT入侵检测系统
SNORT入侵检测系统 YxWa · 2015/10/09 10:38 0x00 一条简单的规则 alert tcp 202.110.8.1 any -> 122.111.90.8 80 (ms ...
- Hyperscan与Snort的集成方案
概况 Hyperscan作为一款高性能的正则表达式匹配库,非常适用于部署在诸如DPI/IPS/IDS/NGFW等网络解决方案中.Snort (https://www.snort.org) 是目前应用最 ...
随机推荐
- ps 和 top 的cpu的区别
cpu的计算 ps cpu的定义 man page中给出的定义: cpu utilization of the process in "##.#" format. Currentl ...
- Delphi跨进程访问DBGRID
要想跨进程访问DBGRID,貌似只能用HOOK,写一个DLL想办法注入到目标进程.注入成功后,使DLL与目标进程在同一进程空间中(其内有一些细节问题,请参见代码),这时可以访问目标进程的VCL组件.并 ...
- 解决Windows远程桌面连接每次都提示输入密码的问题,远程桌面记不住密码
FROM:http://www.veryhuo.com/a/view/80444.html Windows 远程桌面连接几乎每天都用,所以使用的方便性非常重要.如果你经常用,也许会发现在某些系统中,每 ...
- intellij idea 设置 Error 提示颜色修改
File--->Settings --->Editor --->ColorScheme--->General --->Errors and Warning--->E ...
- LaTex与数学公式
w(t) \longrightarrow \bigg[\frac{\sqrt{2\sigma ^2\beta}}{s+\beta}\bigg] \longrightarrow \bigg[\frac ...
- 生成当前目录文件的xml描述
需求场景:例如需要在当前目录下把相关文件组织成xml文件去描述.通常在组织项目中的升级文件时候可能会用到. 代码示例: using System; using System.Collections.G ...
- 陷入了一个NGUI自适应的一个坑
自己对anchor的乱用.造成自己深陷anchor来搞自适应 耽误了太多的精力,最终也是回到正轨的途径 这期间浪费的太多精力了. 沉迷一件错误的事情过久 就 要果断的跳出 调整 . 但凡让自己觉得别扭 ...
- 【剑指offer】斐波那契数列非递归求解第N项
public class Solution { public int Fibonacci(int n) { //错误输入处理 if(n<0) return -1; int pre = 1; in ...
- Hadoop错误集:Could not find the main class: org.apache.hadoop.*
在搭建Hadoop机群的时候,之前遇见了很多次找不到类的错误,因为对Hadoop了解不深,所以就在网上漫无目的的找解决方案,所以这里总结下我用的方法. 解决办法一: 我之前遇到了找不到 org.apa ...
- C/C++程序CPU问题分析
转载地址:http://www.10tiao.com/html/473/201606/2651473094/1.html 程序的CPU问题是另外一类典型的程序性能问题,很多开发人员都受到过程序CP ...