【转】Snort语法规则说明及实例讲解

转载来自:【IPS分析】Snort语法规则说明及实例讲解

方向操作符:
方向操作符"->"表示规则所施加的流的方向。方向操作符左边的ip地址和端口号被认为是流来自的源主机,方向操作符右边的ip地址和端口信 息是目标主机,还有一个双向操作符

"<>"。它告诉snort把地址/端口号对既作为源,又作为目标来考虑。这对于记录/分析双向对话很方 便,例如telnet或者pop3会话。用来记录一个telnet会话的两侧的流的范例如下:

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

Activate 和 dynamic 规则:

注:Activate 和 dynamic 规则将被tagging 所代替。在snort的将来版本,Activate 和 dynamic 规则将完全被功能增强的tagging所代替。

Activate 和 dynamic 规则对给了snort更强大的能力。你现在可以用一条规则来激活另一条规则,当这条规则适用于一些数据包时。在一些情况下这是非常有用的,例如你想设置一条规则:当一条规则结束后来完成记录。Activate规则除了包含一个选择域:activates外就和一条alert规则一样。Dynamic规则除 了包含一个不同的选择域:activated_by

外就和log规则一样,dynamic规则还包含一个count域。

Actevate规则除了类似一条alert规则外,当一个特定的网络事件发生时还能告诉snort加载一条规则。Dynamic规则和log规则类似,但它是当一个activate规则发生后被动态加载的。把他们放在一起如下图所示:

activate tcp !$HOME_NET any -> $HOME_NET 143 (flags: PA; content: "|E8C0FFFFFF|/bin"; activates: 1; msg: "IMAP buffer overflow!";)
dynamic tcp !$HOME_NET any -> $HOME_NET 143 (activated_by: 1; count: 50;)

规则选项

规则选项组成了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 -    强迫关系模式匹配所跳过的距离。
within -     强迫关系模式匹配所在的范围。
byte_test -   数字模式匹配。
byte_jump -   数字模式测试和偏移量调整。
flow -      这个选项要和TCP流重建联合使用。它允许规则只应用到流量流的某个方向上。这将允许规则只应用到客户端或者服务器端

举例说明:
例子1:

alert tcp any any -> any 3306
(msg:"MySQL Server Geometry Query Integer溢出攻击"; flow:to_server,established; dsize:<300; flags:A; content:"|03|"; nocase; offset:4; depth:1; content:"select|20|geometryn|28|0x00000000000700000001"; distance:10; within:50; reference:cve,2013-1861; reference:bugtraq,58511; classtype-danger:medium; tid:14999; rev:1;)

规则头:alert tcp any any -> any 3306 //匹配任意源IP和端口到任意目的IP和端口为3306的TCP数据包发送告警消息。
规则选项:

msg:"MySQL Server Geometry Query Integer溢出攻击";  //在报警和包日志中打印的消息内容。
flow:to_server,established;               //检测向服务器发送方向的报文。
dsize:<300;                        //应用层负载包长度小于300
flags:A;                          //TCP flags值为10
content:"|03|"; nocase; offset:4; depth:1;      //负载偏移4取1的值为03,不区分大小写,这块写的应该是有问题字符串有不区分大小写,16进制不涉及。

 //相对于上面的03特征向后偏移10个字节之后再取50个字节, //50个字节里边包含select|20|geometryn|28|0x00000000000700000001
content:"select|20|geometryn|28|0x00000000000700000001"; distance:10; within:50;
reference:cve,2013-1861; reference:bugtraq,58511; //可参考cve和bugtraq
classtype-danger:medium;                //危险等级中等
sid:20141107;                       //规则ID
rev:1                            //版本信息,第一个版本

例子2:
heartbleed漏洞下行检测规则

alert tcp $EXTERNAL_NET any -> $HOME_NET 443 (msg:"openssl Heartbleed attack";flow:to_server,established; content:"|18 03|"; depth: 3; byte_test:2, >, 200, 3, big; byte_test:2, <, 16385, 3, big; threshold:type limit, track by_src, count 1, seconds 600; reference:cve,2014-0160; classtype:bad-unknown; sid:20140160; rev:2;)

规则头:alert tcp $EXTERNAL_NET any -> $HOME_NET 443 EXTERNAL_NET和HOME_NET都在/etc/snort/snort.conf中配置。

规则选项:

msg:"openssl Heartbleed attack";                 //消息信息
flow:to_server,established;                    //向服务器发送的请求包检测一次
content:"|18 03|"; depth: 3;                   //头部3个字节之内存在0x1803
byte_test:2, >, 200, 3, big;                   //从第3个字节开始取2个字节的大字节序大于200
byte_test:2, <, 16385, 3, big;                   //从第3个字节开始取2个字节的大字节序小于16385
threshold:type limit, track by_src, count 1, seconds 600;  //限速 600s记录一次按src地址进行记录
reference:cve,2014-0160;                     //参考cve编号
classtype:bad-unknown;                       //危害级别
sid:20140160;                            //规则ID
rev:2;                                //版本2

附:
bugtraq:http://www.securityfocus.com/
cve:http://cve.mitre.org/compatible/product_type.html
cnvd:http://www.cnvd.org.cn/
可利用kali虚拟机中nmap,nessus,CIS或者X-scan对系统进行扫描,产生告警纪录

时间: 2024-10-12 12:18:12

【转】Snort语法规则说明及实例讲解的相关文章

实例讲解Nginx下的rewrite规则 来源:Linux社区

一.正则表达式匹配,其中:* ~ 为区分大小写匹配* ~* 为不区分大小写匹配* !~和!~*分别为区分大小写不匹配及不区分大小写不匹配二.文件及目录匹配,其中:* -f和!-f用来判断是否存在文件* -d和!-d用来判断是否存在目录* -e和!-e用来判断是否存在文件或目录* -x和!-x用来判断文件是否可执行三.rewrite指令的最后一项参数为flag标记,flag标记有:1.last    相当于apache里面的[L]标记,表示rewrite.2.break本条规则匹配完成后,终止匹配

SQL触发器实例讲解

定义: 何为触发器?在SQL Server里面也就是对某一个表的一定的操作,触发某种条件,从而执行的一段程序.触发器是一个特殊的存储过程.       常见的触发器有三种:分别应用于Insert , Update , Delete 事件. 我为什么要使用触发器?比如,这么两个表: Create Table Student(              --学生表         StudentID int primary key,       --学号         ....        )

Django项目实践2 - Django模板(常用语法规则)

http://blog.csdn.net/pipisorry/article/details/45727309 模板中常用的语法规则 {最新版本的Django语法可能有改变,不支持的操作可能支持了.[HTML教程 - 基本元素/标签及属性]} Django 模板标签 if/else 标签 1. 基本语法格式如下: {% if condition %} ... display {% endif %} 或者: {% if condition1 %} ... display 1 {% elif con

Oracle之索引(Index)实例讲解 - 基础

Oracle之索引(Index)实例讲解 - 基础 索引(Index)是关系数据库中用于存放表中每一条记录位置的一种对象,主要目的是加快数据的读取速度和数据的完整性检查.索引的建立是一项技术性要求非常高的工作. 一般在数据库设计阶段就要考虑到如何设计和创建索引. 1. 创建索引 创建索引的语法: CREATE [UNIQUE] INDEX [schema.] index ON [schema.] table (column [ASC | DESC], column [ASC | DESC]...

实例讲解Linux系统中硬链接与软链接的创建

导读 Linux链接分两种,一种被称为硬链接(Hard Link),另一种被称为符号链接(Symbolic Link).默认情况下,ln命令产生硬链接.硬链接与软链接的区别从根本上要从Inode节点说起,下面就以实例讲解Linux系统中硬链接与软链接的创建,来实际看看Linux中两种链接方式的不同. 首先要弄清楚,在Linux系统中,内核为每一个新创建的文件分配一个Inode(索引结点),每个文件都有一个惟一的inode号.文件属性保存在索引结点里,在访问文件时,索引结点被复制到内存在,从而实现

asp程序语法规则

在浏览器中通过查看源代码的方式是无法看到 ASP 源代码的,你只能看到由 ASP 文件输出的结果,而那些只是纯粹的 HTML 而已.这是因为,在结果被送回浏览器前,脚本已经在服务器上执行了.在我们的 ASP 教程中,每个例子都提供隐藏的 ASP 代码.这样会使您更容易理解它们的工作原理.实例:用 ASP 写文本如果使用 ASP 生成文本.向文本添加 HTML如果同时生成 HTML 标签和纯文本. 基本的 ASP 语法规则通常情况下,ASP 文件包含着 HTML 标签,类似 HTML 文件.不过,

XML 树结构,语法规则,元素,属性,验证及其解析

XML 文档形成了一种树结构,它从"根部"开始,然后扩展到"枝叶". 一个 XML 文档实例 XML 文档使用简单的具有自我描述性的语法: <?xml version="1.0" encoding="UTF-8"?> <note> <to>Tove</to> <from>Jani</from> <heading>Reminder</hea

模糊测试之实例讲解

什么是模糊测试 ? 模糊测试(Fuzzing),是一种通过向目标系统提供非预期的输入并监视异常结果来发现软件漏洞的方法.测试的基本思想就是通过向程序中输入大量的随机数据,然后观察输入这些数据之后程序的情况,记录下使程序发生异常的数据,从而判断程序是在那些地方发生了异常. 模糊测试之实例讲解   本文作者:i春秋签约作家--天天 模糊测试的实现是一个非常简单的过程: 1. 准备一份插入程序中的正确的文件. 2. 用随机数据替换该文件的某些部分. 3. 用程序打开文件. 4. 观察破坏了什么. Pe

Html代码seo优化最佳布局实例讲解

搜索引擎对html代码是非常优化的,所以html的优化是做好推广的第一步.一个符合seo规则的代码大体如下界面所示. 1.<!–木庄网络博客–> 这个东西是些页面注释的,可以在这里加我的"木庄网络博客",但过多关键字可能被搜索引擎惩罚! 2.<html> 这个是代码开头 结尾时和</html>对应. 3.<head> 头标记结尾用</head> 4.<title>(木庄网络博客-勤记录 懂分享)</title