Статья DDoS-атаки на DNS: water torture, NXDOMAIN flood и защита серверов

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


В октябре 2016 года DNS-провайдер Dyn (сейчас часть Oracle) лёг под мультивекторной атакой Mirai-ботнета. Среди прочего ботнет гнал pseudo-random subdomain запросы (water torture) - скомпрометированные IoT-устройства долбили рекурсоры случайными поддоменами, и те вместе с авторитативными серверами захлебнулись. Twitter(на тот момент), Reddit, GitHub и десятки других сервисов ушли в оффлайн для миллионов пользователей. В России аналитики StormWall фиксируют тот же тренд: с 2020 года DNS water torture и DNS amplification атаки растут, причём одной из заметных целей стала инфраструктура RU-CENTER. По данным IBM X-Force Threat Intelligence Index 2025, 70% расследованных инцидентов затронули организации критической инфраструктуры (энергетика, финансы, здравоохранение, транспорт), и DNS-инфраструктура внутри этих секторов - одна из главных точек отказа. Ниже - разбор механики атак, detection-подходы для SIEM и конкретные конфигурации для защиты DNS-инфраструктуры.

Как water torture убивает кэш рекурсора​

DNS water torture (random subdomain attack) эксплуатирует фундаментальное свойство рекурсивного резолвера: если записи нет в кэше, он обязан выполнить полный цикл рекурсивного разрешения - сходить к авторитативному серверу. Атакующий генерирует запросы вида a1b2c3.target.com, x7y8z9.target.com - каждый поддомен уникален, кэш бесполезен.

Цепочка деградации:
  1. Ботнет (T1583.005, Resource Development) шлёт тысячи запросов к несуществующим поддоменам *.target.com через легитимные рекурсоры - ISP-резолверы и корпоративные DNS
  2. Рекурсор не находит записи в кэше и пересылает запрос авторитативному серверу target.com
  3. Авторитативник отвечает NXDOMAIN - домен не существует
  4. Рекурсор передаёт NXDOMAIN клиенту, но уже потратил ресурсы на lookup и ожидание ответа
  5. Параллельные outstanding-запросы забивают очередь рекурсора, таймауты растут, легитимные запросы встают в хвост и начинают дропаться
Страдают оба звена. Рекурсор деградирует из-за cache miss storm - CPU уходит на обработку тысяч новых запросов, каждый из которых требует полного рекурсивного разрешения. Авторитативный сервер захлёбывается потоком NXDOMAIN-запросов, которые ему пересылают десятки или сотни рекурсоров одновременно. По данным NETSCOUT, администраторы часто ошибочно диагностируют water torture как проблему производительности, а не как атаку - потому что каждый отдельный запрос выглядит валидным и нет очевидного всплеска объёмного трафика.

NXDOMAIN flood - более широкий термин: любая атака с массовым потоком запросов к несуществующим доменам. Water torture - частный случай, при котором запросы нацелены на случайные поддомены конкретного домена-жертвы. Разница в целевом воздействии: чистый NXDOMAIN flood бьёт по рекурсору любыми несуществующими доменами, water torture целится через рекурсор в конкретный авторитативный DNS-сервер.

Скомпрометированные легитимные хосты как источник атаки​

Отдельная головная боль - когда источником water torture оказываются скомпрометированные машины внутри корпоративной сети. Внутренние хосты, заражённые вредоносным ПО, генерируют DDoS-атаки на DNS через корпоративный рекурсор, и со стороны периметра трафик выглядит абсолютно легитимным. Для SOC это значит: мониторить нужно не только входящий DNS-трафик, но и аномальную DNS-активность от внутренних клиентов. Рост уникальных QNAME с одного хоста на порядок выше baseline - сигнал компрометации.

DNS amplification vs NXDOMAIN flood: TTPs через MITRE ATT&CK​

1781901079481.webp

Два основных DDoS-вектора на DNS-инфраструктуру различаются по механике, требуемым ресурсам и методам detection.

DNS amplification (Reflection Amplification, T1498.002, Impact) - объёмная атака. Атакующий шлёт маленький DNS-запрос (ANY или DNSSEC-зона) на открытый рекурсор с подменённым source IP жертвы. Ответ в десятки раз больше запроса - коэффициент усиления достигает 28–54x при ANY-запросах к DNSSEC-зонам (US-CERT TA13-088A). Ирония: DNSSEC - протокол, который разработали для повышения безопасности DNS - увеличивает размер ответов и тем самым делает amplification-атаки жирнее. Ключевой ресурс атакующего - открытые DNS-резолверы, принимающие запросы от любого IP.

Water torture / NXDOMAIN flood (Service Exhaustion Flood, T1499.002; Application Exhaustion Flood, T1499.003, Impact) - атака на уровне приложения. Объём трафика может быть скромным, но каждый запрос заставляет рекурсор выполнить полный цикл резолвинга. Ключевой ресурс - ботнет (T1583.005 / T1584.005, Resource Development) или скомпрометированная инфраструктура. Цель - исчерпать CPU и connection slots DNS-серверов.

ПараметрDNS AmplificationWater Torture / NXDOMAIN Flood
MITRE ATT&CKT1498.002 Reflection AmplificationT1499.002 / T1499.003 Exhaustion Flood
ВекторOpen resolver, отражение на жертвуBotnet, через рекурсор к авторитативнику
Подмена source IPОбязательнаНе обязательна
Объём трафикаВысокий (десятки Гбит/с)Относительно низкий
Кэш рекурсораНе задействованПолностью обходится
Основной уронКанал связиCPU, memory, connection pool
Сложность детекцииНизкая (volume spike)Высокая (выглядит как легитимный трафик)

По данным StormWall, в 2025 году DDoS-атаки на DNS входят в ТОП-5 векторов в мире, и на DNS нацелены до трети всех DDoS-атак.

Detection: метрики, корреляция в SIEM и анализ трафика​

1781901108642.webp

Для Blue Team критично выстроить baseline сетевых операций (NIST CSF DE.AE-01) до того, как прилетит инцидент. Water torture особенно коварна - NETSCOUT указывает, что её основные признаки: высокая загрузка CPU на DNS-серверах и высокий rate NXDOMAIN-ответов. Но эти метрики нужно правильно собирать и коррелировать.

Ключевые метрики для мониторинга​

На рекурсивном резолвере (Unbound, BIND, PowerDNS Recursor):
  • NXDOMAIN ratio - процент NXDOMAIN-ответов от общего числа. Baseline обычно 5-15%, при water torture поднимается до 60-90%
  • Cache hit ratio - процент запросов, обслуженных из кэша. Нормальный baseline для нагруженного рекурсора: 80-95%. При water torture падает ниже 50%
  • Outstanding queries - количество одновременных незавершённых рекурсивных запросов. Рост выше baseline на 300%+ - алерт
  • Unique QNAME entropy per source IP - если один IP запрашивает десятки уникальных поддоменов одного домена за секунду, это аномалия
На авторитативном сервере: inbound query rate по конкретной зоне (резкий рост от множества рекурсоров) и NXDOMAIN response rate по зоне.

Правила корреляции для SIEM​

Логика detection-правила (адаптируемая под Elastic SIEM, MaxPatrol SIEM, KUMA):

Water torture от внешнего ботнета: за скользящее окно 60 секунд с более чем 10 различных source IP приходят DNS-запросы к поддоменам одного домена второго уровня, при этом более 80% ответов авторитативника - NXDOMAIN. Порог рекурсора: NXDOMAIN ratio > 60% - warning, > 80% - critical.

Скомпрометированный внутренний хост: один внутренний source IP генерирует более 100 DNS-запросов в минуту с уникальными QNAME к одному домену. Это сигнал компрометации - хост может быть частью ботнета, генерирующего water torture.

DNS amplification входящая: объём входящего DNS-трафика (UDP/53) превышает baseline на порядок, множество source IP (отражатели), крупные DNS-ответы (>512 байт), один destination IP.

Пороговые значения зависят от инфраструктуры - прежде чем настраивать алерты, нужен минимум двухнедельный baseline (RS.AN-01 по NIST CSF: расследование начинается с уведомлений от detection-систем, а качество уведомлений определяется качеством baseline).

Анализ pcap при расследовании​

При подозрении на water torture - захват трафика: tcpdump -i eth0 port 53 -w dns_capture.pcap. В Wireshark фильтр dns.flags.rcode == 3 покажет все NXDOMAIN-ответы. Если в поле QNAME видны случайные строки перед доменом жертвы ([random_string].target.com) - water torture подтверждена. Утилита dnstop в реальном времени покажет top queried domains и top NXDOMAIN-источники.

Митигация DDoS на рекурсивных DNS-резолверах​

Рекурсор - первое звено, принимающее удар. Меры защиты DNS-сервера от DDoS делятся на конфигурационные и архитектурные.

Конфигурационные меры​

Rate limiting по source IP. В Unbound директива ip-ratelimit: 100 ограничивает число запросов с одного IP в секунду. Для корпоративного резолвера нормальный rate от одного хоста - 5-20 qps, при water torture - сотни. В BIND для ограничения входящих рекурсивных запросов используются fetches-per-server и fetches-per-zone; директива rate-limit в BIND - это механизм RRL для исходящих ответов авторитативника.

Ограничение: rate limiting по source IP не спасает, когда ботнет использует десятки тысяч уникальных адресов (каждый генерирует по 5-10 qps, в сумме - flood). Нужна комбинация с лимитом по QNAME.

Снижение таймаутов. В Unbound параметр jostle-timeout (по умолчанию 200 мс) управляет вытеснением старых запросов из очереди. Снижение до 100 мс ускоряет освобождение слотов для легитимных запросов при атаке. Параметр outgoing-num-tcp ограничивает число исходящих TCP-соединений - при water torture рекурсор не должен тратить TCP-ресурсы на запросы к NXDOMAIN.

DNS-прокси dnsdist. PowerDNS dnsdist ставится перед рекурсором и фильтрует трафик на основе правил. Пример конфигурации для замедления подозрительных клиентов:
Код:
addAction(
  MaxQPSIPRule(50),
  DelayAction(500)
)
Это замедляет (а не блокирует) клиентов, превышающих 50 qps - позволяет легитимным хостам за NAT продолжать работу.

Архитектурные меры​

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

Ограничение доступа. Рекурсор обязан отвечать только на запросы из доверенных сетей. В BIND: allow-recursion { 10.0.0.0/8; };. В Unbound: access-control: 10.0.0.0/8 allow. Открытый рекурсор - одновременно цель для water torture и оружие для DNS amplification атаки. Если ваш рекурсор торчит наружу без ACL - считайте, что вы уже участвуете в чьей-то атаке.

Защита авторитативных DNS-серверов​

Авторитативник - конечная цель water torture. Даже если рекурсоры выдерживают нагрузку, тысячи рекурсоров из разных сетей одновременно пересылают ему запросы к случайным поддоменам.

Response Rate Limiting (RRL)​

RRL - механизм, встроенный в BIND (начиная с 9.9.4), NSD и Knot DNS. Он ограничивает скорость идентичных или похожих ответов для одного destination-prefix. Конфигурация RRL в BIND:
Код:
rate-limit {
    responses-per-second 5;
    nxdomains-per-second 3;
    window 15;
    slip 2;
};
Параметр nxdomains-per-second 3 - не более 3 NXDOMAIN-ответов в секунду на один prefix /24. slip 2 - каждый второй заблокированный ответ отправляется с битом TC (truncated), заставляя легитимного клиента повторить запрос по TCP. Боты, не умеющие TCP, отсекаются.

Ограничение RRL: при масштабной water torture с десятков тысяч IP RRL не снимает входящую нагрузку на CPU авторитативника - запросы всё равно обрабатываются, даже если ответы дропаются. RRL хорош против amplification (снижает исходящий трафик), но для water torture нужны дополнительные меры.

Anycast DNS защита​

Anycast - архитектурное решение, при котором один IP анонсируется из нескольких географически распределённых точек. Входящий трафик маршрутизируется к ближайшему узлу, и при DDoS-атаке на DNS нагрузка размазывается между всеми anycast-нодами. Для организаций без собственной anycast-инфраструктуры - вторичные DNS-провайдеры с anycast (зоны реплицируются через AXFR/IXFR). При атаке на primary авторитативник secondary anycast-серверы продолжают обслуживать запросы.

RPZ как DNS-файрвол​

Response Policy Zones позволяют рекурсору блокировать запросы на основе policy-фидов. В контексте DDoS RPZ не защищает авторитативник напрямую, но помогает рекурсору не стать инструментом атаки: запросы к известным вредоносным доменам из RPZ-фида блокируются до отправки к авторитативнику. Это пересекается с задачей детекта DNS-туннелирования (T1071.004, Command and Control) - те же RPZ-фиды содержат домены C2-серверов.

Чеклист: hardening DNS-инфраструктуры​

Готовый перечень для передачи сетевой команде или включения в отчёт по аудиту безопасности DNS-инфраструктуры:
📚 Часть контента скрыта. Этот материал доступен участникам сообщества с рангом One Level или выше
Получить доступ просто — достаточно зарегистрироваться и проявить активность на форуме

По опыту аудитов DNS-инфраструктуры - пункты 1-3 не выполнены в большинстве организаций среднего размера, и именно они дают максимальный эффект при минимальных затратах. Пункты 4-9 требуют более глубокой настройки, но без них детектировать water torture до момента деградации сервиса практически невозможно. Защита DNS-сервера от DDoS работает как эшелонированная оборона: каждый слой снижает нагрузку на следующий, и ни один из них сам по себе не достаточен.

Тренд, который я вижу последние два года: water torture всё чаще комбинируется с DNS amplification в одной кампании. Первая фаза - amplification забивает канал, вторая - water torture добивает рекурсоры, которые переключились на резервные линки. К такому сценарию с двойным вектором мало кто готов, потому что митигация amplification (фильтрация по объёму) и митигация water torture (фильтрация по поведению) - разные наборы правил, разные пороги и зачастую разные точки фильтрации. Организации, которые закрывают только один вектор, остаются открыты ко второму. Выстраивать detection для обоих сценариев с baseline-метриками и правилами корреляции - не рекомендация, а необходимость. Если в вашем SIEM пока нет правил для DNS-аномалий, на codeby.net (Форум информационной безопасности - Codeby.net) есть тематический тред с playbook'ом по DNS DDoS detection - конфигурации dnsdist, пороги алертов и разбор реальных инцидентов.
 
Последнее редактирование модератором:
Мы в соцсетях:

Взломай свой первый сервер и прокачай скилл — Начни игру на HackerLab

Похожие темы

🚀 Первый раз на Codeby?
Гайд для новичков: что делать в первые 15 минут, ключевые разделы, правила
Начать здесь →
🧭 Навигатор · ИБ 2026
Не знаешь, какой трек твой?
5 направлений ИБ, реальные зарплаты и точка входа для каждого — в одном треде.
JuniorSenior+
100K → 600K+ ₽ /мес
Открыть навигатор →
🔴 Свежие CVE, 0-day и инциденты
То, о чём ChatGPT ещё не знает — обсуждаем в реальном времени
Threat Intel →
💼 Вакансии и заказы в ИБ
Pentest, SOC, DevSecOps, bug bounty — работа и проекты от проверенных компаний
Карьера в ИБ →

HackerLab