Ideias, informações e conhecimentos compartilhados pela equipe
de Investigação, Desenvolvimento e Inovação da BASE4 Security.
Certamente esteve num aeroporto, café, avião ou hotel onde havia uma rede WiFi que não exigia uma palavra-passe para se ligar, mas no momento da navegação pediu uma assinatura ou algum tipo de pagamento, desviando a sua navegação para o que é conhecido como um portal cativo. Isto é muito comum, pois cada vez mais coisas requerem uma ligação à Internet. Muitas vezes os provedores bloquearão todo o tráfego de entrada e de saída se não estiver autorizado ou autenticado, mas normalmente permitem a resolução DNS (Domain Name System), que converte um endereço de chamada humana para o endereço IP a ele associado e vice-versa. O fornecedor decide então se deve ou não bloquear o tráfego.
Neste cenário, seria interessante poder tunelar o tráfego de navegação através do protocolo DNS, e assim ter acesso à Internet. Esta técnica chama-se Túnel DNS. Como é de esperar, a navegação desta forma é lenta como se fosse um modem com uma ligação Dial Up, mas ainda é curiosa e controversa, dado que é um protocolo que não foi concebido para a transferência de dados para além da resolução do nome.
Primeiro temos de estar dentro de uma rede de portais cativos. Para verificar se esta técnica é possível, podemos realizar um Pedido ECHO (por exemplo, um ping para google.com ou qualquer domínio. Se recebermos o endereço IP associado a esse domínio, podemos continuar com este ataque. Caso contrário, é muito provável que o fornecedor também tenha bloqueado este tipo de tráfego.
Depois de verificarmos isto, podemos tentar explorar em 6 passos:
1. Em primeiro lugar, devemos ter um domínio ao qual podemos modificar o registo "A", que atribui o nome de domínio ao IP do nosso servidor e o registo "NS", também conhecido como registo Name Server, que atribui o nome de domínio a uma lista de servidores DNS, atribuída ao registo "A", que é o nosso domínio. Em resumo, os registos devem ser configurados da seguinte forma:
Vale a pena notar que se utilizarmos um subdomínio curto como o "p", permite-nos embalar mais dados por pedido.
2. Depois devemos configurar o dispositivo que actuará como servidor, que pode ser um computador em casa com acesso à Internet ou na nuvem.
Para tal, vamos utilizar a ferramenta "iodo", que funciona muito eficientemente com este tipo de técnica, e deve estar a funcionar no nosso servidor no momento do teste, com o seguinte comando:
user@server$ sudo iodined -c -f 10.0.0.1 -P passwordsecure123 p.mydomain.net
O "-f" determina a rede interna a ser utilizada. Se a rede 10.0.0.0.0 já estiver em uso, poderá utilizar qualquer outra rede interna (Exemplo: 172.16.0.0).
"-P" é a palavra-passe que será solicitada para se ligar ao serviço.
"p.mydomain.net" é o domínio que configurou anteriormente
3. Quando tivermos iodo a correr no servidor, podemos utilizar esta ferramenta "Check-it" do mesmo programador para verificar se tudo está configurado correctamente.
4. O nosso computador, dispositivo móvel (ou mesmo um Raspberry Pi) actuará como cliente. Devemos estar na rede com o portal cativo e dentro de um terminal ligar-nos-emos ao nosso servidor com iodo, com o comando:
user@notebook$ iodine -r -f -L0 -P passwordsecure123 p.mydomain.net
Desta forma, o iodo tentará ligar-se ao nosso servidor e encontrará a forma mais eficiente de o embalar.
5. estaremos agora na mesma sub-rede que o nosso servidor, pelo que devemos simplesmente ligar-nos a ele via SSH para realizar um túnel SOCKS e enviar todo o tráfego do nosso navegador através dele.
Um exemplo seria o seguinte:
user@notebook$ ssh -D 8080 root@10.0.0.1 -N
Logicamente, a sub-rede varia de acordo com a utilizada no comando do passo 2.
6. é isso mesmo! Agora estamos a enviar todo o tráfego através do DNS Tunneling, só precisamos de configurar o nosso navegador para utilizar o nosso servidor remoto como proxy.
Se quisermos verificar se tudo está a funcionar como esperado, podemos usar o seguinte comando (para distribuições baseadas em Linux):
user@notebook$ curl api.ipify.org --socks4 127.0.0.0.1:8080
Com isto devemos receber uma resposta (o que significa que já temos uma ligação à Internet) e ver o IP público do nosso servidor remoto.
O foco deste post é contornar o portal cativo a fim de obter uma ligação à Internet, mas os casos de utilização desta técnica são muitos, desde contornar firewalls, a dispositivos de prevenção de fugas de dados, a canais de comunicação não monitorizados na rede de uma organização, e muito mais.