题目信息:
if snort see two packets in a flow with
· first packet has "login" or "Initial" in payload, destination port is 3399;
· second packet has a "IPv4Address:Port" string(E.g. 123.45.6.7:8080) in payload, destination port is 3399;
output a alert with msg "bot founded" and sid 1000001
题目翻译:
如果snort在一个流中看到两个包
·首包载荷中有“login”或“Initial”,目的端口为3399;
·第二个数据包有一个“IPv4Address:Port”字符串(例如:123.45.6.7:8080),目的端口为3399;
输出一个带有MSG“bot established”和sid 1000001的警报
照例把我学习的博客内容放进来:
snort规则
网络入侵检测–Snort软件规则编写
alert tcp any any -> any 3399:表示匹配TCP协议、任何源IP、任何源端口、任何目标IP、目标端口为3399的数据包;
pcre:“/((2(5[0-5]|[0-4]\d))|[0-1]?\d{1,2})(.((2(5[0-5]|[0-4]\d))|[0-1]?\d{1,2})){3}:(6553[0-5]|655[0-2]\d|65[0-4]\d{2}|6[0-4]\d{3}|[1-5]\d{4}|\d{1,4})/”:表示匹配满足IPv4地址和端口的正则表达式的数据包,例如"123.45.6.7:8080";
-
(2(5[0-5]|[0-4]\d)): 这个子表达式匹配 200 到 255 中的一个数字。首先匹配 2,然后匹配一个后跟 0-5
之间数字的 5,或者一个后跟 0-4 之间数字的数字,其中 \d 表示匹配任何数字字符。 -
|: 这个字符是“或”操作符,可以使表达式匹配两个条件中的任意一个。 [0-1]?: 这个子表达式匹配数字 0 或 1
中的一个,也可以不匹配任何数字。? 表示这个数字是可选的。 -
\d{1,2}: 这个子表达式匹配 0-9 中的一个数字,可以匹配 1 或 2 个数字,{1,2} 表示这个数字可以重复 1 到 2 次。
因此,这个正则表达式可以匹配任意一个 0-255 之间的数字。当这个表达式出现在 IPv4 地址的正则表达式中时,可以用来匹配 IP 地址的每一个数字。
flowbits:isset,botlogin:表示检测是否已经在先前的数据包中发现了"login"或"Initial"字符串,并将这个信息设置为"botlogin"的流量位,以便后续数据包的检测;
msg=“bot founded”:表示在发现符合规则的数据包时输出的警报信息;
sid:1000001:表示这个规则的唯一标识符,可以用于在日志文件或其他输出中区分不同的规则。
答案:
alert tcp any any -> any 3399 (pcre:"/login|Initial/";flowbits:set,botlogin;flowbits:noalert;sid:1000002;)
alert tcp any any -> any 3399 (pcre:"/((2(5[0-5]|[0-4]\d))|[0-1]?\d{1,2})(\.((2(5[0-5]|[0-4]\d))|[0-1]?\d{1,2})){3}:(6553[0-5]|655[0-2]\d|65[0-4]\d{2}|6[0-4]\d{3}|[1-5]\d{4}|\d{1,4})/";flowbits:isset,botlogin;msg="bot founded";sid=1000001;)