Notas:
- “servidor” é, para a intenção deste post, uma funcionalidade de rede oferecido por um equipamento qualquer. Não estou me referindo a “um computador”, mas a aparelhos modernos conectados à rede como câmeras IP, NVRs, DVRs, modems, roteadores e media players;
- Meu interesse é descobrir senhas padrão telnet e ftp de equipamentos que possuo e minha abordagem será essa;
- O método de força bruta só é eficaz se o servidor não limitar o número de tentativas de login num determinado período de tempo. Medidas simples como bloquear o acesso do seu endereço IP por x minutos após y tentativas erradas de login já reduzem enormemente a capacidade de sucesso. Mas os equipamentos em que estou interessado geralmente não implementam qualquer proteção contra ataque de força bruta (edit: Injusto. Vários dos meus implementam medidas simples. Veja comentários);
- Qualquer comentário com perguntas onde sequer pareça que você está querendo usar isso em servidores que não estão sob sua administração será vetado.
Para quê?
Você pode pular essa parte indo direto para “NCRACK” se quiser.
Neste momento eu tenho cinco câmeras IP conectadas à rede de minha casa que tem servidor telnet embutido. O acesso telnet em equipamentos desse tipo geralmente oferece opções avançadas de diagnóstico e recuperação, como hard reset (apagamento da partição de configuração), mudança de configurações e comportamento e até backup e restauração do firmware. Este último é especialmente interessante porque minhas câmeras são genéricas, chinesas, e apesar de todas oferecerem opção de instalação de novo firmware, nenhum dos fabricantes tem sequer uma página na internet. Se o firmware de uma delas for corrompido, o único jeito de consertar é conseguindo uma igual (minhas câmeras são geralmente diferentes) para fazer uma complicada operação de desmontagem e dessoldagem para fazer uma cópia da memória flash com um gravador. Tendo um backup guardado do firmware original eu estou mais seguro.
O problema é que as câmeras tem essa funcionalidade, mas o fabricante não te diz a senha de acesso. Faz um certo sentido porque se você não souber o que está fazendo pode inutilizar a câmera (basta apagar um arquivo do bootloader) e nenhum fabricante quer essa dor de cabeça. Provavelmente a senha só é dita ao usuário pelo suporte técnico avançado quando há um problema sério ou o analista de suporte faz um acesso remoto à sua rede e com isso pode fazer o diagnóstico sem nem precisar dizer a senha. Mas…
Suporte técnico avançado?
Analista de suporte?
Suporte? Que suporte?
No final a existência desse acesso se torna uma vulnerabilidade, porque você não sabe a senha mas alguém na internet com certeza sabe. Todos esses equipamentos são baseados em Linux e o modo mais comum de obter a senha deles é, tendo acesso ao arquivo de firmware (que pode ser de uma atualização oferecida pelo fabricante), extrair o arquivo criptografado de senhas (geralmente etc/passwd) e rodar um programa de força bruta como o John The Ripper. Como o “ataque a um arquivo” não pode ser limitado como o ataque a um servidor, você testa milhares de possibilidades por segundo dependendo do poder computacional que tem disponível. E as senhas nem são tão complexas assim por isso fazendo uma pesquisa no Google você encontra diversos casos de senhas que foram descobertas “facilmente” dessa maneira.
Eu não estou particularmente preocupado com o acesso de terceiros às minhas câmeras porque eu procuro tomar medidas para que terceiros não tenham acesso fácil à minha rede, mas se eu tiver acesso não custa nada eu mudar essa senha default para dar um pouco mais de trabalho a um possível intruso. E, como eu disse anteriormente, o acesso telnet abre diversas possibilidades para o usuário avançado, incluindo mudar essa senha.
Mas já estou fugindo do assunto.
NCRACK
O Ncrack é um programa simples de linha de comando que permite fazer isso. Eu queria testar cinco câmeras e tinha uma dúzia de possíveis senhas. Parece pouco mas manualmente eu teria que fazer 5×12= 60 tentativas de login. Na décima eu já estaria tão entediado que começaria a errar a digitação (HA! Dependendo da senha eu já estou errando na primeira tentativa). Ncrack facilita muito isso porque eu pude colocar as 12 senhas (agora são 23) em um arquivo :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
123456 1234qwer admin adminlvjh123 antslq cat1029 h2014071 helpme hi3511 hi3516 hi3518 hiklinux juantech jvbzd klv123 OxhlwSG8 root S2fGqNFs tlJwpbo6 vizxv vizxv xc3511 xmhdipc |
E dei ao ncrack uma lista dos IPs das minhas câmeras e esse arquivo para ele tentar. A linha de comando que eu coloquei em um arquivo .bat ficou mais ou menos assim:
1 2 |
ncrack -vv -f -P ipcam.pwd --user root 192.168.10:23, 192.168.11:23, 192.168.12:23, 192.168.13:23, 192.168.14:23 pause |
No exemplo acima, “ipcam.pwd” é o nome que dei ao arquivo com a lista de senhas (uma por linha) e o usuário testado sempre será ‘root” (–user root).
Em 30 segundos (quando a lista tinha apenas 12 senhas) eu tinha as senhas de três das câmeras. As senhas das outras duas não estavam na minha lista.
Mais tarde quando acrescentei três câmeras rodei o teste de novo e consegui a senha de mais duas em menos de um minuto. Depois eu ampliei a lista de senhas para 23 e sem fazer qualquer esforço consegui obter a senha de mais uma câmera.
Se você quiser que o programa teste várias combinações de usuários e senhas pode colocar os nomes de usuários em um arquivo (um por linha) e indicar ao programa que o use, trocando o parâmetro ‘–u’ por ‘-U’ como abaixo:
1 2 |
ncrack -vv -f -P ipcam.pwd -U ipcam.users 192.168.10:23, 192.168.11:23, 192.168.12:23, 192.168.13:23, 192.168.14:23 pause |
No exemplo acima eu coloquei os usuários em um arquivo de nome ‘ipcam.users’.
Note que este é um exemplo bem simples em que eu usei uma lista especial de senhas com alta probabilidade. Ncrack tem outras opções e você pode usar listas muito maiores.
Taí uma coisa que me impede de colocar minhas câmeras pra acessar pela internet, tenho medo que descubram o dns delas e quebrem a senha por força bruta…
Infelizmente conectar qualquer coisa diretamente à internet é arriscado. Até o próprio modem! A quantidade de exploits existentes para os mais diversos modems impressiona. Daí ser recomendável que você tenha no mínimo um roteador entre o modem, que deve ser configurado também como roteador, e sua rede.
O ideal seria você ter um dispositivo “gateway” onde você tivesse que fazer logon primeiro antes de alcançar qualquer coisa na rede interna. E que esse gateway evidentemente bloqueasse qualquer IP por x minutos após y tentativas erradas de login.
No caso das câmeras isso seria o NVR/DVR. Porém o danado usualmente vem com seu próprio pacote de vulnerabilidades.
Nota: mudar a senha default do usuário root nesses aparelhos é possível e desejável, mas é arriscado. É informado aqui que a Foscam FI9820 nem tem senha para o usuário root, mas se você colocar uma para proteger o acesso telnet a câmera deixa de dar boot porque vários scripts de inicialização dependem da falta dessa senha.
Ampliei a lista de possíveis senhas para 23 e expliquei como testar vários nomes de usuário também
Eu fui injusto ao dizer que esses dispositivos não tem qualquer proteção contra ataque de força bruta. Em várias das minhas câmeras o servidor telnet faz uma pausa de 3 ou 4 segundos quando você entra credenciais incorretas e se você errar três vezes é desconectado. Isso não é o bastante para impedir um ataque de dicionário como esse que estou fazendo com o ncrack, mas já dificulta enormemente o ataque tradicional.
Ignorando o tempo que leva para reconectar de novo a cada desconexão forçada, só é possível testar uma combinação a cada 3 segundos. Isso dá meras 28800 combinações por dia. Para você ter uma idéia, só o dicionário Houaiss já tem mais de 228 mil palavras. Eu consegui tempos curtos por usar um dicionário especializado, de senhas default, mas leve em conta que o atacante também vai usar um e mudar a senha default desses dispositivos pode não ser fácil.
Eu não vira na ocasião, mas dois meses depois que postei isso foi publicada a lista de credenciais que o Mirai usou para invadir mais de meio milhão de dispositivos IoT. São 61 combinações.