Nos últimos tempos temos assistido a uma vaga de ataques informáticos. Este tipo de ataques podem ser estruturados ou não estruturados. Os ataques não estruturados são normalmente levados a cabo pela actividade, por exemplo, de hackers amadores ou script kiddies (pessoas com poucos conhecimentos de , mas que utilizam ferramentas de hacking prontas a serem usadas e disponíveis na Internet). Por outro lado, existem os ataques estruturados em que os hackers têm bastantes conhecimentos e todo o ataque é bem planeado e estruturado.
Hoje vamos ensinar como cifrar a comunicação entre um Linux e o OpenDNS (serviço de DNS), de modo a evitar ataques ao nível do serviço de DNS.
Para que serve um servidor/serviço de DNS?
Quando abrimos um browser costumamos indicar o nome do site que pretendemos consultar. Em traços gerais, o serviço DNS é responsável por traduzir nomes em IP’s e vice-versa, isto é, quando introduzimos por exemplo o url: www.pplware.com, há uma consulta ao servidor de DNS para saber qual o IP correspondente (para saber mais como tudo funciona, leia aqui o nosso artigo sobre DNS).
E se comunicação entre o nosso PC e o servidor de DNS foi interceptada e a nossa comunicação for encaminhada para outro servidor (muita das vezes com uma página idêntica e que normalmente como objectivo obter as nossas credenciais)?
Para quem usa o serviço OpenDNS, hoje vamos ensinar a cifrar a comunicação entre o nosso PC e o serviço de resolução de nomes.
O que é o OpenDNS?
Uma forma muito rápida de “controlar” o acesso a determinados sites/domínios é usando o serviço OpenDNS. Trata-se de uma rede de servidores de DNS muito rápidos e fiáveis, de utilização gratuita e também mais seguros (têm inclusive um sistema de protecção contra phishing). Depois do utilizador se registar no site, passa a ter acesso a muitas funcionalidades, como por exemplo, bloqueio de sites e domínios, definição de atalhos para endereços, et
Como cifrar a comunicação entre o Linux e o OpenDNS?
Quem pretender cifrar as comunicações entre o seu PC e o OpenDNS pode usar o DNSCrypt. Esta aplicação permite cifrar as consultas ao DNS, do mesmo modo que o SSL (https) cifra o tráfego HTTP. Até há relativamente pouco tempo o DNSCrypt apenas estava disponível para MAC mas segundo informações disponibilizadas recentemente no site do OpenDNS, o DNSCrypt passa a estar também disponível para Linux via GitHub.
Como usar o DNSCrypt no Ubuntu ?
Para ter em funcionamento o DNSCrypt no Ubuntu basta seguir os seguintes passos:
Passo 1 – Obter DNSCrypt
wget https://github.com/downloads/opendns/dnscrypt-proxy/dnscrypt-proxy_0.9_i386.deb
Passo 2 – Instalar o DNSCrypt
sudo dpkg -i dnscrypt-proxy_0.9_i386.deb
Passo 3 – Executar o DNSCrypt
sudo /usr/sbin/dnscrypt-proxy –daemonize
Nota Importante: Para que tudo funcione correctamente, devem definir como DNS do sistema o endereço 127.0.0.1 (informação a ser definida no ficheiro /etc/resolv.conf – veja aqui como fazer).
Depois de realizados os passos anteriores, a comunicação entre o nosso Linux e o serviço de DNS passa a ser cifrada.
O DNSCrypt em funcionamento…
Para demonstrar que tudo funciona, vamos dar um pequeno exemplo. Um dos comandos que normalmente uso para testar o servidor de DNS é o nslookup. Para efectuar a escuta da comunicação vamos usar o popular sniffer tcpdump e escutar todos os pedidos para o porto 53 (porto usado por omissão pelo protocolo DNS).
Vamos então começar por uma comunicação não cifrada e vamos solicitar que o servidor nos devolva o endereço do www.pplware.com
Comunicação não cifrada
Fazer uma consulta DNS e solicitar o endereço IP do www.pplware.com
Escutar a comunicação no porto 53 usando o tcpdump. Como podem ver, toda a informação passa em “claro”.
Comunicação cifrada
Para cifrar a comunicação não se esqueça de executar o comando (sudo /usr/sbin/dnscrypt-proxy –daemonize)
Volta a fazer a consulta DNS e como podemos ver pela imagem seguinte, a informação da comunicação é cifrada. Reparem que não conseguimos visualizar, por exemplo, que fiz um pedido de DNS para obter o IP para o www.pplware.com tal como conseguimos numa comunicação não cifrada.
Pessoalmente gostei bastante do DNSCrypt pela sua simplicidade mas também porque de certa forma ajudamos a impor uma maior nível de segurança. Ataques do tipo man-in-the-middle (para obter informações do DNS) ou DNS poisoning (envenenamento do DNS), podem assim ser evitados. Experimentem e alguma duvida não hesitem em deixar as vossas questões em comentário.