Suricata规则编写——常⽤关键字
1.简介
2.基本关键字
所谓的基本关键字是指不对检测结果造成影响的关键字,也就是常说的Meta-Settings,虽然对匹配结果没影响,但是这些关键字往往对于检测结果的显⽰、规则的解释、版本等有着重要的作⽤。
⾸先来看⼀条⽤来检测CVE-2015-0235的规则,这条规则包含了msg、sid、reference、classtype、rev、gid这些基本关键字,这些关键字对于规则的匹配并没有任何影响:我未来的妻子
2.1 msg (message)
msg关键字是通过这条规则检测出问题,然后显⽰在⽇志中的内容,作为这条规则最主要的解释。msg的格式为:msg:"......";
⽐如在上述规则中msg字段为,表明这是⼀条针对glibc的ghost缓冲区溢出漏洞的EHLO包的攻击:
msg:"Glibc Ghost Attack - Buffer Overflow Attempt(EHLO)";
在检测结果中如下红⾊部分:
众人拾柴
2.2 sid (signature id)
民警sid字段表⽰这条规则的id,值为⼀个数字,格式为:
sid:number;
在上述规则的表现为:
2.3 rev (Revision)
rev字段往往和sid字段⼀起使⽤,⽤于标注针对这条规则的版本,每修改⼀次rev数值加1,格式为:
rev:number;
在上述规则中的表现为:
榴莲怎么画
2.4 gid (Group id)
gid表⽰这条规则所属的组,如果不指定默认为1,上述规则中格式表⽰所属组的id号为3:
gid:3;
在上述规则中表现为:
2.5 classtype
classtype⽤于对规则进⾏分类及匹配的优先级进⾏指定。这个定义⼀般是在f⽂件中指定,定义格式依次是短类型名,简短描述,匹配优先级:
config classification:shortname,short description,priority
上述规则中的类型为cuurent-event,这个类型的定义如下,⽽最终显⽰在匹配⽇志中的是中间的short description字段,⽽在规则中写的是shortname字段:
config classification: current-event,Current_event, 9
在上述规则中的表现为:
2.6 reference
reference字段表明这条规则相关信息所在url,⼀条规则可以使⽤多次reference,格式为:
reference: url, www.info.nl
定义引⽤的地⽅则是在fig配置⽂件中,红框中表⽰的就是有cve编号的引⽤格式:
reference:cve,2015-0235;
2.7 priority
priority字段表⽰此条规则或class的匹配优先级,即使在fig⽂件中指定了每个class的priority,还是可以在规则中重新制定priority字段进⾏覆盖,格式如下:
priority:1;
该字段的值范围从1-255,在suricata中数字越⼩表⽰优先级越⾼,也就是说如果两条规则都能匹配,则优先匹配priority字段⼩的规则。
2.8 metadata
metadata字段没有在上述规则中出现,主要原因是当suricata遇到metadata字段便会忽略这个字段的值,还能在规则中使⽤是为了兼容之前的snort规则。
心理学学科评估3.有效字段匹配关键字(Payload)
所谓的有效字段关键字在英⽂中就是payload,因为不想翻译成难懂的载荷所以姑且暂时这个么说。说
⽩了就是对流量数据包中的实际需要传输的内容进⾏检测,⽐如你打开⽹页,数据包中的payload便是⽹页中看到的内容的代码。
3.1 content
content关键字在suricata规则中⾮常重要,⼤部分规则都要使⽤这个关键字来匹配数据包中的内容,其格式如下:content:".......";
content中的内容是按字节匹配的,能匹配ASCII码从0-255的字节,可打印字符⽐如a-z可以直接写,⽽某些特殊符号或是不可打印的字符则需要使⽤⼗六进制来表⽰。如下:
|0a|和|0A| 表⽰空格,⼗六进制表⽰时不区分⼤⼩写
|61| 表⽰字母a
带微字的成语|21| 表⽰!
b 表⽰字母b
B 表⽰字母B(直接写a-z的字符则区分⼤⼩写)
|61|b 表⽰字母ab,⼗六进制描述可以和字符混着写
如果没有在content后⾯指定其他相关的关键字,那么suricata便会在整个payload字段中搜索content的内容。⽐如content:"abC";会在整个payload中搜索abC字符,⽽如果是像下⾯这么写,则表⽰payload字段中前三个字符为abC,前第四个字符并不是abCD,也就是第四个字符不为D:
content:"abC";content:!"abCD";
因为现成写例⼦不是很⽅便也不具有代表性,因此在后⾯的例⼦展⽰中将会直接引⽤suricata⽂档中的图⽚和内容进⾏更为清晰的描述,图例为,从上到下依次为规则匹配、规则不匹配、在payload中匹配的部分,在payload中不匹配的部分:
3.2 noca
noca关键字是⽤来修饰content字段的,在content字段后加上noca表⽰content中的内容不区分⼤⼩写,⽐如下⾯这个例⼦:content: “abc”; noca;
3.3 depth
depth也是修饰content的关键字,表⽰从payload开始多少个字节与content中的内容进⾏匹配,格式如下表⽰的是匹配’abc’:
depth:3;
3.4 offt
干煸蚕蛹与depth不同的是offt是从payload开头先偏移指定字节再对content进⾏匹配,下图表⽰的是从开头偏移3字节,从第四字节开始匹配字符串”def”:
offt也可以和depth⼀起使⽤,如下表⽰匹配第4-6三个字节是否为”def”:
content; "def"; offt:3; depth:3;
3.5 distance
distance表⽰从上⼀个content匹配的末尾偏移指定数量字符再进⾏本次的content匹配。如下所⽰,第⼀次匹配”abc”之后的位置在字符’d’处,distance为0表⽰不偏移,直接从’d’开始匹配’def’:
不仅如此,有时不同的distance值结果可能相同,⽐如下⾯这个例⼦,⽆论是在”abc”之后偏移0还是4或是中间的任意⼀个整数,都能匹配到后⾯的”def”,因为distance并没有对后⾯的匹配长度做任何限制:
母亲节父亲节
除此之外distance由于是相对于上⼀次的匹配结果的位置偏移,所以他的值可以是负数:
3.6 within
within也是⼀个修饰content的关键字,他表⽰从上⼀个content匹配位置之后的指定字节内对当前的content进⾏匹配,within的值不能为0。下⾯这个例⼦⽐较清楚的描述了within的⽤法,匹配完”abc”之后位置在’d’处,从’d’开始的3字节内对”def”进⾏匹配,
⽽”fgh”明显已经超出了3字节的偏移:
同样,within也可以和distance⼀起使⽤,如下所⽰匹配完”abc”,distance:1向后移动1字节从’d’开始的4个字节以内匹
配’def’: