Suricata规则解析

Suricata规则基础概念

Suricata是一款开源的网络威胁检测引擎,支持IDS(入侵检测系统)、IPS(入侵防御系统)和NSM(网络安全监控)功能。其规则语法基于Snort规则,但扩展了更多高级特性。规则文件通常以.rules为后缀,每条规则由动作、协议、源/目标地址、端口、方向及选项组成。

规则结构解析

一条典型的Suricata规则格式如下:

action protocol src_ip src_port direction dst_ip dst_port (options)

示例规则:

alert tcp $EXTERNAL_NET any -> $HOME_NET 22 (msg:"SSH brute force attempt"; flow:to_server; threshold:type both, track by_src, count 5, seconds 60; sid:1000001; rev:1;)

关键字段说明

动作(action)
常见动作包括:

  • alert:触发警报
  • drop:丢弃数据包(IPS模式)
  • pass:忽略匹配流量
  • reject: 当Suricata运行IPS模式时,将发送一个TCP重置包,Suricata将放弃匹配的数据包。

协议(protocol)
支持tcpudpicmphttpdns等协议类型。

流量方向(direction)
->表示单向流量,<>表示双向流量。
any any-> 192.168.1.10 80表示从任意IP、任意端口到192.168.1.10的80端口会进行匹配
any any <-> 192.168.1.10 80表示从任意IP、任意端口到192.168.1.10的80端口或192.168.1.10的80端口进行的任何流量会进行匹配

Option

在Suricata签名中的括号(…)内的参数包含各种选项和关键字修改器,你可以用它们来匹配数据包的特定部分,对规则进行分类,或记录自定义信息。规则的header参数是针对IP、端口和协议级别的数据包标题,而OPTIONS则是针对数据包中的数据进行匹配。

Suricata规则中的OPTIONS必须用分号隔开,并且通常使用key:value格式。有些选项没有任何设置,只需要在规则中指定名称

msg
使用msg关键字进行触发规则后返回的提示信息配置:

alert tcp any any -> 192.168.1.1/24 80 (msg:"this is a tcp payload"; sid:200000;)

content
使用content关键字进行payload匹配:

alert tcp any any -> 192.168.1.1/24 80 (msg:"this is a tcp payload";content:"|abc|"; depth:4; offset:0; sid:200000;)
  • msg:“this is a tcp payload”:触发警报时显示的描述信息。
  • content:“|abc|”:在数据包中搜索 十六进制 或 ASCII 内容 abc。
  • |…| 表示 原始字节(可以是 ASCII 或十六进制,如 |61 62 63| 也是 abc 的十六进制形式)。
  • depth:4:从 offset 开始,最多检查 4 字节 的数据。
  • offset:0:从数据包的 第 0 字节(起始位置)开始匹配。
  • sid:200000:规则的唯一标识符(Snort ID),用于管理和引用。
  • nocase 不区分大小写,nocase为content的修饰符,不需要跟参数
  • startswith content的修饰符,不需要跟参数,匹配content 以…开头
  • endswith content的修饰符,不需要跟参数,匹配content 以…结尾,endswith 不能和 offset, within 或 distance混合使用

流量特征
flow选项定义流量状态:

flow:established,to_server;

classtype
classtype选项定义规则类型:

Suricata可以根据一套预先配置好的类别对流量进行分类,这些类别在你用Linux发行版的软件包管理器安装Suricata软件包时就已经包含了。默认的分类文件通常在/etc/suricata/classification.config中找到

阈值控制
threshold限制警报频率:

threshold:type limit, track by_src, count 10, seconds 60;

变量使用技巧

预定义变量:

var HOME_NET [192.168.1.0/24,10.0.0.0/8]
var EXTERNAL_NET !$HOME_NET

规则优化实践

性能敏感字段
将高匹配概率的条件前置:

alert http $EXTERNAL_NET any -> $HOME_NET 80 (content:"/wp-admin"; http_uri; fast_pattern; sid:1000002;)

启用快速模式
fast_pattern加速匹配:

content:"evil.com"; fast_pattern; nocase;

规则调试方法

使用Suricata测试模式:

suricata -T -c /etc/suricata/suricata.yaml -S test.rules

查看匹配统计:

grep -i 'alert' /var/log/suricata/fast.log

实际应用示例

检测HTTP User-Agent中的扫描器特征:

alert http $EXTERNAL_NET any -> $HOME_NET any (msg:"Nmap scanning detected"; http_user_agent; content:"nmap"; nocase; sid:1000003; rev:1;)

阻止已知恶意IP:

drop ip 192.0.2.1 any -> $HOME_NET any (msg:"Block known malicious IP"; sid:1000004; rev:1;)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值