veja uma rápida análise do ultrasurf, saiba como detectá-lo usando snort, saiba como bloqueá-lo usando shellscript & netfilter/iptables
debian, softwarelivre, tecnologias, ubuntu Sexta-feira, Agosto 29, 2008, 13:50Para 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





Setembro 1st, 2008 at 10:06
[...] por guto carvalho (gutoΘgutocarvalho·net) - referência [...]
Setembro 4th, 2008 at 0:54
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!
Setembro 5th, 2008 at 13:56
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.
Setembro 5th, 2008 at 18:01
Anderson,
Boa dica, valeu ;)
Setembro 5th, 2008 at 18:02
Kevin-Moc,
Provavelmente vai mudar, mas ai estudamos uma nova forma de pegar ele, fique tranquilo ;)
[]’s
Guto
Setembro 9th, 2008 at 12:32
Estou tendo problemas com o freegate, que é muito parecido com o ultrasurf, será que esta regra também funciona com ele?
Setembro 11th, 2008 at 17:34
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
Setembro 23rd, 2008 at 15:56
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
Setembro 23rd, 2008 at 16:03
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
Setembro 24th, 2008 at 17:39
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.
Setembro 28th, 2008 at 11:57
RMorais,
Boa dica, lhe dou retorno ;)
E o TOR já tentou bloquear?
[]’s
Guto
Novembro 3rd, 2008 at 14:05
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
Novembro 5th, 2008 at 8:59
é 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.
Novembro 7th, 2008 at 8:28
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
Novembro 20th, 2008 at 15:12
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[]