
PolarDNS è un server DNS autorevole specializzato, adatto per test di penetrazione e ricerca di vulnerabilità.
PolarDNS è un server DNS autoritativo specializzato scritto in Python 3.x, originariamente sviluppato come strumento per il test di sicurezza dei resolver DNS ricorsivi lato server.
_
PolarDNS può essere utilizzato per testare:
Supporta sia i protocolli UDP che TCP e offre all'operatore il pieno controllo sul livello del protocollo DNS.
Il server PolarDNS può produrre una varietà di risposte DNS non standard e non conformi, risposte DNS che violano le specifiche RFC, incluse risposte DNS altamente anomale e malformate.
Ciò può essere utile per:
Sono disponibili tre metodi per installare PolarDNS.
PolarDNS richiede Python 3.11 o successivo e non ha dipendenze aggiuntive.
Questo è il modo più semplice per installare ed eseguire PolarDNS:
pip install polardns
polardns
Puoi anche clonare il repository ed eseguire PolarDNS direttamente:
git clone https://github.com/oryxlabs/PolarDNS.git
cd PolarDNS
python polardns.py
Questo metodo è consigliato se prevedi di eseguire il debug o modificare il codice, o aggiungere nuove funzionalità.
Puoi anche eseguire PolarDNS in un contenitore Docker:
docker run -p 53:53/tcp -p 53:53/udp oryxlabs/polardns
Il server PolarDNS è configurabile tramite il file di configurazione polardns/polardns.toml.
All'avvio di PolarDNS, dovresti vedere un output simile al seguente:
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
Questo indica che il server è attivo e funzionante.
Per impostazione predefinita, il server inizia ad ascoltare su tutte le interfacce sulla porta UDP e TCP 53 (0.0.0.0:53), pronto a rispondere alle query DNS.
Puoi testarlo localmente chiedendo la seguente query di esempio, che dovrebbe sempre risolvere a qualcosa.
Chiedi in modalità UDP:
dig always.yourdomain.com @127.0.0.1
Chiedi in modalità TCP:
dig always.yourdomain.com @127.0.0.1 +tcp
Dovresti ricevere un record A con l'indirizzo IP 2.3.4.5, come in questo screenshot:

Questo indica che il server funziona correttamente.
Chiedendo al server PolarDNS di risolvere qualcosa, gli stai essenzialmente dando istruzioni su come dovrebbe risponderti. Ciò significa che tu (il client) detti al server PolarDNS che tipo di risposta dovrebbe produrre per te.
Ad esempio, considera la seguente query:
dig always.ttl2000000000.slp1500.yourdomain.com @127.0.0.1
Dovresti ricevere nuovamente un record A con l'indirizzo IP 2.3.4.5, ma questa volta con un valore TTL di 2.000.000.000 (63,4 anni) e dopo un ritardo di 1,5 secondi:

Nell'esempio sopra, abbiamo usato la funzionalità di base always (che risolve sempre a qualcosa), combinandola con il modificatore ttl per regolare il valore TTL e il modificatore slp per attendere prima di inviare la risposta.
PolarDNS ha le seguenti funzionalità principali:
Sono attualmente implementate oltre 70 caratteristiche diverse e 19 modificatori di risposta. Utilizzando diverse caratteristiche e combinandole con diversi modificatori di risposta, è possibile produrre innumerevoli varianti di una data risposta.
Vedi il catalogo incluso di tutte le caratteristiche e modificatori di risposta implementati.
Questo conferisce a PolarDNS la capacità di produrre risposte DNS altamente insolite, anomale e persino malformate, consentendo all'operatore di vedere come la parte ricevente gestisce tali situazioni e se è tecnicamente robusta e matura.
Alcuni esempi di risposte DNS che PolarDNS può produrre includono:
Questi possono portare alla scoperta di varie vulnerabilità come:
Vedi le presentazioni BlackHat MEA 2023 (inclusi i BONUS slides) per maggiori dettagli, molti più esempi e casi d'uso.
Ecco una panoramica di alto livello di ciò di cui hai bisogno per iniziare a testare i server DNS ricorsivi.
example123.com, utilizzando il tuo registrar di domini preferito.polardns/polardns.toml su ciascuna istanza e cambia il tuo nome di dominio e gli indirizzi IP dei nameserver di conseguenza: stessa configurazione su entrambi.Ora la tua infrastruttura dovrebbe essere pronta per testare qualsiasi resolver DNS ricorsivo di tua scelta.
Per iniziare a testare un resolver DNS ricorsivo di destinazione, devi indirizzare le tue query al resolver DNS di destinazione, ad esempio:
dig always.example123.com @<TARGET-RESOLVER-IP>
Ad esempio, per testare il DNS pubblico di CloudFlare:
dig always.example123.com @1.1.1.1
Durante la risoluzione, il resolver DNS di destinazione contatterà i tuoi nameserver PolarDNS autoritativi (che gestiscono il tuo dominio di test example123.com) per risolvere la query.
Uno dei tuoi server PolarDNS risponderà al resolver DNS di destinazione. Il resolver riceverà, analizzerà ed elaborerà la risposta da PolarDNS. Successivamente, restituirà la risposta finale a te (il client).
Ecco una panoramica visiva del processo di test:

Istruendo il resolver DNS a risolvere vari sottodomini sotto il tuo dominio example123.com, puoi effettivamente testare il comportamento del resolver DNS e vedere come gestisce varie situazioni inaspettate (risposte).
Ad esempio, come gestisce una situazione in cui ottiene una risposta DNS malformata, una risposta con un record iniettato o un record contenente caratteri illegali, e che tipo di risposta invia infine a te, il client?
PolarDNS può essere integrato con una varietà di resolver DNS per eseguire una suite completa di test end-to-end (E2E) del server DNS.
Questa integrazione è alimentata da GitHub Actions, con modelli di riferimento (workflow) attualmente disponibili per i seguenti sei resolver DNS:
Quando un'azione GitHub viene attivata (ad esempio su commit o manualmente), i workflow eseguono i seguenti passaggi:
Per aggiungere i tuoi test E2E, basta inserirli nella directory test-e2e/.
Cerchi una suite di test E2E completa per server DNS? Contatta [email protected].
Aggiungere nuove funzionalità a PolarDNS è essenziale per scoprire problemi DNS veramente nuovi. E con PolarDNS, puoi farlo in modo relativamente semplice.
PolarDNS ti consente di aggiungere rapidamente una nuova funzionalità, provare le tue idee o sviluppare un PoC senza dover costruire il tuo server DNS. Tutto ciò di cui hai bisogno è la capacità di comprendere il codice Python e la curiosità di sperimentare con il protocollo DNS.
C'è una guida contributiva dettagliata e passo-passo per iniziare. Lì troverai non solo come aggiungere nuove funzionalità, ma anche come eseguire il debug di PolarDNS, inviare problemi, condividere idee e altro ancora.
Ecco alcune risorse eccellenti utili quando si gioca con PolarDNS.
Link relativi al protocollo DNS:
Server DNS:
Grazie a tutti coloro che hanno contribuito a PolarDNS! ❤️