Ataques y Auditorías de Contraseñas
Las contraseñas son, al menos a día de hoy, el método más utilizado para realizar el proceso de autenticación. Si bien es cierto que existen otros métodos de autenticación como el basado en certificados, llaves electrónicas etc. el porcentaje de este tipo de autenticación es residual y para casos muy concretos.
Por este mismo motivo, los ataques a contraseñas, y a su representación vía hash, son uno de los vectores de ataque a tener en cuenta.
En el siguiente apartado se muestran los conocimientos necesarios para aprovechar ciertos vectores de ataques a contraseñas (online) así como a los hashes de las mismas (offline).
Tipos de ataques a contraseñas
Tratan de averiguar las credenciales de un usuario del sistema. Hay 2 ataques principales:
Password Guessing
Consiste en intentar adivinar las credenciales para acceder al sistema, suele ejecutarse ante formularios de acceso web o bien en servicios de terminal remota, como por ejemplo FTP, Telnet y SSH.
- Suelen generar mucho tráfico y logs en víctima
- Situaciones de bloqueo de cuentas
Para poder realizar la tarea de averiguar las contraseñas necesitamos recopilar cierta información previa además de tener que utilizar unas herramientas específicas que automatizan el proceso de autenticación en un determinado servicio.
- Usuarios de los sistemas.
- Diccionarios de posibles contraseñas.
- Aplicaciones de fuerza bruta.
Necesitamos un listado de posibles usuarios, para esta recopilación podemos valernos de las técnicas de reconocimientos de usuarios vistas anteriormente en la Fase de escaneo.
- The harvester
- OSINT
Recopilación de contraseñas
De la misma manera, necesitamos disponer de un diccionario de posibles contraseñas utilizadas por los usuarios, existen varias maneras de recopilar este diccionario.
- Diccionarios de contraseñas públicos
Existen por la red numerosos listados de posibles contraseñas ajustadas a cierto idioma, temática etc.
Es necesario disponer de un diccionario lo más ajustado y reducido posible de contraseñas debido a que la ejecución de este tipo de técnicas es bastante lenta. En los siguientes enlaces tenéis disponibles varios listados de contraseñas que pueden ser útiles en esta tarea.
- https://wiki.skullsecurity.org/Passwords
- https://github.com/danielmiessler/SecLists
- Recopilación de contraseñas con CeWL
CeWL es una aplicación de ruby que realiza un trabajo de “spidering” sobre una URL determinada con una profundidad especificada por el usuario y devuelve una lista de palabras que luego pueden usarse para una posterior fase de ataques de fuerza bruta.
Soporta autenticación tanto por usuario y contraseña como cookies para realizar su trabajo en la parte privada de la aplicación.
Para observar un sitio y escribir todas las palabras encontradas en un archivo
$ cewl -w <archivo> <url>
Hacer crawling de la página y seguir enlaces a otros sitios
$ cewl -o <url>
Establecer profundidad dada y una longitud de palabra mínima
$ cewl -d <profundidad> -m <longitud de la palabra min> <url>
Hacer crawling de la página y seguir enlaces a otros sitios
$ cewl -o <url>
Establecer profundidad dada y una longitud de palabra mínima
$ cewl -d <profundidad> -m <longitud de la palabra min> <url>
Herramientas
Una vez hemos recopilado un listado de usuarios y hemos generado un listado de posibles contraseñas, ya podríamos realizar nuestro ataque de averiguación de contraseñas haciendo uso de alguna de las herramientas disponibles para la ejecución de esta tarea.
Estas herramientas automatizan el proceso de autenticación en determinados servicios utilizando para ello listados de usuarios y contraseñas. A continuación se muestran algunas de estas herramientas.
- Medusa
Herramienta para realizar fuerza bruta de usuarios y contraseñas en un determinado servicio. Sus características más importantes son las siguientes:
- Paralelismo de conexiones.
- Fuerza bruta de login.
- Soporta distintos protocolos y servicios sobre los que realizar la autenticación.
A continuación se muestra un ejemplo de uso de medusa en el que se prueba la misma contraseña sobre un listado de usuarios en el protocolo HTTP (Técnica de password Spraying):
$ medusa -h 192.168.10.2 -U listado_usuarios.txt -p Enero2022 -M http -m DIR/admin -T10
- ncrack
Herramienta para realizar fuerza bruta de usuarios y contraseñas en un determinado servicio. Su característica más importante es que soporta el paralelismo de conexiones.
A continuación se muestra un ejemplo de uso de ncrack en el que se realiza un ataque de fuerza bruta para averiguar la contraseña del "usuario" offsec realizando una autenticación sobre el protocolo RDP:
$ ncrack -vv --user ofsec -P password_list.txt rdp://192.168.10.2hydra
- hydra
Herramienta para realizar fuerza bruta de usuarios y contraseñas en un determinado servicio. Esta herramienta está recomendada para realizar una fuerza bruta de las "Community Strings" del protocolo SNMP
A continuación se muestra un ejemplo de uso de la herramienta hydra realizando un ataque de fuerza bruta SNMP probando las distintas community strings que se encuentran en el diccionario password-file.txt.
$ hydra -P password-file.txt -v 192.168.11.219 snmp
- Patator
Es una herramienta altamente configurable que, entre otras opciones, permite establecer las condiciones necesarias evaluar la respuesta emitida por el equipo remoto y considerar si las credenciales introducidas son correctas.
Password Cracking
Se trata del proceso en el cual se obtenemos una lista de usuarios y contraseñas del sistema que no pueden usarse directamente ya que están protegidas mediante algún tipo de cifrado, por ejemplo utilizando funciones hash.
- El proceso para obtener las credenciales derivadas del hash se realiza de manera offline. En sistemas específicos para esta tarea gestionados por nosotros.
- Se requiere un compromiso parcial del sistema analizado.
La técnica de password cracking consiste en intentar utilizar los hashes de las contraseñas para averiguar las contraseñas en texto claro.
Por definición, teniendo un hash no hay ninguna manera de utilizar algún tipo de algoritmo que nos pueda devolver de manera directa la contraseña (en texto claro) que genera ese hash.
La única manera de averiguar la contraseña inicial con la que se generó ese hash consiste en probar posibles combinaciones de contraseñas y aplicar el mismo algoritmo de hash empleado por el protocolo de hashing. En caso que los hashes coincidan, significará que habremos averiguado la contraseña, ya que genera el mismo hash.
Existen varias aplicaciones que pueden realizar cracking de distintos tipos de hashes, pero las más utilizadas son las siguientes:
- JohnTheRipper.
- hashcat.
A continuación os indicamos más detalles de cada una de ellas:
- JhonTheRipper
Herramienta de cracking de contraseñas, existen 2 versiones, la versión normal y la versión jumbo o community, que soporta muchos más algoritmos de hashing para realizar el proceso de cracking.
Soporta paralelización de procesos, pudiendo indicar el número de cores de CPU que se le asignan al proceso de cracking.
Soporta permutaciones de una misma contraseña, es decir, se pueden indicar reglas específicas para que realice una serie de transformaciones a cada contraseña del diccionario especificado
$ john --format=NT --rules -w=/usr/share/wordlists/rockyou.txt hashfile.txt
$ john --format=NT --rules=korelogic --wordlist=/usr/share/wordlist/rockyou.txt hashes_NTLM.txt
En el siguiente enlace podéis acceder a la página oficial de JhonTheRipper (https://www.openwall.com/john/).
- hashcat
Herramienta de cracking de contraseñas, soporta muchos más algoritmos de hashing que jhon.
Soporta el uso de procesamiento GPU, mucho más rápido que el uso de procesadores CPU convencionales.
En hashcat se indica el algoritmo de hash con el parámetro –m seguido de un identificador numérico indicando el algoritmo de hash
$ ./hashcat -m 1000 hash.ntlm.txt dictionary.txt
Prueba contraseñas en base a una máscara en la cual se puede indicar la longitud mínima y máxima de las contraseñas a probar, y el tipo de carácter que podrá tener en cada posición
$ ./hashcat -m 1000 hash.ntlm.txt –a3 ?d?d?d?d?s?l?l?l?l
En el siguiente enlace podéis acceder a la página oficial de hascat (https://hashcat.net/hashcat/).
Default passwords
Aunque últimamente es menos habitual encontrarse con esta problemática, muchos dispositivos de red y servicios pueden presentar un “usuario por defecto” con privilegios elevados que tiene una contraseña predefinida.
- Si no se ha cambiado la contraseña de acceso, un usuario podría acceder al sistema con las credenciales por defecto.
Existen muchos dispositivos de red (switches, Firewalls, Routers, Impresoras, etc.) que vienen de fábrica con una contraseña predefinida que ha de cambiar el usuario en el momento de la configuración. Además, esta contraseña suele ser la misma en todos los dispositivos del mismo modelo.
Si el usuario no realiza este cambio de contraseña, y sigue utilizando la contraseña por defecto, un atacante malintencionado que tuviera acceso al dispositivo, a través de la red, podría autenticarse en el mismo haciendo uso de la contraseña por defecto.
De manera similar, existen numerosas herramientas de Software o Servicios que presentan la misma problemática, en la que el servicio o aplicativo dispone de una serie de usuarios predefinidos que disponen de una contraseña por defecto.
Por otro lado, esta situación se agrava debido a que existen listados en los que se recogen este tipo de contraseñas disponibles de manera pública en internet. En otras ocasiones, las contraseñas se incluyen en el propio manual del producto o aplicativo.
Tablas Rainbow
Las Tablas Rainbow están estrechamente ligadas al proceso de cracking de contraseñas. Las tablas Rainbow son el resultado de almacenar en tablas específicas, que normalmente disponen de gran velocidad de lectura, una posible contraseña de usuario junto al hash que se genera al aplicar un algoritmo a esa contraseña.
De esta manera se realiza el mismo proceso de cracking pero de manera previa y se almacena el resultado para luego poder ser utilizado tantas veces como se desee.
Esta técnica tiene varias peculiaridades que desgranamos a continuación:
- La generación de las tablas consume bastante tiempo (además dependiendo del algoritmo pueden tardar bastante tiempo).
- Una vez que la tabla se ha generado, buscar un determinado hash en la tabla es mucho más rápido que realizar todo el proceso de cracking.
- La técnica de generar una "Tabla Rainbow" sólo puede realizarse con ciertos algoritmos de hashing. Por ejemplo, algoritmos que utilizan la técnica de "SALT" en la que se utilizan cadenas aleatorias que se añaden a la contraseña antes de generar el hash dado que no podemos conocer el Hash que ha sido aplicado.
- De la misma manera, algoritmos que utilicen el método "desafío respuesta" para generar un hash tampoco podrían utilizarse en este tipo de ataques debido a que tampoco podemos conocer el valor del "desafío" utilizado para generar el hash.