6.1. 规则格式¶
签名在司法中起着非常重要的作用。在大多数情况下,人们使用现有的规则集。
安装规则集的正式方法在 使用Suricata更新进行规则管理 .
本Suricata规则文档解释了所有关于签名的内容;如何阅读、调整和创建签名。
规则/签名由以下部分组成:
这个 行动 ,确定签名匹配时发生的情况
这个 页眉 ,定义规则的协议、IP地址、端口和方向。
这个 规则选项 定义规则的细节。
规则示例如下:
drop tcp $HOME_NET any -> $EXTERNAL_NET any
在这个例子中, red 是行动, green 是标题和 是选项。
我们将在本节中使用上述签名作为示例,突出显示签名的不同部分。它是来自新兴威胁数据库的签名,这是一个开放的数据库,具有许多规则,您可以在您的Suricata实例中自由下载和使用。
6.1.1. 行动¶
drop tcp$home_net any->$external_net any(msg:“et-trojan-likely-bot-nick in-irc(usa+..)”;流:已建立,到服务器;流位:isset,是协议irc;内容:“nick”;pcre:“/nick”。 USA. [0-9] 3,/i”;参考:url,doc.emergingthreats.net/2008124;classtype:特洛伊木马活动;sid:2008124;rev:2;)
有效操作包括:
警报-生成警报
通过-停止进一步检查包裹
丢弃数据包并生成警报
拒绝-向匹配数据包的发送方发送RST/ICMP UNACH错误。
拒绝src-与just相同 reject
rejectdst-将RST/ICMP错误数据包发送到匹配数据包的接收方。
rejectboth-将RST/ICMP错误数据包发送到会话的两侧。
注解
在IPS模式下,使用 reject 操作还可以 drop .
有关详细信息,请参阅 行动令 .
6.1.2. 协议¶
滴 tcp $home_net any->$external_net any(msg:“et-trojan-likely-bot-nick in irc(USA+..)”;流:已建立,到服务器;流位:isset,是u proto_irc;内容:“nick”;pcre:“/nick”。 USA. [0-9] 3,/i”;参考:url,doc.emergingthreats.net/2008124;classtype:特洛伊木马活动;sid:2008124;rev:2;)
签名中的这个关键字告诉Suricata它所关注的协议。您可以在四种基本协议中进行选择:
TCP(用于TCP通信)
UDP协议
ICMP
ip(ip代表“all”或“any”)。
还有一些所谓的应用层协议,或者可以从中选择的第7层协议。这些是:
HTTP协议
FTP协议
TLS(包括SSL)
中小企业
DNS
DCERPC公司
SSH
SMTP
IMAP
Modbus(默认禁用)
DNP3(默认禁用)
enip(默认禁用)
nfs
艾克
krb5公司
ntp公司
dhcp
rfb公司
rdp公司
snmp协议
tftp
抿
http2型
这些协议的可用性取决于配置文件suricata.yaml中是否启用了该协议。
如果您有一个带有HTTP协议的签名,那么Suricata会确保该签名只有在涉及HTTP流量时才能匹配。
6.1.3. 来源和目的地¶
删除TCP $HOME_NET 任何-> $EXTERNAL_NET any(msg:“et trojan likely bot nick in irc(usa+..)”;flow:established,to_server;flowbits:isset,is_proto_irc;content:“nick”;pcre:“/nick”。 USA. [0-9] 3,/i”;参考:url,doc.emergingthreats.net/2008124;classtype:特洛伊木马活动;sid:2008124;rev:2;)
第一个强调的部分是源,第二个是目的(注意方向箭头的方向)。
对于源和目标,分别指定流量的源和目标。您可以分配IP地址(支持IPv4和IPv6)和IP范围。这些可与操作员结合使用:
算符 |
描述 |
---|---|
…/…… |
IP范围(CIDR符号) |
你说什么? |
例外/否定 |
[…………] |
分组 |
通常,您还可以使用变量,例如 $HOME_NET
和 $EXTERNAL_NET
.配置文件指定这些问题的IP地址,这些设置将用于替代规则中的变量。参见 规则变量 更多信息。
例如:
例子 |
意义 |
---|---|
你看!1.1.1.1段 |
除1.1.1.1之外的每个IP地址 |
你说什么? [1.1.1.1、1.1.1.2] |
除1.1.1.1和1.1.1.2之外的每个IP地址 |
$HOME_NET |
你在山药里的家里网 |
[$EXTERNAL_NET, !$HOME_NET] |
外部网络而非家庭网络 |
[10.0.0.0/24, !10.0.0.5] |
10.0.0.0/24,10.0.0.5除外 |
[…,[……] ] |
|
[……[……] ] |
警告
如果您将配置设置为如下所示:
HOME_NET: any
EXTERNAL_NET: ! $HOME_NET
您不能使用 $EXTERNAL_NET
因为它代表“没有”。这是无效设置。
6.1.4. 端口(源和目标)¶
删除tcp$homeu net any ->$外网 any (消息:“et-trojan-probable-bot-nick in irc(usa+..)”;流:已建立,到服务器;流位:isset,是“proto”irc;内容:“nick”;pcre:“/nick”。 USA. [0-9] 3,/i”;参考:url,doc.emergingthreats.net/2008124;classtype:特洛伊木马活动;sid:2008124;rev:2;)
第一个强调的部分是源,第二个是目的(注意方向箭头的方向)。
交通进出口。不同的端口有不同的端口号。例如,HTTP的默认端口是80,而443通常是HTTPS的端口。但是,请注意,端口并不指示通信中使用的协议。相反,它决定哪个应用程序正在接收数据。
上面提到的端口通常是目的地端口。源端口,即发送数据包的应用程序,通常由操作系统分配一个随机端口。当为自己的HTTP服务编写规则时,通常会编写 any -> 80
,因为这意味着从任何源端口到HTTP应用程序(在端口80上运行)的任何数据包都是匹配的。
在设置端口时,您也可以使用特殊的操作符,如上面所述。标志如下:
算符 |
描述 |
---|---|
: |
端口范围 |
你说什么? |
例外/否定 |
[…………] |
分组 |
例如:
例子 |
意义 |
---|---|
[80、81、82岁] |
端口80、81和82 |
[80分:82分] |
范围从80到82 |
[1024个:] |
从1024到最高端口号 |
你看!80 |
除了80个港口 |
[80:100,!99] |
范围从80到100,但不包括99 |
[1:80,![2,4] ] |
范围为1-80,端口2和4除外 |
[..,[……………] ] |
6.1.5. 方向¶
删除tcp$home_net any -> $external_net any(msg:“et-trojan-probable-bot-nick in irc(usa+..)”;流:已建立,到_-server;流位:isset,是_-proto-irc;内容:“nick”;pcre:“/nick”。 USA. [0-9] 3,/i”;参考:url,doc.emergingthreats.net/2008124;classtype:特洛伊木马活动;sid:2008124;rev:2;)
方向指示签名必须以哪种方式匹配。几乎每个签名的右边都有一个箭头 (->
)。这意味着只有方向相同的数据包才能匹配。但是,也有可能在两种情况下都有一个规则匹配 (<>
):
source -> destination
source <> destination (both directions)
警告
没有“反向”样式方向,即没有 <-
.
下面的例子说明了这一点。例如,有一个IP地址为1.2.3.4和端口1024的客户机,一个IP地址为5.6.7.8的服务器,监听端口80(通常是HTTP)。客户机向服务器发送一条消息,服务器用它的回答回答。
现在,假设我们有一个具有以下标题的规则:
alert tcp 1.2.3.4 1024 -> 5.6.7.8 80
只有第一个数据包将按此规则匹配,因为方向指定我们在响应数据包上不匹配。
6.1.6. 规则选项¶
规则的其余部分由选项组成。它们用括号括起来,用分号分隔。有些选项具有设置(例如 msg
,由选项的关键字、冒号和设置指定。其他的没有设置,只是关键字(例如 nocase
):
<keyword>: <settings>;
<keyword>;
规则选项具有特定的顺序,更改其顺序将更改规则的含义。
注解
人物 ;
和 "
在Suricata规则语言中具有特殊意义,在规则选项值中使用时必须转义。例如::
msg:"Message with semicolon\;";
因此,您还必须转义反斜杠,因为它是转义字符。
本章的其余部分在文档中记录了各种关键字的使用。
下面是一些关于关键字的一般性细节。
6.1.6.1. 修饰词¶
一些关键字函数用作修饰符。有两种类型的修改器。
旧款 '内容修饰符' 回顾一下规则,例如:
alert http any any -> any any (content:"index.php"; http_uri; sid:1;)
在上面的示例中,模式“index.php”被修改为检查HTTP URI缓冲区。
最近的类型称为 '粘性缓冲' .它将缓冲区名称放在第一位,其后的所有关键字将应用于该缓冲区,例如:
alert http any any -> any any (http_response_line; content:"403 Forbidden"; sid:1;)
在上面的示例中,根据HTTP响应行检查模式“403 Forbidden”,因为它遵循
http_response_line
关键字。
6.1.6.2. 标准化缓冲区¶
数据包由原始数据组成。HTTP和重新组装可以复制这些类型的数据包数据。它们清除异常内容,组合数据包等。剩下的是所谓的“标准化缓冲区”:
因为数据正在被规范化,所以它不是以前的样子,而是一种解释。规范化缓冲区包括:所有http关键字、重新组装的流、tls-、ssl-、ssh-、ftp-和dcerpc缓冲区。
请注意,有一些例外情况,例如 http_raw_uri
关键字。参见 http.uri以及http.uri.raw 更多信息。