
PolarDNS é um servidor DNS autoritativo especializado adequado para testes de penetração e pesquisa de vulnerabilidades.
O PolarDNS é um servidor DNS autoritativo especializado escrito em Python 3.x, originalmente desenvolvido como uma ferramenta para testes de segurança de resolvedores recursivos DNS do lado do servidor.
_
O PolarDNS pode ser usado para testar:
Ele suporta os protocolos UDP e TCP, e dá ao operador controle total sobre a camada do protocolo DNS.
O servidor PolarDNS pode produzir uma variedade de respostas DNS não padronizadas e não conformes, respostas DNS que violam as especificações RFC, incluindo respostas DNS altamente anormais e malformadas.
Isso pode ser útil para:
Existem três métodos disponíveis para instalar o PolarDNS.
O PolarDNS requer Python 3.11 ou mais recente e não possui dependências adicionais.
Esta é a maneira mais fácil de instalar e executar o PolarDNS:
pip install polardns
polardns
Você também pode clonar o repositório e executar o PolarDNS diretamente:
git clone https://github.com/oryxlabs/PolarDNS.git
cd PolarDNS
python polardns.py
Este método é recomendado se você planeja depurar ou modificar o código, ou adicionar novos recursos.
Você também pode executar o PolarDNS em um contêiner Docker:
docker run -p 53:53/tcp -p 53:53/udp oryxlabs/polardns
O servidor PolarDNS é configurável através do arquivo de configuração polardns/polardns.toml.
Ao iniciar o PolarDNS, você deve ver uma saída semelhante à seguinte:
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
Isso indica que o servidor está em execução.
Por padrão, o servidor começa a escutar em todas as interfaces nas portas UDP e TCP 53 (0.0.0.0:53), pronto para responder a consultas DNS.
Você pode testá-lo localmente fazendo a seguinte consulta de exemplo, que deve sempre resolver para algo.
Consulte no modo UDP:
dig always.yourdomain.com @127.0.0.1
Consulte no modo TCP:
dig always.yourdomain.com @127.0.0.1 +tcp
Você deve receber um registro A com o endereço IP 2.3.4.5, como nesta captura de tela:
Isso indica que o servidor está funcionando corretamente.
Ao pedir ao servidor PolarDNS para resolver algo, você está essencialmente dando instruções sobre como ele deve responder a você. Isso significa que você (o cliente) dita ao servidor PolarDNS que tipo de resposta ele deve produzir para você.
Por exemplo, considere a seguinte consulta:
dig always.ttl2000000000.slp1500.yourdomain.com @127.0.0.1
Você deve receber novamente um registro A com o endereço IP 2.3.4.5, mas desta vez com um valor TTL de 2.000.000.000 (63,4 anos) e após um atraso de 1,5 segundos:
No exemplo acima, usamos o recurso básico always (que sempre resolve para algo) e o combinamos com o modificador ttl para ajustar o valor TTL e o modificador slp para esperar antes de enviar a resposta.
O PolarDNS possui as seguintes funcionalidades principais:
Existem atualmente mais de 70 recursos diferentes e 19 modificadores de resposta implementados. Usando diferentes recursos e combinando-os com diferentes modificadores de resposta, é possível produzir inúmeras variantes de uma determinada resposta.
Consulte o catálogo incluído de todos os recursos e modificadores de resposta implementados.
Isso dá ao PolarDNS a capacidade de produzir respostas DNS altamente incomuns, anormais e até mesmo malformadas, permitindo que o operador veja como o lado receptor lida com tais situações e se o lado receptor é tecnicamente robusto e maduro.
Alguns exemplos de respostas DNS que o PolarDNS pode produzir incluem:
Estes podem levar à descoberta de várias vulnerabilidades, como:
Veja as apresentações do BlackHat MEA 2023 (incluindo slides BÔNUS) para mais detalhes, muitos mais exemplos e casos de uso.
Aqui está uma visão geral de alto nível do que você precisa para começar a testar servidores DNS recursivos.
example123.com, usando seu registrador de domínio favorito.polardns/polardns.toml em cada instância e altere seu nome de domínio e endereços IP do servidor de nomes de acordo - mesma configuração em ambos.Agora sua infraestrutura deve estar pronta para testar qualquer resolvedor DNS recursivo de sua escolha.
Para começar a testar um resolvedor DNS recursivo alvo, você deve direcionar suas consultas para o resolvedor DNS alvo, por exemplo:
dig always.example123.com @<IP-DO-RESOLVEDOR-ALVO>
Por exemplo, para testar o DNS público do CloudFlare:
dig always.example123.com @1.1.1.1
Durante a resolução, o resolvedor DNS alvo entrará em contato com seus servidores de nomes autoritativos PolarDNS (que gerenciam seu domínio de teste example123.com) para resolver a consulta.
Um de seus servidores PolarDNS responderá ao resolvedor DNS alvo. O resolvedor receberá, analisará e processará a resposta do PolarDNS. Em seguida, retornará a resposta final para você (o cliente).
Aqui está uma visão visual do processo de teste:

Ao instruir o resolvedor DNS a resolver vários subdomínios sob seu domínio example123.com, você pode efetivamente testar o comportamento do resolvedor DNS e ver como ele lida com várias situações inesperadas (respostas).
Por exemplo, como ele lida com uma situação em que obtém uma resposta DNS malformada, uma resposta com um registro injetado ou um registro contendo caracteres ilegais, e que tipo de resposta ele finalmente envia para você, o cliente?
O PolarDNS pode ser integrado com uma variedade de resolvedores DNS para executar um conjunto abrangente de testes de servidor DNS ponta a ponta (E2E).
Esta integração é alimentada por GitHub Actions, com modelos de referência (workflows) atualmente disponíveis para os seguintes seis resolvedores DNS:
Quando uma GitHub Action é acionada (por exemplo, em um commit ou manualmente), os workflows executam as seguintes etapas:
Para adicionar seus próprios testes E2E, basta colocá-los no diretório test-e2e/.
Procurando um conjunto de testes E2E completo para servidores DNS? Entre em contato com [email protected].
Adicionar novos recursos ao PolarDNS é essencial para descobrir problemas DNS verdadeiramente novos. E com o PolarDNS, você pode fazer isso com relativa facilidade.
O PolarDNS permite que você adicione rapidamente um novo recurso, teste suas ideias ou desenvolva um PoC sem ter que construir seu próprio servidor DNS. Tudo que você precisa é a capacidade de entender código Python e curiosidade para experimentar o protocolo DNS.
Existe um guia de contribuição detalhado e passo a passo para você começar. Lá, você encontrará não apenas como adicionar novos recursos, mas também como depurar o PolarDNS, enviar issues, compartilhar ideias e muito mais.
Aqui estão alguns recursos excelentes que são úteis ao brincar com o PolarDNS.
Links relacionados ao protocolo DNS:
Servidores DNS:
Obrigado a todos que contribuíram para o PolarDNS! ❤️