总结一下:BT软件是先TCP三次握手,然后应用层握手,接下来有TCP 的控制部分还有UDP的控制部分,接下来是搞TCP的DATA部分的传输,我们抓包特征有好几次机会:
1. 应用层握手从第1个字节开始算特征, "BitTorrent protocol" 是BT软件开始应用层握手的信息.
2. TCP CONTROL部分
3. UDP CONTROL部分
4. TCP DATA部分,这部分往往是加密传输,不太容易做的
这里再声明一次TCP的三次握手不用抓,因为这个不是协议异常攻击,是完全的应用层软件的东西
还有就是有时候要检测PAYLOAD的长度,一般的时候不需要,为了消除误报,可以把PAYLOAD长度作为一个条件加进去,前提是PAYLOAD长度固定或者在一定范围内.
B) IMS即时通讯工具
1) QQ检测
QQ分UDP登陆和HTTP隧道登陆方式
先看看UDP

filter qq udp( dport: QQ_PORTS ) {
if ( substr(udp.blob,0,1) == "\x02"){ #这里跟SNORT的一样,这个用函数
#substr做PAYLOAD的匹配,这里写的是从第0个字节开始,长度为1的包,也就#是第一个字节是0x02
#detect qq login
if ( substr(udp.blob,4,1) == "\x22"){ #这里写的是从第4个字节开始,长度为
#1的包,也就是第一个字节是0x22
$temp1=ulong(udp.blob,7); #这里去出QQ号
alert( source_me, qq_login_alert, #这里是报警的内容,前两个参数在
#qq.acf文件里定义了
ip.src, ip.dst, #在UDP协议检测里必须写上的原和目的的IP
cat("QQ ",$temp1 ," :log in server"), #自定义参数,QQ号
"--AlertDetails", "ALERT_ID", "911-003-001", #报警的ID,最好不要
#和其他签名重复
"ALERT_SEVERITY", "low", #报警的严重层度
"ALERT_IMPACT", "information gathering", #漏洞类型
"ALERT_EVENT_TYPE","logging", #事件类型
"ALERT_ASSESSMENT", "unknown", #事件考评,基本都是unknown
"ALERT_CONFIDENCE", 90, #签名报警的可信度
"IP_ADDR_SRC", ip.src,
"PORT_SRC", udp.sport,
"IP_ADDR_DST", ip.dst,
"PORT_DST", udp.dport,
"$temp1",$temp1,
"$temp2",$temp2);
record packet.sec, ip.src, udp.sport, ip.dst, #做数据报记录的功能,
#如果attack里的inhitit.values开启了record这个签名的功能
#,这里就要录制数据报
udp.sport, "qq client connect to server" ,"N/A" to RCDR;
}
再看看QQ的HTTP隧道特征

其他的特征包我就不在这里贴了,这里为了消除误报,当有下面的情况发生是可能也被检测成QQ HTTP登陆:

上面这个是QQ浏览www.qq.com网站的情况,我们这里要把HOST字段www.qq.com过滤掉,Referer 是http://www.qq.com过滤掉.
我们这里还要检测Cookie的特征,才能检测QQ HTTP登陆的情况
if(index($host, "www.qq.com") < 0)
{
if($Referer != NULL)
{
if(index($Referer, ".qq.com") > 0) return;
}
if ((index($url, "/getsyspanel?") >= 0)&&(index($url, "qqver") >= 0)&&(index($url, "qq=") >= 0)){
alert(ims_qqhttp_source, qq_http_alert,tcp.connsrc,
tcp.conndst,
"--AlertDetails", "ALERT_ID", "911-011-001",
"ALERT_CONFIDENCE", 90,
"ALERT_SEVERITY", "info",
"ALERT_EVENT_TYPE", "attack",
"IP_ADDR_SRC", tcp.connsrc, "IP_ADDR_DST", tcp.conndst,
"PORT_SRC", tcp.connsport, "PORT_DST", tcp.conndport,"QQURI",$url);
}
if ((index($url, "/getlogo?QQ=") >= 0)||(index($url, "superbag.xml") >= 0)){
alert(ims_qqhttp_source, qq_http_alert,tcp.connsrc,
tcp.conndst,
"--AlertDetails", "ALERT_ID", "911-011-001",
"ALERT_CONFIDENCE", 90,
"ALERT_SEVERITY", "info",
"ALERT_EVENT_TYPE", "attack",
"IP_ADDR_SRC", tcp.connsrc, "IP_ADDR_DST", tcp.conndst,
"PORT_SRC", tcp.connsport, "PORT_DST", tcp.conndport,"QQURI",$url);
}
if (((index($cookie, "QQ_IPAddress=") >= 0)&&((index($cookie, "pvid=") >= 0)||(index($cookie, "flv=") >= 0))) && (index($host, ".qq.com") >= 0)){
alert(ims_qqhttp_source, qq_http_alert,tcp.connsrc,
tcp.conndst,
"--AlertDetails", "ALERT_ID", "911-011-001",
"ALERT_CONFIDENCE", 90,
"ALERT_SEVERITY", "info",
"ALERT_EVENT_TYPE", "attack",
"IP_ADDR_SRC", tcp.connsrc, "IP_ADDR_DST", tcp.conndst,
"PORT_SRC", tcp.connsport, "PORT_DST", tcp.conndport,
"QQURI",$url,"Host",$host,"Cookie",$cookie);
}
}