Conheça o SAD DNS, um ataque para colocar dados falsos no cache DNS descoberto por um grupo de pesquisadores da Universidade de Tsinghua e da Califórnia.
Um grupo de pesquisadores da Universidade de Tsinghua e da Universidade da Califórnia em Riverside desenvolveu um novo tipo de ataque que permite a colocação de dados falsos no cache do servidor DNS, o SAD DNS, que podem ser usados para falsificar o endereço IP de um domínio arbitrário e redirecionar chamadas para o domínio para o servidor do invasor.
SAD DNS – um ataque para colocar dados falsos no cache DNS
O ataque ignora a proteção adicional aos servidores DNS para bloquear o método clássico de envenenamento de cache DNS proposto em 2008 por Dan Kaminsky.
O método de Kaminsky manipula o tamanho insignificante do campo de ID de consulta DNS, que é de apenas 16 bits.
Para encontrar o identificador correto necessário para falsificar o nome do host, basta enviar cerca de 7.000 solicitações e simular cerca de 140.000 respostas falsas.
O ataque se resume a enviar um grande número de pacotes falsos com IP para o resolvedor DNS com diferentes ids de transação DNS. Para evitar que a primeira resposta seja armazenada em cache, um nome de domínio ligeiramente modificado é especificado em cada resposta falsa.
Para se proteger contra esse tipo de ataque, os fabricantes de servidores DNS implementaram uma distribuição aleatória dos números de porta na rede de origem da qual as solicitações de resolução são enviadas, compensando o tamanho do identificador insuficientemente grande (para enviar uma resposta fictícia, além de selecionar um identificador de 16 bits, foi necessário selecionar uma das 64 mil portas, o que aumentou o número de opções de seleção para 2 ^ 32).
O ataque SAD DNS simplifica drasticamente a identificação de porta, aproveitando a atividade filtrada nas portas de rede. O problema se manifesta em todos os sistemas operacionais (Linux, Windows, macOS e FreeBSD) e ao usar diferentes servidores DNS (BIND, Unbound, dnsmasq).
Alega-se que 34% de todos os resolvedores abertos são atacados, bem como 12 dos 14 principais serviços DNS testados, incluindo serviços 8.8.8.8 (Google), 9.9.9.9 (Quad9) e 1.1.1.1 (CloudFlare) também como 4 de 6 roteadores testados de fabricantes confiáveis.
O problema se deve à peculiaridade da formação de pacotes de resposta ICMP, que permite determinar o acesso a portas de rede ativas e não utilizadas através de UDP.
Este recurso permite que você verifique rapidamente as portas UDP abertas e efetivamente contorne a proteção com base em uma seleção aleatória de portas de rede de origem, reduzindo o número de opções de força bruta para 2 ^ 16 + 2 ^ 16 em vez de 2 ^ 32.
A origem do problema é o mecanismo para limitar a intensidade do envio de pacotes ICMP na pilha da rede, que usa um valor de contador previsível, a partir do qual começa o limite de envio.
Esse contador é comum para todo o tráfego, incluindo tráfego de invasor falso e tráfego real. Por padrão, no Linux, as respostas ICMP são limitadas a 1000 pacotes por segundo.
Para cada solicitação que chega em uma porta de rede fechada, a pilha de rede incrementa o contador em 1 e envia um pacote ICMP com dados da porta inacessível.
Portanto, se você enviar 1000 pacotes para portas de rede diferentes, todas fechadas, o servidor restringirá o envio de respostas ICMP por um segundo e o invasor pode ter certeza de que não há portas abertas entre as 1000 portas pesquisadas.
Se um pacote for enviado para uma porta aberta, o servidor não retornará uma resposta ICMP e o valor do contador não mudará, ou seja, após o envio de 1000 pacotes, o limite da taxa de resposta não será atingido.
Como os pacotes falsos são realizados a partir de um IP falso, o invasor não pode receber respostas ICMP, mas graças ao contador total, a cada 1000 pacotes falsos, ele pode enviar uma solicitação para uma porta inexistente de um IP real e avaliar o chegada da resposta; se a resposta veio, então em um dos 1000 pacotes.
A cada segundo, um invasor pode enviar 1000 pacotes falsos para portas diferentes e determinar rapidamente em qual bloco está a porta aberta, depois restringir a seleção e determinar uma porta específica.
O kernel do Linux resolve o problema com um patch que randomiza os parâmetros para limitar a intensidade do envio de pacotes ICMP, introduzindo ruído e minimizando o vazamento de dados pelos canais laterais.