
PolarDNS — это специализированный авторитативный DNS-сервер, подходящий для тестирования на проникновение и исследования уязвимостей.
PolarDNS — это специализированный авторитативный DNS-сервер, написанный на Python 3.x, изначально разработанный как инструмент для тестирования безопасности DNS-резолверов со стороны сервера.
_
PolarDNS можно использовать для тестирования:
Он поддерживает как UDP, так и TCP протоколы, и предоставляет оператору полный контроль над уровнем протокола DNS.
Сервер PolarDNS может создавать множество нестандартных и несоответствующих спецификациям DNS-ответов, ответов, нарушающих RFC, включая крайне аномальные и искажённые DNS-ответы.
Это может быть полезно для:
Доступны три способа установки PolarDNS.
PolarDNS требует Python 3.11 или новее и не имеет дополнительных зависимостей.
Это самый простой способ установить и запустить PolarDNS:
pip install polardns
polardns
Вы также можете склонировать репозиторий и запустить PolarDNS напрямую:
git clone https://github.com/oryxlabs/PolarDNS.git
cd PolarDNS
python polardns.py
Этот способ рекомендуется, если вы планируете отлаживать или изменять код, либо добавлять новые функции.
Вы также можете запустить PolarDNS в Docker-контейнере:
docker run -p 53:53/tcp -p 53:53/udp oryxlabs/polardns
Сервер PolarDNS настраивается через файл конфигурации polardns/polardns.toml.
При запуске PolarDNS вы должны увидеть вывод, похожий на следующий:
python polardns.py
1741599804.9039893 | PolarDNS v1.6.1 server starting up
1741599804.9039893 | Using '/path/to/your/polardns/polardns.toml' config file
1741599804.9039893 | Starting listener at tcp://0.0.0.0:53
1741599804.9039893 | Starting listener at udp://0.0.0.0:53
Это означает, что сервер запущен и работает.
По умолчанию сервер начинает прослушивание всех интерфейсов на UDP и TCP порту 53 (0.0.0.0:53), готовый отвечать на DNS-запросы.
Вы можете проверить его локально, задав следующий тестовый запрос, который всегда должен разрешаться во что-то.
Запрос в режиме UDP:
dig always.yourdomain.com @127.0.0.1
Запрос в режиме TCP:
dig always.yourdomain.com @127.0.0.1 +tcp
Вы должны получить запись A с IP-адресом 2.3.4.5, как на этом скриншоте:
Это означает, что сервер работает корректно.
Запрашивая у сервера PolarDNS разрешение чего-либо, вы фактически даёте ему инструкции, как он должен вам ответить. Это означает, что вы (клиент) диктуете серверу PolarDNS, какой именно ответ он должен для вас сгенерировать.
Например, рассмотрим следующий запрос:
dig always.ttl2000000000.slp1500.yourdomain.com @127.0.0.1
Вы снова должны получить запись A с IP-адресом 2.3.4.5, но на этот раз со значением TTL 2 000 000 000 (63,4 года) и после задержки в 1,5 секунды:
В приведённом выше примере мы использовали базовую функцию always (которая всегда разрешается во что-то) и объединили её с модификатором ttl для настройки значения TTL и модификатором slp для ожидания перед отправкой ответа.
PolarDNS имеет следующие основные функциональные возможности:
В настоящее время реализовано более 70 различных функций и 19 модификаторов ответов. Используя разные функции и комбинируя их с различными модификаторами ответов, можно создать бесчисленное множество вариантов ответа.
Смотрите прилагаемый каталог всех реализованных функций и модификаторов ответов.
Это даёт PolarDNS возможность создавать крайне необычные, аномальные и даже искажённые DNS-ответы, позволяя оператору увидеть, как принимающая сторона обрабатывает такие ситуации и насколько она технически устойчива и зрела.
Некоторые примеры DNS-ответов, которые может генерировать PolarDNS, включают:
Это может привести к обнаружению различных уязвимостей, таких как:
Смотрите презентации BlackHat MEA 2023 (включая слайды BONUS) для получения более подробной информации, дополнительных примеров и сценариев использования.
Вот общий обзор того, что вам нужно для начала тестирования рекурсивных DNS-серверов.
example123.com, у вашего любимого регистратора доменов.polardns/polardns.toml на каждом экземпляре, изменив имя вашего домена и IP-адреса серверов имён соответствующим образом — одинаковая конфигурация на обоих.Теперь ваша инфраструктура готова для тестирования любого рекурсивного DNS-резолвера по вашему выбору.
Чтобы начать тестирование целевого рекурсивного DNS-резолвера, вы должны направлять запросы целевому DNS-резолверу, например:
dig always.example123.com @<TARGET-RESOLVER-IP>
Например, для тестирования публичного DNS CloudFlare:
dig always.example123.com @1.1.1.1
Во время разрешения целевой DNS-резолвер свяжется с вашими авторитативными серверами имён PolarDNS (управляющими вашим тестовым доменом example123.com), чтобы разрешить запрос.