retornar retornar
Descodificação de ameaças cibernéticas  para 2023

POR:
Joaquin Lanfranconi
Cybersecurity Researcher

COMPARTILHAR

Twitter Facebook Linkedin

DNS Tunneling

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.

Como isto é conseguido

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:

  • - Um registo = dnsa.mydomain.net -> o IP público do computador em casa
  • NS record = p.mydomain.net -> dnsa.mydomain.net

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.