DNSSEC: O que é, e como funciona?

DNSSEC é uma implementação segura do sistema DNS onipresente que garante integridade e confiança ao assinar todos os registros DNS com chaves de segurança para criar assinaturas criptográficas. Essas assinaturas são armazenadas junto com os registros DNS tradicionais (MX, A, AAAA, CNAME, etc.), e ao verificar a assinatura, garante que os registros retornados pelo servidor DNS venham do servidor de nomes autorizado para a zona determinada. 

Os sistemas DNS tradicionais são vulneráveis tanto a ataques man-in-the-middle, onde os registros DNS são alterados no caminho para o usuário, quanto a ataques de envenenamento de DNS, onde o resolvedor DNS local (provavelmente seu computador) recebe uma enxurrada de resoluções DNS ruins. que dizem ao resolvedor local para resolver um determinado domínio para o site do invasor, em vez do legítimo. 

Como um DNS funciona? 

Para entender as Extensões de Segurança do Sistema de Nomes de Domínio (DNSSEC), é útil ter um conhecimento básico do Sistema de Nomes de Domínio (DNS).

O bom funcionamento da Internet depende criticamente do DNS. Cada página da web visitada, cada e-mail enviado, cada imagem recuperada de uma mídia social: todas essas interações usam o DNS para traduzir nomes de domínio amigáveis (como gocache.com.br) para endereços IP (como 198.0.33.7 e 2001: 500:88:300::7) necessários a servidores, roteadores e outros dispositivos de rede para rotear o tráfego pela Internet até o destino adequado.

Usar a Internet em qualquer dispositivo começa com o DNS. Por exemplo, considere quando um usuário digita o nome de um site em um navegador de seu telefone. O navegador usa o resolvedor stub, que faz parte do sistema operacional do dispositivo, para iniciar o processo de tradução do nome de domínio do site em um endereço de protocolo da Internet (IP). Um resolvedor stub é um cliente DNS muito simples que retransmite a solicitação de dados DNS de um aplicativo para um cliente DNS mais complicado chamado resolvedor recursivo. Muitos operadores de rede executam resolvedores recursivos para lidar com solicitações ou consultas de DNS enviadas por dispositivos em sua rede. (Operadores e organizações menores às vezes usam resolvedores recursivos em outras redes, incluindo resolvedores recursivos operados como um serviço para o público, como Google Public DNS, OpenDNS e Quad9.)

O resolvedor recursivo rastreia ou resolve a resposta à consulta DNS enviada pelo resolvedor stub. Este processo de resolução exige que o resolvedor recursivo envie suas próprias consultas DNS, geralmente para vários servidores de nomes autoritativos diferentes. Os dados DNS de cada nome de domínio são armazenados em um servidor de nomes oficial em algum lugar da Internet. Os dados DNS de um domínio são chamados de zona. Algumas organizações operam seus próprios servidores de nomes para publicar suas zonas, mas geralmente as organizações terceirizam essa função para terceiros. Existem diferentes tipos de organizações que hospedam zonas DNS em nome de terceiros, incluindo registradores, registros, empresas de hospedagem na web, provedores de servidores de rede, apenas para citar alguns.

Mas o DNS não por si só não é seguro?

O DNS foi projetado na década de 1980, quando a Internet era muito menor e a segurança não era uma consideração primordial em seu design. Como resultado, quando um resolvedor recursivo envia uma consulta a um servidor de nomes autoritativo, o resolvedor não tem como verificar a autenticidade da resposta. O resolvedor só pode verificar se uma resposta parece vir do mesmo endereço IP para onde o resolvedor enviou a consulta original. Mas confiar no endereço IP de origem de uma resposta não é um mecanismo de autenticação forte, uma vez que o endereço IP de origem de um pacote de resposta DNS pode ser facilmente falsificado ou falsificado. 

Como o DNS foi originalmente projetado, um resolvedor não consegue detectar facilmente uma resposta forjada a uma de suas consultas. Um invasor pode facilmente se disfarçar como o servidor autoritativo que um resolvedor consultou originalmente, falsificando uma resposta que parece vir desse servidor autoritativo. Em outras palavras, um invasor pode redirecionar um usuário para um site potencialmente malicioso sem que o usuário perceba.

Os resolvedores recursivos armazenam em cache os dados DNS que recebem de servidores de nomes autorizados para acelerar o processo de resolução. Se um resolvedor “stub” solicitar dados DNS que o resolvedor recursivo possui em seu cache, o resolvedor recursivo poderá responder imediatamente, sem o atraso introduzido pela primeira consulta a um ou mais servidores autorizados. No entanto, essa dependência do cache tem uma desvantagem: se um invasor enviar uma resposta DNS forjada que seja aceita por um resolvedor recursivo, o invasor envenenará o cache do resolvedor recursivo. O resolvedor irá então retornar os dados DNS fraudulentos para outros dispositivos que os consultam.

Como exemplo da ameaça representada por um ataque de envenenamento de cache, considere o que acontece quando um usuário visita o site do seu banco. O dispositivo do usuário consulta seu servidor de nomes recursivo configurado para obter o endereço IP do site do banco. Mas um invasor poderia ter envenenado o resolvedor com um endereço IP que apontasse não para o site legítimo, mas para um site criado pelo invasor. Este site fraudulento se faz passar pelo site do banco e tem a mesma aparência. O usuário desconhecido digitaria seu nome e senha, como de costume. Infelizmente, o usuário forneceu inadvertidamente suas credenciais bancárias ao invasor, que poderia então fazer login como esse usuário no site legítimo do banco para transferir fundos ou realizar outras ações não autorizadas.

Então usar um sistema de DNSSEC é fundamental? 

Os engenheiros da Internet Engineering Task Force (IETF), a organização responsável pelos padrões do protocolo DNS, perceberam há muito tempo que a falta de uma autenticação mais forte no DNS era um problema. O trabalho em uma solução começou na década de 1990 e o resultado foram as Extensões de Segurança DNSSEC.

DNSSEC fortalece a autenticação no DNS usando assinaturas digitais baseadas em criptografia de chave pública. Com o DNSSEC, não são as consultas e respostas DNS em si que são assinadas criptograficamente, mas sim os próprios dados DNS são assinados pelo proprietário dos dados.

Cada zona DNS possui um par de chaves pública/privada. O proprietário da zona usa a chave privada da zona para assinar dados DNS nesta zona, assim gerando assinaturas digitais sobre esses dados. Como o nome “chave privada” indica, esse material de chave é mantido em segredo pelo proprietário da zona. 

A chave pública da zona, entretanto, é publicada na própria zona para que qualquer pessoa possa recuperá-la. Qualquer resolvedor recursivo que procure dados na zona também recupera a chave pública da zona, que usa para validar a autenticidade dos dados DNS. O resolvedor confirma que a assinatura digital dos dados DNS recuperados é válida. Nesse caso, os dados DNS são legítimos e são devolvidos ao usuário. Se a assinatura não for validada, o resolvedor assume um ataque, descarta os dados e retorna um erro ao usuário.

DNSSEC adiciona dois recursos importantes ao protocolo DNS:

  • A autenticação da origem dos dados permite que um resolvedor verifique criptograficamente se os dados recebidos realmente vieram da zona onde acredita que os dados foram originados.
  • A proteção da integridade dos dados permite que o resolvedor saiba que os dados não foram modificados em trânsito desde que foram originalmente assinados pelo proprietário da zona com a chave privada da zona.

E quais são os principais ataques que o DNSSEC mitiga?

Entre os principais ataques mitigados pelo DNSSEC, podemos destacar: 

DNS Cache Poisoning

O envenenamento do cache DNS (dns poisoning) ocorre quando um agente de ameaça alimenta informações falsas no cache DNS, fazendo com que o navegador do usuário retorne uma resposta incorreta.

Essa resposta geralmente redireciona os usuários para um site diferente daquele que pretendiam visualizar. Quando isso acontecer, um worm, spyware, programa de sequestro de navegador da Web ou outro tipo de malware poderá ser baixado para o computador do usuário a partir de um local não autorizado.

Os resolvedores de DNS não podem verificar os dados armazenados em seus caches, o que significa que as informações incorretas permanecem no cache até que o TTL expire ou até que o problema seja resolvido manualmente. Embora o envenenamento de cache não desconecte o site real de seu endereço IP real, se as informações incorretas permanecerem no cache DNS, os usuários continuarão a ser direcionados ao site não autorizado, o que pode levar a maiores comprometimentos.

DNS Hijacking

O sequestro de servidor de nomes de domínio (DNS) Hijacking, também chamado de redirecionamento de DNS, é um tipo de ataque de DNS no qual as consultas de DNS são resolvidas incorretamente para redirecionar inesperadamente os usuários para sites maliciosos. Para realizar o ataque, os perpetradores instalam malware nos computadores dos usuários, assumem o controle dos roteadores ou interceptam ou hackeiam a comunicação DNS.

O sequestro de DNS pode ser usado para pharming (nesse contexto, os invasores normalmente exibem anúncios indesejados para gerar receita) ou para phishing (exibindo versões falsas de sites acessados pelos usuários e roubando dados ou credenciais).

Muitos provedores de serviços de Internet (ISPs) também usam um tipo de sequestro de DNS para assumir as solicitações de DNS de um usuário, coletar estatísticas e retornar anúncios quando os usuários acessam um domínio desconhecido. Alguns governos usam o sequestro de DNS para censura, redirecionando os usuários para sites autorizados pelo governo.

E como posso usar o recurso de DNSSEC em minhas aplicações web? 

Como vimos neste artigo, quando se trata de implementar o DNSSEC, é fácil subestimar sua complexidade. Ainda mais se pensarmos em uma estrutura DNS centralizada e automatizada. 

No mínimo, a implementação manual requer manutenção de registros e substituição de chaves (atualização periódica das chaves para reduzir as chances de comprometimento).

Na GoCache é possível utilizar os recursos nativos de DNSSEC em nossa plataforma, permitindo que suas aplicações tenham toda a segurança de DDSSEC, sem esforços de implementação e manutenção. 

Para utilizar o DNSSEC em seu domínio na GoCache é necessário fazer a configuração tanto no Painel da GoCache, quanto no registro, onde o seu domínio foi comprado. Trata-se de uma configuração extremamente simples e que é feita em poucas etapas. 

Caso queira saber um pouco mais sobre implementação de DNSSEC na GoCache, leia nossa documentação sobre o tema.