
PolarDNS est un serveur DNS faisant autorité spécialisé, adapté aux tests d'intrusion et à la recherche de vulnérabilités.
PolarDNS est un serveur DNS faisant autorité spécialisé écrit en Python 3.x, développé à l'origine comme un outil de test de sécurité des résolveurs DNS récursifs depuis le côté serveur.
_
PolarDNS peut être utilisé pour tester :
Il prend en charge les protocoles UDP et TCP, et donne à l'opérateur un contrôle total sur la couche protocole DNS.
Le serveur PolarDNS peut produire une variété de réponses DNS non standard et non conformes, des réponses DNS violant les spécifications RFC, y compris des réponses DNS hautement anormales et malformées.
Cela peut être utile pour :
Il existe trois méthodes disponibles pour installer PolarDNS.
PolarDNS nécessite Python 3.11 ou plus récent et n'a aucune dépendance supplémentaire.
C'est la façon la plus simple d'installer et d'exécuter PolarDNS :
pip install polardns
polardns
Vous pouvez également cloner le dépôt et exécuter PolarDNS directement :
git clone https://github.com/oryxlabs/PolarDNS.git
cd PolarDNS
python polardns.py
Cette méthode est recommandée si vous prévoyez de déboguer ou modifier le code, ou ajouter de nouvelles fonctionnalités.
Vous pouvez également exécuter PolarDNS dans un conteneur Docker :
docker run -p 53:53/tcp -p 53:53/udp oryxlabs/polardns
Le serveur PolarDNS est configurable via le fichier de configuration polardns/polardns.toml.
Au démarrage de PolarDNS, vous devriez voir une sortie similaire à celle-ci :
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
Cela indique que le serveur est opérationnel.
Par défaut, le serveur commence à écouter sur toutes les interfaces sur les ports UDP et TCP 53 (0.0.0.0:53), prêt à répondre aux requêtes DNS.
Vous pouvez le tester localement en demandant l'exemple de requête suivant, qui devrait toujours résoudre quelque chose.
Demandez en mode UDP :
dig always.yourdomain.com @127.0.0.1
Demandez en mode TCP :
dig always.yourdomain.com @127.0.0.1 +tcp
Vous devriez recevoir un enregistrement A avec l'adresse IP 2.3.4.5, comme dans cette capture d'écran :
Cela indique que le serveur fonctionne correctement.
En demandant au serveur PolarDNS de résoudre quelque chose, vous lui donnez essentiellement des instructions sur la façon dont il doit vous répondre. Cela signifie que vous (le client) dictez au serveur PolarDNS le type de réponse qu'il doit produire pour vous.
Par exemple, considérez la requête suivante :
dig always.ttl2000000000.slp1500.yourdomain.com @127.0.0.1
Vous devriez recevoir à nouveau un enregistrement A avec l'adresse IP 2.3.4.5, mais cette fois avec une valeur TTL de 2 000 000 000 (63,4 ans) et après un délai de 1,5 seconde :
Dans l'exemple ci-dessus, nous avons utilisé la fonctionnalité de base always (qui résout toujours quelque chose), et nous l'avons combinée avec le modificateur ttl pour ajuster la valeur TTL et le modificateur slp pour attendre avant d'envoyer la réponse.
PolarDNS possède les fonctionnalités principales suivantes :
Il y a actuellement plus de 70 fonctionnalités différentes et 19 modificateurs de réponse implémentés. En utilisant différentes fonctionnalités et en les combinant avec différents modificateurs de réponse, il est possible de produire d'innombrables variantes d'une réponse donnée.
Voir le catalogue inclus de toutes les fonctionnalités et modificateurs de réponse implémentés.
Cela donne à PolarDNS la capacité de produire des réponses DNS hautement inhabituelles, anormales et même malformées, permettant à l'opérateur de voir comment le côté récepteur gère de telles situations et s'il est techniquement robuste et mature.
Quelques exemples de réponses DNS que PolarDNS peut produire incluent :
Cela peut conduire à la découverte de diverses vulnérabilités telles que :
Voir les présentations BlackHat MEA 2023 (y compris les diapositives BONUS) pour plus de détails, de nombreux autres exemples et cas d'utilisation.
Voici un aperçu de haut niveau de ce dont vous avez besoin pour commencer à tester les serveurs DNS récursifs.
example123.com via votre registraire de domaine préféré.polardns/polardns.toml sur chaque instance et modifiez votre nom de domaine et les adresses IP de vos serveurs de noms en conséquence - même configuration sur les deux.Maintenant votre infrastructure devrait être prête pour tester tout résolveur DNS récursif de votre choix.
Afin de commencer à tester un résolveur DNS récursif cible, vous devez diriger vos requêtes vers ce résolveur, par exemple :
dig always.example123.com @<TARGET-RESOLVER-IP>
Par exemple, pour tester le DNS public CloudFlare :
dig always.example123.com @1.1.1.1
Pendant la résolution, le résolveur DNS cible contactera vos serveurs de noms PolarDNS faisant autorité (gérant votre domaine de test example123.com) pour résoudre la requête.
L'un de vos serveurs PolarDNS répondra au résolveur DNS cible. Le résolveur recevra, analysera et traitera la réponse de PolarDNS. Ensuite, il renverra la réponse finale à vous (le client).
Voici un aperçu visuel du processus de test :

En demandant au résolveur DNS de résoudre divers sous-domaines sous votre domaine example123.com, vous pouvez effectivement tester le comportement du résolveur DNS et voir comment il gère diverses situations inattendues (réponses).
Par exemple, comment gère-t-il une situation où il obtient une réponse DNS malformée, une réponse avec un enregistrement injecté, ou un enregistrement contenant des caractères illégaux, et quel type de réponse envoie-t-il finalement à vous, le client ?
PolarDNS peut être intégré avec une variété de résolveurs DNS pour exécuter une suite complète de tests de bout en bout (E2E) de serveur DNS.
Cette intégration est propulsée par GitHub Actions, avec des modèles de référence (workflows) actuellement disponibles pour les six résolveurs DNS suivants :
Lorsqu'une action GitHub est déclenchée (par exemple, lors d'un commit ou manuellement), les workflows effectuent les étapes suivantes :
Pour ajouter vos propres tests E2E, placez-les simplement dans le répertoire test-e2e/.
Vous cherchez une suite de tests E2E complète pour serveur DNS ? Contactez [email protected].
Ajouter de nouvelles fonctionnalités à PolarDNS est essentiel pour découvrir des problèmes DNS véritablement inédits. Et avec PolarDNS, vous pouvez le faire relativement facilement.
PolarDNS vous permet d'ajouter rapidement une nouvelle fonctionnalité, d'essayer vos idées ou de développer une POC sans avoir à construire votre propre serveur DNS. Tout ce dont vous avez besoin est la capacité de comprendre le code Python et une curiosité pour expérimenter avec le protocole DNS.
Il existe un guide de contribution détaillé, étape par étape, contribution guide pour vous aider à démarrer. Vous y trouverez non seulement comment ajouter de nouvelles fonctionnalités, mais aussi comment déboguer PolarDNS, soumettre des problèmes, partager des idées, et plus encore.
Voici quelques excellentes ressources utiles lorsque vous jouez avec PolarDNS.
Liens liés au protocole DNS :
Serveurs DNS :
Merci à tous ceux qui ont contribué à PolarDNS ! ❤️