NoSurf
De gutocarvalho.net
Este mês o Sr. Augusto Ferronato publicou na SNORT-BR uma regra criada pela equipe de segurança do SERPRO-RECIFE que detecta o uso do ULTRASURF. A equipe do SERPRO fez um tracing nas conexões do ultrasurf e identificou que um dos comportamentos do programa era o envio de uma requisição DNS para servidores externos com um pacote com o tamanho de 554 bytes, sendo 480 bytes desdes com valor igual a 0.
[editar] snort rule
A regra é esta baixo, lembre-se não tem as quebras de linha, é tudo numa linha só
alert udp $HOME_NET any -> !$HOME_NET 53 (msg: "[OSSEC] Consulta de DNS Externo Possivel Ultrasurf"; content:"|00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00|"; classtype: policy-violation;threshold:type limit, track by_src,count 1, seconds 5;sid: 1000059; rev:2; )
com esta regra, caso o snorte fareje algo que case com ela, emitirá um altera que terá uma saída como:
"[OSSEC] Consulta de DNS Externo Possivel Ultrasurf", 08/27-14:30:09.728544 ,192.168.0.1 ,218.153.6.52 ,53
[editar] noSurf.sh
o script abaixo lê o log do snort capturando o endereço IP para bloqueio via netfilter.
vamos usar o vim para criar o script
root@servidor:~# vim noSurf.sh
#!/bin/bash
# caminho para log do snort
a0="snort.log"
# local para arquivos temporarios
apath="/tmp"
# arquivos temporarios
a1="$apath/snort_list.txt"
a2="$apath/netfilter_list.txt"
a3="$apath/blocked_ips.txt"
a4="$apath/noSurf_alerta.txt"
function geraListaSnort()
{
> $a1
for i in `cat $a0 |awk '{ print $9 }'|sed 's/,//'`;do
echo $i >> $a1
done
}
function geraListaIptables()
{
> $a2
for i in `iptables -nvL INPUT|grep DROP|awk '{ print $8 }'`;do
echo $i >> $a2
done
}
function bloqueiaIp()
{
for i in `cat $a3`;do
echo bloqueando o endereco ip: $i
iptables -t filter -I INPUT -s $i -j DROP
done
}
function enviaAlerta()
{
echo -e "O enderecos IP abaixo foram bloqueados por possivel utilizacao de ultrasurf:\n" | tee -a $a4
for i in `cat $a3`;do
echo $i | tee -a $a4
done
mail -s "noSurf report" seuemail@seuprovedor.com.br < $a4
}
function comparaListas()
{
> $a3
> $a4
for i in `cat $a1|sort -u`;do
cat $a2|grep $i > /dev/null
if [ $? == 0 ];then
echo o endereco ip $i ja esta bloqueado na firewall.
else
echo o endereco ip $i nao esta bloqueado na firewall.
echo $i >> $a3
fi
done
bloqueiaIp
enviaAlerta
rm -f $a1
rm -f $a2
rm -f $a3
rm -f $a4
}
# executando funcoes do script
geraListaSnort
geraListaIptables
comparaListas
agora vamos ajustar as permissões
root@servidor:~# chmod 700 noSurf.sh
você pode colocar este script no CRON para ser executado periódicamente.

