Kill-Router 1.0 :: Brute Force em Massa em Roteadores e Painéis encontrados no Shodan com Python

Share:


De anos em anos, surgem várias pesquisas relacionadas a força das senhas mais utilizadas no mundo, sejam elas muito fracas, ou muito obvias vinda de empresas muito influentes dentro do ramo da tecnologia da informação e segurança da informação como a Kaspersky, Symantec e etc ou quando são vazadas de alguma fonte pública e privada por aí. Muitos fabricantes de equipamentos como câmeras, roteadores e switches gerenciáveis, usam muitas dessas senhas como default em seus equipamentos como admin, 123456, guest, administrator e etc, confiando a segurança somente ao administrador que fará a gestão dos recursos do equipamento, o que de fato não é errado. O errado é quando o próprio administrador se isenta da responsabilidade da segurança dos painéis administrativos abertos a internet com essas senhas default como se nada de ruim pudesse acontecer.

Dando uma olhada no blog do Anchises, vi que o LeakedSource fez uma análise nas 100 milhões de senhas vazadas no começo de junho do VK, a maior rede social russa e constatou que o top 50 passwords eram no mínimo senhas obvias e comuns, provando que qualquer um tentasse invadir o perfil, evidentemente conseguiria sem problema algum como mostra a table abaixo:



Nos últimos anos o uso de serviços como Censys e o Shodan vem facilitando o acesso a praticamente todos os equipamentos que estão abertos a internet, e a exploração desses descuidos com senhas fracas se torna um prato cheio para pessoas mau intencionadas por diversos motivos, como roubo do servidor, vazamento e venda de informação, criação de botnets e etc.

Não faz muito tempo que abordei essa diretiva

Há algum tempo desenvolvi uma ferramenta escrita em Python para fazer Brute Force em roteadores e painéis administrativo, o Kill-Router, onde já fizemos explicando algumas funcionalidades do mesmo neste post. A ferramenta era bem simples e deixei o projeto parado no Github por algum tempo por não ter nada de especial. Esses dias estava lendo a documentação da API do Shodan por indicação de alguns amigos, e decidi então complementar algumas funcionalidades relacionadas ao buscador

A documentação da API é bem completa, de forma com que você com a autorização da sua API Key fornecida após o cadastro no site, consegue enviar dorks para o buscador, que te retorna uma resposta em formato JSON com alguns, ou até todos os resultados encontrados com base na Dork fornecida. Para testar utilizei o termo 'zabbix' pra busca como dork:

O retorno de cada resultado encontrado vem mais ou menos nesse formato
 {u'ip': 3497740638, u'hash': 195745723, u'port': 80, u'transport': u'tcp', u'uptime': 33, u'version': u'2.4.6', u'location': {u'city': u'Austin', u'region_code': u'TX', u'area_code': 512, u'longitude': -97.7344, u'country_code3': u'USA', u'latitude': 30.3544, u'postal_code': u'78757', u'dma_code': 635, u'country_code': u'US', u'country_name': u'United States'}, u'product': u'Apache httpd', u'http': {u'redirects': [], u'title': None, u'robots': None, u'server': u'Apache/2.4.6 (CentOS) PHP/5.4.16', u'host': u'208.123.73.94', u'html': u'', u'location': u'/', u'sitemap': None, u'html_hash': 0}, u'timestamp': u'2016-06-11T18:45:51.400583', u'hostnames': [], u'link': u'Ethernet or modem', u'org': u'Netgate', u'data': u'HTTP/1.1 302 Found\r\nDate: Sat, 11 Jun 2016 18:45:49 GMT\r\nServer: Apache/2.4.6 (CentOS) PHP/5.4.16\r\nX-Powered-By: PHP/5.4.16\r\nLocation: http://zabbix.atx.netgate.com/zabbix\r\nContent-Length: 0\r\nContent-Type: text/html; charset=UTF-8\r\n\r\n', u'asn': u'AS30312', u'info': u'(CentOS) PHP/5.4.16', u'deprecated': {u'opts.robots': {u'new': u'http.robots', u'eol': u'2016-07-01'}, u'opts.pem': {u'new': u'ssl.chain', u'eol': u'2016-07-01'}, u'html': {u'new': u'http.html', u'eol': u'2016-07-01'}, u'opts.sitemap': {u'new': u'http.sitemap', u'eol': u'2016-07-01'}, u'title': {u'new': u'http.title', u'eol': u'2016-07-01'}}, u'isp': u'Core NAP, L.P.', u'cpe': [u'cpe:/a:apache:http_server:2.4.6'], u'domains': [], u'ip_str': u'208.123.73.94', u'os': None, u'_shodan': {u'options': {}, u'module': u'http', u'crawler': u'545144fc95e7a7ef13ece5dbceb98ee386b37950'}}  

Como tratar isso também não foi muito problema, eu precisava ver somente algumas informações importantes de forma mais organizada, então verifiquei os itens do JSON e imprimi somente as que eu queria:


Para realizar o Brute Force, eu utilizei o método convencional do Kill-Router, porém com algumas modificações. Na verdade, ele só chama a função convencional de brute force mas agora lendo os resultados da dork e realizando o brute force para cada resultado exibindo o status dos testes e printando caso o resultado seja positivo. 

Kill-Router :: Instalação do Projeto

Para realizar a instalação do Kill Router, basta seguir o passo a passo informado nesse artigo que escrevi há uns meses.

Kill-Router :: Brute Force em senhas de Roteadores e Painéis utilizando Python


Shodan Search :: Configurando a API

Para realizar a busca pelo Shodan, primeiramente será necessário utilizar uma API de desenvolvimento do Shodan. Antes de mais nada será necessário você se cadastrar no Shodan e gerar sua API Key

Link de cadastro: https://account.shodan.io/register

Após confirmar seu cadastro, o Shodan vai gerar uma Hash de desenvolvedor pra você. Copie essa hash e cole na linha 20 do código para realizar a consulta.




Kill-Router :: Fazendo buscas e Brute Force em resultados do Shodan

Para realizar uma pesquisa, você deve passar pelo menos o parâmetro -s com o termo a ser buscado. Caso você esteja utilizando uma Key free, as querys são bem limitadas como City:SP e etc, então só foi testado termos bem simples como camera, apache2, router e etc.

Os comandos são os mesmos do Kill Router ou seja:
 * -l / --passlist :: Caminho para a Passlist  
 * -u / --user :: Usuário que será testado (Default: Admin)  
 * -p / --port :: Porta que será realizado o teste (Default: 80) ou no caso do Shodan, a porta retornada  
 * -m / --method :: HTTP ou HTTPS (Default: HTTP)   

Para realizar um scanning com as opções default basta utilizar:
 # ./kill-router-py -s camera   

O Shodan irá retornar um JSON com os resultados da busca, que não serão todos disponíveis para o teste de acordo com a sua API, contendo algumas informações relevantes como host, porta do serviço localização e o Header do serviço, se houver.


Logo em seguida será questionado se você deseja carregar alguma wordlist padrão do sistema.
Tomei a liberdade de carregar algumas, sendo elas 10 passwords mais fracos (média, devo ter complementado e ter uns 16 agora, rs), 100 passwords mais fracos, a lista vazada do Ashley Madison caso você esteja com tempo e uma pequena lista com passwords bem fracos, ou até mesmo, meio bestas. Basta escolher uma delas, isto é, se você não especificou nenhuma outra wordlist com o parâmetro -l.


É só selecionar uma delas e deixar que o script conclua os testes de acordo com o planejado. Ele faz algumas verificações antes de iniciar o teste real, como tentativa de conexão para ver se o host ou serviço ainda está ativo e verifica se o mesmo está nas condições de ser testado.



Kill-Router :: Logs 

Como o script trabalha com uma grande quantidade de informações na tela, fiz um esqueminha para ele gerar um arquivo CSV com todas as entradas dadas como positivo. Dentro da pasta do Kill-Router, será criado um arquivo chamado results.csv. Dentro dele serão armazenados os resultados do brute force como

host; porta;usuario;senha


Kill-Router :: Outras Opções de Varredura

Segue uma série de combinações a mais que foram inseridas nessa nova versão do Kill Router
 Especificando uma Wordlist  
 # ./kill-router.py -s camera -l /home/matheus/passlist.txt   
   
 Especificando um usuário   
 # ./kill-router.py -s camera -u root   
   
 Realizando o brute force com HTTPS  
 # ./kill-router.py -s camera -l /home/matheus/passlist.txt -m https  


Quer contribuir? Mande algum pull request para o git do projeto :)
Link: https://github.com/msfidelis/Kill-Router-


2 comentários:

  1. Me tira uma duvida, quando o kill-router me retorna essa msg:
    /kill-router.py --shodan apache2


    ==========================[STARTING TEST]==========================
    STARTING TEST ON HOST: 192.168.0.1:80

    [X] INVALID TEST
    [X] NO CONNECTION

    Isso quer dizer que o roteador não aceita esse tipo de ataque? Ou estou fazendo alguma coisa errada?

    ResponderExcluir