0

alert tcp any any -> any any (msg:"PRIVMSG from an IRC channel suspecious act"; content:"PRIVMSG"; offset:0; depth:7; nocase; dsize:<64; flow:to_server,established; tag: session,300,seconds;classtype:bad-unknown;sid:2000346;rev:4;)

编写上述规则是为了监控机器人对机器人管理员的响应消息。该规则工作正常,但仅当一个机器人做出响应并且当多个主机同时响应时,一台主机没有警报甚至一个警报。我已将会话时间更改为 30 或 150,但没有运气。

有什么提示或技巧可以提高效率吗?

谢谢。

-艾门

4

1 回答 1

2

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

也就是说,一些关于使规则更有效的快速建​​议。根据需要进行调整:

  • dsize并被flow视为“离散”选项,应在任何有效负载选项(例如content及其修饰符等)之前指定。离散选项通常检查特定于协议的字段并且从不接触有效负载,因此它们非常快(仅次于快速模式匹配器)。即,你应该让flowcome after msg,然后dsizeafter flow

  • 接下来,您可能将计时器设置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;
    

    这可以防止标记操作在与规则匹配的另一个数据包通过线路时被中断,因为流位将强制该规则已经警告过一次,并且当前正在标记感兴趣的流量。

  • 您应该为常见的 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 仍将使用规则中最长的内容匹配作为快速模式匹配(但这可以通过仅在您知道是数据包中最独特的字符串的 afast_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;)
于 2012-03-11T11:34:18.510 回答