UltraSurf - Bloqueio definitivo


UltraSurf - Bloqueio definitivo
Uma visão geral sobre a técnica utilizada para bloqueio definitivo dessa e outras pragas!

Que tal passar horas planejando e configurando o controle de acesso a conteúdo de uma rede, ir dormir feliz da vida com o gostinho do dever cumprido e acordar no dia seguinte com o pesadelo de saber que foi tudo em vão, pois os usuários estão acessando o conteúdo bloqueado normalmente?
O objetivo aqui não é entrar na discussão se o controle de acesso a conteúdo deve ou não ser realizado na navegação WEB de uma empresa, instituição de ensino, residência ou onde quer se seja. O fato é que se por algum motivo, determinado conteúdo teve que ser bloqueado ou monitorado, este deve ser bloqueado ou monitorado de forma que os usuários da rede não consigam burlar tais controles. Sendo necessário assim prever e tratar todos os possíveis desvios que eventualmente os usuários tentem utilizar para burlar os controles estipulados.
Muitas são as técnicas que os usuários de uma rede de computadores acabam recorrendo na tentativa, em geral com sucesso, de burlar os controles impostos, entre essas técnicas podemos citar como exemplo: https, tunneling, socks, proxy anônimo, webproxy, ferramentas como HotSpot Shield, HideIpPlatinum, JAP ou o implacável UltraSurf, sendo essa atualmente a grande dor de cabeça de muitos administradores de redes, e o grande motivador desse trabalho.
O foco aqui não é detalhar o comportamento ou uso de todas as técnicas ou ferramentas acima citadas, afinal, facilmente você encontra esse conteúdo na Internet. Aqui vamos bater de frente com o grande vilão da vez, o UltraSurf, indo na sequencia vendo os meios utilizados, já com sucesso, para banir em definitivo essa e todas as técnicas e ferramentas citadas da rede.


UltraSuf
Pense se existisse um aplicativo executável, não instalável, com menos de 1.4 Mb que ao ser executado, por exemplo de um pendrive, passasse dando risada pelos bloqueios de conteúdo configurados em sua rede, sem sequer deixar rastros ou então te dar tchau! Pois é, esse aplicativo já existe e se chama UltraSurf!
O UltraSurf, desenvolvido pela empresa UltraReach, foi desenvolvido para burlar qualquer bloqueio de conteúdo configurado na rede. Ao ser executado, se conecta com seus servidores e cria uma espécie de proxy local na maquina do usuário, saindo toda a navegação realizada pelo usuário por esse proxy local, passando assim por cima de qualquer controle de conteúdo imposto.
Ao rodar o UltraSurf ele inicia sua busca incansável por uma brecha no firewall por onde possa passar e estabelecer a conexão com seus servidores externos. Inicialmente tenta estabelecer a conexão via porta 443 em um dos endereços IP de seus infinitos servidores, não conseguindo via porta 443 passa a tentar a conexão em uma série de outras portas, e incansavelmente segue essa rotina de ir trocando Porta e IP até conseguir estabelecer a conexão, confesso aqui que chega ser divertido ficar monitorando todo esse processo via TCPDUMP.
Caso não tenha êxito na conexão padrão, vamos imaginar que você já tenha realizado bloqueios que o impediram de conectar, o usuário vai ao UltraSurf e facilmente configura o IP e Porta de um servidor proxy, que pode ser o próprio proxy da sua rede ou então um externo, conseguindo dessa forma fazer a conexão com um de seus servidores por dentro do proxy informado. Aproveito e deixo aqui meus parabéns à equipe por traz dessa respeitável ferramenta!

Problemas comuns
Na busca por meios de bloqueio do UltraSurf na internet é comum cair em alternativas que sugerem bloquear uma relação interminável de endereços IP tidos como sendo os servidores utilizados para conexão, bloquear a porta 443 liberando essa somente para os IPs necessários para uso na rede, utilizar o Snort etc etc etc sendo comum ver nos comentário dos posts coisas do tipo: “comigo funcionou perfeitamente!”, “testando com a versão X funciona, mas com a Y não”, “comigo continua acessando normalmente”, “rodo o ultrasurf e o Snort não detecta que ele esta rodando”.
Isso se deve ao fato de que a cada nova versão lançada do UltraSurf novas faixas de IP e Portas são utilizadas, o padrão de conexão é redefinido, anulando assim todos os bloqueios antes configurados, tornando a tentativa de bloqueio do UltraSurf por esse paradigma totalmente impraticável, trabalhosa e ineficaz.
Como podemos observar na descrição do comportamento do UltraSurf, é comum que técnicas e ferramentas utilizadas para burlar os controles de uma rede façam uso de comportamentos e portas de uso padrão e necessário em uma rede, conseguindo com isso dificultar bastante as tentativas de bloqueio.

A solução!
A solução aqui demostrada foi estudada, configurada, colocada em produção e amplamente testada na rede acadêmica do Senac Lages/SC, onde o objetivo principal foi possibilitar aos alunos do Curso Técnico em Redes de Computadores, turma que se forma no final do primeiro semestre de 2012, a possibilidade de vivenciar problemas reais de campo, possibilitando dessa forma uma construção significativa do conhecimento, e os deixando preparados para a cruel realidade do mundo do trabalho.
Para resolver o problema entrou na jogada Mutley, servidor rodando FreeBSD que fornece com exclusividade para toda a rede acadêmica os serviços: DHCP, DNS, Gateway e Proxy.
O bloqueio do UltraSurf e das outras técnicas relacionadas é relativamente simples, bastando ter as portas corretas fechadas no firewall e o uso de um proxy não transparente. Na sequencia veremos a estrutura/características do servidor Mutley, as regras aplicadas e as implicações que cada ação reflete.

Estrutura/Características do servidor Mutley:
  • FreeBSD 9 configurado como gateway da rede disponibilizando os seguintes serviços:
    • DHCP, DNS, PROXY, FIREWALL
  • PF utilizado como Firewall, configurado dentro do conceito de politicas Default Deny, onde somente são abertas as portas que realmente são utilizadas na rede.
    • Portas ssh, 80, 53 e 3128 abertas somente para acesso ao próprio servidor, porta 443 fechada para qualquer uso.
      • Com isso evitamos que seja possível utilizar técnicas de tunneling, socks, proxy anônimo além de já impedir que o UltraSurf e similares consigam conectar.
      • Exemplo da regra no PF:
        • #permite as maquinas da redeLan acessar as portas listadas somente via ipLan
        • pass in quick on $intLan proto { tcp, udp } from $redeLan to $ipLan port { 53, 80, 3128, 22 } keep state
  • Squid configurado como Proxy NÃO transparente, onde toda navegação, sem exceção, de http, https e ftp somente será permitida via proxy, estando as respectivas portas devidamente fechadas no firewall.
    • O squid tem sua configuração padrão e dentro da sua necessidade, a única coisa adicionada se deu ao fato de que ferramentas como UltraSurf permitem que seja configurado o endereço de proxy da rede, conseguindo dessa forma funcionar por dentro do proxy mesmo. Para impedir que isso aconteça foi criada uma ACL para não permitir a navegação direta por IP.
    • Exemplo da ACL:
      • #acl para não permitir nagevacao por IP
      • acl naoIP dstdom_regex -i ([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}($|:.+|/))
      • http_access deny CONNECT naoIP

Revisando a solução:
  • Firewall configurado dentro dos padrões de Default Deny;
  • Liberar somente as portas necessárias para funcionamento da rede;
  • Portas ssh, 80, 53 e 3128 liberadas exclusivamente para acesso ao IP da Lan do servidor;
  • Proxy Não Transparente, atuando como saída exclusiva de HTTP, HTTPS e FTP;
  • Bloqueio no proxy de navegação por IP.
Com estes passos simples conseguimos, com mínimo esforço, eliminar por completo o uso do UltraSurf e das ferramentas ou técnicas mencionadas para burlar os controles de conteúdo da rede.

Toda ação gera uma reação!!!
Claro que toda ação gera um reação, e com o Mutley rodando a todo vapor e os bloqueios funcionando perfeitamente, acabaram surgindo alguns pontos, já devidamente resolvidos, que mereceram um pouco mais de estudo. Segue abaixo os problemas detectados e as soluções, já implementadas, para resolvê-los.

Problemas detectados com a aplicação do Mutley na rede:
  • Como está sendo utilizado Proxy NÃO Transparente, há a necessidade de configurar o endereço do proxy nos navegadores para poder navegar, o que pode ser considerado um problema para alguns usuários.
    • Para resolver isso foi implementado no Mutley a solução de configuração automática de proxy, WPAD. O WPAD permite que os navegadores, rodando em maquinas Windows, consigam obter de forma 100% automática a configuração de proxy da rede via DHCP ou DNS.
    • Como a base de funcionamento da rede é Windows, com a implantação do WPAD já ficou resolvido o problema da configuração de proxy nos navegadores.
    • Nos clientes não Windows, como por exemplo Linux, se faz necessária a configuração manual do proxy no navegador.
  • A configuração de proxy foi automatizada via WPAD para os navegadores, mas temos uma serie de aplicações que usam as portas 80, https ou ftp e que não permitem configuração de proxy automática ou manual em suas interfaces. O Windows Update é um desses casos.
    • Para resolver esse problema foi utilizado aplicativos do próprio Windows (proxycfg, netsh winhttp set proxy) para realizar a configuração do proxy a nível de sistema operacional.
  • Criada uma ACL para liberar a navegação por IP para casos específicos, por exemplo a realização de ftp.
    • Exemplo:
      • #acl para permitir navegacao por ip para ftp
      • acl ftpporip url_regex ftp://[0-9]*\.[0-9]*\.[0-9]*\.[0-9]*
      • http_access allow ftpporip

Considerações finais

É isso pessoal, espero que as dicas aqui passadas possam ser úteis.

Um forte abraço
Luciano Coelho

Comentários

  1. Boa tarde Luciano,

    O que seria um "PF"?
    Onde posso encontrar documentação fiel sobre firewall de padrão Default Deny?
    Você teve problemas com acesso a site de bancos? Teria um case de como solucionou esse problema para um site específico com HTTPS, por exemplo?

    Obrigado por compartilhar essas informações.

    ResponderExcluir
    Respostas
    1. Bom dia Adan,
      PF (Packet Filter) é o firewall padrão do OpenBSD, sendo este bastante utilizado também no FreeBSD, que foi o caso. Uma ótima documentação sobre PF você encontra no site oficial do OpenBSD (http://www.openbsd.org/faq/pf/pt/index.html), onde você já consegue também entender melhor a questão do Default Deny ou Default Allow... que basicamente é a forma como você pensou a execução das regras do seu firewall, ou seja, fecha tudo e só libera o que você realmente usa na rede.
      Com relação a problemas com acesso de bancos e similares, a técnica utilizada não interfere em seu funcionamento, pois o acesso HTTPS continua funcionando normalmente, o que muda é que agora esse acesso passa a ser realizado direto e sim por dentro do Proxy.

      Excluir
    2. Muito obrigado pelas fontes!
      Ao que me pareceu o PF possui uma estrutura muito parecida com o Squid. Você acha que é possível uma adaptação?

      Excluir
  2. Fala Adan, na realidade não! O PF é um firewall e o squid um proxy... Um não substitui o outro.

    ResponderExcluir
  3. Me expressei mal. Na verdade eu queria uma adaptação do PF para o Iptables... Escrevi Squid. Acho que estava possuído por algum espírito maligno... ou então é muito café mesmo. Estudar trás esses efeitos colaterais. :]

    ResponderExcluir
  4. rs, geralmente a falta de café faz isso comigo também... rs
    Não esta sendo nenhum recurso especial de firewall, somente bloqueio/liberação de portas, dessa forma não vejo dificuldade ou problema para escrever o script do firewall no IPTABLES não. Só lembra de trocar a politica padrão do teu firewall para DROP, liberando assim somente as portas que realmente você faz uso na rede.

    ResponderExcluir

Postar um comentário

Postagens mais visitadas deste blog

Sub-rede / VLSM – IPv4

MIB Browser - SNMP