Skip to content
Gabriel Araújo edited this page Nov 26, 2015 · 18 revisions

Fundamentos de Redes - SECURE DNS SERVER

Criação de um servidor de DNS seguro (DNSSEC)

O que é DNS?

O DNS é o sistema de endereçamento da Internet. Quase tudo que interage com a Internet (por exemplo, computadores, dispositivos portáteis, laptops, caixas eletrônicos e terminais POS) se baseia em serviços de DNS para trocar informações. O DNS usa os servidores especializados para traduzir (ou resolver) os nomes como www.verisign.com em endereços numéricos que permitem que os dados e as informações cheguem ao seu destino. Todos os aplicativos da Internet, desde sites, e-mail, redes sociais e serviços bancários on-line até o Protocolo VoIP, o compartilhamento de arquivos e os vídeos sob demanda, dependem da exatidão e integridade dessa tradução. Sem o DNS, a Internet não pode funcionar. O DNS é essencial para a infraestrutura de uma nação, as operações de negócios on-line e as transações financeiras, bem como para todas as comunicações baseadas na Internet.

O que é DNSSEC?

O DNSSEC é uma solução que expande a segurança do serviço DNS. O DNSSEC permite validar a origem dos dados, assegurar que a informação recebida de um servidor DNS é autentica, confirmando que a informação não foi alterada durante a passagem pelos vários “cantos” da Internet e confirmar a inexistência de um domínio.

O sistema DNSSEC introduz apenas alguns novos tipos de Registos nas zonas DNS, nomeadamente DNSKEY, RRSIG e DS, sendo totalmente compatível com qualquer servidor ou cliente que não tenha ainda implementado o DNSSEC.As extensões de segurança DNSSEC utilizam criptografia assimétrica, permitindo que a verificação e troca de informação DNS entre o servidor e o cliente seja privada e entregue sem alterações, recorrendo a uma assinatura digital e um conjunto de chaves privadas e publicas.

O DNSSEC é baseado numa cadeia de confiança, onde inicialmente é validada a raiz “.”, assinada digitalmente pela ICANN e IANA. Posteriormente a raiz assina a zona “.pt” utilizando a sua chave privada e anexa-lhe a chave publica, permitindo a partir desse momento que quando um servidor de nomes local fizer uma consulta relacionada com um domínio “.pt”, este possa validar a autenticidade da raiz “.pt” recorrendo à chave publica. O processo é repetido, até chegar à zona final correspondente ao domínio que está a ser assinado e validado. As extensões de segurança do DNS são totalmente compatíveis com IPv6, uma vez que apenas é validada a integridade dos registos.

Como rodar o sistema?

O ecosistema desenvolvido nesse projeto, tem como base a utilização de máquinas vagrants. Para a configuração do ambiente, é necessário a instalação do vagrant - Disponível aqui - e do virtual box disponível aqui.

Com as dependências instaladas, execute o arquivo quick_start encontrado na pasta vagrant. Esse executável irá inicializar um servidor DNS seguro configurando a zona redesfga.com, uma servidor apache para onde a zona configurada aponta e um cliente que realizará uma requisição de resolução de nome ao servidor DNS. O resultado da requisição é encontrado no arquivo dnssec.log na pasta vagrant

Como configurar um DS?

Nesse exemplo foi utilizado o domínio “dnssec-test-gkg.com” registrado com o GKG.net e foram os hospedados os registros no Dyn, Inc.

Para utilizar um registro DNSSEC DS com a finalidade de vincular um Registrador à um Provedor de Hospedagem DNS é necessário seguir os seguintes passos:

1- Configure os registros e a zona DNS no provedor de hospedagem DNS. Cada provedor de hospedagem possui o próprio sistema com interface para adicionar registros. Neste exemplo, foi criada uma nova zona em Dyn. Inc. e adicionado os registros A e AAAA.

2- Ainda no provedor de hospedagem DNS, Assine o domínio com DNSSEC. Para tal os passos disponíveis em "http://www.internetsociety.org/deploy360/resources/how-to-sign-your-domain-with-dnssec-using-dyn-inc/". O resultado final é um domínio assinado com um registro DS.

3- No registrador, mude os registros de name servers para o domínio para apontar para o name server do provedor de hospedagem DNS. Novamente, cada registrador tem uma interface web ligeiramente diferente. A seguir é apresentada uma imagem de como o GKG.net permite que se altere os name servers.

Pode levar algum tempo para propagar as alterações pela estrutura do DNS. Durante a propagação pode ser que alguns clientes ainda recebam os registros de DNS dos name servers antigos.

Neste ponto já existe um domínio assinado com DNSSEC no provedor de hospedagem DNS. Além disso também foram alterados os registros no registrador para apontar para o name server do provedor de hospedagem DNS.

Ao verificar com a ferramenta de análise de DNSSEC "http://dnssec-debugger.verisignlabs.com/dnssec-test-gkg.com" é possível encontrar um problema:

O problema é que não foi configurado ainda um Delegation Signer (DS) no registrador que vincule nossa zona assinada DNSSEC na cadeia global de confiança. É necessário criar esse vínculo entre o DNSSEC-assindo top-level domain (TLD).

4- Para finalizar a viculação, no registrador adicione um registro DS copiando a informação fornecida pelo provedor de hospedagem DNS. O GKG.net fornece uma interface fácil para isto, que ao pressionar "add key" deve adicionar as informações de registro de DS: "http://www.internetsociety.org/deploy360/resources/how-to-sign-your-domain-with-dnssec-using-gkg-net/".

Pela questão da latência ao propagar as alterações pela rede, é possível que apareça um aviso como da figura a seguir, avisando que o GKG.net não pode verificar se o registro DS está correto.

Após verificar novamente no provedor de hospedagem DNS, a checkbox deve ser marcada e pressionado o botão para adicionar o registro, então o resultado é um registro DS.

Então o GKG.net publica automaticamente o registro de DS e não resta mais nada a fazer.

5- Novamente é possível verificar que o DNSSEC funcionar através da ferramenta de análise de DNSSEC "http://dnssec-debugger.verisignlabs.com/", mas lembre-se que pode levar alguns minutos para atualizar. Na imagem a seguir é possível ver o resultado do teste do tutorial.

Note que ao invés de utilizar um provedor de hospedagem DNS é possível operar o seu próprio name server e fazer toda a assinatura DNSSEC no seu próprio sistema. Porém, independente de utilizer um serviço de provedor ou o seu próprio sistema é necessário verificar se o registrador de domínio e o provedor de hospedagem DNS suporta DNSSEC. É possível verificar uma lista aqui: http://www.internetsociety.org/deploy360/resources/dnssec-registrars/ ou obter mais informações em: http://www.internetsociety.org/deploy360/resources/dnssec-registrars/

Este tutorial foi utilizado e traduzido de: http://www.internetsociety.org/deploy360/resources/step-by-step-how-to-use-a-dnssec-ds-record-to-link-a-registar-to-a-dns-hosting-provider/

Como configurar um cliente para DNSSEC?

O DNSSEC estabelece um sistema de resolução de domínio de forma segura, adicionando assinaturas criptográficas aos registros DNS existentes. Estas assinaturas digitais são armazenados em servidores DNS ao lado de tipos de registro comum, como A, AAAA, MX, CNAME, etc. Ao verificar uma assinatura associada, verifica-se se um registro de DNS solicitado provem de seu servidor de nomes com autoridade e não foi alterada pelo caminho, evitando um registro falso injetado em um ataque man-in-the-middle.

Para facilitar a validação da assinatura, o DNSSEC adiciona alguns novos tipos de registro DNS:

  • RRSIG - Contém a assinatura criptográfica
  • DNSKEY - Contém a chave de assinatura pública
  • DS - Contém o hash de um registro DNSKEY
  • NSEC e NSEC3 - Para explícita negação de existência de um registro DNS

RRsets

O primeiro passo no sentido de garantir uma zona com DNSSEC é agrupar todos os registros com o mesmo tipo em um conjunto de registro de recurso (RRset). Por exemplo, se você tiver três registros AAAA na sua zona, todos eles seriam agrupados em um único AAAA RRset.

RRsets

É este RRset completo que será assinado digitalmente. Portanto deve-se solicitar e validar todos os registros AAAA de uma zona em vez de validar apenas um deles.

Assinatura de zonas

Cada zona no DNSSEC tem um par de assinatura de chave(ZSK): a parte privada da chave assina digitalmente cada RRset na zona, enquanto que a porção pública verifica a assinatura. Para habilitar o DNSSEC, um operador de zona cria assinaturas digitais para cada RRset usando o ZSK privado e os armazena em seu servidor DNS como registros RRSIG. Isso é como dizer: "Estes são os meus registros de DNS, eles vêm do meu servidor, e eles devem ser assim."

ZSK

Quando um cliente DNSSEC solicita um tipo de registro em particular (por exemplo, AAAA), o servidor DNS também retorna o RRSIG correspondente. O cliente pode em seguida puxar o registro DNSKEY contendo a ZSK pública a partir do servidor de nomes. Juntos, o RRset, RRSIG, e ZSK público pode validar a resposta.

DNSSEC

Precisa-se de uma forma de validar a ZSK pública, uma vez que não se sabe se houve alteração. Para isso, verifica-se a "validade da validade".

Key-Signing Keys

Além de uma chave de assinatura de zona, servidores DNSSEC também possuem uma chave de assinatura (KSK). O KSK valida o registro DNSKEY exatamente da mesma maneira como nosso ZSK garantiu o resto de nossas RRsets na seção anterior: Ele assina a ZSK público (que é armazenado em um registro DNSKEY), criando uma RRSIG para o DNSKEY.

KSK

Assim como o ZSK público, o servidor de nomes publica o KSK pública em outro registro DNSKEY, que nos dá a RRset DNSKEY mostrado acima. Tanto o KSK e ZSK pública público são assinados pelo KSK privada. Clientes pode então utilizar a KSK pública para validar a ZSK pública.

Resumidamente, a resolução de nome de forma segura é realizada pelo cliente da seguinte forma:

  1. Solicite o RRset desejado, que também retorna o registro RRSIG correspondente.
  2. Solicite a ZSK e KSK pública, que também retornam o RRSIG para o DNSKEY RRset.
  3. Verifique se o RRSIG do RRset solicitado com a ZSK público.
  4. Verifique se o RRSIG do DNSKEY RRset com o KSK público.

Final

Resultados

Considerações