lunes, 26 de mayo de 2014

Atacando SSH con THC-Hydra

   Hydra es un programa creado por la gente de 'The Hacker Choice' (THC) para auditar el login contra diversos servicios como FTP, HTTP, SSH, LDAP, MYSQL, etc...   En este caso vamos a ver como atacar un login SSH con un usuario conocido previamente.

   Ataque mediante diccionario:

hydra -V -l juan -P /pentest/passwords/wordlists/rockyou.txt 192.168.1.20 ssh

Significado de los flags:


 -V:  Muestra los intentos de login, con usuario y contraseña a través de pantalla.
 -l: El usuario que estamos atacando por fuerza bruta.
 -P: El diccionario de contraseñas a probar. (Colección de diccionarios)
 192.168.1.20: La IP que estamos atacando (int_IP || ext_IP || DynamicDNS)
 ssh: Protocolo, carga el módulo de conexión SSH de hydra.

   Cuando el programa encuentre un login correcto, mostrará algo similar a lo que podemos ver en la siguiente imagen:


 
   En la imagen se muestra en el cuadro rojo, el HOST (192.168.1.20), el USUARIO (juan) y la contraseña válida encontrada (monkey12) y en naranja aparece el mensaje de que unas credenciales válidas han sido encontradas.  Ahora sólo nos quedaría conectarnos para comprobar si todo está bien:

ssh juan@192.168.1.20

  Ataque por fuerza bruta:

hydra -V -l juan -x 5:5:1 192.168.1.20 ssh

Significado de los flags:

 -V:  Muestra los intentos de login, con usuario y contraseña a través de pantalla.
 -l: El usuario que estamos atacando por fuerza bruta.
 192.168.1.20: La IP que estamos atacando (int_IP || ext_IP || DynamicDNS)
 ssh: Protocolo, carga el módulo de conexión SSH de hydra.
 -x 5:5:1 : Máscara para fuerza bruta:
                - El primer 5 significa desde cinco caracteres.
                - El segundo 5 significa hasta cinco caracteres.
                - El 1significa numérico.

   Por lo tanto las contraseñas a probar, serán todas las numéricas de cinco caracteres, desde 00000 hasta 99999, osea, 100.000 contraseñas posibles.  Lo cual es una cantidad viable, y como podemos ver en la imagen inferior el resultado es positivo en poco más de media hora:



   Otros posibles ejemplos serían:
-x 6:8:a1 : Contraseñas desde 6 hasta 7 caracteres, con letras minúsculas y números.
-x 5:6:aA1*=% : Contraseñas desde 5 hasta 6 caracteres, con letras mayúsculas, minúsculas, números y los símbolos: * = %

   Cuanto más compleja sea la máscara, mas intentos habrá que realizar para encontrar la clave correcta, por ejemplo la última máscara mostrada se traduce en un total teórico de intentos de: 76.579.181.250.

   En mis pruebas, atacando al equipo local, se consiguen una media de 276 intentos/minuto:



   Lo que se traduce en:


TIEMPO TEÓRICO NECESARIO

INTENTOS 76.579.181.250
Minutos 277.460.801,63
Horas 4.624.346,7
Días 192.681,11
Años 527,9


   Si nos fijamos en el cuadro anterior veremos que el ataque tiene muy pocas probabilidades de éxito debido a la cantidad de tiempo que tenemos que invertir para comprobar todas las posibles contraseñas, incluso cuando lo más seguro es que no tengamos que comprobar la totalidad de intentos, supongamos, un 10% (el 10% de 527.9 años serían 52.79 años), seguiría siendo algo inviable.

   Esto nos lleva a la necesidad de establecer contraseñas seguras en nuestros servicios, basadas en cinco puntos a tener en cuenta:

 1) Contraseñas que no se basen en palabras de diccionario (casa, Computer, madrid, arboleda...)
 2) Tengan una longitud mínima de 12 caracteres
 3) Contengan mayúsculas (A), minúsculas (a), números (1) y al menos dos símbolos (!$%&=?*_:-;/)
 4) No correspondan con ningún patrón de predicción (4lbert0, L0v3, $4l4m4nc4...)
 5) Evitas fechas y números de teléfono

   Como ejemplo de contraseña segura:  A_r2j=btS3$BL2
        - 14 caracteres
        - 3 símbolos
        - Mayúsculas
        - Minúsculas
        - Números

   Hydra solo llega a probar contraseñas por fuerza bruta de hasta 11 caracteres, por lo que en este ejemplo ni siquiera podríamos comprobar a crackear el password del usuario, pero suponiendo que nuestra contraseña contara con once caracteres, mayúsculas, minúsculas y los símbolos: _=$, el número de combinaciones sería de: 13.931.233.916.552.734.720, haz tus propias cuentas ;)

   Para establecer una contraseña siempre hay que tener en cuenta el nivel de criticidad de lo que se está protegiendo.  No es lo mismo una contraseña establecida para un servicio solo accesible internamente desde la organización, que un portal de acceso a la intranet, publicado y accesible desde todo internet, con esto no quiero decir que se  haga más hincapié en unas en detrimento de las otras, todas deberían ser contraseñas seguras.

No hay comentarios:

Publicar un comentario