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.

Ferramentas pessoais