6.1. 规则格式

签名在司法中起着非常重要的作用。在大多数情况下,人们使用现有的规则集。

安装规则集的正式方法在 使用Suricata更新进行规则管理 .

本Suricata规则文档解释了所有关于签名的内容;如何阅读、调整和创建签名。

规则/签名由以下部分组成:

  • 这个 行动 ,确定签名匹配时发生的情况

  • 这个 页眉 ,定义规则的协议、IP地址、端口和方向。

  • 这个 规则选项 定义规则的细节。

规则示例如下:

drop tcp $HOME_NET any -> $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"; reference:url,doc.emergingthreats.net/2008124; classtype:trojan-activity; sid:2008124; rev:2;)

在这个例子中, red 是行动, green 是标题和 blue 是选项。

我们将在本节中使用上述签名作为示例,突出显示签名的不同部分。它是来自新兴威胁数据库的签名,这是一个开放的数据库,具有许多规则,您可以在您的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)。客户机向服务器发送一条消息,服务器用它的回答回答。

../_images/TCP-session.png

现在,假设我们有一个具有以下标题的规则:

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和重新组装可以复制这些类型的数据包数据。它们清除异常内容,组合数据包等。剩下的是所谓的“标准化缓冲区”:

../_images/normalization1.png

因为数据正在被规范化,所以它不是以前的样子,而是一种解释。规范化缓冲区包括:所有http关键字、重新组装的流、tls-、ssl-、ssh-、ftp-和dcerpc缓冲区。

请注意,有一些例外情况,例如 http_raw_uri 关键字。参见 http.uri以及http.uri.raw 更多信息。