
DNSChef - proxy DNS para testadores de penetração e analistas de malware
| | versão 0.4 | | / _|
| | __ ___ | | __| |
/ ` | ' / |/ | ' \ / _ \ |
| (| | | | _ \ (| | | | __/ |
_,|| ||/_|| ||___||
D O C U M E N T A Ç Ã O
DNSChef é um proxy DNS altamente configurável para Testadores de Penetração e Analistas de Malware. Um proxy DNS (também conhecido como "DNS Falso") é uma ferramenta usada para análise de tráfego de rede de aplicações, entre outros usos. Por exemplo, um proxy DNS pode ser usado para falsificar solicitações para "badguy.com" e apontá-las para uma máquina local para encerramento ou interceptação, em vez de um host real em algum lugar da Internet.
Existem vários proxies DNS por aí. A maioria simplesmente aponta todas as consultas DNS para um único endereço IP ou implementa apenas uma filtragem rudimentar. O DNSChef foi desenvolvido como parte de um teste de penetração onde havia a necessidade de um sistema mais configurável. Como resultado, o DNSChef é uma aplicação multiplataforma capaz de forjar respostas com base em listas de domínios inclusivas e exclusivas, suportando múltiplos tipos de registros DNS, correspondência de domínios com curingas, proxy de respostas verdadeiras para domínios não correspondentes, definição de arquivos de configuração externos, IPv6 e muitos outros recursos. Você pode encontrar uma explicação detalhada de cada um dos recursos e usos sugeridos abaixo.
O uso de um Proxy DNS é recomendado em situações onde não é possível forçar uma aplicação a usar algum outro servidor proxy diretamente. Por exemplo, algumas aplicações móveis ignoram completamente as configurações de proxy HTTP do sistema operacional. Nestes casos, o uso de um servidor proxy DNS como o DNSChef permitirá que você engane essa aplicação e faça com que ela encaminhe as conexões para o destino desejado.
Antes de começar a usar o DNSChef, você deve configurar sua máquina para usar um servidor de nomes DNS com a ferramenta em execução. Você tem várias opções com base no sistema operacional que vai usar:
Linux - Edite /etc/resolv.conf para incluir uma linha no topo com o host de análise de tráfego (ex: adicione "nameserver 127.0.0.1" se estiver executando localmente). Alternativamente, você pode adicionar um endereço de servidor DNS usando ferramentas como o Gerenciador de Rede. Dentro do Gerenciador de Rede, abra Configurações IPv4, selecione Apenas endereços Automáticos (DHCP) ou Manual na caixa suspensa Método e edite a caixa de texto Servidores DNS para incluir um endereço IP com o DNSChef em execução.
Windows - Selecione Conexões de Rede no Painel de Controle. Em seguida, selecione uma das conexões (ex: "Conexão Local"), clique com o botão direito e selecione propriedades. Na caixa de diálogo que aparece, selecione Protocolo IP (TCP/IP) e clique em propriedades. Por fim, selecione o botão de opção Usar os seguintes endereços de servidor DNS e insira o endereço IP com o DNSChef em execução. Por exemplo, se estiver executando localmente, insira 127.0.0.1.
OS X - Abra Preferências do Sistema e clique no ícone Rede. Selecione a interface ativa e preencha o campo Servidor DNS. Se estiver usando Airport, você terá que clicar no botão Avançado... e editar os servidores DNS a partir daí. Alternativamente, você pode editar /etc/resolv.conf e adicionar um servidor de nomes falso no topo (ex: "nameserver 127.0.0.1").
iOS - Abra Ajustes e selecione Geral. Em seguida, selecione Wi-Fi e clique na seta azul à direita de um Ponto de Acesso ativo na lista. Edite a entrada DNS para apontar para o host com o DNSChef em execução. Certifique-se de ter desativado a interface Celular (se disponível).
Android - Abra Configurações e selecione Redes sem fio e rede. Clique em Configurações de Wi-Fi e selecione Avançado após pressionar o botão Opções no telefone. Ative a caixa de seleção Usar IP estático e configure um servidor DNS personalizado.
Se você não tiver a capacidade de modificar as configurações de DNS do dispositivo manualmente, ainda existem várias opções envolvendo técnicas como ARP Spoofing, Rogue DHCP e outros métodos criativos.
Por fim, você precisa configurar um serviço falso para o qual o DNSChef apontará todas as solicitações. Por exemplo, se você está tentando interceptar tráfego web, deve iniciar um servidor web separado na porta 80 ou configurar um proxy web (ex: Burp) para interceptar o tráfego. O DNSChef apontará as consultas para o seu host proxy/servidor com serviços devidamente configurados.
O DNSChef é uma aplicação multiplataforma desenvolvida em Python que deve funcionar na maioria das plataformas que possuem um interpretador Python. Você pode usar o executável dnschef.exe fornecido para executá-lo em hosts Windows sem instalar um interpretador Python. Este guia se concentrará em ambientes Unix; no entanto, todos os exemplos abaixo foram testados e funcionam também no Windows.
Vamos experimentar o DNSChef com sua funcionalidade mais básica de monitoramento. Execute o seguinte comando como root (necessário para iniciar um servidor na porta 53):
# ./dnschef.py
_ _ __
| | version 0.2 | | / _|
__| |_ __ ___ ___| |__ ___| |_
/ _` | '_ \/ __|/ __| '_ \ / _ \ _|
| (_| | | | \__ \ (__| | | | __/ |
\__,_|_| |_|___/\___|_| |_|\___|_|
[email protected]
[*] DNSChef iniciado na interface: 127.0.0.1
[*] Usando os seguintes servidores de nomes: 8.8.8.8
[*] Nenhum parâmetro foi especificado. Executando em modo proxy completo
Sem nenhum parâmetro, o DNSChef será executado em modo proxy completo. Isso significa que todas as solicitações serão simplesmente encaminhadas para um servidor DNS upstream (8.8.8.8 por padrão) e retornadas ao host solicitante. Por exemplo, vamos consultar um registro "A" para um domínio e observar os resultados:
$ host -t A thesprawl.org
thesprawl.org has address 108.59.3.64
O DNSChef exibirá a seguinte linha de log mostrando hora, endereço IP de origem, tipo de registro solicitado e, mais importante, qual nome foi consultado:
[23:54:03] 127.0.0.1: fazendo proxy da resposta do tipo 'A' para thesprawl.org
Este modo é útil para monitoramento simples de aplicações, onde você precisa descobrir quais domínios elas usam para suas comunicações.
O DNSChef tem suporte total para IPv6, que pode ser ativado usando as flags -6 ou --ipv6*. Funciona exatamente como o modo IPv4, com a exceção de que a interface de escuta padrão é alterada para ::1 e o servidor DNS padrão é alterado para 2001:4860:4860::8888. Aqui está um exemplo de saída:
# ./dnschef.py -6
_ _ __
| | version 0.2 | | / _|
__| |_ __ ___ ___| |__ ___| |_
/ _` | '_ \/ __|/ __| '_ \ / _ \ _|
| (_| | | | \__ \ (__| | | | __/ |
\__,_|_| |_|___/\___|_| |_|\___|_|
[email protected]
[*] Usando modo IPv6.
[*] DNSChef iniciado na interface: ::1
[*] Usando os seguintes servidores de nomes: 2001:4860:4860::8888
[*] Nenhum parâmetro foi especificado. Executando em modo proxy completo
[00:35:44] ::1: fazendo proxy da resposta do tipo 'A' para thesprawl.org
[00:35:44] ::1: fazendo proxy da resposta do tipo 'AAAA' para thesprawl.org
[00:35:44] ::1: fazendo proxy da resposta do tipo 'MX' para thesprawl.org
NOTA: Por padrão, o DNSChef cria um listener UDP. Você pode usar TCP com o argumento --tcp discutido mais adiante.