Primeiro, esse tipo de ataque não visa (principalmente) o próprio DNS, como sugere o seu título. Obviamente, isso criará uma carga adicional nos servidores DNS, mas o objetivo principal é fazer DDoS para outra pessoa. Uma configuração incorreta do servidor pode piorar, mas no final esse problema é inerente ao design do DNS e UDP e, de fato, a qualquer protocolo de comunicação sem estado.
Basicamente, funciona assim: Um invasor envia consultas comuns (DNS) para um servidor (DNS). Essas consultas são falsificadas para parecer como se fossem originárias do sistema de destinos. O servidor DNS agora responde à consulta, enviando a resposta de volta à sua suposta origem - a vítima. É por isso que é chamado ataque de reflexão .
Isso é possível porque você pode verificar a fonte da comunicação sem estado (como DNS sobre UDP) e confiar no endereço do remetente em um cartão postal. O servidor simplesmente não tem como decidir se uma consulta é legítima ou faz parte de um ataque desse tipo. O DNS é apenas o protocolo mais popular aqui, porque há muitos servidores por aí e você não precisa de muitos conhecimentos técnicos ou equipamentos especiais para usá-lo.
Para piorar as coisas (e com eficiência de ataque), observe a parte da amplificação . Não seria muito prejudicial se o tráfego do atacante fosse igual em tamanho ao tráfego resultante. O único benefício para o invasor seria que seu endereço fosse oculto por trás do servidor DNS. Ele poderia falsificar o endereço do remetente diretamente, não haveria necessidade de redirecionar totalmente o DNS. Mas as respostas do DNS, e esse é outro ponto pelo qual o DNS é tão popular aqui, pode ser muito maior que a questão. Você pode encontrar números variados, dependendo das consultas exatas usadas, mas pode chegar a 1:60 se o servidor for amigável o suficiente para executar consultas recursivaspara voce. Portanto, o invasor não precisa de muitas máquinas sob seu controle para produzir muito tráfego malicioso.
Como você pode encontrar facilmente centenas e milhares de servidores DNS "abertos" na Internet pública, você pode fazer as contas rapidamente quanto pouco trabalho um invasor deve fazer se cada servidor DNS aberto que ele conhece refletir suas consultas ampliadas sessenta vezes para o alvo. Como eu disse no começo, não há realmente uma boa maneira de contrariar isso. Naturalmente, muitos servidores DNS estão abertos a todos enquanto não deveriam, devido a configurações incorretas. Mas existem tantos servidores abertos que precisam ser abertos, porque exatamente esse é o objetivo deles.
Embora você não saiba se uma solicitação faz parte de um ataque ou não, sua única opção é não executar mais o servidor. Você pode mexer com a limitação da taxa e outros brinquedos, mas não pode se livrar completamente disso. Se você estiver fornecendo DNS por diversão, poderá colocar na lista negra o IP de origem das solicitações. Mas se você estiver em uma escala maior, isso danificaria ainda mais a vítima. Lembre-se, tudo o que você pode ver no servidor DNS é o endereço da vítima. Imagine que sua empresa está sendo atacada pelo DNS do seu provedor e ele decide cortar o serviço DNS da sua empresa. O atacante pode pontuar isso como um bazilhão de pontos de bônus em relação à negação de serviço .
De qualquer forma, esses ataques acontecem o dia e a noite e são considerados como "ruído de fundo" da internet. Se você configurar um servidor DNS público (recursivo), não demorará muito para você participar de ataques aleatórios. É claro que às vezes as coisas ficam realmente ruins quando grandes infraestruturas (como até os servidores-raiz do DNS) são mal utilizadas para amplificar, mas nesses casos, contramedidas proativas são tomadas pelo pessoal até que o ataque desça para os níveis "normais".
Até agora no ensino. Para responder à sua pergunta, finalmente:
Você sabe que seu servidor está vulnerável se responder a consultas sem restrição. Período. Se você estiver atendendo consultas recursivas, seu servidor poderá gerar a taxa de 1:60 mencionada para o invasor. Se está servindo apenas não recursivo, não é tão ruim, mas ainda assim ...
Então...
- verifique se você realmente precisa executar um servidor DNS público
- se for necessário, dê uma olhada nas diretrizes
allow-recursion
e allow-query
diretivas do BIND
- se o servidor DNS tiver autoridade para sua própria zona , não haverá necessidade de recursão, definido
allow-recursion
como "none";
- se você deseja executar um resolvedor para outros domínios , restrinja os usuários permitidos para consultas e consultas recursivas. Você pode definir endereços IP, redes ou listas de acesso nas diretivas mencionadas
- pense em limitar o tráfego DNS não apenas no BIND, mas também no nível do sistema. Como um exemplo muito simples, essas regras do iptables não permitirão mais de 10 consultas por minuto de cada endereço IP:
.
iptables -A INPUT -p udp --dport 53 --set --name dnslimit
iptables -A INPUT -p udp --dport 53 -m recent --update --seconds 60 --hitcount 11 --name dnslimit -j DROP
Agora, com esses pontos em mente, você deve estar pronto. Ainda pode haver tráfego malicioso no seu servidor de vez em quando, mas não em quantidades que tirem uma boa noite de sono.