
Um kit de ferramentas JavaScript de front-end para criar ataques de rebinding de DNS.
Demo | Aviso de Segurança | Payloads Incluídos | FAQ
AVISO LEGAL: Este software é apenas para fins educacionais. Este software não deve ser utilizado para atividades ilegais. O autor não é responsável pelo seu uso. Não seja um babaca.
O DNS Rebind Toolkit é um framework JavaScript de front-end para desenvolver exploits de DNS Rebinding contra hosts e serviços vulneráveis em uma rede local (LAN). Ele pode ser usado para atingir dispositivos como Google Home, Roku, caixas de som WiFi Sonos, roteadores WiFi, termostatos "inteligentes" e outros dispositivos IoT. Com este toolkit, um atacante remoto pode contornar o firewall de um roteador e interagir diretamente com dispositivos na rede doméstica da vítima, exfiltrando informações privadas e, em alguns casos, até controlando os próprios dispositivos vulneráveis.
O ataque exige que uma vítima na rede alvo simplesmente siga um link ou veja um anúncio HTML contendo um iframe malicioso. A partir daí, o navegador web da vítima é usado como um proxy para acessar diretamente outros hosts conectados à sua rede doméstica. Essas máquinas e serviços alvo não estariam disponíveis para o atacante a partir da Internet. O atacante remoto pode não saber quais são esses serviços, ou quais endereços IP eles ocupam na rede da vítima, mas o DNS Rebind Toolkit lida com isso por meio de força bruta em centenas de endereços IP prováveis.
Internamente, esta ferramenta utiliza um servidor DNS whonow público executando em rebind.network:53 para executar o ataque de DNS rebinding e enganar o navegador web da vítima, fazendo-o violar a política de mesma origem. A partir daí, utiliza WebRTC para vazar o endereço IP privado da vítima, digamos 192.168.1.36. Ele usa os três primeiros octetos desse endereço IP local para adivinhar a sub-rede da rede e então injeta 256 iframes, de 192.168.1.0-255, entregando um payload para cada host que possivelmente esteja na sub-rede.
Este toolkit pode ser usado para desenvolver e implantar seus próprios ataques de DNS rebinding. Vários payloads de ataque do mundo real estão incluídos neste toolkit no diretório payloads/. Esses payloads incluem ataques de exfiltração de informações (e brincadeiras de rickroll) contra alguns dispositivos IoT populares, incluindo produtos Google Home e Roku.
Este toolkit é o produto de uma pesquisa de segurança independente sobre ataques de DNS Rebinding. Você pode ler sobre essa pesquisa original aqui.
# clone the repo
git clone https://github.com/brannondorsey/dns-rebind-toolkit.git
cd dns-rebind-toolkit
# install dependencies
npm install
# run the server using root to provide access to privileged port 80
# this script serves files from the www/, /examples, /share, and /payloads directories
sudo node server
Por padrão, o server.js serve payloads que visam Google Home, Roku, caixas de som Sonos, lâmpadas Phillips Hue e dispositivos Radio Thermostat executando seus serviços nas portas 8008, 8060, 1400, 80 e 80, respectivamente. Se você tiver um desses dispositivos na sua rede doméstica, navegue até http://rebind.network para uma bela surpresa ;). Abra o console do desenvolvedor e observe como esses serviços são explorados inofensivamente, fazendo com que dados sejam roubados deles e exfiltrados para o server.js.
Este toolkit fornece dois objetos JavaScript que podem ser usados em conjunto para criar ataques de DNS rebinding:
DNSRebindAttack: Este objeto é usado para lançar um ataque contra um serviço vulnerável executando em uma porta conhecida. Ele gera um payload para cada endereço IP que você escolher como alvo. Objetos DNSRebindAttack são usados para criar, gerenciar e se comunicar com múltiplos objetos DNSRebindNode. Cada payload lançado por DNSRebindAttack deve conter um objeto DNSRebindNode.DNSRebindNode: Este objeto de classe estática deve ser incluído em cada arquivo de payload HTML. Ele é usado para atingir um serviço executando em um host. Ele pode se comunicar com o objeto DNSRebindAttack que o gerou e possui funções auxiliares para executar o ataque de DNS rebinding (usando DNSRebindNode.rebind(...)) bem como exfiltrar dados descobertos durante o ataque para o server.js (DNSRebindNode.exfiltrate(...)).Esses dois scripts são usados em conjunto para executar um ataque contra hosts desconhecidos em uma LAN protegida por firewall. Um ataque básico se parece com isto:
http://example.com/launcher.html. O launcher.html contém uma instância de DNSRebindAttack.http://example.com/launcher.html está incorporado como um iframe. Isso faz com que o DNSRebindAttack em launcher.html comece o ataque.DNSRebindAttack usa um vazamento WebRTC para descobrir o endereço IP local da máquina da vítima (por exemplo, 192.168.10.84). O atacante usa essas informações para escolher uma faixa de endereços IP para atingir na LAN da vítima (por exemplo, 192.168.10.0-255).launcher.html lança o ataque de DNS rebinding (usando DNSRebindAttack.attack(...)) contra uma faixa de endereços IP na sub-rede da vítima, visando um único serviço (por exemplo, a API REST não documentada do Google Home disponível na porta 8008).DNSRebindAttack incorpora um iframe contendo payload.html na página launcher.html. Cada iframe contém um objeto DNSRebindNode que executa um ataque contra a porta 8008 de um único host definido na faixa de endereços IP sob ataque. Esse processo de injeção continua até que um iframe tenha sido injetado para cada endereço IP que está sendo alvo do ataque.payload.html injetado usa DNSRebindNode para tentar um ataque de rebind comunicando-se com um servidor DNS whonow. Se for bem-sucedido, a política de mesma origem é violada e o payload.html pode se comunicar diretamente com o produto Google Home. Normalmente, o payload.html será escrito de forma a fazer algumas chamadas de API para o dispositivo alvo e exfiltrar os resultados para o server.js executando em example.com antes de terminar o ataque e se autodestruir.Observe que, se um usuário tiver um dispositivo Google Home em sua rede com um endereço IP desconhecido e um ataque for lançado contra toda a sub-rede 192.168.1.0/24, então o ataque de rebind de um DNSRebindNode será bem-sucedido e 254 falharão.
Um ataque consiste em três scripts e arquivos coordenados: