博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【转】Snort语法规则说明及实例讲解
阅读量:4310 次
发布时间:2019-06-06

本文共 4575 字,大约阅读时间需要 15 分钟。

转载来自:

方向操作符:

方向操作符"->"表示规则所施加的流的方向。方向操作符左边的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;                        //应用层负载包长度小于300flags:A;                          //TCP flags值为10content:"|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和bugtraqclasstype-danger:medium;                //危险等级中等sid:20141107;                       //规则IDrev: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个字节之内存在0x1803byte_test:2, >, 200, 3, big;                   //从第3个字节开始取2个字节的大字节序大于200byte_test:2, <, 16385, 3, big;                   //从第3个字节开始取2个字节的大字节序小于16385threshold:type limit, track by_src, count 1, seconds 600;  //限速 600s记录一次按src地址进行记录reference:cve,2014-0160;                     //参考cve编号classtype:bad-unknown;                       //危害级别sid:20140160;                            //规则IDrev: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对系统进行扫描,产生告警纪录

转载于:https://www.cnblogs.com/Lthis/p/4949766.html

你可能感兴趣的文章
Docker面试题(二)
查看>>
一、redis面试题及答案
查看>>
消息队列2
查看>>
C++ 线程同步之临界区CRITICAL_SECTION
查看>>
测试—自定义消息处理
查看>>
MFC中关于虚函数的一些问题
查看>>
根据图层名获取图层和图层序号
查看>>
规范性附录 属性值代码
查看>>
提取面狭长角
查看>>
Arcsde表空间自动增长
查看>>
Arcsde报ora-29861: 域索引标记为loading/failed/unusable错误
查看>>
记一次断电恢复ORA-01033错误
查看>>
C#修改JPG图片EXIF信息中的GPS信息
查看>>
从零开始的Docker ELK+Filebeat 6.4.0日志管理
查看>>
How it works(1) winston3源码阅读(A)
查看>>
How it works(2) autocannon源码阅读(A)
查看>>
How it works(3) Tilestrata源码阅读(A)
查看>>
JDK下载(百度网盘)
查看>>
一篇掌握python魔法方法详解
查看>>
JNDI+springmvc使用
查看>>