ago
29
2008

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

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


This is some text prior to the author information. You can change this text from the admin section of WP-Gravatar  To change this standard text, you have to enter some information about your self in the Dashboard -> Users -> Your Profile box.


Written by gutocarvalho in: debian, debian-like, softwarelivre, tecnologias | Tags:, ,

32 Comentários »

  • [...] por guto carvalho (gutoΘgutocarvalho·net) – referência [...]

  • Anderson SouzaNo Gravatar disse:

    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-MocNo Gravatar disse:

    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.

  • gutocarvalhoNo Gravatar disse:

    Anderson,

    Boa dica, valeu ;)

  • gutocarvalhoNo Gravatar disse:

    Kevin-Moc,

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

    []’s
    Guto

  • DavidNo Gravatar disse:

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

  • gutocarvalhoNo Gravatar disse:

    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

  • TadeuNo Gravatar disse:

    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

  • gutocarvalhoNo Gravatar disse:

    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

  • RMoraisNo Gravatar disse:

    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.

  • gutocarvalhoNo Gravatar disse:

    RMorais,

    Boa dica, lhe dou retorno ;)

    E o TOR já tentou bloquear?

    []’s
    Guto

  • Eduardo ScheidetNo Gravatar disse:

    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

  • caarlosNo Gravatar disse:

    é 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.

  • gutocarvalhoNo Gravatar disse:

    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

  • AugustoNo Gravatar disse:

    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[]

  • JuniorNo Gravatar disse:

    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

  • gutocarvalhoNo Gravatar disse:

    Junior,

    Preciso de algo é só falar ;)

    []’s
    Guto

  • Vinicius KruzNo Gravatar disse:

    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.

  • gutocarvalhoNo Gravatar disse:

    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

  • josuelNo Gravatar disse:

    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

  • gutocarvalhoNo Gravatar disse:

    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

  • josuelNo Gravatar disse:

    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.

  • gutocarvalhoNo Gravatar disse:

    Josuel,

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

    []’s
    Guto

  • josuelNo Gravatar disse:

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

  • gutocarvalhoNo Gravatar disse:

    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

  • MauricioNo Gravatar disse:

    é 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.

  • gutocarvalhoNo Gravatar disse:

    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 ScheidetNo Gravatar disse:

    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.

  • gutocarvalhoNo Gravatar disse:

    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 SPAINNo Gravatar disse:

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

  • BarbaraNo Gravatar disse:

    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!

  • gutocarvalhoNo Gravatar disse:

    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

RSS feed for comments on this post. TrackBack URL


Leave a Reply

Os comentários postados neste blog serão analisados, inicialmente de forma automática pelo akismet e bad-behavior, caso eles passem ilesos por estes sistemas anti-spam, ainda sim serão analisados em relação a quantidade de links, caso tenham mais de 2 links serão colocados na fila de moderação. Aqui me reservo ao direito de remover comentários ofensivos, off-topics, propagandas, trollagem sem sentido, afinal a responsabilidade do conteúdo do blog, inclusive comentários recai sob o autor. Até hoje não tive problemas com comentários, mas é sempre bom avisar como as coisas funcionam ;)

Powered by WordPress. Theme: TheBuckmaker. CopyPaste, Kaninchenkaefig