lidando com o ataque DNS DDOS

1

Recebi muitas solicitações de DNS por um tempo, mas ela vinha e vinha esporadicamente. Agora, ele se tornou um DDOS, com vários IPs enviando tráfego ao mesmo tempo. Estava saturando minha conexão de internet na velocidade de upload. Eu desliguei a recursão (ela estava ativada por padrão), que provavelmente era a fonte original do problema. Mas, agora, em algum lugar da rede escura, alguém postou que meu servidor teve (recursividade) ativada. Então, liguei a limitação da taxa de resposta, com um limite de 10 segundos. Agora, estou recebendo (apenas, ha ha!) Cerca de 6 milhões de pedidos por dia! Isso descarregou a conexão de rede, mas meu arquivo de log está atingindo várias centenas de MB por dia. As mensagens parecem:

Jul 22 11:03:05 jelinux named[26058]: client 54.36.104.65#10683 (access-board.gov): query (cache) 'access-board.gov/ANY/IN' denied
Jul 22 11:03:05 jelinux named[26058]: client 54.36.104.65#10683 (access-board.gov): rate limit drop REFUSED error response to 54.36.104.0/24

Existe uma maneira de reduzir a quantidade de tráfego de mensagens? Eu gostaria de manter um relatório de IPs negados, mas talvez apenas um relatório de uma linha por IP a cada minuto ou mais me dissesse sobre o número de IPs de ataque e o número de solicitações.

    
por Jon Elson 22.07.2018 / 18:05

1 resposta

3

Com a recursão desativada, você provavelmente já é essencialmente um desperdício dos recursos do invasor (você envia pequenas respostas REFUSED em vez da grande resposta à consulta ANY que eles tentaram, portanto, nenhuma amplificação mais) Ainda não percebi que eles provavelmente tirariam muito mais do uso de outros recursores abertos. Pode ser que a enxurrada de consultas acabe em breve.

Como você observou, o mecanismo interno no BIND é Limitação da taxa de resposta , que pode ser ajustada de diferentes maneiras envolvendo o envio de respostas truncadas para acionar clientes reais para alternar para TCP (útil para respostas normais, mas você já está enviando REFUSED ) ou descartando respostas de imediato. No entanto, ele é projetado para manter o serviço o mais disponível possível, o que significa não excluir completamente ninguém.

Um bom ponto da seção RRL do manual BIND (que também é aplicável a qualquer outra solução que envolva descartar respostas) é como as respostas ignoradas em um servidor autoritativo podem tornar você um alvo mais fácil para ataques de envenenamento de cache:

NOTE: Dropped responses from an authoritative server may reduce the difficulty of a third party successfully forging a response to a recursive resolver. The best security against forged responses is for authoritative operators to sign their zones using DNSSEC and for resolver operators to validate the responses. When this is not an option, operators who are more concerned with response integrity than with flood mitigation may consider setting slip to 1, causing all rate-limited responses to be truncated rather than dropped. This reduces the effectiveness of rate-limiting against reflection attacks.


Existem outras opções, como dnsdist , que você poderia colocar como um proxy reverso na frente e tê-lo . Uma coisa boa aqui é que o dnsdist, como o nome sugere, é sensível ao DNS e bastante flexível. Assim, você teria a opção de, por exemplo, restringir agressivamente ANY consultas sozinha e / ou rcode REFUSED , sem afetar outras consultas (não afetar outras consultas pode ser baseado em regras regulares em vez disso.

Há também, como foi observado por Michael fail2ban , que poderia adicionar dinamicamente regras de firewall para bloquear IPs com base em entradas de log excessivas. Isso é um pouco brusco em comparação, mas certamente seria eficaz do ponto de vista da limitação de tráfego e do spam de registros, mas reduz completamente o tráfego quando é acionado.

Novamente, para qualquer opção que envolva descartar consultas, lembre-se da observação acima sobre o envenenamento de cache.

    
por 22.07.2018 / 19:10