gutocarvalho.net

cotidiano simples, vida feliz

veja uma rápida análise do ultrasurf, saiba como detectá-lo usando snort, saiba como bloqueá-lo usando shellscript & netfilter/iptables

By

Para quem não conhece, o ULTRASURF é um software desenvolvido pela empresa ULTRAREACH,  este software permite que os usuários em redes que possuem um rígido controle de conteúdo para acesso web consigam burlar esta segurança utilizando um túnel criptografado via porta 443/TCP Através deste túnel eles conseguem acesso automático a um pool de servidores de proxy anônimo, que provavelmente são máquinas da rede que foram invadidas.

Usando o ultrasurf estes usuários conseguirão acessar qualquer site web e baixar qualquer tipo de arquivo. O problema é que os ingênuos usuários que infrigem as normas de TI das instituições na qual trabalham, não pensam em nenhum momento que o pessoal da ULTRAREACH pode (e com certeza tem) ter um sniffer capturando todo o tipo de informação dos espertinhos que se acham crackers por utilizarem tal programa, incluindo senhas de acesso aos sistemas internos e a sites, números de cartão de crédito, perfil de acesso de cada usuário, tudo isto vai parar na mão da ULTRAREACH que vende a ilusão de privacidade. ao usuários do programa. Outra possibilidade que ainda estou analisando é o ultrasurf possuir em seu código algum tipo de sistema VPN bem simples que permitiria que as pessoas da ULTRAREACH possam acessar a rede do usuário, e isto é na minha opinião o fator mais grave do uso do túnel por este programa. Bom nem precisa dizer que o ultrasurf é um binário executável, não temos acesso ao código fonte,  portando não temos como saber o quão malicioso é seu código, resta-nos a engenharia reversa.

O Ultrasurf é um programa que testa a capacidade do sysadmin pois não é uma tarefa simples bloqueá-lo, seja utilizando sistemas proxy como SQUID, mesmo com dansguardian e similares, ou através de filtros  de pacotes como o netfilter/iptables, digo isto pois tudo acontece depois que a conexão SSL é estabelecida, e este tipo de conexão normalmente é liberada pois existe uma grande gama de serviços na internet que utiliza acesso seguro (SSL/443/TCP). O problema é que não existe um IP único que você pode bloquear, pois eles tem um pool de servidores possibilitando queo cliente abra conexões SSL  para endereços aleatórios.

Isto estava tirando o sono de muitos sysadmin mundo afora. Alguns foram radicais e bloquearam qualquer acesso a porta 443, liberando apenas os sites necessários, algo como uma big-whitelist. Nem preciso dizer que isto gerou caos e desordem em muitas instituições.

Bom, felizmente 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 uma análise das 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, isto acontece sempre que o cliente é iniciado.

A primeira regra publicada foi pelo Augusto (baseada na rule do serpro) foi:

alert udp $HOME_NET any -> !$HOME_NET 53 (msg: “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; sid: 1000059; rev:1; )

Depois da publicação, Rodrigo Montoro (Sp0oKeR) fez um ajuste para melhorar a visualização do log.

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 este ajuste o SNORT envia apenas 1 alerta para o arquivo de log mesmo que existam N tentativas em menos de 5 segundos, deixando a leitura do log mais clean.

Através do OSSEC HIDS o sysadmin pode criar um ação para ser executada baseando-se nos alertas do log do SNORT, esta seria a maneira mais indicada de executar uma ação. Uma outra alternativa é criar um shellscript bem simples que leia o log buscando as informações para que seja executada uma ação, seja enviado um alerta por e-mail, seja bloqueando os endereços IP via netfilter/iptables.

Pensando na segunda opção, criei um script para ler o log, bloquear o ip e enviar uma notificação ao sysadmin, veja o script em minha wiki clicando no link abaixo:

http://gutocarvalho.net/mediawiki/index.php/NoSurf

Essa regra do snort foi testada até a versão 9.1 do UltraSurf e funciona muito bem.

Deixo aqui um agradecimento especial ao pessoal do SERPRO-Recife por criar e compartilhar a regra. Agradeço ao Sr. Augusto Ferronato por publicar a regra no SNORT-BR e agradeço também  o Sp0oKeR por otimizar a regra para facilitar a leitura dos logs.

Espero que estes exemplos de compartilhamento de informação, código, conhecimento e experiências sejam seguidos sempre ;)

Referências:
http://listas.cipsga.org.br/cgi-bin/mailman/listinfo/snort-ids
http://snort.linuxsecurity.com.br/
http://www.snort.org.br/
http://www.snort.org

[]‘s
Guto

  • Pingback: Ultrasurf: o que é, e como bloquear

  • Anderson Souza

    Se alguem estiver usando plataforma windows pode bloquear criando uma regra de hash dentro das gpo’s pra cada versão do programa. Pelo menos é assim que resolvi esse problema!

  • Kevin-Moc

    Não conhecia o Ultrasurf, mas gostei da implementação, resta saber se depois disso o pessoal do ultrasufr vai alterar o programa, mas é o velho jogo de gato e rato, hehehe.

  • gutocarvalho

    Anderson,

    Boa dica, valeu ;)

  • gutocarvalho

    Kevin-Moc,

    Provavelmente vai mudar, mas ai estudamos uma nova forma de pegar ele, fique tranquilo ;)

    []‘s
    Guto

  • David

    Estou tendo problemas com o freegate, que é muito parecido com o ultrasurf, será que esta regra também funciona com ele?

  • gutocarvalho

    David,

    Não funciona, a regra serve apenas para o UltraSurf, procure na bleedingsnort ou na emerge threats por algo que detecte o freegate, caso não exista, você vai precisar usar o tcpdump ou wireshark para pegar as assinaturas do freegate e depois criar uma regra para o snort.

    []‘s
    Guto

  • Tadeu

    uso o ultra surf no meu trampo, queria saber pq ele detona o internet explorer ? depois de usar ele nao consigo mais entrar na internet ? pq

  • gutocarvalho

    Tadeu,

    Sugiro que você procure o site do programa e entre nos fóruns do projeto.

    Não uso windows ou IE, e a notícia veiculada aqui é sobre como detectar e bloquear o Ultrasurf e não como “usá-lo”.

    []‘s
    Guto

  • RMorais

    Depois de ler os relatos acima fiz o teste de bloquear a saída da porta 53 em tcp e udp. Deixei só liberada para o DNS interno. Aparentemente bloqueou o UltraSurf e o Freegate. Gostaria que mais pessoas testassem e verificassem se dará o mesmo resultado que estou tendo.

  • http://gutocarvalho.net gutocarvalho

    RMorais,

    Boa dica, lhe dou retorno ;)

    E o TOR já tentou bloquear?

    []‘s
    Guto

  • Eduardo Scheidet

    Ola pessoal fiz o modelo do “RMorais” e deu certo até a versão 9.1, mais ja saiu uma nova versão 9.2 que não estou conseguindo bloquear, gostaria de poder contar com a ajuda de todos vocês….eu utilizo o Sonicwall como Firewall e o websense como proxy da rede….

    obrigado pela dica e pela atenção.

    att,

    Eduardo Scheidet

  • http://caarlos0.wordpress.com caarlos

    é cara, aqui na facul o sysadmin (meu professor de SO), desistiu de tentar bloquear, e acabou por liberar o acesso a orkut e msn..

    foda bagarai.

  • http://gutocarvalho.net gutocarvalho

    Carlos,

    Faz um tempinho que não coloco a mão no snort, na época tínhamos conseguido bloquear, se lançaram uma versão nova tem-se que rastear a nova assinatura e criar uma nova regra no snort, demanda tempo e paciência ;)

    []‘s
    Guto

  • http://virtualizando.wordpress.com Augusto

    A versão 9.2 ainda está sendo bloqueada pela versão da Rule, a regra para o freegate também já foi publicada :P

    aqui
    alert udp $HOME_NET any -> $EXTERNAL_NET 53 (msg:”ET POLICY Possible External FreeGate DNS Query”; content:”|03 77 36 35 0d 7a 69 79 6f 75 6c 6f 6e 67 6c 69 76 65 03 63 6f 6d 00|”; classtype:policy-violation; threshold:type limit, track by_src,count 3, seconds 30; sid:2008748; rev:2;)

    Abs[]

  • http://juniorvirtual.no-ip.com Junior

    Belas dicas. Ainda estou estudando redes e vou indicar esta página a uns amigos q estão com problemas com esses malditos.. ehehhehe

    VLW

    Um abraço

  • http://gutocarvalho.net gutocarvalho

    Junior,

    Preciso de algo é só falar ;)

    []‘s
    Guto

  • Vinicius Kruz

    Coloquei o squid (c proxi autenticado) e bloqueou legal, o Ultrasurf 9.2 não consegue logar no server dele, não testei c o freegate ou outros, mas é certo q proxi autenticado barra o ultrasurf.

  • http://gutocarvalho.net gutocarvalho

    Vinicius Kruz,

    Bom saber, autenticação é sempre a melhor solução por questões de rastreabilidade e controle de acesso, só de ter autenticação você já inibe inúmeros programas, o ultrasurf é apenas 1 deles ;)

    A questão é que nem todo o ambiente tem autenticação para navegar.

    De qualquer forma valeu pelo retorno :)

    []‘s
    Guto

  • josuel

    Tentei fazer o que estava no site: http://gutocarvalho.net/mediawiki/index.php/NoSurf, o script nao esta funcionando esta dando este erro. poderia me ajudar!!!!!!

    cat: snort.log: Arquivo ou diretório não encontrado
    ./noSurf.sh: line 25: $a2: ambiguous redirect
    ./noSurf.sh: line 27: $a2: ambiguous redirect
    ./noSurf.sh: line 27: $a2: ambiguous redirect
    ./noSurf.sh: line 27: $a2: ambiguous redirect
    ./noSurf.sh: line 27: $a2: ambiguous redirect
    ./noSurf.sh: line 27: $a2: ambiguous redirect
    ./noSurf.sh: line 27: $a2: ambiguous redirect
    ./noSurf.sh: line 27: $a2: ambiguous redirect
    ./noSurf.sh: line 27: $a2: ambiguous redirect
    ./noSurf.sh: line 27: $a2: ambiguous redirect
    ./noSurf.sh: line 27: $a2: ambiguous redirect
    ./noSurf.sh: line 27: $a2: ambiguous redirect
    ./noSurf.sh: line 27: $a2: ambiguous redirect
    ./noSurf.sh: line 27: $a2: ambiguous redirect
    ./noSurf.sh: line 27: $a2: ambiguous redirect
    ./noSurf.sh: line 27: $a2: ambiguous redirect
    ./noSurf.sh: line 27: $a2: ambiguous redirect
    ./noSurf.sh: line 27: $a2: ambiguous redirect
    ./noSurf.sh: line 27: $a2: ambiguous redirect
    ./noSurf.sh: line 27: $a2: ambiguous redirect
    ./noSurf.sh: line 27: $a2: ambiguous redirect
    ./noSurf.sh: line 27: $a2: ambiguous redirect
    ./noSurf.sh: line 27: $a2: ambiguous redirect
    ./noSurf.sh: line 27: $a2: ambiguous redirect
    ./noSurf.sh: line 27: $a2: ambiguous redirect
    ./noSurf.sh: line 27: $a2: ambiguous redirect
    ./noSurf.sh: line 27: $a2: ambiguous redirect
    ./noSurf.sh: line 27: $a2: ambiguous redirect
    ./noSurf.sh: line 27: $a2: ambiguous redirect
    ./noSurf.sh: line 27: $a2: ambiguous redirect
    ./noSurf.sh: line 27: $a2: ambiguous redirect
    ./noSurf.sh: line 27: $a2: ambiguous redirect
    ./noSurf.sh: line 27: $a2: ambiguous redirect
    ./noSurf.sh: line 27: $a2: ambiguous redirect
    ./noSurf.sh: line 27: $a2: ambiguous redirect
    ./noSurf.sh: line 27: $a2: ambiguous redirect
    ./noSurf.sh: line 27: $a2: ambiguous redirect
    ./noSurf.sh: line 27: $a2: ambiguous redirect
    ./noSurf.sh: line 27: $a2: ambiguous redirect
    ./noSurf.sh: line 27: $a2: ambiguous redirect
    ./noSurf.sh: line 27: $a2: ambiguous redirect
    ./noSurf.sh: line 27: $a2: ambiguous redirect
    ./noSurf.sh: line 27: $a2: ambiguous redirect
    ./noSurf.sh: line 27: $a2: ambiguous redirect
    ./noSurf.sh: line 27: $a2: ambiguous redirect
    ./noSurf.sh: line 27: $a2: ambiguous redirect
    ./noSurf.sh: line 27: $a2: ambiguous redirect
    ./noSurf.sh: line 27: $a2: ambiguous redirect
    ./noSurf.sh: line 27: $a2: ambiguous redirect
    ./noSurf.sh: line 27: $a2: ambiguous redirect
    ./noSurf.sh: line 27: $a2: ambiguous redirect
    ./noSurf.sh: line 27: $a2: ambiguous redirect
    ./noSurf.sh: line 27: $a2: ambiguous redirect
    ./noSurf.sh: line 27: $a2: ambiguous redirect
    ./noSurf.sh: line 27: $a2: ambiguous redirect
    ./noSurf.sh: line 27: $a2: ambiguous redirect
    ./noSurf.sh: line 27: $a2: ambiguous redirect
    ./noSurf.sh: line 27: $a2: ambiguous redirect
    ./noSurf.sh: line 27: $a2: ambiguous redirect
    ./noSurf.sh: line 27: $a2: ambiguous redirect
    ./noSurf.sh: line 27: $a2: ambiguous redirect
    ./noSurf.sh: line 48: $a3: ambiguous redirect
    cat: /tmp/blocked: É um diretório
    cat: ips.txt: Arquivo ou diretório não encontrado
    O enderecos IP abaixo foram bloqueados por possivel utilizacao de ultrasurf:

    cat: /tmp/blocked: É um diretório
    cat: ips.txt: Arquivo ou diretório não encontrado
    rm: imposível remover `/tmp/blocked’: É um diretório

  • http://gutocarvalho.net gutocarvalho

    Josuel,

    O script era um exemplo de filtragem para àquela linha que estava no tutorial, dependendo da versão do snort e da saída no log você vai precisar fazer pequenos ajustes no script para capturar corretamente a informação que deseja, isso requer um pouco de conhecimento em shellscript, sed, awk, cada caso varia.

    Como está a saída em seu log?

    []‘s
    Guto

  • josuel

    Bom dia,

    /var/log/snort/portscan.log /var/log/snort/alert /var/log/snort/portscan2.log {
    daily
    rotate 7
    compress
    missingok
    notifempty
    create 0640 snort adm
    sharedscripts
    postrotate
    /etc/init.d/snort restart > /dev/null 2>&1
    endscript
    }
    estou com a ultima versão.

  • http://gutocarvalho.net gutocarvalho

    Josuel,

    Isso ai é a configuração de logrotate do snort e não a saída do log do snort.

    []‘s
    Guto

  • josuel

    blz, guto obrigado pela ajuda, mais nao tenho muita experiencia na area ainda.

  • http://gutocarvalho.net gutocarvalho

    Josuel,

    Procure ler o guiaFocaLinux para se ambientar no linux, veja o básico de shellscript, principalmente SED/AWK, depois de uma boa lida na documentação do snort, é preciso entender primeiro como eles funcionam antes de fazer as regras ;)

    []‘s
    Guto

  • Mauricio

    é meu amigo, funciona muito bem até a verão 9.1, daí pra frente a coisa muda e a regra não funciona.
    Mauricio P. S.

  • http://gutocarvalho.net gutocarvalho

    Maurício,

    Já era de se esperar que a galera do ultrasurf corresse por fora, entenda que eles não são bobos é claro que a cada nova versão eles
    vão contornar os meios de detecção, agora meu amigo a única saída é fazer um novo trace do funcionamento do ultrasurf, para isto analise o comportamento via e ethereal ou tcpdump afim de descobrir a nova assinatura do ultrasurf, assim você poderá adaptar a regra existente.

    []‘s
    Guto

  • Eduardo Scheidet

    Aew galera fazia tempinho que nao dava as caras por aqui… eu consegui bloquear o ultra-surf aqui na firma onde trabalho, e nao foi nem com firewall nem com proxy, o pessoal aqui utiliza “macafe”como anti-vírus e assim, ele identifica todos os executaveis feito na maquina em uma range de data, ai conseguimos pegar as versões que estavam sendo usadas (isso quando se usava proxy sem autenticação) ai o que fazemos, pqgamos o “rash” do programa e bloqueamos ele tanto no anti-vírus quando no dominio, e olha, ficou super legal, pq os camarada pode musar o nome dele etc, mais nao vai conseguir mudar o rash, hehehe…funcionou assim, mais com autenticação no squid junto com o AD, nao vai nem a pal… também funciona, independente da maneira que sera feita…

    o mais legal tbm é utilizar autenticação transparente pro usuario, usando o ident ou o winbind que vai via protocolo mtnl… bom se houver mais alguma duvida… pode me mandar e-mail que a gente resolve junto…

    – O Mundo seria bem melhor se tivessemos o código fonte –

    OpenSource…

    scheidet.

  • http://gutocarvalho.net gutocarvalho

    Esta técnica de bloquear o hash do binário funciona bem, já foi inclusive abordada algo similar nas policies do AD, no AV também é uma opção, obrigado pela dica ;)

  • MARCOS SPAIN

    vem aí o ultrasurf 9.5 ultrareach spain!!!1

  • Barbara

    Olá, boa noite!
    Preciso de ajuda, minha irmã mais nova baixou o maldito ultrasurf em meu computador, e agora não sei como faço para desinstalar o mesmo!
    Gostaria muito de sua ajuda!

  • http://gutocarvalho.net gutocarvalho

    Barbara,

    Sugiro que você procure algum fórum sobre seu sistema operacional para verificar como desinstalar este programa.

    Aqui estamos tratando o bloqueio na rede e não no computador do usuário.

    []‘s
    Guto

  • alexdias

    Aqui uso squid/iptables no debian 5.0, o que me resolve todos os filtros necessários pra minha rede, mas aí vem o ultrasurf e já era… Já existe alguma solução? Alguém já tem as rules pra as novas versões (u92, u92, u93, u94, u95) para a solução do RMorais? isso já ajudaria. Será essa a solução mais prática para meu caso? Valeu pelo tópico!Parabéns!

  • Alex

    Olá. Aparentemente bloquear o acesso a um DNS externo bloqueia o UltraSurf. Deixe somente o localhost liberado para fazer requisições DNS no gateway. Versão testada: 9.4

  • http://gutocarvalho.net gutocarvalho

    Alex dias,

    Eu não tenho acompanhado a evolução do ultrasurf, sugiro que você verifique com a competente galera do SNORT-BR, eles devem ter informações atualizadas acerca das novas versões.

    Att.
    Guto

  • http://gutocarvalho.net gutocarvalho

    Alex,

    Bloquear o DNS é uma técnica interessante, mas na época em que testei ela não era 100% eficaz.

    []‘s
    Guto

  • Carlos Caribé

    Boa tarde.
    Após pesquisar o tráfego na rede, detectamos que o ultrasurf ao ser inicializado abre em média mais de 20 conexões HTTPs.
    Limitamos o número de conexões HTTPs por IP de origem em 10.
    Proibimos conexão HTTPs para IPs sem DNS reverso.
    Alguns sites foram bloqueados indevidamente, Ex: suporte da oracle, página de compra da TAM, etc, exigindo ajustes.

    Até o momento, aparentemente, está funcionando.

    Espero ter ajudado.

  • http://N/A Conrado

    Acho dificil alguem achar um programa 100% efícaz para bloquiar o Ultrasurf.

    No mais, boa sorte para vcs.

    rsrs

  • http://gutocarvalho.net gutocarvalho

    Conrado,

    100% de eficácia é complicado em qualquer cenário, qualquer sistema, afinal não existem sistemas a prova de falhas.

    []‘s
    Guto

  • http://gutocarvalho.net gutocarvalho

    Carlos Caribé,

    Essa abordagem é bem interessante, boa dica!

    Até o momento continua sendo eficaz?

    []‘s
    Guto

  • Eduardo Scheidet

    Olá pessoal, vou deixar postado aqui a solução que utilizei…

    seguinte, primeiramente eu criei um proxy utilizando squid+dansguardian com autenticação ntlm com o servidor AD….

    ai que foi facil, nas regras de firewall cortei todo e qualquer acesso http e https da minha rede, liberando apenas o acesso ao proxy…

    no caso de alguem configurar o meu proxy nas configurações do ultrasurf para tentar uma passagem, ai que entra o segredo, não consiguirá, pois o ultrasurf nao vai utilizar autenticação windows e nem solicitará uma autenticação, logo nas configurações do proxy eu coloquei lá: caso nao houver autenticação, nem por meio ntlm nem por meio manual, bloqueia acesso…

    pronto solução dos meus problemas…

    o pessoal do ultrasurf que se explodam…

    caso alguem queira utilizar da mesma forma, experimenta essa alternativa, simples e pratica…

    grande abraço, espero ter ajudado!

    att –

    Eduardo Scheidet

  • http://gutocarvalho.net gutocarvalho

    Eduardo,

    Obrigado por compartilhar sua experiência ;)

    []‘s
    Guto

  • Aurelio

    Olá

    mto interessante, realmente o ultrasurf é uma dor de cabeça…

    porem no meu trabalho, ele eh bloqueado pelo antivirus, ou seja vc nao consegue nem rodar o ultrasurf …. eh uma maneira bem facil, pratica e funciona msm.

    por outro lado nao vejo a empresa ultraserch como uma empresa de má indole, nao se pode provar que ela usa sniffer( se vcs consiguiram provar tudo eh soh processar agora)
    alem do do mais obterem informações do que vc faz rede eh um risco que todos correm….

    imagine nao sabe qual a rota de servidores que o dado vai passar para chegar ao destino(os seja pode passar por varios servidores ao redor do mundo) ou seja
    com certeza seu dados vao passar no mín por um servidor dos EUA inermediario, considerando que boa parte dos servidore pertencem ao governo ou a empresas que nao se sabe a indole, me dói a cabeça a cabeça pensar a quantidade de dados do mundo que passam pelos servidores deles.
    vc pode impedir que isto aconteça forçando a rota.. mas quase ninguem sabe fazer isso =D

    abraços

  • Luciano

    No meu trampo é bloqueado pelo office scan. Seria mais fácil pra todo mundo se não tivesse tantos bloqueios sem critérios. Assim não seria preciso burlar. O bom senso prevalece sobre todas as situações. Os que tem o poder de bloquear tem a liberdade de acessar tudo. Que vantagem uma empresa leva em impedir que um funcionário acesse um site bancário? Seria pior se ele abandonasse o local de trabalho para ir pessoalmente ao banco. Da mesma forma, quem dá a ordem pra bloquear também acessa quase tudo. As vezes, os dirigentes querem passar a responsabilidade de controlar o que seus subordinados fazem para os adm de redes. Mas enfim, enquanto existir o bom e velho 3G, as portas do mundo ainda estarão abertas para mim.
    Abs!

  • Alisson

    Parei de usar o ultrasurf e agora nao consigo mais acessar a internet sem ele o q faço ?

  • http://gutocarvalho.net gutocarvalho

    Alisson,

    Esse post discute como bloquear o ultrasurf e não como liberar.

    Não posso lhe orientar neste sentido.

    Att.
    Guto

  • http://gutocarvalho.net gutocarvalho

    Luciano,

    Cada empresa tem sua política de acesso, e ela deve ser informada ao funcionário na contratação, assim ele deve ter condições de decidir se conseguirá trabalhar naquele local.

    Não posso discutir se é certo ou errado, isso depende de cada empresa.

    [s]
    Guto