Admin
Администратор
DNS Hijacking
Часть I: Архитектура резолверов
DNS построен на доверии, когда то в бородатых нулевых годах подлинность записей вообще не проверялась пришёл ответ, значит он правильный. Даже сейчас резолверы кэшируют неправильные RR из Additional Section без разбору, если они выглядят нормально. Вот это отношение к glue записям и другим доп данным основной вектор для атак.
Рекурсивный резолвер это доверенный кэширующий прокси. Берёт запрос от стаба резолвера клиента, проходит всю цепочку от корневых NS до авторитетного сервера зоны, кэшит разделы Answer, Authority и Additional, отдаёт результат. Если DNSSEC валидация включена, проверяет подписи основного ответа, но дополнительные записи не перепроверяет просто верит им.
После 0x20 encoding, DNS Cookies и обязательной DNSSEC валидации казалось, Kaminski вектор мёртв. Но в последние годы он вернулся, стал более рабочим. Теперь атакуют с десятки раз меньшим трафиком из за новых уязвимостей и старых ошибок в архитектуре, которые никто так и не пофиксил.
CVE-2025-40778: ошибка в bailiwick checking. Механизм должен принимать записи только для запрошенной зоны и её подзон. В уязвимых версиях логика ломается запрос идёт в родительскую или стороннюю зону, а в Additional Section приходит glue. Резолвер думает что это нормально, кэшит запись. Это дает возможность управлять любым доменом в любой зоне и использовать glue для других зон. В BIND 9 включая S1, с агрессивным кэшированием NSEC3 проверка отключена ради скорости.
CVE-2025-40780: слабый PRNG в старых BIND 9.16–9.20. TXID и порт источника предсказуемы, спуф работает 2–7 секунд после запроса. За это время PRNG делает 8–14 итераций, надежность падает до 2–6 бит. Две уязвимости вместе дают 92–96% успеха при 12–30 тысячах спуф пакетов в секунду, обычный VPS тянет.
Спуфинг работает так, пакеты идут с IP авторитетного сервера, TXID и порт угадываются по таймингу в birthday атаке, ответ копия легитимного с нагрузкой в Additional Section. Резолвер видит все правильным и кэшит нагрузку как данные.
Rebirthday атака через ECS. Запрос отправляется из той же /24 подсети с ECS равной подсети. Резолвер кэшит по этому ключу. Весь трафик из подсети уходит на контролируемый IP. Идеально для работы с CDN трафиком по регионам без глобального шума.
Агрессивное кэширование NSEC3 как оружие. Резолвер кэшит отрицательные ответы до 48 часов, работает это примерно так: на фишинговой странице скрипт триггерит запросы на поддельный домен, приходит NXDOMAIN с NSEC3 proof. Резолвер кэшит отрицательный ответ на целые сутки. 2FA не доходят, пользователь в панике вводит их на фейке.
Эволюция KeyTrap в RUC. BIND 9.20 и pdns recursor добавили оптимизацию, DNSKEY и RRSIG кэшируются без полной валидации цепочки. В одном пакете приходит 5–10 тысяч сигнатур, CPU резолвера скачет на 100% на несколько секунд, параллельно добавляется нагрузка через CVE-2025-40778. Минимизацию QNAME многие отключают на переадресации и NXDOMAIN, обход простой.
Вектор выглядит так, скан по сигнатурам уязвимых BIND 9.18–9.20 и Unbound без патчей в LATAM, Africa, SEA, CIS. Ждут легит запроса, потом за 2–7 секунд шлют 15–30 тысяч спуф пакетов с угаданным TXID/port и нагрузкой glue/NS. Нагрузка кэшируется на 4–8 часов, поднимается свой NS. Корневые NS чистые, whois чистый, детекта скорее всего нет. Плюс усиление через ANY запросы на HINFO/TXT/AXFR с DO+CD флагами, ответ раздувается до 30–50 КБ, усиление до 100x.
Часть II: Локальный захват без выхода в сеть
Чистые техники полностью локальные, без спуфа и внешнего трафика.
Linux: редактирование /etc/resolv.conf ловится EDR сразу, но есть способы. Можно зацепить слушатель systemd resolved на 127.0.0.53:53 и переписывать ответы прямо в памяти. Или использовать LD_PRELOAD/LD_AUDIT с перехватом getaddrinfo и gethostbyname. Третий вариант memfd_create с кастомным ld.so в памяти, чистый процесс. Детект возможен только через eBPF хуки или strace/lsof.
Windows: 68% корп ещё работают с NBT NS и без обязательной подписи SMB. Выборочное перенаправление доменов на WPAD или DoH прокси возможно, остальной трафик идёт в 1.1.1.1 или 8.8.8.8.
Android 14/15: Magisk или KernelSU с eBPF хуком на socket/bind/connect либо nftables меткой по uid/gid и маршрутизацией по политике. Приложение думает, что работает через DoH/DoT, но трафик конкретного uid уходит через наш интерфейс.
Суть всех методов это выборочный перехват. Браузер и 99% трафика идут в обычный Cloudflare/Quad9, только целевые приложения через наш DoH прокси. Выглядит как обычная работа, EDR скорее всего не детектит.
Часть III: Захват на уровне роутера
Домашние и ISP роутеры это парк. В них накопилось тысячи непатченных уязвимостей, которые никто не трогал годами.
Производители не спешат с обновлениями. MediaTek MT798x уязвим через CVE-2025-8921, обход аутентификации в /diag.ping/traceroute, потом повышение прав в uhttpd, разблокировка flash памяти, извлечение ключа шифрования и заливка своего ПО. TP-Link Archer серии AX/BE/UE падают довольно быстро CVE-2025-7850 плюс CVE-2024-21827 дают полный root за два HTTP запроса. ASUS RT-AX/BE тоже свежо уязвим, обход аутентификации в диагносте срабатывает при пустом JSON POST без токена.
ISP оборудование отдельная история. Huawei, ZTE, Sagemcom хранят учётные данные в коде и имеют старые RCE уязвимости через SOAP. После компрометации роутера начинается работа внутри, фильтрация пакетов на eBPF/nftables, собственный корневой сертификат в системном хранилище, выборочный DoH/DoT прокси под домены, режим моста с ARP подменой. Отсюда и начинается движение по сети.
Часть IV: Масштабный hijacking публичных и ISP резолверов
Крупные резолверы отреагировали быстро на CVE-2025-40778, закрыли за 72 часа после раскрытия. Но остальной мир не торопится, Shadowserver и SecurityScorecard примерно 38% ISP резолверов и 24% корпоративных остаются открыты.
При таких условиях успех гарантирован, 88–96% при 15–40 тысячах пакетов в секунду. И время работает в нашу пользу. Первые 0–40 минут живем спокойно, пока мониторинг и логи сертов только начинают замечать аномалию. Потом 1–5 часов уходит на то, чтобы индикаторы попали в базы. Потом после 6–48 часов начинается массовая очистка кэша и политик. На региональных ISP, которые вообще никого не слушают, можно жить неделями и месяцами. Окно возможностей огромное.
Часть V: Захват авторитетного сервера и регистратора
Самый надёжный способ, перехват аккаунта регистратора. Это может быть фишинг EPP ключей, социалка, SS7 атака на 2FA или обычный брут пароля. Способов много, но результат один.
Дальше идёт частичный хайджекинг. Через CVE-2025-40778 в upstream ISP резолвере внедряется glue, и поддомены начинают уходить на контролируемый NS. Корневые NS остаются чистыми, whois показывает оригинальные данные, вроде бы всё нормально. Защиты практически нет, блокировка реестра включена меньше чем на 4% высокорисковых доменов. DNSSEC с NSEC3 везде, но TTL ключей DNSKEY обычно стоит на год, так что в запасе имеет месяцы спокойной работы.
Но в идеале комбинированная атака, захваченный роутер плюс частичное заражение glue создают идеальный шторм, видны лишь сетевые проблемы и нет понимания масштаба того, что происходит.
Часть VI: Интеграция
По итогу, DNS хайджекинг стал частью стандарта, используются Masscan и DPDK спуфер под CVE-2025-40778/40780, готовые пакеты под MediaTek/Realtek/Qualcomm/TP-Link/ASUS с автоматическим извлечением ключа и подписью ПО. Сюда же DoH/DoT прокси на Caddy/h2 с автопрохождением ACME DNS 01 и политики проверки зон с подменой по UID процесса. Основное направление многоуровневый выборочный хайджекинг, чистый DNS для основных доменов, заражение только целевых сервисов. Результат полный контроль при почти нулевом шуме, детект возможен только по аномалиям в логах сертов в реальном времени, но это мониторят менее 0.5% компаний.