suricate签名规则

 suricate签名包括三部分组成。分别为action、header、rule options。

action部分有四种可选项。

pass: 如果和pass的规则匹配,数据包会立即发送到目标。

Drop:如果程序匹配到了这类规则,数据包会被阻断发送。

Reject:在匹配到规则时会拒绝数据包。当数据包为TCP时,会返回一个 RST 数据包重置连接。

Alert:当匹配到规则时,会对数据包进行放行,但是会记录一条警报。

默认的优先级为:Pass > Drop > Reject > Alert

header部分

有四大类规则选项
协议(Protocol):这个字段用来告诉 Suricata 当前规则所包含的协议。 
源/目的地址(Source and destination):源/目的地址
端口号(Ports):端口号。通常情况下端口号会设置为 any,这样会影响所有的协议。
流向(Direction):告诉规则匹配哪些方向上的流量数据。

rule options部分

规则选项构成了Snort入侵检测引擎的核心,将易用性、强大性和灵活性结合在一起。所有Snort规则选项都使用分号(;)相互分隔性格规则选项关键字用冒号(:)字符与其参数分隔开。

有几大类规则选项
Meta Keywords:元设置对 Suricata 的检查没有影响;它们确实对 Suricata 报告事件的方式产生了影响。
IP Keywords: ip规则关键词
TCP keywordsTCP规则关键词
Payload Keywords:有效负载关键字检查数据包或流的有效负载内容。
UDP keywords 
ICMP keywords 


Meta Keywords
规则介绍示例
msg告诉日志和警报引擎要与数据包转储一起打印的消息或要打印的警报。\作为转义字符。msg:"狼来辣"
reference识别外部攻击者reference:"arachnids"
sid规则的唯一序列(100~~999999) sid:101
gid规则组alert tcp any any -> any 80 (content:"BOB"; gid:1000001; sid:1; rev:1;)
rev

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

classtypesnort根据其默认的规则,将攻击进行相应分类,并具有4种优先级。见配置文件(/etc/suricata/classification.config)
 alert tcp any any -> any 25 (msg:"SMTP expn root"; flags:A+;
        content:"expn root"; nocase; classtype:attempted-recon;)
priority规则优先级(可以覆盖classstype)
alert tcp any any -> any 80 (msg:"EXPLOIT ntpdx overflow";dsize:>128; classtype:attempted-admin; priority:10 );
metadata额外的标记,用于标明规则的目标服务类型\gid和sid,以及是否在规则共享库中共享。
alert tcp any any -> any 80 (msg:"HTTP Service Rule Example"; \
        metadata:service http;)
target允许规则编写者指定警报的哪一侧是攻击的目标。如果指定,警报事件将被增强以包含有关源和目标的信息。
target:[src_ip]

target : [dest_ip]


Payload Keywords
content

content 关键字在签名中非常重要。在引号之间,您可以写下您希望签名匹配的内容。

某些逻辑字符以及不可打印字符需要被特殊表示:

"     |22|
;     |3B|
:     |3A|
|     |7C|

就像这样:content: "http|3A|//"

如果不添加特殊参数来让它匹配特定范围,则会匹配所有内容。

默认区分大小写

alert http $HOME_NET any -> $EXTERNAL_NET any (msg:"Outdated Firefox on
Windows"; content:"User-Agent|3A| Mozilla/5.0 |28|Windows|3B| ";
content:"Firefox/3."; distance:0; content:!"Firefox/3.6.13";
distance:-10; sid:9000000; rev:1;)
nocase如果不想content区分大小写字符,可以使用 nocase。
content: "abc"; nocase;
depth修改content的匹配深度(深度是起始位置之后多少字节作为匹配空间,之后的内容不做匹配)。
depth:12;
startswitch修饰content,只尝试匹配负载开头。不接受其他任何其他content修饰参数(depth,offset,within),必须跟随content出现。
content:"GET|20|"; startswith;
endswith类似startswitch。修饰content,只尝试匹配负载末尾。不接受任何其他content修饰参数
content:".php"; endswith;
offset修饰content,指定从负载的哪个字节开始检查匹配项。如果offset:3,则检查第四个字节起之后的所有缓存区
content:"def"; offset:3; depth:3;
distance修饰content。如此处有两次content匹配,第一次匹配到后以第一次匹配项末尾字节位+distance数值开始第二次匹配。content:"abc"; content:"klm"; distance:0;
within修饰content。可以配合distance使用,指定范围

content:"abc"; content:"klm"; distance:1; within:4;

(匹配到abc后以c字符之后的第一个字符右边第一个字符之后四个字节范围内进行匹配)

isdataat查看负载的特定部分是否仍有数据。可以添加relative作为可选项,用于规定检查位置相对于上一次匹配位末尾。
isdataat:50, relative;

(检查最后一次匹配项末尾后第50个字节是否有数据)

bsize使用 bsize 关键字,您可以匹配缓冲区的长度alert dns any any -> any any (msg:”test bsize rule”; dns.query; content:”google.com”; bsize:10; sid:123; rev:1;)
dsize匹配数据包有效负载的大小alert udp $EXTERNAL_NET any -> $HOME_NET 65535 (msg:”GPL DELETED EXPLOIT LANDesk Management Suite Alerting Service buffer overflow”; dsize:>268;)
byte_test

byte_test 关键字提取 <num of bytes> 并在特定 <offset> 处针对 <test value> 中的值执行使用 <operator> 选择的操作。<bitmask value> 应用于提取的字节(在应用运算符之前),对于 <bitmask value> 中的每个尾随 0,最终结果将右移一位。

byte_test:

<num of bytes>,

[!]<operator>,

<test value>,

<offset>

[,relative]

[,<endian>]

[, string, <num type>][, dce]

[, bitmask <bitmask value>];

num of bytes 需要转换的字节数

operator         操作

value              用于根据测试转换的值(十六、十进制)

offset             有效载荷中的字节数

relative          相对于最后匹配项的偏移量

endian          大小端

string <num> 以几进制表示转换后的字符串

dce               允许DCE模块确定字节顺序

bitmask         对转换的字节应用AND运算符

byte_math
byte_jump
byte_extract
rpc
replace

IP Keywords
ttl检查数据包标头中的特定IP 生存时间值alert ip $EXTERNAL_NET any -> $HOME_NET any (msg:”GPL MISC 0 ttl”; ttl:0;)
ipopts检查是否设置了特定的 IP 选项。 Ipopts 必须在规则的开头使用。每个规则只能匹配一个选项。alert ip $EXTERNAL_NET any -> $HOME_NET any (msg:”GPL MISC source route ssrr”; ipopts:ssrr;)
sameip检查源地址和目标地址是否是同一个地址alert ip any any -> any any (msg:”GPL SCAN same SRC/DST”; sameip;)
ip_proto检查ip协议编号,可以是名词或编号。编号详情http://en.wikipedia.org/wiki/List_of_IP_protocol_numbersalert ip any any -> any any (msg:”GPL MISC IP Proto 103 PIM”; ip_proto:103;)
ipv4.hdr匹配整个IPv4 header的Sticky buffer。alert ip any any -> any any (ipv4.hdr; content:”|3A|”; offset:9; depth:1; sid:1234; rev:5;)
ipv6.hdr匹配整个IPv6 header的Sticky buffer。
id检查IP IDalert tcp $EXTERNAL_NET any -> $HOME_NET any (msg:”ET DELETED F5 BIG-IP 3DNS TCP Probe 1”; id: 1;)
geoip匹配源\目标\源和目标的流量中属于哪个国家
geoip: src,RU;
geoip: both,CN,RU;
geoip: dst,CN,RU,IR;
geoip: both,US,CA,UK;
geoip: any,CN,IR;
fragbits(IP fragmentation)

检查ip表头是否分片。

M - More Fragments

D - Do not Fragment

R - Reserved Bit

----------------------------
+ 匹配在指定位上,加上任何其他位。

* 匹配如果设置了任何指定的位
! 匹配如果为设置指定位

-----------

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

alert tcp $EXTERNAL_NET any -> $HOME_NET any (msg:”ET EXPLOIT Invalid non-fragmented packet with fragment offset>0”; fragbits: M; fragoffset: >0;
fragoffsetip表头片位偏移,如果要看第一个则需要将fragoffset设为0且fragbits设为Malert tcp $EXTERNAL_NET any -> $HOME_NET any (msg:”ET EXPLOIT Invalid non-fragmented packet with fragment offset>0”; fragbits: M; fragoffset: >0;
tos

检查Ip表头TOS字段。

tos:[!]<number>

alert ip any any -> any any (msg:”Differentiated Services Codepoint: Class Selector 1 (8)”; flow:established; tos:8; classtype:not-suspicious; sid:2600115; rev:1;)

TCP keywords
seq检查特定的TCP序列号alert tcp $EXTERNAL_NET any -> $HOME_NET any (msg:”GPL SCAN NULL”; flow:stateless; ack:0; flags:0; seq:0; reference:arachnids,4; classtype:attempted-recon; sid:2100623; rev:7;)
ack监拆毁特定的TCP确认号alert tcp $EXTERNAL_NET any -> $HOME_NET any (msg:”GPL SCAN NULL”; flow:stateless; ack:0; flags:0; seq:0; reference:arachnids,4; classtype:attempted-recon; sid:2100623; rev:7;)
windwo

检查特定的TCP窗口大小。

window:[!]<number>;
alert tcp $EXTERNAL_NET any -> $HOME_NET any (msg:”GPL DELETED typot trojan traffic”; flow:stateless; flags:S,12; window:55808; reference:mcafee,100406; classtype:trojan-activity; sid:2182; rev:8;)
tcp.mss

匹配 TCP MSS 选项值。

tcp.mss:<min>-<max>

tcp.mss:[<|>]<number>

tcp.mss:<value>

alert tcp $EXTERNAL_NET any -> $HOME_NET any (flow:stateless; flags:S,12; tcp.mss:<536; sid:1234; rev:5;)
tcp.hdr获得TCP表头匹配的粘性缓存区alert tcp $EXTERNAL_NET any -> $HOME_NET any (flags:S,12; tcp.hdr; content:”|02 04|”; offset:20; byte_test:2,<,536,0,big,relative; sid:1234; rev:5;)

UDP keywords 
udp.hdr获得整个UDP表头匹配的粘性缓存区alert udp any any -> any any (udp.hdr; content:”|00 08|”; offset:4; depth:2; sid:1234; rev:5;)

ICMP keywords
itype

匹配特定的ICMP类型。

Internet Control Message Protocol (ICMP) Parameters

alert icmp $EXTERNAL_NET any -> $HOME_NET any (msg:”GPL SCAN Broadscan Smurf Scanner”; dsize:4; icmp_id:0; icmp_seq:0; itype:8; classtype:attempted-recon; sid:2100478; rev:4;)
icode

匹配特定的 ICMP 码。

icode:min<>max;
icode:[<|>]<number>;
alert icmp $HOME_NET any -> $EXTERNAL_NET any (msg:”GPL MISC Time-To-Live Exceeded in Transit”; icode:0; itype:11; classtype:misc-activity; sid:2100449; rev:7;)
icmp_id匹配特定的 ICMP id-valuesalert icmp $EXTERNAL_NET any -> $HOME_NET any (msg:”GPL SCAN Broadscan Smurf Scanner”; dsize:4; icmp_id:0; icmp_seq:0; itype:8; classtype:attempted-recon; sid:2100478; rev:4;)
icmp_seq检查 ICMP 序列号alert icmp $EXTERNAL_NET any -> $HOME_NET any (msg:”GPL SCAN Broadscan Smurf Scanner”; dsize:4; icmp_id:0; icmp_seq:0; itype:8; classtype:attempted-recon; sid:2100478; rev:4;)
icmpv4.hdr获得icmpv4表头匹配的粘性缓存区
icmpv6.hdr获得icmpv6表头匹配的粘性缓存区
icmpv6.mtu

匹配 ICMPv6 MTU 可选值。如果 MTU 不存在,将不匹配。

icmpv6.mtu:<min>-<max>;
icmpv6.mtu:[<|>]<number>;
icmpv6.mtu:<value>;
alert ip $EXTERNAL_NET any -> $HOME_NET any (icmpv6.mtu:<1280; sid:1234; rev:5;)

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值