美文网首页
使用基于位掩码的签名预过滤器提高Suricata的性能

使用基于位掩码的签名预过滤器提高Suricata的性能

作者: creepycool | 来源:发表于2017-07-24 17:17 被阅读0次
    2010/10/01

    Improving Suricata performance with bitmask based signature prefiltering

    上几周我花费了大量时间提高Suricata的表现,取得了较好的进展。我做了很多优化,最显著的是一种预过滤签名(signature)的新方式。我在这里简要解释一下。

    首先解释一下Suricata是如何选择签名进行检查的。当Suricata启动时,它将签名组织成组,代码中命名为SigGroupHead。为了减少每个包需要检查的签名数量,分组实在很多属性上完成的:flow direction, protocol, src ip, dst ip, src port, dst port。尽管这样分组十分粗暴,每个单独的SigGroupHead仍然可以包含成千上万的签名。例如 Emerging Threats web-client 签名几乎都包含在了相同的SigGroupHead中。

    The bitmask prefilter --- 位掩码预过滤器

    每个签名都在引擎初始化时创建一个位掩码,为每一个需要匹配的“特征”设置一位。这种特征有: needs payload, needs flowbit set, needs flow, needs http state。

    在运行时,我们为每个包创建一个掩码。在这些包中设置标志以表示这个包是否有payload,是否有相关的flow,flow又是否有flowbits,诸如此类。这个操作非常廉价,因为它只需要对每个包进行一次且相对简单的检查。

    这个过程的最后一步,我们将一个SigGroupHead中每个签名的掩码与包的掩码进行比较。

    if ((packetmask & sigmask) != sigmask)
        skip_this_signature();
    

    使用这个过滤器后,使用flowbits变得更有吸引力了。大多数flow没有设置flowbits,所以这样一来有效排除了所有需要花一点时间来检查flowbits的签名。

    相关文章

      网友评论

          本文标题:使用基于位掩码的签名预过滤器提高Suricata的性能

          本文链接:https://www.haomeiwen.com/subject/qgwbkxtx.html