网络安全 频道

Snort(入侵检测系统)中文手册(2)

格式:
resp:

使用resp选项时要小心,因为很容易就会使snort陷入无限循环中,例如如下规则:
alert tcp any any -> 192.168.1.1/24 any (msg: "aiee!"; resp: rst_all;)

content_list

content_list 关键字允许多内容字符串被放在一个单独的内容匹配选项中,被匹配的字符串被存放在指定的文件中,而且每个字符串要单独占用一行。否则他们就等同于一个content字符串。这个选项是react关键字的基础。

格式;
content-list: ;

下面是一个文件的内容:
# adult sites
"porn"
"porn"
"adults"
"hard core"
"www.pornsite.com"

React

注意,使用这个功能很容易使网络流量陷入回路。React关键字以匹配一个规则时所作出的灵活的反应为基础。基本的反应是阻塞一些引人注意的站点的用户的访问。响应代码允许snort积极的关掉有冒犯行为的访问和/或发送一个通知给浏览者。这个通知可以包含你自己的注释。这个选项包括如下的基本修饰词:

block——关闭连接并且发送一个通知
warm——发送明显的警告信息
基本修饰词可以和如下的附加修饰词组合使用:
msg——把msg选项的内容包含进阻塞通知信息中
proxy——使用代理端口发送通知信息
大量的附加修饰词由逗号隔开,react 关键字将被放在选项的最后一项。

格式:
react: ;

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

reference

这个关键字允许规则包含一个外面的攻击识别系统。这个插件目前支持几种特定的系统,它和支持唯一的URL一样好。这些插件被输出插件用来提供一个关于产生报警的额外信息的连接。
确信先看一看如下地方:
http://www.snort.org/snort-db

格式:
reference: ,;

例子:
alert tcp any any -> any 7070 (msg: "IDS411/dos-realaudio"; flags: AP; content: " fff4 fffd 06 "; reference: arachNIDS,IDS411;)
alert tcp any any -> any 21 (msg: "IDS287/ftp-wuftp260-venglin-linux"; flags: AP; content: " 31c031db 31c9b046 cd80 31c031db "; reference: arachNIDS,IDS287; reference: bugtraq,1387; reference: cve,CAN-2000-1574; )

Sid

这个关键字被用来识别snort规则的唯一性。这个信息允许输出插件很容易的识别规则的ID号。
sid 的范围是如下分配的:

<100 保留做将来使用
100-1000,000 包含在snort发布包中
>1000,000 作为本地规则使用
文件sid-msg.map 包含一个从msg标签到snort规则ID的映射。这将被post-processing 输出模块用来映射一个ID到一个报警信息。

格式:
sid: ;

rev

这个关键字是被用来识别规则修改的。修改,随同snort规则ID,允许签名和描述被较新的信息替换。

格式:
rev:

Classtype

这个关键字把报警分成不同的攻击类。通过使用这个关键字和使用优先级,用户可以指定规则类中每个类型所具有的优先级。具有classification的规则有一个缺省的优先级。

格式:
classtype:

在文件classification.config中定义规则类。这个配置文件使用如下的语法:
config classification: ,

Priority

这个关键字给每条规则赋予一个优先级。一个classtype规则具有一个缺省的优先级,但这个优先级是可以被一条priority规则重载的。

格式:
priority: ;

Uricontent
这个关键字允许只在一个请求的URI(URL)部分进行搜索匹配。它允许一条规则只搜索请求部分的攻击,这样将避免服务数据流的错误报警。关于这个关键字的参数的描述可以参考content关键字部分。这个选项将和HTTP解析器一起工作。(只能搜索第一个“/”后面的内容)。

格式:
uricontent:[!];

Tag

这个关键字允许规则记录不仅仅是触发这条规则的那个数据包。一旦一条规则被触发,来自这个主机的数据包将被贴上“标签”。被贴上标签的数据流将被记录用于随后的响应代码和提交攻击流量的分析。

格式:
tag: , , , [direction]

type

session 记录触发这条规则的会话的数据包
host 记录激活tag规则的主机的所有数据包(这里将使用[direction]修饰词
count Count 指定一个单位的数量。这个单位由给出。
metric
packets 标记主机/会话的个数据包。
seconds 标记主机/会话的秒。

例子:
alert tcp !$HOME_NET any -> $HOME_NET 143 (flags: A+; content: " e8 c0ff ffff /bin/sh"; tag: host, 300, packets, src; msg: "IMAP Buffer overflow, tagging!";)
alert tcp !$HOME_NET any -> $HOME_NET 23 (flags: S; tag: session, 10, seconds; msg: "incoming telnet session";)

Ip_proto
Ip_proto关键字允许检测IP协议头。这些协议可以是由名字标识的,参考/etc/protocols文件。在规则中要谨慎使用ip_protocol关键字。

格式:
ip_proto:[!] ;

例子:
alert ip !$HOME_NET any -> $HOME_NET any (msg: "IGMP traffic detected"; ip_proto: igmp;)

SameIP

Sameip关键字允许规则检测源IP和目的IP是否相等。

格式:
sameip;

例子:
alert ip $HOME_NET any -> $HOME_NET any (msg: "SRC IP == DST IP"; sameip;)

Regex
这个模块现在还正在开发,所以在当前的产品规则集中还不能使用。如果使用的话,它将触发一个错误信息。

Flow

这个选项要和TCP流重建联合使用。它允许规则只应用到流量流的某个方向上。这将允许规则只应用到客户端或者服务器端。这将能把内网客户端流览web页面的数据包和内网服务器所发送的数据包区分开来。这个确定的关键字能够代替标志:A+ 这个标志在显示已建立的TCP连接时都将被使用。

选项:
to_client 触发服务器上从A到B的响应。
to_server 触发客户端上从A到B的请求。
from_client 触发客户端上从A到B的请求。
from_server触发服务器上从A到B的响应。
established 只触发已经建立的TCP连接。
stateless 不管流处理器的状态都触发(这对处理那些能引起机器崩溃的数据包很有用。
no_stream 不在重建的流数据包上触发(对dsize 和 stream4 有用。
only_stream 只在重建的流数据包上触发。

格式:
flow:[to_client to_server from_client from_server established stateless no_stream only_stream]}

例子:
alert tcp !$HOME_NET any -> $HOME_NET 21 (flow: from_client; content: "CWD incoming"; nocase; msg: "cd incoming detected"; )
alert tcp !$HOME_NET 0 -> $HOME_NET 0 (msg: "Port 0 TCP traffic"; flow: stateless;)

Fragoffset

这个关键字允许把IP分段偏移值和一个十进制数相比较。为了抓到一个IP会话的第一个分段,你可以使用这个fragbits关键字并且和fragoffset:0 选项一起查看更多的分段选项。

格式:
fragoffset:[< >]

例子:
alert ip any any -> any any (msg: "First Fragment"; fragbits: M; fragoffset: 0;)

Rawbytes

Rawbytes关键字允许规则查看telnet 解码数据来处理不常见的数据。这将使得telnet 协议代码独立于预处理程序来检测。这是对前面的content 的一个修饰。

格式:
rawbytes;

例子:
alert tcp any any -> any any (msg: "Telnet NOP"; content: " FF F1 "; rawbytes;)

distance

distance关键字是content关键字的一个修饰词,确信在使用content时模式匹配间至少有N个字节存在。它被设计成在规则选项中和其他选项联合使用。

格式:
distance: ;

例子:
alert tcp any any -> any any (content: "2 Patterns"; content: "ABCDE"; content: "EFGH"; distance: 1;)

Within

Winthin关键字是content关键字的一个修饰词,确保在使用content时模式匹配间至多有N个字节存在。它被设计成在规则选项中和distance选项联合使用。

格式:
within: ;

例子:
alert tcp any any -> any any (content: "2 Patterns"; content: "ABCDE"; content: "EFGH"; within: 10;)

Byte_Test

测试一个字节的域为特定的值。能够测试二进制值或者把字节字符串转换成二进制后再测试。

格式:byte_test: , , , [[relative],[big],[little],[string],[hex],[dec],[oct]]
bytes_to_convert 从数据包取得的字节数。
operator 对检测执行的操作 (<,>,=,!)。
value 和转换后的值相测试的值。
offset 开始处理的字节在负载中的偏移量。
relative 使用一个相对于上次模式匹配的相对的偏移量。
big 以网络字节顺序处理数据(缺省)。
little 以主机字节顺序处理数据。
string 数据包中的数据以字符串形式存储。
hex 把字符串数据转换成十六进制数形式。
dec 把字符串数据转换成十进制数形式。
oct 把字符串数据转换成八进制数形式。

例子:
alert udp $EXTERNAL_NET any -> $HOME_NET any (msg:"AMD procedure 7 plog overflow "; content: " 00 04 93 F3 "; content: " 00 00 00 07 "; distance: 4; within: 4; byte_test: 4,>, 1000, 20, relative;)

alert tcp $EXTERNAL_NET any -> $HOME_NET any (msg:"AMD procedure 7 plog overflow "; content: " 00 04 93 F3 "; content: " 00 00 00 07 "; distance: 4; within: 4; byte_test: 4, >,1000, 20, relative;)

Byte_Jump

Byte_jump 选项用来取得一定数量的字节,并把它们转换成数字形式,跳过一些字节以进一步进行模式匹配。这就允许相对模式匹配在网络数据中进行数字值匹配。

格式:
byte_jump: , [[relative],[big],[little],[string],[hex],[dec],[oct],[align]]

bytes_to_convert 从数据包中选出的字节数。
offset 开始处理的字节在负载中的偏移量。
relative 使用一个相对于上次模式匹配的相对的偏移量。
big 以网络字节顺序处理数据(缺省)。
little 以主机字节顺序处理数据。
string 数据包中的数据以字符串形式存储。
hex 把字符串数据转换成十六进制数形式。
dec 把字符串数据转换成十进制数形式。
oct 把字符串数据转换成八进制数形式。
align 以32位为边界对转换的字节数对齐,即转换的字节数为4的倍数。

例子:
alert udp any any -> any 32770:34000 (content: " 00 01 86 B8 "; content: " 00 00 00 01 "; distance: 4; within: 4; byte_jump: 4, 12, relative, align; byte_test: 4, >, 900, 20, relative; msg: "statd format string buffer overflow";)

0
相关文章