Autores: Cristine Hoepers, Klaus Steding-Jessen, Nelson Murilo,
Rafael R. Obelheiro
Versão: 1.8 -- 20/07/2016
Dois tipos bastante utilizados de servidores DNS (Domain Name System) são o autoritativo e o recursivo, que embora possam ser executados em uma mesma máquina, possuem características distintas:
Um problema bastante comum de configuração é permitir que qualquer máquina na Internet faça consultas ao servidor DNS recursivo de uma determinada rede. Servidores com esse problema são comumente chamados de servidores DNS recursivos abertos, pois apenas o servidor autoritativo é que deve responder a consultas vindas de máquinas externas.
Qualquer organização que possua um servidor DNS recursivo aberto corre o risco de ter esse servidor envolvido nos seguintes ataques:
Importante: caso a rede onde está instalado o servidor DNS recursivo, mesmo que configurado corretamente, não possua regras de ingress filtering, um atacante pode forjar o IP dos clientes desse servidor e realizar consultas DNS em grande quantidade, causando uma negação de serviço interna à rede.
Para solucionar o problema dos servidores DNS recursivos abertos é necessário separar os servidores autoritativo e recursivo e atribuir políticas de acesso diferentes a cada um. Isto pode ser feito de duas maneiras:
Importante: Caso seja implementada a solução utilizando computadores diferentes para os servidores recursivos e autoritativos, os registros NS das zonas servidas devem apontar apenas para os servidores autoritativos.
Ao longo desta seção serão apresentadas sugestões de configuração para os servidores BIND 9 e Microsoft DNS.
Se você utiliza BIND 9 é possível solucionar o problema de duas maneiras:
Nesta solução definem-se pelo menos duas views possíveis para o servidor DNS, uma para acesso de clientes específicos e outra para acesso por parte da Internet como um todo. A ordem em que são definidas as views é importante: as views devem ser definidas da mais específica para a mais geral.
No exemplo abaixo foram definidas duas views: interna e externa. Na view interna foi definido que somente algumas máquinas podem fazer consultas recursivas. Na view externa foi explicitamente definido que não se faz recursão e não será enviada nenhuma resposta para as consultas recursivas, através das seguintes diretivas:
recursion no; additional-from-auth no; additional-from-cache no;
Segue abaixo um exemplo de configuração para o arquivo named.conf:
// lista de redes ou maquinas que podem fazer consultas recursivas acl clientes { localhost; 192.0.2.64/26; 192.0.2.192/28; }; // definicao da view interna -- deve vir antes da view externa // esta view permite recursao para as redes da acl clientes view "interna" { match-clients { clientes; }; recursion yes; // dentro desta view sao colocadas as zonas padrao: // ".", localhost, etc, e qualquer outra zona que // seja somente interna para a rede em questao }; // definicao da view externa -- deve ser a ultima view definida // esta view permite consultas de qualquer rede, mas nao permite // consultas recursivas view "externa" { match-clients { any; }; recursion no; additional-from-auth no; additional-from-cache no; // aqui sao colocadas as zonas master // // zone "exemplo.com.br" { // type master; // file "master/exemplo.com.br"; // }; // aqui sao colocadas as zonas slave // // zone "exemplo.net.br" { // type slave; // file "slave/exemplo.net.br"; // masters { 192.0.2.1; [...;] }; // }; };
Servidor Autoritativo
As configurações abaixo devem ser colocadas no arquivo
named.conf do servidor DNS autoritativo:
// adicionar as diretivas abaixo dentro da clausula options // para desabilitar recursao no servidor autoritativo options { recursion no; additional-from-auth no; additional-from-cache no; };
Servidor Recursivo
Para o servidor recursivo é necessário combinar regras de filtragem em
um firewall, idealmente stateful, com configurações no
arquivo named.conf.
// colocar a seguinte diretiva na clausula options // permitindo recursao // IMPORTANTE: Esta opcao deve ser usada em conjunto com // regras de firewall options { recursion yes; };
Servidores Microsoft que estejam utilizando o servidor DNS nativo precisam, necessariamente, ter seus servidores autoritativos e recursivos separados em máquinas distintas, de acordo com as seguintes recomendações:
Servidor Recursivo
Deve ser colocado em uma máquina que seja acessível somente pelas
redes internas ou outras máquinas que tenham permissão para fazer
consultas recursivas. Essa restrição deve ser feita através de um
firewall no próprio servidor ou por outro firewall,
colocado entre esta máquina e as redes externas.
Servidor Autoritativo
Deve ter a recursão desligada e ser colocado em uma máquina diferente
daquela que possuir o servidor recursivo. Vale lembrar que ao
utilizar computadores diferentes para os servidores recursivos e
autoritativos, os registros NS das zonas servidas devem apontar apenas
para os servidores autoritativos. Os seguintes documentos possuem
instruções sobre como desligar a recursão em servidores DNS Microsoft:
Em servidores Windows, uma alternativa à utilização de servidores nativos Microsoft é a utilização de BIND 9 para Windows.
Com a utilização do BIND 9 é possível a implementação da solução com views, discutida na seção "Sistemas Unix com BIND 9", que permite a utilização de um único servidor, porém com uma separação entre o recursivo e o autoritativo.
Na página do BIND (http://www.isc.org/sw/bind/), na seção Current Release, estão disponíveis versões para Windows.
A configuração é igual à dos sistemas Unix. Recomenda-se a leitura da seção "Sistemas Unix com BIND 9" para instruções mais detalhadas.
Segundo o guia de Administração de Serviços de Rede do Mac OS X Server (Mac OS X Server Network Services Administration), o sistema utiliza o BIND 9, e recomenda que seja editado o arquivo /etc/named.conf, seguindo as orientações do próprio BIND 9 para configuração das restrições de consultas ao servidor recursivo.
As configurações abaixo devem ser colocadas no arquivo unbound.conf do servidor DNS:
# adicionar as diretivas abaixo dentro da clausula server # para permitir consultas somente de algumas redes específicas server: # responde queries somente a partir de algumas subredes. access-control: 192.0.2.64/26 allow access-control: 2001:DB8::/64 allow
Caso não seja possível implementar as técnicas apresentadas na seção anterior por alguma característica do seu ambiente, existem para o servidor BIND algumas técnicas que permitem minimizar o problema de servidores DNS recursivos abertos. No caso do servidor Microsoft DNS não existem técnicas de mitigação, apenas as soluções apontadas na seção anterior.
Importante: as configurações apresentadas nesta seção não solucionam totalmente o problema, pois permitem:
As configurações abaixo devem ser colocadas no arquivo named.conf:
// lista de redes ou maquinas que podem fazer consultas recursivas acl clientes { localhost; 192.0.2.64/26; 192.0.2.192/28; }; // adicionar a opcao allow-recursion dentro da clausula options // permitindo recursao apenas para a acl clientes options { allow-recursion { clientes; }; };
Em casos específicos alguns dispositivos como roteadores ou modems banda larga podem estar configurados para fazer recursão DNS ou para atuar como "forwarders".
Nestes casos recomenda-se:
Para checar se as configurações estão funcionando é necessário fazer dois tipos de verificação:
Seguem sugestões sobre como realizar estes testes utilizando o comando
dig
.
$ dig www.google.com A
$ dig @192.0.2.1 www.google.com A
Embora todos os cuidados tenham sido tomados na preparação deste
documento, os autores e o CERT.br não garantem a correção absoluta das
informações nele contidas, nem se responsabilizam por eventuais
conseqüências que possam advir do seu uso.
Uma das técnicas de DDoS utilizadas atualmente envolve a exploração de servidores DNS recursivos abertos, para gerar grandes quantidades de tráfego de resposta DNS para uma vítima cujo endereço IP está sendo forjado.
Um dos problemas fundamentais explorado nesses ataques é o fato do sistema de DNS utilizar UDP (Internet User Datagram Protocol) como protocolo principal de comunicação. Como este protocolo não requer o estabelecimento de uma sessão entre o cliente e o servidor e não possui métodos de autenticação, fica facilitada a ação de forjar a origem de uma consulta DNS.
A Figura 1 apresenta graficamente o fluxo dos ataques de negação de serviço envolvendo o abuso de servidores DNS recursivos abertos, que consiste nos seguintes passos:
Figura 1: Visão geral do ataque de negação de serviço utilizando
servidores DNS recursivos abertos.
Segue uma lista de documentos que foram utilizados como referência para a produção deste documento. Recomendamos a sua leitura como modo de complementar os conceitos aqui tratados.
Relatórios, artigos e alertas sobre ataques utilizando
recursivos abertos
Recomendações sobre configuração segura de servidores
DNS
Outras referências
Gostaríamos de agradecer a André Gerhard, Aritana Pinheiro Falconi, Frederico Neves, Luiz Eduardo R. Cordeiro, Marcelo Chaves, Miriam von Zuben, Oripide Cilento Filho, Ricardo Patara e Sandro Süffert pela revisão e por sugestões para o desenvolvimento deste documento. Também gostaríamos de agradecer a Marcelo Chaves pelo desenvolvimento da Figura 1.
$Date: 2022/03/16 19:17:47 $