如何编写snort的检测snort规则库

6576人阅读
安全相关(24)
/*********************************************************************
&* Author& : Samson
&* Date&&& : 03/21/2014
&* Test platform:
&*&&&&&&&&&&&&& Linux ubuntu 3.2.0-58-generic-pae
&*&&&&&&&&&&&&& GNU bash, version 4.2.39
&* *******************************************************************/
编写snort 规则
snort使用一种简单的,轻量级的规则描述语言,这种语言灵活而强大。在开发snort规则时要记住几个简单的原则。
&&& 第一, 大多数snort规则都写在一个单行上,或者在多行之间的行尾用/分隔。Snort规则被分成两个逻辑部分:规则头和规则选项。规则头包含规则的动作,协议,源和目标ip地址与网络掩码,以及源和目标端口信息;规则选项部分包含报警消息内容和要检查的包的具体部分。
下面是一个规则范例:
&&& alert tcp any any -& 192.168.1.0/24 111 (content:&|00 01 86 a5|&; msg: &mountd access&;)
&&& 第一个括号前的部分是规则头(rule header),包含的括号内的部分是规则选项(rule options)。规则选项部分中冒号前的单词称为选项关键字(option keywords)。注意,不是所有规则都必须包含规则选项部分,选项部分只是为了使对要收集或报警,或丢弃的包的定义更加严格。组成一个规则的所有元素 对于指定的要采取的行动都必须是真的
。当多个元素放在一起时,可以认为它们组成了一个逻辑与(AND)语句。同时,snort规则库文件中的不同规则可以 认为组成了一个大的逻辑或(OR)语句。
规则动作:
规则的头包含了定义一个包的who,where和what信息,以及当满足规则定义的所有属性的包出现时要采取的行动。规则的第一项是&规则动作&(rule action),&规则动作&告诉snort在发现匹配规则的包时要干什么。在snort中有五种动作:alert、log、pass、activate和dynamic.
1、Alert-使用选择的报警方法生成一个警报,然后记录(log)这个包。
2、Log-记录这个包。
3、Pass-丢弃(忽略)这个包。
4、activate-报警并且激活另一条dynamic规则。
5、dynamic-保持空闲直到被一条activate规则激活,被激活后就作为一条log规则执行。
你可以定义你自己的规则类型并且附加一条或者更多的输出模块给它,然后你就可以使用这些规则类型作为snort规则的一个动作。
规则的下一部分是协议。Snort当前分析可疑包的ip协议有四种:tcp 、udp、icmp和ip。将来可能会更多,例如ARP、IGRP、GRE、OSPF、RIP、IPX等。
规则头的下一个部分处理一个给定规则的ip地址和端口号信息。关键字&any&可以被用来定义任何地址。Snort没有提供根据ip地址查询域名的 机制。地址就是由直接的数字型ip地址和一个cidr块组成的。Cidr块指示作用在规则地址和需要检查的进入的任何包的网络掩码。/24表示c类网络, /16表示b类网络,/32表示一个特定的机器的地址。例如,
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地址不是来自内部网络而目标地址是内部网络的tcp包&。
你也可以指定ip地址列表,一个ip地址列表由逗号分割的ip地址和CIDR块组成,并且要放在方括号内“[”,“]”。此时,ip列表可以不包含空格在ip地址之间。下面是一个包含ip地址列表的规则的例子。
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流
端口否定操作符用&!&表示。它可以用于任何规则类型(除了any,这表示没有,呵呵)。例如,由于某个古怪的原因你需要记录除x windows端口以外的所有一切,你可以使用类
似下面的规则:
log tcp any any -& 192.168.1.0/24 !
方向操作符
方向操作符&-&&表示规则所施加的流的方向。方向操作符左边的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 - 通配符模式匹配。
??搠?敧?捯浵???o??& distance - 强迫关系模式匹配所跳过的距离。
within - 强迫关系模式匹配所在的范围。
byte_test - 数字模式匹配。
byte_jump - 数字模式测试和偏移量调整。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:607286次
积分:8724
积分:8724
排名:第1631名
原创:272篇
转载:27篇
评论:58条
(1)(2)(6)(6)(6)(2)(3)(6)(7)(5)(4)(6)(5)(4)(4)(5)(14)(4)(6)(8)(13)(4)(7)(19)(11)(2)(7)(2)(4)(1)(4)(7)(5)(6)(14)(5)(6)(5)(3)(3)(4)(2)(2)(3)(1)(11)(1)(4)(1)(4)(21)(5)(1)(6)(5)1821人阅读
Network Security(70)
Snort安装与使用,本文介绍Snort的编译安装步骤及配置文件修改和自定义规则集进行报文验证。
1、安装所需要的软件包如下:依次解压安装即可 tar zxvf xx.tar.gz&& ./make install
-rw-r--r--.& 1 root&&&&& root&&&&&&& ?.19 15:26 libdnet-1.10.tar.gz
-rw-r--r--.& 1 root&&&&& root&&&&&&& ?.19 2013 libpcap-0.9.4.tar.gz
-rw-r--r--.& 1 root&&&&& root&&&&&&& ?.19 15:35 zlib-1.2.3.tar.gz
-rw-r--r--.& 1 root&&&&& root&&&&&&& ?.19 15:34 daq-2.0.4.tar.gz
-rw-r--r--.& 1 root&&&&& root&&&&&& ?.19 15:04 snort-2.9.6.2.tar.gz
2、安装完成后运行snort -dev可以查看到网卡正在捕获的报文信息
=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
12/24-14:56:26.:60:4B:74:8A:89 -& 00:0C:29:6C:3E:B8 type:0x800 len:0x3C
192.168.16.70:8176 -& 192.168.16.71:22 TCP TTL:64 TOS:0x0 ID:8442 IpLen:20 DgmLen:40 DF
***A**** Seq: 0x& Ack: 0xF40837B6& Win: 0xFAF0& TcpLen: 20
=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
负载数据等....................
3、进入解压后的snort目录,修改snort所在目录etc/snort.conf文件,修改前请备份,将如下规则集(snort.conf下面的规则包含文件)内容全部删除,只添加一行 include $RULE_PATH/test.rules。
通过搜索查看$RULE_PATH为var RULE_PATH ../rules,所以在snort目录下建目录rules (mkdir rules)此rules目录与etc目录平级,之后在rules中touch test.rules文件即可。
snort.conf下面的规则包含文件如下:
include $RULE_PATH/local.rules
include $RULE_PATH/app-detect.rules
include $RULE_PATH/attack-responses.rules
include $RULE_PATH/backdoor.rules
include $RULE_PATH/bad-traffic.rules
include $RULE_PATH/blacklist.rules
include $RULE_PATH/botnet-cnc.rules
include $RULE_PATH/browser-chrome.rules
include $RULE_PATH/browser-firefox.rules
include $RULE_PATH/browser-ie.rules
include $RULE_PATH/browser-other.rules
include $RULE_PATH/browser-plugins.rules
include $RULE_PATH/browser-webkit.rules
include $RULE_PATH/chat.rules
include $RULE_PATH/content-replace.rules
include $RULE_PATH/ddos.rules
include $RULE_PATH/dns.rules
include $RULE_PATH/dos.rules
include $RULE_PATH/experimental.rules
include $RULE_PATH/exploit-kit.rules
include $RULE_PATH/exploit.rules
include $RULE_PATH/file-executable.rules
include $RULE_PATH/file-flash.rules
include $RULE_PATH/file-identify.rules
include $RULE_PATH/file-image.rules
include $RULE_PATH/file-java.rules
include $RULE_PATH/file-multimedia.rules
include $RULE_PATH/file-office.rules
include $RULE_PATH/file-other.rules
include $RULE_PATH/file-pdf.rules
include $RULE_PATH/finger.rules
include $RULE_PATH/ftp.rules
include $RULE_PATH/icmp-info.rules
include $RULE_PATH/icmp.rules
include $RULE_PATH/imap.rules
include $RULE_PATH/indicator-compromise.rules
include $RULE_PATH/indicator-obfuscation.rules
include $RULE_PATH/indicator-scan.rules
include $RULE_PATH/indicator-shellcode.rules
include $RULE_PATH/info.rules
include $RULE_PATH/malware-backdoor.rules
include $RULE_PATH/malware-cnc.rules
include $RULE_PATH/malware-other.rules
include $RULE_PATH/malware-tools.rules
include $RULE_PATH/misc.rules
include $RULE_PATH/multimedia.rules
include $RULE_PATH/mysql.rules
include $RULE_PATH/netbios.rules
include $RULE_PATH/nntp.rules
include $RULE_PATH/oracle.rules
include $RULE_PATH/os-linux.rules
include $RULE_PATH/os-mobile.rules
include $RULE_PATH/os-other.rules
include $RULE_PATH/os-solaris.rules
include $RULE_PATH/os-windows.rules
include $RULE_PATH/other-ids.rules
include $RULE_PATH/p2p.rules
include $RULE_PATH/phishing-spam.rules
include $RULE_PATH/policy-multimedia.rules
include $RULE_PATH/policy-other.rules
include $RULE_PATH/policy.rules
include $RULE_PATH/policy-social.rules
include $RULE_PATH/policy-spam.rules
include $RULE_PATH/pop2.rules
include $RULE_PATH/pop3.rules
include $RULE_PATH/protocol-dns.rules
include $RULE_PATH/protocol-finger.rules
include $RULE_PATH/protocol-ftp.rules
include $RULE_PATH/protocol-icmp.rules
include $RULE_PATH/protocol-imap.rules
include $RULE_PATH/protocol-nntp.rules
include $RULE_PATH/protocol-pop.rules
include $RULE_PATH/protocol-rpc.rules
include $RULE_PATH/protocol-scada.rules
include $RULE_PATH/protocol-services.rules
include $RULE_PATH/protocol-snmp.rules
include $RULE_PATH/protocol-telnet.rules
include $RULE_PATH/protocol-tftp.rules
include $RULE_PATH/protocol-voip.rules
include $RULE_PATH/pua-adware.rules
include $RULE_PATH/pua-other.rules
include $RULE_PATH/pua-p2p.rules
include $RULE_PATH/pua-toolbars.rules
include $RULE_PATH/rpc.rules
include $RULE_PATH/rservices.rules
include $RULE_PATH/scada.rules
include $RULE_PATH/scan.rules
include $RULE_PATH/server-apache.rules
include $RULE_PATH/server-iis.rules
include $RULE_PATH/server-mail.rules
include $RULE_PATH/server-mssql.rules
include $RULE_PATH/server-mysql.rules
include $RULE_PATH/server-oracle.rules
include $RULE_PATH/server-other.rules
include $RULE_PATH/server-samba.rules
include $RULE_PATH/server-webapp.rules
include $RULE_PATH/shellcode.rules
include $RULE_PATH/smtp.rules
include $RULE_PATH/snmp.rules
include $RULE_PATH/specific-threats.rules
include $RULE_PATH/spyware-put.rules
include $RULE_PATH/sql.rules
include $RULE_PATH/telnet.rules
include $RULE_PATH/tftp.rules
include $RULE_PATH/virus.rules
include $RULE_PATH/voip.rules
include $RULE_PATH/web-activex.rules
include $RULE_PATH/web-attacks.rules
include $RULE_PATH/web-cgi.rules
include $RULE_PATH/web-client.rules
include $RULE_PATH/web-coldfusion.rules
include $RULE_PATH/web-frontpage.rules
include $RULE_PATH/web-iis.rules
include $RULE_PATH/web-misc.rules
include $RULE_PATH/web-php.rules
include $RULE_PATH/x11.rules
4、增加自定义的规则文件,本文使用ftp报文进行验证测试,如下为报文内容,第一个为下行服务器给客户端返回的信息,第二个为客户端给服务器发送的用户名
220 Serv-U FTP Server v6.0 for WinSock ready...
USER anonymous
规则内容如下,将此规则加到rules目录下的test.rules中即可。
alert tcp any any -& any any (msg:&ftp test jyh ****MALWARE-BACKDOOR - Dagger_1.4.0&; flow:to_content:&Serv-U&;&&&&&&&& depth:16; metadata: classtype:misc- sid:105; rev:14;)
5、运行程序,进入到snort的etc目录下去执行如下命令行
snort -r ../ftp_signal_ftp_downloadPasv_jyh_.pcap -c snort.conf -l log -A console
snort读取ftp文件,使用snort.conf配置文件同时记录日志到log目录中(此目录为自己建的)-A 显示模式 console即告警显示到控制台上,告警信息如下:
04/02-18:57:07.072952& [**] [1:105:14] ftp test jyh ****MALWARE-BACKDOOR - Dagger_1.4.0 [**] [Classification: Misc activity] [Priority: 3] {TCP} 192.168.1.60:21 -& 192.168.90.58:1943
6、错误说明
读取配置文件时可能无法找到whitelist/blacklist直接找到配置文件应该在的目录,建立这两个文件即可,内容可以为空。
如遇到其它错误可参考使用手册或baidu搜索即可搞定。
7、参考资料
snort使用及规则语法说明:snort manual.pdf此文件在源代码doc中可以找到。
snort 相关文档及库下载地址:
snort中文使用手册:&
代码review:
alert tcp any any -& any any (msg:&ftp test jyh ****MALWARE-BACKDOOR - Dagger_1.4.0&; flow:to_content:&\Serv-U&;&&&&&&&& depth:16; metadata: classtype:misc- sid:105; rev:14;)
读配置文件,读取snort.conf中的include xxx文件时继续调用读取配置文件解析,解析相应的规则。
解析规则选项parserule-&parseRuleOptions解析所有的(msg:&ftp test jyh ****MALWARE-BACKDOOR - Dagger_1.4.0&; flow:to_content:&\Serv-U&;&&&&&&&& depth:16; metadata: classtype:misc- sid:105; rev:14;)字段内容
解析规则-》PayloadSearchInit (sc=0x328a6a0, data=0x389a580 &\&Serv-U\&&, otn=0x389a1a0, protocol=6) at sp_pattern_match.c:189
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:701825次
积分:9807
积分:9807
排名:第1332名
原创:296篇
转载:36篇
评论:100条
(1)(1)(1)(1)(2)(2)(2)(7)(4)(5)(4)(2)(6)(4)(5)(6)(15)(3)(7)(8)(1)(4)(7)(3)(6)(22)(13)(9)(13)(5)(2)(13)(16)(11)(2)(5)(12)(2)(9)(4)(7)(15)(2)(7)(2)(2)(4)(6)(3)(1)(1)(1)(4)(1)(2)(1)(1)(1)(2)(1)(2)(36)(1)(1)}

我要回帖

更多关于 使用snort规则 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信