当主机同时响应时,Snort规则不会生成警报

问题描述:

alert tcp any any - > any any(msg:“来自IRC频道的PRIVMSG可疑行为”;内容:“PRIVMSG”;偏移量:0;深度:7; nocase ; dsize:< 64; flow:to_server,established; tag:session,300,seconds; classtype:bad-unknown; sid:2000346; rev:4;)当主机同时响应时,Snort规则不会生成警报

上面的规则是为监视机器人响应消息botmaster。规则工作正常,但只有当一个僵尸程序做出响应时,并且当多个主机同时响应时,一个主机没有警报甚至没有警报。我已将会话时间更改为30或150,但没有运气。

任何提示或技巧,使其高效?

谢谢。

-Aymen

我不认为我完全掌握你正在尝试这个规则来做。你能澄清一下你为什么只寻找没有频道名称的PRIVMSG(或者甚至是机器人的昵称)的具体细节?

这就是说,一些关于使规则更有效的快速建​​议。根据需要适应:

  • dsizeflow被认为是“分离的”选项和应指定之前的任何有效载荷选项(如content和其改性剂,等等)。离散选项通常检查特定于协议的字段,并且决不触摸有效载荷,所以它们非常快(仅次于快速模式匹配器)。也就是说,你应该在msg之后出现flow,然后在flow之后出现dsize

  • 接下来,您可能将tag的计时器设置得太高。有一个tag的内置截止点,称为tagged_packet_limit,它默认为256个数据包。因此,您的规则将在三种可能条件之一(以先发生者为准)停止标记:

    • 会话结束。
    • 5分钟后(300秒)。
    • 256个数据包被标记。


    seconds度量可以基于其他因素在您的传感器,例如连接速度,系统负载等。因此,该规则可能会停止297秒或303秒后标记数据包波动一点。最好使用packets度量标准,并将其设置为非常高的值,例如1000。这还有一个优势,即覆盖tagged_packet_limit。甚至可以同时指定多个指标:

    tag:session,240,seconds,8000,bytes,1000,packets; 
    
  • 你应该考虑使用对flowbits控制何时加标签的操作开始和结束:

    <discrete options>; flowbits:isnotset,botnet.tagged; <payload options>; flowbits:set,botnet.tagged; 
    

    这防止当被中断的标记操作另一个与规则匹配的数据包出现在网络中,因为flowbits会强制规则已经提醒一次,并且正在标记感兴趣的流量。

  • 您应该为常见的IRC端口定义一个变量,并在目标端口字段中使用它。 Snort将目标端口字段与快速模式匹配器结合使用,以优化对数据包进行检查的规则(即,不应通过针对IRC的规则来检查HTTP通信)。代替目标端口,它将尝试使用源端口(源代码中src/pcrm.c顶部的注释中提供了这些端口的具体细节)。如果目标IRC服务器只使用单个端口,则使用该端口。一个端口是不是一组端口更好,但一组端口是远远不仅仅是any更好:

    portvar IRC_PORTS [6666:6669] 
    
  • 最后,你需要使用一个唯一的字符串,以真正做到快速模式匹配的优势。 PRIVMSG是IRC协议极其常见的,所以如果你想限制规则,以一个非常具体的渠道,可以考虑这样的:

    content:"PRIVMSG #foobar:"; fast_pattern:only; 
    


    fast_pattern:only;位,提供的snort-2.9.0及以上,只使用快速模式匹配器内的内容匹配,并将而不是在实际有效载荷搜索中重新使用它。副作用:您无法使用与此内容匹配相关的其他内容匹配。并且这种匹配以不区分大小写的方式执行!

    从2.8.6开始,很难将这个小小的变化包裹起来,但是快速了解它是否适​​用于您,“我只关心这个字符串是否在数据包中找到了某些东西? “,如果是的话,那么fast_pattern:only;将完全做到这一点,并为您节省几个处理器周期。否则,如果您需要确保该字符串不仅存在于数据包中,而且还需要确定的深度或偏移量,则可以完全省略该行。 Snort仍然会使用规则中最长的内容匹配作为快速模式匹配(但可以通过使用fast_pattern;而不使用content上的参数来覆盖,您知道这是数据包中最独特的字符串)。


将所有的这一起:

alert tcp any any -> any $IRC_PORTS (msg:"PRIVMSG from #foobar on IRC"; flow:established,to_server; dsize:<64; flowbits:isnotset,botnet.tagged; content:"PRIVMSG #foobar:"; flowbits:set,botnet.tagged; tag:session,1000,packets; classtype:bad-unknown; sid:2000346; rev:4;) 
+0

您是否测试建议的规则?它看起来很好,但我不知道它为什么不适合我... – Aymen 2012-03-13 04:10:51

+0

#foobar是特定的频道名称,正如你所说的,这就是使规则不适用于未知频道名称的原因。 – Aymen 2012-05-06 06:48:11