全局阈值

阈值可以在规则本身中配置,参见 阈值设置关键词。规则编写者通常会根据情报创建规则,并结合对规则警报频率的判断来设置阈值。

阈值存储在一个根据配置调整大小的哈希表中,参见: suricata-yaml-thresholds

阈值配置

除了规则阈值外,还可以使用 threshold.config 在传感器上配置更多阈值。

threshold/event_filter

语法:

threshold gen_id <gid>, sig_id <sid>, type <threshold|limit|both>, \
  track <by_src|by_dst|by_rule|by_both|by_flow>, count <N>, seconds <T>

rate_filter

速率过滤器允许在规则匹配时更改规则动作。

语法::

rate_filter: rate_filter gen_id <gid>, sig_id <sid>, track <tracker>,

count <c>, seconds <s>, new_action <action>, timeout <timeout>

示例::

rate_filter gen_id 1, sig_id 1000, track by_rule, count 100, seconds 60,

new_action alert, timeout 30

gen_id

生成器 ID。通常为 1,但如果规则使用 gid 关键字设置其他值,则必须在 gen_id 中匹配。

sig_id

规则/签名 ID,由规则的 sid 关键字设置。

track

跟踪规则匹配的位置。使用 by_src/by_dst 时,跟踪是按 IP 地址进行的。主机表用于存储。使用 by_rule 时,跟踪是针对规则全局进行的。 选项 by_both 用于跟踪源和目的地的 IP 对。相同地址之间方向相反的包被视为同一对进行跟踪。by_flow 选项在流中跟踪规则匹配。

count

激活 rate_filter 所需的规则命中次数。

seconds

在达到 count 以激活 rate_filter 的时间段。

new_action

rate_filter 生效时应用于匹配流量的新动作。

值::

<alert|drop|pass|reject>

注意:解析器支持 'sdrop' 和 'log',但未实现其他功能。

timeout

rate_filter 保持激活状态的时间(秒)。

示例

假设我们想限制到 SSH 服务器的传入连接。下面的规则 888 简单地对到 SSH 服务器端口 22 的 SYN 包发出警报。如果一个 IP 地址在一分钟内触发此规则 10 次或更多,则设置 droprate_filter,超时为 5 分钟。

规则::

alert tcp any any -> $MY_SSH_SERVER 22 (msg:"Connection to SSH server";

flow:to_server; flags:S,12; sid:888;)

速率过滤器::

rate_filter gen_id 1, sig_id 888, track by_src, count 10, seconds 60,

new_action drop, timeout 300

suppress

抑制可用于抑制规则或主机/网络的警报。规则匹配时执行的操作(如设置 flowbit)仍会执行。

语法:

suppress gen_id <gid>, sig_id <sid>
suppress gen_id <gid>, sig_id <sid>, track <by_src|by_dst|by_either>, ip <ip|subnet|addressvar>

示例:

suppress gen_id 1, sig_id 2002087, track by_src, ip 209.132.180.67

这将确保签名 2002087 永远不会对源主机 209.132.180.67 匹配。

其他可能性/示例::

suppress gen_id 1, sig_id 2003614, track by_src, ip 217.110.97.128/25 suppress gen_id 1, sig_id 2003614, track by_src, ip [192.168.0.0/16,10.0.0.0/8,172.16.0.0/12] suppress gen_id 1, sig_id 2003614, track by_src, ip $HOME_NET suppress gen_id 1, sig_id 2003614, track by_either, ip 217.110.97.128/25

在上面的最后一个示例中,by_either 跟踪意味着如果 IP目的 IP 匹配 217.110.97.128/25,则 sid 为 2003614 的规则将被抑制。

全局阈值与规则阈值

注意:本节适用于 1.4+ 版本。在 1.3 及之前版本中,不支持混合使用规则和全局阈值。

当规则设置了 threshold/detection_filter 时,规则仍可能受到全局阈值文件的影响。

下面的规则仅在 60 秒内从一个主机发送/接收 10 封或更多电子邮件时触发。

alert tcp any any -> any 25 (msg:"ET POLICY Inbound Frequent Emails - Possible Spambot Inbound"; \
     flow:established; content:"mail from|3a|"; nocase;                                          \
     threshold: type threshold, track by_src, count 10, seconds 60;                              \
     reference:url,doc.emergingthreats.net/2002087; classtype:misc-activity; sid:2002087; rev:10;)

接下来,我们将看到全局设置如何影响此规则。

Suppress

抑制可以与带有 thresholds/detection_filters 的规则结合使用,没有例外。

suppress gen_id 1, sig_id 2002087, track by_src, ip 209.132.180.67
suppress gen_id 0, sig_id 0, track by_src, ip 209.132.180.67
suppress gen_id 1, sig_id 0, track by_src, ip 209.132.180.67

上述每条规则都将确保 2002087 在电子邮件的来源是 209.132.180.67 时不发出警报。对于所有其他主机,它 发出警报。

suppress gen_id 1, sig_id 2002087

此抑制将简单地将规则转换为 "noalert",意味着它在任何情况下都不会发出警报。如果规则设置了 flowbit,那仍会发生。

Threshold/event_filter

当应用于特定签名时,thresholds 和 event_filters(从现在起称为 threshold)将覆盖签名设置。这在签名中的默认设置不适合您的环境时非常有用。

threshold gen_id 1, sig_id 2002087, type both, track by_src, count 3, seconds 5
threshold gen_id 1, sig_id 2002087, type threshold, track by_src, count 10, seconds 60
threshold gen_id 1, sig_id 2002087, type limit, track by_src, count 1, seconds 15

这些设置中的每一个都将用新的 threshold 设置替换 2002087 的 threshold 设置。

注意: 不支持覆盖所有 gid 或 sid(通过使用 gen_id 0 或 sig_id 0)。错误 https://redmine.openinfosecfoundation.org/issues/425

Rate_filter

参见 https://redmine.openinfosecfoundation.org/issues/425