snort规则

snort规则Snort 规则被分成两个逻辑部分 规则头和规则选项 规则头包含规则的动作 协议 源和目标 ip 地址与网络掩码 以及源和目标端口信息 规则选项部分包含报警消息内容和要检查的包的具体部分 1 规则头规则动作在 snort 中有五种动作 alert log pass activate 和 dynamic Alert 使用选择的报警方法生成一个警报 然后记录 log 这个包 Alert 动作用来在一个

Snort规则被分成两个逻辑部分:规则头规则选项
规则头包含规则的动作,协议,源和目标ip地址与网络掩码,以及源和目标端口信息;
规则选项部分包含报警消息内容和要检查的包的具体部分。




1. 规则头

规则动作

在snort中有五种动作:alert、log、pass、activate和dynamic.

Alert:使用选择的报警方法生成一个警报,然后记录(log)这个包。 Alert动作用来在一个包符合规则条件时发送告警消息。告警的发送有多种方式,例如可以发送到文件或者控制台。
Log动作与Alert动作的不同在于:Alert动作是发送告警然后记录包,Log动作仅仅记录包。  
 
Log:记录这个包。Log动作用来记录包,记录包有不同的方式,例如,可以记录到文件或者数据库,这将在以后讨论。根据命令行参数和配置文件,包可以被记录为不同的详细程度。你可以用“snort – ?”命令来查看你所用版本Snort的命令行可用参数。






Pass:丢弃(忽略)这个包。 这个动作告诉Snort不理会这个包,这个动作在你不想检查特定的包的时候可以加快Snort的操作速度。例如,如果你在网络中有一台包含一些弱点的主机,用来检测网络安全漏洞,可能会希望不理会对这台机器的攻击,pass规则这时就可以用到了。

activate:报警并且激活另一条dynamic规则。Activate动作用来产生告警然后激活其它规则来进行进一步的检验。如下面所说的,dynamic动态规则就是用于这个目的。当你需要对捕获的包进行进一步检验的时候,就可以用activate动作。

dynamic:保持空闲直到被一条activate规则激活,被激活后就作为一条log规则执行。Dynamic规则动作由其它用activate动作的规则调用,在正常情况下,他们不会被用来检测包。一个动态规则仅能被一个“activate”动作激活。

自定义动作
除了以上动作外,也可以定义自己的动作,以用于不同的目的,例如:

  • 向Syslog发送消息。Syslog是系统日志守护进程,它在/var/log中创建日志文件,这些文件的位置可以通过修改/etc/syslog.conf来改变。你可以在UNIX系统中用命令“man syslog”或者“man syslog.conf”来获得更多信息。Syslog相当于Windows中的事件查看器。
  • 向如HP OpenView或Open NMS(http://www.opennms.org)等网管系统发送SNMP trap。
  • 在一个包上应用多个动作。如你前面所看到的,一个规则仅仅规定了一个动作,自定义动作可以用来产生多个动作。例如,你可以在发送SNMP trap的同时记录Syslog。
  • 将数据记录到XML文件中。 将信息记录到数据库中,Snort可以将数据记录到MySQL, Postgress SQL, Oracle 和Microsoft SQL server中。

这些新的动作类型在配置文件snort.conf中定义。一个新动作用下面的通用结构来定义:

ruletype action_name { action definition } 

关键字ruletype后面跟随动作的名称,两个大括号中是实际的动作定义,类似于C语言中的函数。

协议类型

Snort当前分析可疑包的ip协议有四种:tcp 、udp、icmp和ip。将来可能会更多,例如ARP、IGRP、GRE、OSPF、RIP、IPX等。

地址

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";) 

var: 自定义变量

例子:

var MY_NET 192.168.1.0/24 alert tcp any any -> $MY_NET any (flags: S; msg: "SYN packet";) 

规则变量名可以用多种方法修改。可以在”$“操作符之后定义变量。”?” 和 “-“可用于变量修改操作符。

例子:

var MY_NET $(MY_NET:-192.168.1.0/24) log tcp any any -> $(MY_NET:?MY_NET is undefined!) 23 

端口号

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流 
常用端口号 描述 20 FTP数据 21 FTP 22 SSH或安全Shell 23 Telnet 25 SMTP或类似于Sendmail的e-mail服务器 37 NTP(网络时钟协议,用来同步网络主机时间) 53 DNS 服务器 67 BootP/DHCP客户端 68 BootP/DHCP服务器 69 TFTP 80 HTTP,web服务器 110 POP3,供类似于OE的邮件客户端使用 161 SNMP 162 SNMP trap 443 HTTPS或安全HTTP 514 Syslog 

方向操作符

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

2. 规则选项

规则选项组成了snort入侵检测引擎的核心,既易用又强大还灵活。所有的snort规则选项用分号”;”隔开。规则选项关键字和它们的参数用冒号”:”分开。

  • msg : 在报警和包日志中打印一个消息。
  • flags :检查tcp flags的值。
    在snort中有8个标志变量:
    1、 F – FIN (LSB in TCP Flags byte)
    2、 S – SYN
    3、 R – RST
    4、 P – PSH
    5、 A – ACK
    6、 U – URG
    7、 2 – Reserved bit 2
    8、 1 – Reserved bit 1 (MSB in TCP Flags byte)


















alert any any -> 192.168.1.0/24 any (flags: SF; msg: "Possible SYN FIN scan";) 
  • content :在包的净荷中搜索指定的样式。它可以包含混合的文本和二进制数据。二进制数据一般包含在管道符号中(”|”),表示为字节码(bytecode)。字节码把二进制数据表示为16进制数字,是描述复杂二进制数据的好方法。区分大小写
 alert tcp 192.168.1.0/24 any -> ![192.168.1.0/24] any (content: "GET"; msg: "GET matched";) 以下的规则作用与上面一条相同,但是特征以16进制表示。 alert tcp 192.168.1.0/24 any -> ![192.168.1.0/24] any (content: "|47 45 54|"; msg: "GET matched";) 16进值的数字47与ASCII字符G的值相等,45与E相等,54与T相等。 
  • offset : content选项的修饰符,设定开始搜索的位置 。
    offset规则选项被用作使用 content规则选项关键字的规则的修饰符。这个关键字修饰符指定模式匹配函数从数据包开始处开始搜索的偏移量。它对于cgi扫描*(通用网关接口:Common Gateway Interface)*检测规则很有用,cgi扫描的内容搜索字符串不会在数据区的前4个字节中出现。小心不要把这个偏移量设置的太严格了,会有可能漏掉攻击!这个规 则选项关键字必须和content规则选项一起使用。

  • depth : content选项的修饰符,设定搜索的最大深度。
    depth 也是一个content规则选项修饰符。它设置了内容模式匹配函数从他搜索的区域的起始位置搜索的最大深度。它对于限制模式匹配函数超出搜索域指定范围而 造成无效搜索很有用。(也就是说,如果你在一个web包中搜索”cgi-bin/phf”,你可能不需要浪费时间搜索超过数据区的头20个字节)

 lert tcp any any -> 192.168.1.0/24 80 (content: "cgi-bin/phf"; offset: 3; depth: 22; msg: "CGI-PHF access";) 
  • nocase : 指定对content字符串大小写不敏感。
  • Distance : 两次content匹配的最小间距
  • Within:两次content匹配之间的最大间距
  • flow 这个选项要和TCP流联合使用。它允许规则只应用到流量流的某个方向上。这将允许规则只应用到客户端或者服务器端。这将能把内网客户端流览web页面的数据包和内网服务器所发送的数据包区分开来。
to_client 触发上服务器从A到B的响应。 to_server 触发客户端上从A到B的请求。 from_client 触发客户端上从A到B的请求。 from_server 触发服务器上从A到B的响应。 established 只触发已经建立的TCP连接。 stateless 不管流处理器的状态都触发(这对处理那些能引起机器崩溃的数据包很有用。 no_stream 不在重建的流数据包上触发。 only_stream 只在重建的流数据包上触发。 
  • fast_pattern

suricata对只有一个content关键字的规则使用多模匹配,而对于多个content的规则就对最长对复杂的一个进行多模匹配,而fast_pattern则可以改变这个状况,如果在较短较简单的content字段后加上fast_pattern关键字则会优先匹配这个content,有时这种方法可以有效提升效率。

下面这个例子就是这种情况,如果第二个content没有fast_parttern关键字的话便会先去匹配”User-Agent:”,而这个在数据包中的出现频率是远远高于”Badness”的,这样就会导致大量的多余时间浪费到无用的匹配上,使用了fast_pattern之后便大大提高了匹配的效率:

content:”User-Agent|3A|”; content:”Badness”; distance:0; fast_pattern; 

不仅如此,fast_parttern还支持部分content多模匹配,比如下面这个例子,表示从content的第8字节开始之后的4字节进行多摸匹配以提高效率:

content: “aaaaaaaaabc”; fast_pattern:8,4; 
  • 阀值 threshold
    用于控制规则的警报频率

    threshold: type , track

    , count , seconds

threshold-最小阀值 也就是说只有匹配到至少多少次数才进行告警

limit-限制告警次数,例如最少5分钟内告警一次

both-此类型是“阈值”和“限制”类型的组合

调节阀值主要是通过2种方法,一种是通过规则内的threshold关键字来调节

threshold: type threshold, track by_src, count 10, seconds 60 在60秒内对同一个源ip匹配到10次才产生告警 
 threshold: type limit, track by_src, seconds 180, count 1 如果匹配成功,则在3分钟内每个源ip最多生成1个警报 
threshold: type both, track by_src, count 5, seconds 360; 如果在6分钟内有5个或更多匹配,将生成警报,并且在6分钟内仅警报一次。 
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/203101.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月19日 下午10:34
下一篇 2026年3月19日 下午10:35


相关推荐

  • ubuntu服务器硬件配置

    ubuntu服务器硬件配置1.系统cat/etc/issue2.内存free-h3.硬盘df-h4.CPUcat/proc/cpuinfocpu个数cat/proc/cpuinfo|grep”physicalid”|sort|uniq|wc-l

    2022年10月21日
    3
  • Java IO流学习总结七:Commons IO 2.5-FileUtils

    Java IO流学习总结七:Commons IO 2.5-FileUtilsJavaIO流学习总结七:CommonsIO2.5转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/54946762本文出自【赵彦军的博客】在上面的几篇文章中,介绍了IO的常规用法,今天介绍CommonsIO框架的使用。CommonsIO简介ApacheCommonsIO是Apache基金会创建并维护的Ja

    2022年5月18日
    33
  • 中药学【24】

    中药学【24】1 姜炙厚朴时 每 100kg 厚朴用生姜 A 20kgB 5kgC 15kgD 10kgE 2kg2 姜炙后能缓和苦寒之性 并能增强止呕作用的中药是 A 厚朴 B 黄连 C 黄芩 D 知母 E 杜仲 3 蛤蚧的炮制除了油炙之外 还包括 A 炒黄 B 麸炒 C 蜜炙 D 姜炙 E 酒炙 4 麻黄蜜炙后可增强 A 平喘作用 B 解表作用 C 发汗作用 D 利水作用 E 消肿作用 5 槐花 芥子常用的炮制方法是 A 炒黄 B 炒焦 C 麸炒 D 米炒 E 砂炒 6 槐花炒炭后 含量减少

    2026年3月17日
    3
  • Flink SQL Client综合实战

    Flink SQL Client综合实战

    2020年11月19日
    197
  • 图片爬虫

    图片爬虫参考视频学习,堆糖网图片爬虫"""1.URL2.模拟浏览器请求资源3.解析网页4.保存数据到本地"""importrequests#第三方库importurllib.parseimportjsonimportjsonpathurl=’https://www.duitang.com/napi/blog/list/by_search/?kw={}&amp;s…

    2022年6月17日
    32
  • 使用telnet测试端口连通性

    使用telnet测试端口连通性使用 telnet 命令格式 telnetipprot

    2026年3月18日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号