四.Suricata命令与规则语法
一.离线流量分析
# suricata -c /etc/suricata/suricata.yaml -r x.pcap -l /var/log/suricata -v
1.离线分析可以对规则库进行测试
2.规则更新后,历史的流量可以进行分析
3.流量保存,下载到windows里用wireshare打开
# vim suricata.yaml
-pcap log:
enable: yes
filename: log.pcap
二.规则基础语法
1.核心语法
以下面简单规则为例:
alert http any any <> $HOME_NET 8443 (msg:"Web服务器出现404."; content:"404"; http_stat_code; sid:561001; )
any:源ip
any:源端口
$HOME_NET:变量目的ip
8443:目的端口
[10.0.0.0/24, !10.0.0.5]:10.0.0.0/24网段,除了10.0.0.5这个ip
[80,443,8443]:80,443,8443三个端口
msg:消息描述
sid:规则编号,建议有一套自己的规则
priority:优先级选项,建议设定为1-4级
content:包含运算(模糊匹配,但不是正则表达式),同时也可以在content后面具体指定对应的字段,比如http_stat_code,http_url,
另外还可以辅助使用startswith,endswith来更加精确的匹配;
dize:匹配数据包有效载荷的大小,dize:[<>!]number || min<>max;
pcre:正则表达式,pcre:"/<regex>/opts";
需要注意两点,1.必须使用斜线/包裹,最后位置可以设置选项;2.pcre不能单独存在,必须依赖content
noalert:不产生日志
2.flowint
(1)基本语法
flowint:name,<+,-,=,>,<,>=,<=,==,!=>,value;=号用于赋初始值,+1数学运算
flowint:name,(isset|isnotset);用于判断某个变量是否有值
(2)用法示例
alert http any any <> $HOME_NET 8443 (msg:"Web服务器出现404."; content:"404";
http_stat_code; flowint:urlcount,notset; flowint:urlcount, =, 1; noalert; sid:561002; )
alert http any any <> $HOME_NET 8443 (msg:"Web服务器出现404."; content:"404";
http_stat_code; flowint:urlcount,notset; flowint:urlcount, =, 1; noalert; sid:561003; )
alert http any any <> $HOME_NET 8443 (msg:"Web服务器频繁出现出现404,疑是扫描."; content:"404";
http_stat_code; flowint:urlcount,>=, 5; priority:2; sid:561004; rev:2;)
3.阈值关键字
1.threshold
threshold:type<threshold|limit|both> 默认建议使用threshold,如果设置为limit,则会限制警告的数量
2.track
track <by_src|by_dst|by_rule|by_both> 优先使用by_both
3.时间和次数
count <N>,seconds <T> T秒内出现N次,触发告警
alert http any any <> $HOME_NET 8443 (msg:"Web服务器出现404."; content:"404";
http_stat_code; threshold:type threshold, track by_src, count 5, seconds 20; sid:561003; )
规则库下载:https://rules.emergingthreats.net/open/