本次实验的目的是构造规则检测连续的俩个流
if snort see two packets in a TCP flow with
• first packet has “login” or “Initial” in payload, destination port is 3399;
• and 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;
利用flowbits来控制对连续多条流的检测
flowbits:set,name
flowbits:isset,name 当对应name的flowbits为置位状态时,才执行规则的其它操作
flowbits:toggle,name 反置当前操作
flowbits:unset,name 取消流中的置位。
flowbits:isnotset,name
flowbits:noalert 设置后将不会发出警报
例如如下规则:
alert tcp any any -> any any (content:"***";flowbits:set,userlogin;flowbits:noalert;sid:100001;)
alert tcp any any -> any any (msg:"bot";content:"***";flowbits:isset,userlogin;sid:1000001;)
在这样的规则条件下,当一个报文的负载被第规则1匹配后,flowbits置位,并且不发出警报,等到接下来另一条流被规则2匹配后,假如flowbits已置位,则发出警报。
关于ipv4地址正则表达式部分:
[1-9] 匹配数字1-9
\d{2,5} 匹配任意数字,允许重复出现2-5次
\. 匹配小数点
\: 匹配冒号
接下来就是利用scapy构造流
可以选择向上篇文章一样一直打开snort,每次用scapy手动发送两个包
或者直接利用wrpcap("bot.pcap",pkt)
封装报文
有个小技巧,可以利用命令行mergecap
,将两个pcap包合并成一个
mergecap -w bot.pcap bot1.pcap bot2.pcap
tips:snort的检测规则可能是设定了两个流之间的间隔时长,相隔时间较久的话第一个flowbits置位会被取消。
直接用snort检测pcap包
sudo ./snort -c ./soft/snort-2.9.19/rules/snort.conf -r bot.pcap -A fast