
Um servidor DNS MITM em Python baseado em expressões regulares com suporte a ataques de DNS Rebinding.
Atualização 14/04/2020 - Suporte a Python 2 removido e código alterado para Python3
Agora com round-robin e opções melhoradas!
Bugs: @crypt0s - Twitter
[email protected] - E-mail
Um servidor DNS baseado em expressões regulares em Python!
USAGE:
./fakedns.py [-h] -c Config path [-i interface IP address] [--rebind]
O dns.conf deve ser configurado da seguinte maneira:
[RECORD TYPE CODE] [python regular expression] [answer] [rebind answer]
A resposta pode ser um endereço IP ou a string self,
o açúcar sintático self será traduzido para o endereço IP local da sua máquina atual, como 192.168.1.100.
Se não houver correspondência, o servidor DNS tentará resolver a solicitação usando o servidor DNS que você tiver configurado em sua máquina local e fará proxy da solicitação para esse servidor em nome do usuário solicitante.
- A
- TXT
- AAAA
- PTR
- SOA
- MX
- CNAME
- Supports DNS Rebinding
- Supports round-robin
Regras round-robin são implementadas. Cada vez que um cliente solicita uma regra correspondente, o FakeDNS fornecerá o próximo IP da lista de IPs fornecida na regra.
Uma lista de IPs é separada por vírgulas.
Por exemplo:
A robin.net 1.2.3.4,1.1.1.1,2.2.2.2
É uma regra round-robin para robin.net que fornecerá respostas apontando para 1.2.3.4, 1.1.1.1 e 2.2.2.2, iterando nessa ordem toda vez que uma solicitação for feita por qualquer cliente para a entrada robin.net.
NOTA : Esses IPs não são incluídos como uma lista para o cliente na resposta - eles ainda recebem apenas um IP na resposta (isso pode mudar depois)
O FakeDNS suporta regras de rebinding, o que basicamente significa que o servidor aceita um certo número de solicitações de um cliente para um domínio até um limite (padrão 1 solicitação) e então muda o endereço IP para outro diferente.
Por exemplo:
A rebind.net 1.1.1.1 10%4.5.6.7
Significa que temos um registro A para rebind.net que resolve para 1.1.1.1 nas primeiras 10 tentativas. Na 11ª solicitação de um cliente que já fez 10 solicitações, o FakeDNS começa a fornecer o segundo IP, 4.5.6.7
Você pode usar uma lista de endereços aqui e o FakeDNS fará round-robin para você, assim como na regra "regular".
(somente localhost sem etapas extras)
Eu tive muito sucesso testando/desenvolvendo o FakeDNS no Docker porque é mais fácil do que executá-lo nativamente em instalações modernas do Ubuntu, que já possuem seus próprios serviços DNS rodando na porta 53.
Se você quiser testar, pode fazê-lo sem muito trabalho seguindo estes passos:
Supondo que você esteja dentro do diretório FakeDns: sudo docker run --interactive --tty --volume \pwd`:/opt/FakeDns -p 5353:53/udp python:3.8 /opt/FakeDns/fakedns.py -c /opt/FakeDns/dns.conf.example. E para testar, você pode executar nslookup -port=5353 testrule.test 127.0.0.1, que deve retornar 1.1.1.1` na sua primeira solicitação
Ou, se você preferir usar o docker-compose, basta executar docker-compose up e usar o mesmo teste acima.