【suricata】Meta-settings

msg
msg是一条告警的第一部分,这是一个规则编写的惯例。例如:
alert http $EXTERNAL_NET any -> $HTTP_SERVERS any (msg:"Acunetix Web Vulnerability Scanner";flow:established,to_server; content:"Acunetix";nocase;classtype:webscan; sid:1000100; rev:1;)
sid(signature id)
sid需要确保唯一性。sid 的范围是如下分配的:
<100 保留做将来使用
100-1000,000 包含在snort发布包中
>1000,000 作为本地规则使用
sid-msg.map
格式:sid || msg
此文件作用是将sid与msg的一一对应,否则,在告警中会msg会出现[1:1000000:1] 
此文件用于自定义规则中sid与msg的对应和在snort自有规则中自定义告警信息。 [1:1000000:1] 其中内容对应为Snort alert[gid:sid:rev]。这说明一个规则需要这三个因素才能确定,之前说只有sid唯一标示一条规则是不严谨的。
gid
generate id,作用是为了说明这条规则是snort的哪部分触发的。比如是由解码器、预处理器还是Snort自有规则等。
gid默认为1
/etc/snort/preproc_rules/decoder.rules中的一条规则:
alert ( msg:"DECODE_IP6_EXCESS_EXT_HDR"; sid:456; gid:116; rev:1; metadata:rule-type decode; classtype:misc-activity; )
gen-msg.map
这个文件和sid-msg.map作用类似,在逻辑上应该是包含了sid-msg.map(sid-msg.map相当于默认gid为1)
格式:generatorid || alertid(sid) || MSG
例子:
1   || 1 || snort general alert
129 || 2 || stream5: Data on SYN packet
规则中的msg仅仅起到标示作用,告警msg需要在sid-msg.map和gen-msg.map这两个文件中对应查找。
rev
这个关键字是被用来识别规则修改的版本,需要和sid,gid配合使用。 这样就介绍完了gid,sid,rev三个确定规则唯一的元素。
reference
外部攻击参考,这个关键字允许规则包含一个外面的攻击识别系统。这个插件目前支持几种特定的系统,这些插件被输出插件用来提供一个关于产生报警的额外信息的连接。
reference.config
格式:config reference: system URL
例子: config reference: cve http://cve.mitre.org/cgi-bin/cvename.cgi?name= 定义了一些外部安全网站的网址。比如规则中定义reference: cve,1001,那么就像在上面的网址后面添加了1001,http://cve.mitre.org/cgi-bin/cvename.cgi?name=1001,最后点击告警中的[cve],就会跳转到相应的网址。注:reference也需要在sid-msg.map中与sid对应,否则不起作用,类比msg。
classtype
规则类别标识。这个关键字把报警分成不同的攻击类。通过使用这个关键字和使用优先级,用户可以指定规则类中每个类型所具有的优先级。
例如我们classification.config中找一个分类misc-activity
[root@vincent rules]# cat ../classification.config | grep misc-activity
config classification: misc-activity,Misc activity,3
然后在修改规则为:
alert icmp any any -> any any (msg:"icmp"; classtype:misc-activity; sid:1000000; rev:1;)
看一下告警信息:
06/14-22:29:23.227709  [**] [1:1000000:1] icmp [**] [Classification: Misc activity] [Priority: 3] {ICMP} 172.16.100.160 -> 172.16.100.1
然后我们想要新加一个分类:
在classification.config中新增加一行:
config classification: vinc,vinc test!,1
然后修改规则为:
alert icmp any any -> any any (msg:"icmp"; classtype:vinc; sid:1000000; rev:1;)
看下告警:
06/14-22:38:39.406635  [**] [1:1000000:1] icmp [**] [Classification: vinc test!] [Priority: 1] {ICMP} 172.16.100.160 -> 172.16.100.1
priority
设置classtype的优先级。classtype和priority是配合使用的,classification.config文件将其联系起来。
该字段的值范围从1-255,在suricata中数字越小表示优先级越高,也就是说如果两条规则都能匹配,则优先匹配priority字段小的规则。
classification.config
格式: config classification:shortname,short description,priority
例子: config classification: attempted-admin,Attempted Administrator Privilege Gain,1 写在此文件中的都是默认值,priority关键词可以在规则中重写优先级。 例子: alert tcp any any -> any 80 (msg:"EXPLOIT ntpdx overflow"; dsize:>128; classtype:attempted-admin; priority:10 );

PS:需要注意的是第一个字段shortname不能有空格,如果有空格会导致规则不生效。自带的规则中都是用-连接。