snort2.9规则-学习笔记

目录

规则动作

协议部分

Ip地址

端口号

方向操作符

规则选项

general rule options

msg

reference

gid

sid

rev

classtype

 priority

metadata

总结

payload detection rule options

content

protected_content

hash

length

nocase

rawbytes

depth

offset

distance

within

http_client_body

http_header

http_raw_header

http_method

http_uri

http_raw_uri

http_stat_code

http_stat_msg

http_encode

fast_pattern

uricontent

urilen

isdataat

pcre

pkt_data

file_data

base64_decode

base64_data

byte_test

byte_jump

byte_extract

byte_math

ftpbounce

asn1

cvs

dce_iface

dce_opnum

dce_stub_data

sip_method

sip_stat_code

sip_header

sip_body

gtp_type

gtp_info

gtp_version

ssl_version

ssl_state

快速参考

non-payload detection rule options

fragoffset

ttl

tos

id

ipopts

fragbits

dsize

flags

flow

flowbits

seq

ack

window

itype

icode

icmp_id

icmp_seq

rpc

ip_proto

sameip

stream_reassemble

stream_size

快速参考​

post-detection rule options

logto

session

resp

react

tag

replace

detecion_filter

快速参考


因为一些原因要熟悉snort的语法规则,看了snort官网的snort_manual,翻译加理解,做下笔记,主要方便自查,鉴于水平有限,如有错误,请帮忙指出,谢谢。


大多数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)语句。

规则动作

alert产生警示,并记录

log纪录该封包

pass忽略该封包

drop阻塞并记录包

reject 阻塞并记录,如果使TCP,则发送一个TCP reset包,如果UDP,则发送一个ICMP端口不可达信息

sdrop让iptable丢弃该类型封包,但不记录

 

此外

activate产生警示,并开启另一个动态规则

dynamic被activate指令触发后所执行的规则

激活和动态规则被逐步淘汰,转而采用tagging和flowbits的组合

可以定义你自己的规则类型并且附加一条或者更多的输出模块给它,然后你就可以使用这些规则类型作为snort规则的一个动作。

 

下面这个例子创建一条规则,记录到tcpdump。

 

ruletype suspicious

{

type log output

log_tcpdump: suspicious.log

}

下面这个例子创建一条规则,记录到系统日志和MySQL数据库

ruletype redalert

{

type alert output

alert_syslog: LOG_AUTH LOG_ALERT

output database: log, mysql, user=snort dbname=snort host=localhost

}

 

自定义规则行为:

Ruletype 规则行为名

{行为内容}

 

配置输出:

Output 输出类型: 输出文件名

 

协议部分

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

 

Ip地址

 

规则头的下一个部分处理一个给定规则的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 !6000:6010

 

方向操作符

 

方向操作符"->"表示规则所施加的流的方向。方向操作符左边的ip地址和端口号被认为是流来自的源主机,方向操作符右边的ip地址和端口信息是目标主机,还有一个双向操作符"<>"。它告诉snort把地址/端口号对既作为源,又作为目标来考虑。这对于记录/分析双向对话很方便,例如telnet或者pop3会话。用来记录一个telnet会话的两侧的流的范例如下:

 

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


规则选项

规则选项构成snort检测引擎的核心,结合易用性和灵活性。所有的snort规则选项之间用分号分隔,每个规则选项也被用冒号分为,选项关键字和选项值

四类主要的规则选项类

一般

提供信息但在检测过程中不产生任何影响

有效负载

在净荷中查找数据,并且能够相互关联(数据包数据部分)

非有效负载

查找非净荷中的数据(数据包首部)

过后检测选项

这些选项是某条规则被触发后,所设置的执行的规则。

 

general rule options

 

  • msg

在报警和日志中打印特定的信息-

msg:"<message text>";
  • reference

提供包含外部的一些攻击识别系统的引用功能

  • gid

用于标识当规则被触发时,是snort的哪一部分生成事件,例如gid 1和规则子系统有关,大于100的gid 被设计来标识特定的预处理器和解码器。是可选项,如未指定,默认为1,即规则为规则子系统的一部分,为避免与snort已定义的gid冲突,建议从1000000开始,一般规则编写,不建议使用。gid需要和sid配合使用。例如

alert tcp any any -> any 80 (content:"BOB"; gid:1000001; sid:1; rev:1;)
  • sid

识别不同的snort规则(snort规则编号),应与rev关键字配合使用

sid:<snort rules id>;
  • rev

标识snort规则的修订,与sid配合使用(说明规则的版本)

alert tcp any any -> any 80 (content:"BOB"; sid:1000983; rev:1;)
  • classtype

snort根据其默认的规则,将攻击进行相应分类,并具有不同的优先级,1-4,1最高,规则分类被定义在classification.config文件中-

classtype:<class name>;

  •  priority

配置规则优先级(可以覆盖规则类型classtype预置的优先级)

priority:<priority integer>;
  • metadata

标明规则的一些其他信息,例如是否在规则共享库中共享,及其gid和sid,以及基于什么目标的服务标识,采用键值对形式,键值之间空格分开,多个键值对,逗号分隔,此关键字只有在Host Attribute Table已经提供才有意义。

metadata:key1 value1;
metadata:key1 value1, key2 value2;
  • 总结

 

payload detection rule options

  • content

查找匹配净荷中的内容,并触发响应-选项数据可以包含混合文本和二进制数据,二进制数据放在管道(||)字符中,并以16进制表示-格式

content:[!]"<content string>";

例如: 

alert tcp any any -> any 139 (content:"|5c 00|P|00|I|00|P|00|E|00 5c|";)  

content有关的修改关键字 

  • protected_content

提供content的大部分功能,不同的是输入的查询内容形式不同-上传查询内容的安全哈希摘要进行查询,隐藏查询内容更具保护性,如在配置文件中未指定默认的哈希算法,则在规则中要指定(md5,sha25,sha512),还需指定length关键字,标识原始数据长度。格式

protected_content:[!]"<content hash>", length:orig_len[, hash:md5|sha256|sha512];

示例 

alert tcp any any <> any 80 (msg:"MD5 Alert"; protected_content:"293C9EA246FF9985DC6F62A650F78986"; hash:md5; offset:0; length:4;)
  • hash

如上例,配合protected_content,指定使用的哈希算法

  • length

配合protect_content关键字使用,以受保护的形式标识规则摘要的内容的原始数据长度(?)范围0-65536

  • nocase

设置content 和 protected_content关键字不区分大小写的模式-示例

alert tcp any any -> any 21 (msg:"FTP ROOT"; content:"USER root"; nocase;)
  • rawbytes

忽视预处理器解码,匹配原始数据,配合content关键字使用,如果未设置该关键字,大部分预处理器会使用解码规范化数据做content匹配

  • depth

配合content使用,指定搜索的深度(距离)

  • offset

配合content使用,指定搜索的开始位置,相对于净荷开始位置的偏移量,示例

alert tcp any any -> any 80 (content:"cgi-bin/phf"; offset:4; depth:20;)
  • distance

配合content使用,与offset类似,只不过,distance设置的是从上一个匹配结束开始的距离,而offset是从开始计算

  • within

配合content使用,多个content匹配之间的距离要求要满足within设定的值(字节)

  • http_client_body

配合content,限制在HTTP客户请求报文的正文中搜索

配合content,限制在HTTP请求和响应的Cookie首部字段中搜索(不包括首部名本身,和终止首部行的CRLF),取决于enable_cookie配置选项

配合content,限制在HTTP请求和响应的非标准化Cookie首部字段中搜索

  • http_header

配合content,限制在提取的HTTP客户端请求和HTTP服务端响应的首部中搜索,提取的首部可以是非格式化的。

  • http_raw_header

配合content,限制在提取的非格式化的HTTP请求和响应首部中搜索。

  • http_method

配合content,限制在http请求的方法,进行匹配搜索

  • http_uri

配合content,限制在格式化HTTP数据报的url字段中搜索

  • http_raw_uri

配合content,限制在非格式化的http数据报文的url字段中搜索

  • http_stat_code

配合content,限制在HTTP响应报文的状态码字段中搜索(200,404)

  • http_stat_msg

配合content,限制在HTTP响应报文的状态码说明字段中搜索(OK,Not Found)

  • http_encode

用于检测,HTTP报文中url,首部,cookie字段使用的特定的编码方式,格式(!和or不能结合使用)

http_encode:[uri|header|cookie], [!][<utf8|double_encode|non_ascii|uencode|bare_byte|ascii|iis_encode>];

示例 

alert tcp any any -> any any (msg:"UTF8/UEncode Encoding present"; http_encode:uri,utf8|uencode;)
alert tcp any any -> any any (msg:"No UTF8"; http_encode:uri,!utf8;)
  • fast_pattern

与content配合使用,设定快速模式,当短的内容更独特,即短一些的内容比长一些的在包中更少可能被发现,此模式更有用,示例

此规则使内容"IJKLMNO"采用快速模式匹配,即使它比前面的模式"ABCDEFGH"短。

alert tcp any any -> any 80 (content:"ABCDEFGH"; content:"IJKLMNO"; fast_pattern;)

此规则规定,将内容"IJKLMNO"采用快速模式匹配,并且内容应仅用于快速模式匹配,并不作为content规则选项检测。

alert tcp any any -> any 80 (content:"ABCDEFGH"; content:"IJKLMNO"; nocase; fast_pattern:only;)

此规则规定内容"JKLMN"使用快速模式,但仍用content规则选项检测为"IJKLMNO"。

alert tcp any any -> any 80 (content:"ABCDEFGH"; content:"IJKLMNO"; fast_pattern:1,5;)
  • uricontent

相当于http_uri修改的content关键字,在标准化的请求url中查找

  • urilen

指定要匹配的url长度,包括最大长度,最小长度,或者长度范围,使用norm|raw表示使用的是原始缓冲区还是规范化的url缓冲区,格式

urilen:min<>max[,<uribuf>];
urilen:[<|>]<number>[,<uribuf>];

<uribuf> : "norm" | "raw"
  • isdataat

判断指定位置是否有数据,可选相对于之前的content匹配结束,格式

isdataat:[!]<int>[, relative|rawbytes];
  • pcre

pcre关键字允许使用兼容perl的正则表达式编写规则

  • pkt_data

对于原始的传输载荷设置检测指针,任何相对或是绝对的content匹配和其他净荷检测规则选项,如果设置了pkt_data,将应用于原始的TCP/UDP载荷或者标准化的缓存(如果是telnet,规范化的smtp)

  • file_data

将检测的指针指向一下缓冲区:1,如果是HTTP流量,a.HTTP响应正文(不分开/压缩/规范化),b.解分块的HTTP响应正文,c.解压缩的HTTP响应正文,d.规范化HTTP响应正文。。2.如果是SMTP/POP/IMAP流量时,将缓冲区设置到 a.SMTP/POP/IMAP数据正文(关闭解码时包括Email首部和MIME)b.base64解码的MIME附件。c.非编码的MIME附件 d.可引用-可打印解码的MIME附件,e.Unix到Unix的解码附件。3. 如果不是由1和2设置,将被设置到净荷。

  • base64_decode

用于base64解码数据,对于http首部,此选项特别有用,例如http权限首部,格式

base64_decode[:[bytes <bytes_to_decode>][, ][offset <offset>[, relative]]];  

 其中可选bytes后面设置要解码的字节数,offset后面设置相对起始点或者相对于doe_ptr的偏移量,relative,设定检测相对doe_ptr.

示例

alert tcp any any -> any any (msg:"Authorization NTLM"; \
	content:"Authorization:"; http_header; \
	base64_decode:bytes 12, offset 6, relative; base64_data; \
	content:"NTLMSSP"; within:8;)
  • base64_data

用于将指针置于base64解码缓冲区的开头,base64_decode需要在base64_data选项前指定

  • byte_test

该选项检测一段二进制字节是否为特定值,能够测试二进制自己或者转换代表性字节串为等效二进制进而检测,格式

byte_test:<bytes to convert>, [!]<operator>, <value>, <offset> \
[, relative][, <endian>][, string, <number type>][, dce] \
[, bitmask <bitmask_value>];

bytes = 1 - 10,检测的字节数
operator = '<' | '=' | '>' | '<=' | '>=' | '&' | '^' ,与设定值的关系
value = 0 - 4294967295 ,设定值
offset = -65535 to 65535 偏移量
relative 相对上一个
endian 小端存储,little,大端存储,big
number type 进制,hex 十六进制,dec 十进制 ,oct 八进制。
bitmask_value = 1 to 4 byte hexadecimal value,字节掩码
  • byte_jump

该关键字用于跳过指定的字节长度,以在特定位置执行检测,格式

byte_jump:<bytes_to_convert>, <offset> [, relative][, multiplier <mult_value>] \
[, <endian>][, string, <number_type>][, align][, from_beginning][, from_end] \
[, post_offset <adjustment value>][, dce][, bitmask <bitmask_value>];

bytes = 1 - 10,同上
offset = -65535 to 65535
mult_value = 0 - 65535 ,将计算字节乘上value,并跳过该值的字节数
post_offset = -65535 to 65535 ,在其他跳跃之后再次向前或者向后进行跳跃value字节
from_beginning/from_end 从数据包载荷的开始而不是当前位置跳跃/从尾部开始进行跳跃
bitmask_value = 1 to 4 bytes hexadecimal value
  • byte_extract

该规则从数据包载荷中截取一定数量的字节,存为变量,以供后面选项使用,每个规则最多只能创建两个byte_extract变量。它们可以在同一规则中重复使用任何次数。格式

byte_extract:<bytes_to_extract>, <offset>, <name> [, relative] \
        [, multiplier <multiplier value>][, <endian>][, string][, hex][, dec][, oct] \
        [, align <align value>][, dce][, bitmask <bitmask>];

    bytes_to_extract = 1 - 10
    name 保存的变量名
    value            = 0 - 4294967295
    offset           = -65535 to 65535
    bitmask_value    = 1 to 4 byte hexadecimal value

在偏移量 0 处从字节读取字符串的偏移量。

在偏移量 1 处从字节读取字符串的深度。

使用这些值将模式匹配约束到较小的区域。

示例:

alert tcp any any -> any any (byte_extract:1, 0, str_offset; \
        byte_extract:1, 1, str_depth; \
        content:"bad stuff"; offset:str_offset; depth:str_depth; \
        msg:"Bad Stuff detected within field";)

alert tcp any any -> any any (content:"|04 63 34 35|"; offset:4; depth:4; \
        byte_extract: 2, 0, var_match, relative, bitmask 0x03ff; \
        byte_test: 2, =, var_match, 2, relative; \
        msg:"Byte test value matches bitmask applied on bytes extracted";)
  • byte_math

对提取值和指定值或现有变量执行数学运算,将结果存在新的结果变量中,供后面选项使用,格式

byte_math:bytes <bytes_to_extract>, offset <offset_value>, oper <operator>, 
        rvalue <r_value>, result <result_variable> [, relative] 
        [, endian <endian>] [, string <number type>][, dce] 
        [, bitmask <bitmask_value>];

    bytes_to_extract = 1 - 10
    operator         = '+' | '-' | '*' | '/' | '<<' | '>>'
    r_value          = 0 - 4294967295 | byte extract variable
    offset_value     = -65535 to 65535
    bitmask_value    = 1 to 4 byte hexadecimal value
    result_variable  = Result Variable name

示例   

    alert udp $EXTERNAL_NET any -> $HOME_NET any \
    (msg:"Perform Arithmetic Operation on the extracted bytes"; \
    content:"|00 04 93 F3|"; \
    content:"|00 00 00 07|"; distance:4; within:4; \
    byte_math:bytes 4, offset 0, oper +, rvalue 248, result var, relative; \
    byte_test:4, >, var, 2, relative;)

    alert tcp $EXTERNAL_NET any -> $HOME_NET any \
    (msg:"Bitwise shift operator"; \
    content:"|00 00 00 07|"; distance:4; within:4; \
    byte_extract: 1, 0, extracted_val, relative; \
    byte_math: bytes 1, offset 2, oper >>, rvalue extracted_val, result var, relative; \
    byte_test:2, =, var, 0, relative;)

    alert udp any any -> any 1234 \
    (content: "Packets start"; \
 byte_math: bytes 2, offset 0, oper -, rvalue 100, result var, relative, bitmask 0x7FF0; \
    content: "Packets end"; distance: 2; within var; \
    msg:"Content match with bitmask applied to the bytes extracted";)

    alert udp any any -> any 1235 \
    (byte_extract: 4, 3, extracted_val, relative; \
    byte_math: bytes 5, offset 0, oper +, rvalue extracted_val, result var, string hex; \
    byte_test:5, =, var, 4, string, hex; \
    msg:"String operator used with math rule option";)
  • ftpbounce

检测FTP bounce attacks,格式:ftpbounce;

  • asn1

ASN.1检测插件解码数据包或者数据包的一部分,查找恶意代码,多个asn1选项之间是or的关系,命中一个,整个选项命中,格式:

asn1:[bitstring_overflow][, double_overflow][, oversize_length <value>][, absolute_offset <value>|relative_offset <value>];
  • cvs

CVS检测插件有助于检测:Bugtraq-10384,CVE-2004-0396:"变形条目修改和未更改标志插入",格式:

cvs:<option>;   option:invalid-entry,查找无效的条目字符串
  • dce_iface

  • dce_opnum

  • dce_stub_data

  • sip_method

  • sip_stat_code

  • sip_header

  • sip_body

  • gtp_type

  • gtp_info

  • gtp_version

  • ssl_version

  • ssl_state

  • 快速参考

non-payload detection rule options

  • fragoffset

比较IP首部的13位片偏移字段的值和设定的值是否满足关系,格式

fragoffset:[!|<|>]<number>;
  • ttl

检测IP首部的8位生存时间字段,格式

ttl:[<, >, =, <=, >=]<number>;
ttl:[<number>]-[<number>];
  • tos

检测IP首部的TOS字段(8位TOS包括3位现已被忽略的优先权子字段,1位必须置零的未用位,另外4位分别表示:最小时延、最大吞吐量、最高可靠性和最小费用,4位均为0代表一般服务),格式

tos:[!]<number>;
  • id

检查IP首部的id字段(16位标识),格式

id:<number>;
  • ipopts

用来查找IP首部的选项字段,是否设置了一些特定的IP选项,需要注意的是每个规则只能设置一个ipopts关键字

rr - Record route(记录路由)

eol - End of list (列表结尾)

nop - No op (无操作)

ts - Time Stamp (时间戳)

sec - IP security (IP安全选项)

esec – IP Extended Security

lsrr - Loose source routing (松散源路由)

ssrr - Strict source routing (严格源路由)

satid - Stream identifier (流标示符)

any – any IP options are set

格式:

ipopts:<rr|eol|nop|ts|sec|esec|lsrr|lsrre|ssrr|satid|any>;
  • fragbits

检测IP首部的3位和分片有关的标志位,M-更多分片(除最后一片均置1),D-不分片,R-保留位,snort提供了一些修改匹配条件的修饰符:“+”代表匹配设定值及其他任意值,“*”代表匹配任意设定值(or),“!”非。

格式:

fragbits:[+*!]<[MDR]>;

 示例:

fragbits:MD+;
  • dsize

用来检测数据包净荷大小,可用于检查可能导致缓冲区溢出的异常大小的数据包。

格式:

dsize:min<>max;
dsize:[<|>]<number>;
  • flags

检查是否存在特定的TCP标志位,可以检查以下位

F

- FIN - Finish (LSB in TCP Flags byte)

S

- SYN - Synchronize sequence numbers

R

- RST - Reset

P

- PSH - Push

A

- ACK - Acknowledgment

U

- URG - Urgent

C

- CWR - Congestion Window Reduced (MSB in TCP Flags byte),原来为1,reserved bit 1

E

- ECE - ECN-Echo (If SYN, then ECN capable. Else, CE flag in IP header is set),原来为2,reserved bit 2

0

- No TCP Flags Set

        可以添加的修饰符同样有“+”“*”“!”,

格式:

flags:[!|*|+]<FSRPAUCE0>[,<FSRPAUCE>];
  • flow

flow关键字与session tracking结合使用,它允许规则只应用于特定方向的数据流,允许规则只应用与客户端或者服务器端,选项值有

to_client 服务器响应从A到B时触发

to_server 客户端请求从A到B时触发

from_client 客户端请求从A到B时触发

from_server 服务器响应从A到B时触发

established 只触发已经建立的TCP连接。

stateless 不管流处理器的状态都触发(这对处理那些能引起机器崩溃的数据包很有用。

no_stream 不在重建的流数据包上触发(对dsize 和 stream5有用。

only_stream 只在重建的流数据包上触发。

no_frag  不在重建的片数据包触发

only_frag  只在重建的片数据包触发

格式:

flow:[(established|not_established|stateless)] 
        [,(to_client|to_server|from_client|from_server)]
        [,(no_stream|only_stream)]
        [,(no_frag|only_frag)];
  • flowbits

与会话预处理器的conversation tracking 结合使用,允许规则跟踪传输协议会话期间状态,flowbits对于TCP会话最有用,因为它允许规则跟踪应用协议的状态。有一些选项可以被flowbits设置,大多数需要设定用户定义的特定的状态名称,某些需要指定组名称,如果不指出,则flowbits属于默认组。

格式:

flowbits:[set|setx|unset|toggle|isset|isnotset|noalert|reset][, <bits/bats>][, <GROUP_NAME>];
    bits ::= bit[|bits]
    bats ::= bit[&bats]

 

  • seq

检测TCP首部的32位序号字段

格式:

seq:<number>;
  • ack

检测TCP首部的32位确认序号字段

格式:

ack:<number>;
  • window

检测TCP首部的16位窗口大小字段(接收端期望接收的字节大小)

  • itype

检测ICMP(Internet 控制报文协议,ICMP被封装到IP数据报内部)首部的8位类型字段

格式:

itype:min<>max;
itype:[<|>]<number>;
  • icode

检测ICMP首部的8位代码字段,不同的类型和代码字段,代表不同的ICMP类型的报文

格式:

icode:min<>max;
icode:[<|>]<number>;
  • icmp_id

检测ICMP首部的id(标识符字段,并不是所有ICMP报文都有的)

格式:

icmp_id:<number>;
  • icmp_seq

检测ICMP首部的序列号字段(有些ICMP才有)

格式:

icmp_seq:<number>;
  • rpc

用于检查SUNRPC CALL请求中的PRC应用程序,版本号,程序编号,通配符“*”对版本和程序编号都有效

格式:

rpc:<application number>, [<version number>|*], [<procedure number>|*]>;
  • ip_proto

检查IP的协议头

 格式: 

ip_proto:[!|>|<] <name or number>;
  • sameip

检查源IP和目的IP是否一致

示例:

alert ip any any -> any any (sameip;)
  • stream_reassemble

允许规则在匹配流量时,启用或者禁用流重组

格式:

stream_reassemble:<enable|disable>, <server|client|both>[, noalert][, fastpath];

 其中noalert,设定不报警,fastpath参数使snort忽略连接的其他部分

  • stream_size

允许规则根据监测到的字节数(由TCP序列号决定)来匹配流量(?)

格式:

stream_size:<server|client|both|either>, <operator>, <number>;
  • 快速参考

 

 

post-detection rule options

 

  • logto

将触发规则的数据包记录到指定输出日志文件,snort处于二进制日志记录模式时,此选项不起作用

格式:

logto:"filename";
  • session

用于从TCP会话中提取用户数据。在很多情况下,查看用户在telnet,ftp或者web 会话中键入什么是很有用的,有3个可选关键字-printable,binary,all,printable关键字只打印能够被用户正常看到和打印的数据,binary关键字打印二进制数据,all关键字,以等效的十六进制打印不可打印字符,格式:

session:[printable|binary|all];
  • resp

启动杀死违规会话的主动响应,可在被动和内联模式使用。

该插件合法的参数如下:

rst_snd - 向发送方发送TCP-RST数据包

rst_rcv - 向接受方发送TCP-RST数据包

rst_all - 向收发双方发送TCP_RST数据包

icmp_net - 向发送方发送ICMP_NET_UNREACH

icmp_host - 向发送方发送ICMP_HOST_UNREACH

icmp_port - 向发送方发送ICMP_PORT_UNREACH

icmp_all - 向发送方发送上述所有的ICMP数据包

在向目标主机发送多种响应数据包时,这些选项组合使用。多个参数之间使用逗号分隔。

  • react

支持主动响应,其中包括想客户端发送网页或其他内容,然后关闭连接。可用于被动和内联模式,react和resp都有可能使snort陷入死循环,要注意使用。

这个选项包括如下的基本修饰词:

block——关闭连接并且发送一个通知

warm——发送明显的警告信息

基本修饰词可以和如下的附加修饰词组合使用:

msg——把msg选项的内容包含进阻塞通知信息中

proxy——使用代理端口发送通知信息

大量的附加修饰词由逗号隔开,react 关键字将被放在选项的最后一项。

示例:

alert tcp any any <> 192.168.1.0/24 80 (content: "bad.htm"; msg: "Not for children!"; react: block, msg;)

  • tag

tag关键字允许规则标记除命中该条规则的单个数据包之外的,标记其他涉及源或目标主机的流量,以便进行后续的跟踪分析(取代activate-dynamic规则动作)。

格式

tag:host, <count>, <metric>, <direction>;
tag:session[, <count>, <metric>][, exclusive];

host - 记录从激活标记的主机来的数据包

session - 记录触发这条规则的会话的数据包

count - 记录数量,和metric单位配合

metric - packets,包;seconds,秒;bytes,字节;

src - 标记源IP地址数据包,仅host类型时可用

dst - 标记目的IP地址数据包,仅host类型可用

exclusive - 仅在第一个匹配会话中标记标记数据包,session类型可用,具有此选项的session类型tag不需要计数和单位参数,而用于获取完整会话

  • replace

replace在内联模式下可用,可以用提供的字符串和之前匹配的字符串进行等长替换,一个规则可以有多个替换,每个内容对应一个

  • detecion_filter

根据源或目标IP地址跟踪,如果规则匹配的速率超过配置的速率,则将触发该规则。

格式

detection_filter: track <by_src|by_dst>, count <c>, seconds <s>;

示例,当在60s采样周期内,在超出30次的从源IP的登陆尝试之后,在之后每次都会触发规则

drop tcp 10.1.2.100 any > 10.1.1.100 22 ( \
        msg:"SSH Brute Force Attempt";
        flow:established,to_server; \
        content:"SSH"; nocase; offset:0; depth:4; \
        detection_filter:track by_src, count 30, seconds 60; \
        sid:1000001; rev:1;)

 

  • 快速参考

 

 

  • 10
    点赞
  • 51
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
安装和部署Snort 2.9可以参考以下步骤: 1. 首先,你需要安装一些依赖文件。可以使用以下命令安装所需的依赖文件: - 在CentOS上执行:`yum install wget libdnet-devel pcapy pcre-devel pcre libpcap-devel gcc cc flex flex-devel bison zlib-devel zlib luajit luajit-devel openssl-devel -y` - 在Debian上执行:`apt-get install wget libdnet-devel pcapy pcre-devel pcre libpcap-devel gcc cc flex flex-devel bison zlib-devel zlib luajit luajit-devel openssl-devel -y` 2. 下载并安装DAQ(Data Acquisition Library)。可以使用以下命令下载和安装DAQ: ```shell wget https://www.snort.org/downloads/snort/daq-2.0.7.tar.gz tar zxvf daq-2.0.7.tar.gz cd daq-2.0.7 ./configure make make install ``` 3. 下载并安装Snort 2.9。可以使用以下命令下载和安装Snort 2.9: ```shell wget https://www.snort.org/downloads/snort/snort-2.9.20.tar.gz tar zxvf snort-2.9.20.tar.gz cd snort-2.9.20 ./configure make make install ``` 4. 安装完成后,你可以使用以下命令检查Snort的版本: ```shell snort -V ``` 这些是在CentOS和Debian上安装和部署Snort 2.9的基本步骤。如果你遇到了任何错误或问题,可以参考安装过程中的错误信息来解决。例如,如果你在安装过程中遇到了"dnet header not found"错误,可以使用以下命令解决该问题: - 在CentOS上执行:`yum -y install libdnet-devel` - 在Debian上执行:`apt-get -y install libdumbnet-dev` 希望这些步骤能帮助你成功安装和部署Snort 2.9

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值