Como um ataque de DNS Dictionary me custou US$ 10 mil no Route 53

outubro 2026 · 8 min de leitura cloud redes

Fui acionado com urgência pelo time de FinOps: a curva de custo de DNS da empresa estava numa disparada exponencial havia alguns dias. Alerta vermelho aceso, missão clara — achar o ofensor e estancar a sangria o quanto antes.

Parei tudo e iniciei o troubleshooting padrão de rede: conferi se os query logs das hosted zones estavam habilitados, olhei o volume total de registros e rodei teste de resolução a partir de múltiplos pontos. A princípio, nada de anormal na resolução das zonas públicas. Foi só ao aprofundar nos logs do CloudWatch via Logs Insights que percebi que o buraco era bem mais embaixo.

O diagnóstico: ataque de DNS Dictionary

A infraestrutura estava sendo alvo de um ataque massivo e distribuído do tipo DNS Dictionary (também chamado de Water Torture ou Random Subdomain Attack). Alguém bastante empenhado em mapear subdomínios e ativos vulneráveis na nossa zona pública estava disparando milhões de consultas por minuto — nomes aleatórios e inexistentes, tipo a1b2c3d4.meudominio.com. O servidor autoritativo do Route 53 respondia certinho com NXDOMAIN.

O problema é que, pra AWS, consulta que retorna NXDOMAIN continua sendo query válida e processada — ou seja, bilhetada normalmente.

30 bi+
consultas no período
US$ 10k
fatura extra
0
downtime ou latência

A ironia da resiliência: o Route 53 absorveu a pancada inteira sem oscilação de latência, sem degradação, sem downtime. Do ponto de vista de disponibilidade, o serviço se provou uma fortaleza. Se o FinOps não tivesse reportado o desvio financeiro, a aplicação não teria sentido absolutamente nada.

Disponibilidade sem governança de custo é só um jeito diferente de sangrar dinheiro.

Investigando no CloudWatch Logs Insights

Pra confirmar a tese do ataque e isolar o padrão de tráfego, usei duas queries de rotina:

volume de respostas por código de retorno
fields @timestamp, responseCode, queryName
| filter responseCode = 'NXDOMAIN'
| stats count(*) as total_queries by queryName
| sort total_queries desc
| limit 20
volume de requisições por intervalo de tempo
fields @timestamp, queryName, clientIp
| stats count(*) as query_count by bin(5m)
| sort @timestamp desc

A solução arquitetural: o truque do wildcard + ALIAS

Com a torneira aberta, a prioridade era parar a cobrança sem impactar a resolução dos subdomínios legítimos que já existiam na zona. Estudando a fundo o modelo de bilhetagem do Route 53, cheguei a uma saída elegante: consulta que casa com um registro e usa mapeamento do tipo ALIAS apontando pra um recurso elegível da AWS — CloudFront, Application Load Balancer, bucket S3 na mesma conta — não é cobrada.

  1. 01Criamos um registro wildcard (*.meudominio.com) na hosted zone.
  2. 02Apontamos esse wildcard via ALIAS pra um recurso interno sob nosso controle, que responde de forma neutra — sem custo de query.
  3. 03Validamos o comportamento em ambiente de teste junto com o TAM e o engenheiro de soluções da AWS, antes de subir em produção.

Com isso, o algoritmo de decisão do Route 53 muda de fluxo:

if: subdominio-legitimo

api.meudominio.com

Bate num registro específico já existente na zona. Route 53 resolve normalmente, sem alteração nenhuma de comportamento.

if: subdominio-aleatorio

a1b2c3d4.meudominio.com

Em vez de cair na árvore inteira e responder NXDOMAIN cobrado, casa direto com o wildcard — que está em ALIAS pra um recurso elegível. Consulta deixa de ser bilhetada.

Alinhei a arquitetura com o TAM e o engenheiro de soluções da AWS, validamos em teste e aplicamos em produção depois do aval da gestão. Em poucas horas, a volumetria de requisições pagas despencou e o faturamento do Route 53 voltou direto ao baseline.

Lições aprendidas

O fator psicológico da crise

No dia a dia de liderança e engenharia, é fácil entrar em pânico quando você se depara com uma cobrança de cinco dígitos acumulando a cada hora. Nesses momentos, gosto de lembrar de uma cena de Lost em que o Dr. Jack Shephard explica como lida com o medo: ele dá um espaço curto e contado pra sentir o medo — e, no segundo seguinte, volta o foco pra resolver o problema.

Dou cinco segundos pro medo. Depois disso, o problema é meu, não dele.

Crise financeira ou operacional pede calma, método e capacidade de análise. Aceitar o susto por alguns segundos, respirar e voltar o foco pra solução é o que separa reação de pânico de decisão de alto impacto.

Para quem quer se aprofundar

Novo post toda semana sobre redes, cloud, IaC e liderança técnica.

Ver todos os posts