Наводнение DNS

Безопасность и угрозы
Атака отказа в обслуживании, которая перегружает инфраструктуру DNS чрезмерным количеством запросов.
← Вернуться к глоссарию

Что такое DNS flood?

DNS flood — атака или перегрузка, при которой на DNS-инфраструктуру направляется чрезмерное число запросов. Целью может быть исчерпание пропускной способности, CPU, памяти, лимитов рекурсивного резолвера или capacity авторитетных серверов. Большой трафик сам по себе не доказывает вредоносность.

Варианты атаки

Нападающий может отправлять прямые запросы к авторитетному серверу, создавать множество уникальных имён, обходить кэш или использовать отражение и усиление через открытые резолверы. Случайные поддомены увеличивают работу authoritative DNS, а повторяющиеся запросы сильнее нагружают канал, если кэш не помогает.

Normal operation:

User → DNS query → DNS server → Response → Website loads

During DNS flood:

User → DNS query → DNS server (overwhelmed, no response)

→ Website doesn't load (even though web server is fine)

Симптомы

Наблюдаются рост latency, SERVFAIL, timeout, packet loss, исчерпание сокетов и различие ответов между сетями. Эти симптомы также вызывают ошибка маршрутизации, отказ провайдера или неверный лимит. Сравнивайте baseline, типы запросов, source network, response size и время.

Воздействие

Перегрузка DNS может сделать веб-сайт, почту и API недоступными, даже если origin исправен. Кэш рекурсивных серверов иногда временно сохраняет старые ответы. Нельзя по одному timeout объявлять домен отсутствующим или незарегистрированным.

Botnet → Millions of DNS queries → Target DNS server

Query examples:

example.com A

www.example.com A

random1.example.com A

random2.example.com A

...millions more...

Защита авторитетной зоны

Используйте распределённые NS, Anycast, достаточную capacity, rate limiting и фильтрацию у провайдера. Разделяйте authoritative и recursive роли, закрывайте recursion для публичных клиентов и контролируйте UDP и TCP. DNSSEC не предотвращает flood, но помогает проверять ответы.

1. Attacker sends small query to open resolver

2. Spoofs source IP as victim's IP

3. Resolver sends large response to victim

4. Attacker amplifies bandwidth 28-54x

Attacker sends: 60-byte query for TXT record (ANY query)

Resolver sends: 3000-byte response to victim

Amplification: 50x

Защита резолвера

Ограничивайте запросы на клиента, кэшируйте корректно, применяйте Response Rate Limiting и следите за уникальными именами. Не включайте широкие исключения, которые позволяют обходить ограничения. Аварийные правила тестируйте так, чтобы легитимные клиенты не потеряли DNS.

Query: random-12345.example.com (doesn't exist)

Server must check authoritative zone every time

Cannot be cached (NXDOMAIN responses often have low TTL)

Consumes more server resources than cached responses

Мониторинг

Сохраняйте агрегированные метрики запросов, latency, коды, размеры, cache hit, географию и состояние NS. Не записывайте лишние персональные данные. Сигнал должен показывать, какой узел и какой тип запроса затронут, а не только общий объём трафика.

Attacker: Queries resolver for slow/non-responsive domains

Resolver: Waits for timeout, consumes resources

Result: Resolver resource exhaustion

Реагирование

Подтвердите инцидент у независимых резолверов, включите согласованные фильтры, свяжитесь с DNS-провайдером и проверьте легитимные источники. После стабилизации удалите временные правила, обновите baseline и документируйте окно воздействия.

Query: abc123random.example.com

Query: xyz789random.example.com

Query: def456random.example.com

Each is unique → cache miss → authoritative query

Overwhelms authoritative nameservers

Проверка

Сравнивайте авторитетные ответы, DNSSEC, TTL, UDP, TCP, IPv4 и IPv6 из нескольких сетей. Rate limit, 5xx и timeout классифицируйте как unknown для конкретного наблюдения. DNS flood является свойством трафика и доступности, а не доказательством владения или намерения.

Что такое DNS flood

DNS flood — перегрузочная атака, при которой множество запросов направляется к резолверу или авторитетным DNS-серверам. Целью может быть исчерпание CPU, памяти, пропускной способности, лимитов рекурсии или сетевых очередей. Высокий объём сам по себе не доказывает атаку: учитывайте обычный всплеск трафика, кэш-hit и распределение типов запросов.

Compromised devices:
  • IoT devices (cameras, routers)
  • Infected computers
  • Hacked servers

Distributed attack:

10,000 bots × 100 queries/sec = 1 million queries/sec

Наблюдаемые признаки

Проверяйте QPS, уникальные источники, долю NXDOMAIN, повторяющиеся имена, размер ответов, UDP/TCP fallback, latency, SERVFAIL и saturation. Сравнивайте базовую линию по времени, региону и типу резолвера. Рост только одного источника может быть злоупотреблением открытой рекурсией, а распределённый рост требует отдельной корреляции.

Attacker spoofs victim's IP

Sends queries to many open resolvers

Resolvers respond to victim with large answers

Victim receives amplified traffic

Защита

Ограничивайте recursion, rate, размер ответа и доступ к административным операциям. Используйте кэш, Anycast, независимые nameserver, DNSSEC validation и фильтры аномалий, не блокируя легитимные резолверы без доказательств. Подготовьте аварийный маршрут и договорённость с оператором сети, но не полагайтесь на один upstream.

Legitimate-looking queries

Difficult to distinguish from real traffic

May target specific resource-intensive query types

Разбор инцидента

Сохраните безопасные агрегаты, timestamp, коды, типы запросов и сетевые классы, не записывая секреты и полные чувствительные данные. Отличайте перегрузку DNS от отказа сайта, DNSSEC-ошибки, проблемы маршрутизации и локального кэша. После снижения нагрузки проверьте доступность A, AAAA, MX, TXT и SOA из нескольких сетей.

DNS flood снижает доступность наблюдаемого сервиса, но не доказывает, что домен свободен, взломан или принадлежит атакующему. Классификация должна сохранять unknown при неполных или противоречивых данных.

Анализ трафика

Сравнивайте baseline и инцидент по QPS, уникальным именам, типам, размерам, source network, cache hit, latency и response code. Разделяйте легитимный всплеск, misconfiguration, рекурсивное отражение и нагрузку на authoritative zone. Один высокий показатель не устанавливает причину.

Normal baseline: 10,000 queries/second

During attack: 500,000+ queries/second

# Check query rate (BIND)

rndc status | grep "queries resulted"

# Analyze query logs

tail -f /var/log/named/queries.log | wc -l

Рекурсивная защита

Закрывайте open recursion, применяйте rate limiting, кэширование и Response Rate Limiting, ограничивайте amplification и следите за UDP и TCP. Правила должны сохранять доступ легитимных клиентов и иметь owner, срок и rollback.

Normal: 5-10% NXDOMAIN responses

Attack: 50-90% NXDOMAIN responses (random subdomain flood)

Авторитетная защита

Anycast, независимые NS, capacity и фильтрация помогают пережить нагрузку, но не заменяют согласованную зону и DNSSEC. Проверяйте parent delegation, glue, SOA serial, IPv4, IPv6 и ответы из разных сетей.

Legitimate: Diverse source IPs, geographic spread

Attack: Concentrated sources, unusual geographic patterns

Реагирование

Подтвердите сигнал независимыми резолверами, свяжитесь с оператором, включите согласованные фильтры и после стабилизации повторите baseline. SERVFAIL, timeout, 5xx и rate limit остаются unknown для конкретной точки, а flood не доказывает владение или намерение.

Legitimate: Repetitive queries (common domains cached)

Attack: Unique queries (random strings, no cache benefit)

Метрики и реакция

Для DNS flood сравнивайте текущий QPS с базовой линией, долю уникальных имён, источников, типов, NXDOMAIN, SERVFAIL, размер ответов, latency и saturation. Ограничение одного IP не решает распределённую атаку, а слишком агрессивный фильтр может заблокировать легитимных пользователей.

После стабилизации сверяйте DNSSEC, SOA, NS, A, AAAA, MX и TXT из нескольких регионов. Документируйте неизвестные результаты и не называйте отсутствие ответа доказательством удаления домена.

Normal: < 50ms response time

Under attack: > 1000ms or timeouts

Прямой flood DNS-запросами

Боты отправляют большой поток обычных запросов непосредственно к серверу, исчерпывая CPU, сеть, очереди или лимиты. Запросы могут выглядеть корректно, поэтому защита опирается на объём, распределение и поведение источников.

Усиление DNS-трафика (DNS amplification)

Атакующий подделывает адрес жертвы и отправляет маленькие UDP-запросы к открытым резолверам, которые отвечают более крупными пакетами. Закрытая рекурсия, response rate limiting и фильтрация spoofed traffic снижают риск.

Single IP address (e.g., 1.2.3.4) announced from multiple locations

Attack traffic automatically routed to nearest server

Load distributed across global network

Harder to overwhelm all locations simultaneously

Capacity: 10x normal peak traffic

Reserves: Handle sudden spikes

Auto-scaling: Add capacity during attacks

# BIND rate limiting (response-rate limiting)

rate-limit {

responses-per-second 10;

window 5;

slip 2;

};

# Block ANY queries (common in amplification)

# Block excessively long queries

# Block known-malicious patterns

# Block ANY queries

match-query {

type ANY;

action drop;

};

Flood ответами NXDOMAIN

Поток запросов к несуществующим именам увеличивает работу резолвера и авторитетной зоны, а также снижает cache hit. Отслеживайте NXDOMAIN rate и случайность меток, не блокируя законные опечатки вслепую.

Master server (hidden):    10.0.0.1 (not publicly known)

Slave servers (public): ns1.example.com, ns2.example.com

Attackers target slaves

Master remains operational

Can quickly update slaves if needed

Analyze queries in real-time

Block suspicious patterns

Whitelist known-good clients

Blacklist attack sources

Атака phantom domain

Резолвер заставляют долго ждать ответы от медленных или недоступных авторитетных серверов, заполняя outstanding query. Нужны bounded timeout, лимиты повторов и изоляция проблемных направлений.

Limit identical responses to same client

Prevents amplification attacks

Slip mode: Occasionally allow queries through (to not break legitimate recursive resolvers)

options {

rate-limit {

responses-per-second 5;

referrals-per-second 5;

nodata-per-second 5;

nxdomains-per-second 5;

errors-per-second 5;

window 5;

};

};

Increase cache size to absorb repeated queries

Longer TTLs where appropriate (trade-off with agility)

Prefetch popular records

# Drop queries for non-existent zones

# Block queries from known-bad sources

# Rate-limit per-source queries

Flood случайными поддоменами

Каждый запрос использует новую метку, обходя положительный кэш и заставляя обращаться к авторитетной зоне. Wildcard может изменить код ответа, но не устраняет нагрузку на уникальные имена.

Route attack traffic to null0

Sacrifice availability to preserve infrastructure

Last resort when attack overwhelms capacity

Coordinate with ISP to filter attack traffic

Source IP validation (prevent spoofing)

Traffic scrubbing centers

Cloudflare, Akamai, AWS Shield

Absorb attack traffic before reaching your servers

Global capacity to withstand large attacks

Атаки через ботнет

Распределённые устройства дают множество source IP и географий, усложняя простую блокировку. Анализируйте ASN, поведение, qname и скорость, сохраняя возможность обслуживать легитимных клиентов за NAT.

Reflection-атаки

Рефлектор отправляет ответ жертве из-за поддельного source IP. BCP 38, закрытие открытой рекурсии и минимизация крупных ответов важнее блокировки одного домена.

Primary provider: Cloudflare

Secondary provider: AWS Route 53

If one is attacked/down, other continues serving

Different infrastructure reduces single point of failure

Flood прикладного уровня

Атакующий выбирает дорогие типы запросов, DNSSEC, TCP или шаблоны, вызывающие дополнительную обработку. Защита должна учитывать стоимость запроса, а не только packets per second.

Protects against DNS spoofing/cache poisoning

Maintains integrity during attacks

Build trust even under attack conditions

Необычный объём запросов

Сравнивайте QPS с сезонной базовой линией по узлу, зоне, типу и источнику. Резкий рост без роста успешных клиентов является сигналом, но требует контекста выпуска или события.

Real-time query rates

Response times

NXDOMAIN percentages

Geographic distribution of queries

Error rates

Высокая доля NXDOMAIN

Отдельно измеряйте абсолютное число и процент NXDOMAIN, наиболее частые суффиксы и entropy меток. Легитимные misconfiguration и service discovery могут создавать похожую картину.

Load testing: Can infrastructure handle 10x traffic?

Failover testing: Do secondary providers activate correctly?

Attack simulation: Test mitigation strategies

Распределение исходных IP

Один источник, небольшая сеть и глобальный botnet требуют разных мер. Учитывайте IPv6 privacy addresses, NAT и shared resolvers, чтобы не блокировать невиновных клиентов.

# BIND

recursion no;

Шаблоны запросов

Анализируйте длину qname, метки, qtype, RD, EDNS, флаг DNSSEC OK, размер UDP и повторяемость запросов. Сигнатура должна быть узкой, чтобы не блокировать обычные резолверы.

# BIND

allow-transfer { 10.0.0.2; 10.0.0.3; }; # Only specific slaves

Ухудшение времени ответа

Рост p95/p99, timeout, SERVFAIL, queue depth и packet loss показывает влияние на пользователей. Среднее значение может скрыть перегруженный PoP или один тип запроса.

Regularly update DNS server software

Patch known vulnerabilities

Subscribe to security advisories

Защита на уровне инфраструктуры

Используйте достаточную ёмкость, anycast, изоляцию узлов и быстрый withdraw неисправной точки. План должен учитывать TCP и UDP, IPv4 и IPv6.

Защита на уровне DNS-сервиса

Response rate limiting, query budgets и фильтры злоупотреблений должны сохранять корректную семантику. Защита не должна превращать NXDOMAIN в ложный успешный ответ.

# Check query rate

rndc status

# Check load

top

# BIND: Enable RRL if not already active

rndc addzone rate-limit

# Top query types

grep "query" /var/log/named/queries.log | awk '{print $6}' | sort | uniq -c | sort -rn | head -20

# Top queried domains

grep "query" /var/log/named/queries.log | awk '{print $7}' | sort | uniq -c | sort -rn | head -20

# Identify top source IPs

grep "query" /var/log/named/queries.log | awk '{print $5}' | cut -d# -f1 | sort | uniq -c | sort -rn | head -50

# Block at firewall

iptables -A INPUT -s ATTACKER_IP -j DROP

Защита приложения

Внутренние API управления DNS ограничивают аутентификацией, quota и idempotency. Публичный lookup не должен запускать дорогую синхронную операцию или раскрывать внутренние данные.

Защита на сетевом уровне

ACL, flowspec, scrubbing и upstream-фильтрация применяются по подтверждённым признакам. Блокировка должна иметь срок, владельца и процедуру отката.

Несколько независимых DNS-сетей

Разнесённые authoritative servers уменьшают единую точку отказа, если зоны, DNSSEC и обновления согласованы. Дополнительные NS без независимой ёмкости не гарантируют устойчивость.

Немедленные действия

Подтвердите тип атаки, защитите управление, включите заранее протестированные лимиты и свяжитесь с сетевыми операторами. Фиксируйте каждое изменение и его влияние.

Сбор доказательств

Сохраняйте агрегированные метрики, временные окна, qtype, коды ответа, сетевые потоки и конфигурационные изменения с контролем доступа. Избегайте избыточного хранения пользовательских запросов.

# Packet captures

tcpdump -i eth0 -w dns-attack.pcap port 53

# Full query logs

tar -czf attack-logs-$(date +%Y%m%d).tar.gz /var/log/named/

# Traffic graphs/screenshots

# System resource usage

Применяйте эти знания на практике

Используйте API DomScan для проверки доступности доменов, их состояния и многого другого.