snort参数offset偏移relative相对偏移量详解

 

no

内容修饰符

说明

取值范围

备注

1

nocase

忽略大小写。默认大小写敏感

   

2

offset

起始偏移。默认0;payload先偏移,再找内容content

[-65535, 65535]

模式串出现的区间 [offset , offset + depth]offset关键字指定将从payload中的哪个字节进行检查以找到匹配项。例如offset:3;检查第四个字节及以后的字节。

3

depth

offset之后查找的范围;深度关键字是一个绝对的内容修饰符。它位于内容之后。深度内容修饰符带有一个强制性的数值。从payload第1个字符开始检查深度

[模式串长度, 65535]

abcdefghij (depth 3 content'abc' )depth后面的数字指定从payload开始要检查多少字节。也就是从0位检查的长度是3 ------content:"def"; offset:3; depth:3; #它将检查从payload第3个字节到第6个字节

4

distance

相对前一个模式串结尾处的偏移。类似offset。默认0

-2-------+2负数正数均可--abcxxxxdefghij>>content'abc';content'def';distance:0;(4均可) content‘bcx’;distance:-2;

关键字距离是一个相对的内容修饰符。这意味着它表示2个content关键字之间的关系以及之前的内容。关键字距离有一个必选数值。您提供的距离值决定了将从payload中的哪个字节进行检查对于相对于前一个匹配的匹配。距离也可以是负数。它可以用来检查部分相同内容的匹配(参见示例)。或者对于一个内容甚至完全在它之前。但这并不常用。

5

within

distance之后差查找范围。类似depth。

[模式串长度, 65535]abcdefghij>>content'abc';content'fgh';within:3

abcxdefgh>>content'abc';content'def';distance:1;within:4; x>>dis 1 with 4

 

isdataat

isdataat关键字的目的是查看payload的特定部分是否还有数据。你也可以在isdataat前使用否定符号(!)。

isdataat:512;##isdataat:50, relative;第一个例子展示了一个搜索payload中第512字节的签名。

isdataat关键字的目的是检查在负载的特定部分是否还有数据。该关键字以一个数字(位置)开始,然后可选地跟随一个逗号分隔的‘relative’和选项rawbytes。
您使用‘relative’这个词来了解在payload的特定部分相对于上一次匹配是否还有数据。abcdefgh content:'abc';isdataat:3,relative;匹配f第一次匹配后相对的第3个字节

 

bsize

alert dns any any -> any any (msg:”test bsize rule”; dns.query; content:”google.com”; bsize:10; sid:123; rev:1;)#google.com 10字节长度

 

使用 bsize 关键字,你可以根据缓冲区的长度进行匹配。这增加了内容匹配的精确度,以前这可以通过 isdataat 来实现。

 

dsize

alert udp any any -> any 65535 (msg:”GPL Service buffer overflow”; dsize:>268; classtype:attempted-admin; sid:100000928; rev:1;)#大于268缓冲溢出

即‘dsize:n’不等于‘dsize:!n’小于‘dsize:<n’或大于‘dsize:>n’这在检测缓冲区溢出时可能很方便。dsize:[<>!]number; || dsize:min<>max;

使用dsize关键字,你可以根据数据包负载的大小进行匹配。你可以使用这个关键字来查找负载大小异常的情况。这在检测缓冲区溢出时可能很方便。

 

byte_test

byte_test:<num of bytes>, [!]<operator>, <test value>, <offset> [,relative] [,<endian>][, string, <num type>][, dce][, bitmask <bitmask value>];

alert tcp any any -> any any (msg:"Byte_Test Example - Num = Value"; content:"|00 01 00 02|"; byte_test:2,=,0x01;)

这个 byte_test 关键字提取 <num of bytes> 并执行所选的操作 <operator> 相对于 <test value> 在一个特定的 <offset> . 这个 <bitmask value> 应用于提取的字节(在应用运算符之前),最后的结果将右移一位 0 在 <bitmask value> .

 

byte_math

 

alert tcp any any -> any any (msg:"Testing bytemath_body"; 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_math keyword添加对具有现有变量或指定值的提取值执行数学运算的功能。什么时候? relative 是包含的,必须有一个 content 或 pcre 匹配。结果可以存储在结果变量中,并由规则后面的其他规则选项引用。

 

byte_jump

 

alert tcp any any -> any any \ (msg:"Byte_Extract Example Using distance"; \ content:"Alice"; byte_extract:2,0,size; content:"Bob"; distance:size; within:3; sid:1;)

这个 byte_jump 关键字允许选择 <num of bytes> 从一个 <offset> 并将检测指针移动到该位置。然后,内容匹配将基于新位置。

 

byte_extrace

   

这个 byte_extract 关键字提取 <num of bytes> 在一个特定的 <offset> 把它储存在 <var_name> .价值 <var_name> 可以在任何以数字为选项的修饰符中使用, byte_test 它可以用作一个值。

 

rpc

   

rpc关键字可用于在sunrpc调用中匹配rpc过程号和rpc版本。您可以使用通配符修改关键字,用*定义的通配符可以匹配所有版本号和/或过程号。rpc(远程过程调用)是允许计算机程序在另一台计算机(或地址空间)上执行过程的应用程序。用于进程间通信。参见http://en.wikipedia.org/wiki/inter-process_communication

 

replace

   

替换内容修饰符只能在IPS中使用。它调整网络流量。它将以下内容(“abc”)更改为另一个(“def”),请参见示例:

 

prce

   

PCRE的复杂性带来了很高的价格:它对性能有负面影响。因此,为了减少对PCRE的经常检查,PCRE主要与“内容”结合使用。在这种情况下,必须先匹配内容,然后才能检查PCRE。

6

fast_pattern

TODO

   

 

1. offset偏移

 上图在wireshark中展示的payload

 如上图例子,offset:3;指在payload中偏移3字节后,再找内容。上图已经将光标移动到c之后,再找abc肯定找不到。只能从defghlj中找,所以可以找到def。

content表示要找到内容,offset是对前者的条件限制。条件限制一般是最多间隔一个分号;和在一个键值对中。如

byte_math: bytes 1, offset 1, oper +, rvalue extracted_val, result var;  冒号与分号之间所有的都是参数和条件限制。

 

relative相对于上一次内容匹配的偏移量

posted @ 2024-11-12 16:15  白灰  阅读(91)  评论(0)    收藏  举报