===================== 预过滤关键字 =====================

10.10. fast_pattern

签名中只有一个内容会被用于多模式匹配器(MPM)。如果存在多个内容,Suricata会使用'最强'的内容。这取决于长度、内容变化程度以及所检查的缓冲区等因素。通常来说,内容越长且变化越多越好。关于Suricata如何确定快速模式匹配的完整细节,请参阅 Suricata 快速模式匹配机制详解

有时规则编写者希望让Suricata使用默认选择之外的其他内容。

例如:

User-agent: Mozilla/5.0 Badness;

content:"User-Agent|3A|";
content:"Badness"; distance:0;

在这个例子中,第一个内容比第二个更长且变化更多,因此Suricata会将其用于MPM。由于'User-Agent:'会频繁匹配,而'Badness'在网络流量中出现较少,可以通过使用'fast_pattern'让Suricata使用第二个内容。

content:"User-Agent|3A|";
content:"Badness"; distance:0; fast_pattern;

fast_pattern关键字会修改它前面的内容。

../_images/fast_pattern.png

fast_pattern也可以与之前提到的所有关键字以及所有HTTP修饰符结合使用。

10.10.2. fast_pattern:only

有时一个签名只包含一个内容。这种情况下,在MPM中找到匹配后,Suricata无需进一步检查。如果只有一个内容,整个签名就算匹配。Suricata会自动识别这一点。在某些签名中,仍会使用'fast_pattern:only;'来标明。虽然Suricata不需要fast_pattern:only,但它仍然支持这个语法。

10.10.3. fast_pattern:'chop'

如果不希望MPM使用整个内容,可以使用fast_pattern 'chop'。

例如:

content: "aaaaaaaaabc"; fast_pattern:8,4;

这样MPM就只会使用最后四个字符。

10.11. prefilter

对于其他非MPM关键字的预过滤引擎,可以通过'prefilter'关键字在特定规则中启用。

在以下规则中,TTL测试将用于预过滤,而不是单字节模式:

alert ip any any -> any any (ttl:123; prefilter; content:"a"; sid:1;)

有关如何配置预过滤引擎的更多信息,请参阅 suricata-yaml-prefilter