DNSSec - Visão prática desta nova tecnologia

Por: Renie Aloisi Mansur

Objetivo

O objetivo deste artigo não é prover uma abordagem profunda sobre DNSSec e suas variantes, mas sim, uma visão prática e direta de sua configuração. Para mais detalhes, recomendo a leitura do DNSec guide em que toda a instalação foi baseada e, em breve, será atualizado!

Introdução

O DNS é uma infraestrutura essencial praticamente, para qualquer ambiente. Usuários ou aplicações, por exemplo, raramente localizam outros computadores diretamente por endereço IP. Contudo, do ponto de vista de segurança, este serviço está sujeito a vários tipos de ataques, como por exemplo, spoofing, man-in-the-middle etc. Você se lembra do recente bug descoberto por Dan Kaminsky, que afetava diversas plataformas que utilizavam o DNS?

Vulnerabilidades deste tipo podem comprometer uma organização de n maneiras. Por esta razão, o desenvolvimento de uma maneira segura de utilizar o DNS ficou crítico. DNSSec (Domain Name System Security Extensions) são extensões que adicionam segurança ao DNS e são baseadas nas RFCs 4033, 4034 e 4035. Basicamente, o DNSSec provê a identificação da origem e integridade da informação recebida/enviada. Essa garantia é feita por quatro novos tipos de registros, que são eles: DNSKEY, RRSIG, NSEC e DS.

Recentemente, tive a oportunidade de participar da implantação de DNSSec numa grande instituição financeira utilizando a versão mais atual de nosso sistema operacional, o Windows Server 2008 R2 e gostaria de compartilhar, de maneira direta, como realizar esta ação com sucesso!

Instalando o DNS

O primeiro passo é instalar a função de DNS no Windows Server. Clicamos em Add role, conforme a imagem abaixo e selecionamos DNS Server.

1_v-rema_ServerManager

A partir deste momento, devemos criar a zona DNS desejada como faríamos normalmente, sem nenhuma novidade aqui. Caso haja uma zona criada, precisamos exportá-la para um arquivo (usaremos este arquivo futuramente para assiná-lo)

Importante: Ao utilizar o DNSSec, todas as atualizações nesta zona serão feitas de maneira manual, pois o DNSSec não trabalha com Dynamic Updates. Por isso, o planejamento de qual zona será assinada é essencial.

Passos para o DNSSec

Agora, precisamos criar o par de chaves para assinar a zona que criamos anteriormente. Estas chaves são a KSK e a ZSK. Utilizamos os comandos abaixo para criá-las:

KSK:

DnsCmd /OfflineSign /GenKey /Alg rsasha1 /Flags KSK /Length <length> /Zone <zone name> /SSCert /FriendlyName KSK-<zone name>

ZSK:

DnsCmd /OfflineSign /GenKey /Alg rsasha1 /Length <length> /Zone <zone name> /SSCert /FriendlyName ZSK-<zone name>

Para melhor entendimento, segue um exemplo de nosso ambiente:

2_v-rema_KSK_ZSK

Importante: O tamanho da chave varia de 512 a 4096 (incremental de 64). O consumo de memória pode aumentar até cinco vezes ao utilizar o DNSSec. Por esse motivo, tenha um baseline do consumo atual para definir o tamanho das chaves que serão utilizadas.

Após criarmos as chaves, recomendamos fazer um backup e copiá-las para um local seguro, para tal, acesse a console de certificados via mmc, selecione os certificados do seu computador, clique com o botão direito nos certificados em questão e siga o assistente para exportá-los:

3_v-rema_backup

Com as chaves criadas e o backup efetuado, assinaremos a zona desejada. Para atingir este objetivo, utilizaremos o seguinte comando:

DnsCmd /OfflineSign /SignZone /input <input zone file> /output <output zone file> /zone <zone name> /signkey /cert /friendlyname ksk-<zone name> /signkey /cert /friendlyname zsk-<zone name>

Para facilitar a visualização, em nosso ambiente, fizemos assim:

4_v-rema_Sign

A partir deste momento, temos uma zona assinada, entretanto, ainda não está em uso. Nosso próximo passo é remover a zona não assinada e carregar a mesma zona, contudo, assinada. Uma maneira simples de fazer esta ação é utilizar a interface gráfica do DNS, como mostramos abaixo:

5_v-rema_DeleteZone

6_v-rema_Load

Pronto! A zona está carregada e com as extensões DNSSec adicionadas:

7_v-rema_Loaded

Importante: Quando o DNS faz validação de uma zona que ele não é autoritativo, precisamos configurar o Trust Anchor. Basicamente, um Trust Anchor é outro servidor DNS configurado com DNSSec em que temos confiança na troca de informações. Ele tem sua informação gravada no arquivo keyset-<zone name>, dentro de %windir%\system32\dns. Seu formato consiste em:

<zone name> <TTL> IN DNSKEY <Flags> 3 5 <Base64Data>; key tag = <key tag>

Para adicionar um Trust Anchor, utilizamos o seguinte comando:

DnsCmd /TrustAnchorAdd <zone name> DNSKEY <Flags> 3 5 <Base64Data>

Abaixo, exemplo prático desta ação seguido da visualização pela interface gráfica do DNS:

8_v-rema_TrustAnchor

9_v-rema_TrustAnchorGUI

Feito! Agora, seu DNS está muito mais seguro!

Informação

Alguns sistemas operacionais, por exemplo, da Microsoft, Windows Server 2003 e Windows Server 2008 tinham certa suportabilidade ao DNSSec conforme a RFC 2535. Há pouco tempo, esta mesma RFC ficou obsoleta sendo substituída pelas RFCs 4033, 4034 e 4035. Tanto o Windows Server 2008 R2 quanto o Windows 7, são baseados nas RFCs mais atuais para utilização do DNSSec.

E aí, vai atualizar?