contrasenas-01

Cuando nos creamos una cuenta en nuestro sistema, bien sea la cuenta root o nuestro propio usuario, tanto como el usuario, los grupos a los que pertenece y la contraseña del mismo, sería:

Passwords de las cuentas: /etc/shadow
Usuarios y Grupos al que pertenece: /etc/passwd

Por ejemplo, en un ordenador recién instalado donde el usuario sea “maslinux” estos archivos me quedarían así:

cat /etc/passwd | grep maslinux
maslinux:x:1000:1000::/home/maslinux:/bin/bash
cat /etc/shadow | grep maslinux
maslinux:$6$.jxNvrdu2HmkFCJL$Ci/azpHoMKQE0nkKJdPgMp62WahqoJDAy182Fgq199Swbc9wN8fCcTdM0vJkNM8Ara2JCRx.MDSXSTChkyK5j0:17872:0:99999:7:::

Entonces, como pueden ver el archivo /etc/shadow se compone básicamente (repito, básicamente) por el nombre de usuario de la cuenta, seguido del hash del password.

Con esto respondemos a la primera interrogante del título: ¿Dónde se guardan las contraseñas de las cuentas en GNU/Linux?

Nota: Aquí me falta explicar más a detalle como se compone el hash y luego la línea que recién les mostré… por ejemplo, ven que al inicio está $6$, esto significa que el hash es un SHA512, $1$ sería MD5, $2$ sería BlowFish, $5$ sería SHA256. También omití que como una medida de seguridad, el sistema genera el hash del password (SHA512), luego le agrega un salt y luego genera otro hash de esto. Pero el objetivo de este post no es ponernos muy detallistas con conceptos de criptografía, hashes, etc… tal vez aborde esta temática en otro post.

Ahora pasemos a intentar responder la segunda:

¿Se pueden “hackear”?

Quiero primero señalar que puse “hackear” entre comillas dobles, pues técnicamente no estamos “hackeando” un password acá, son conceptos que si los tomamos en su forma más pura; no sería precisamente el que mejor defina lo que haremos.

Pero saltando esta parte de la filosofía teórica haha, vayamos a la explicación que supongo más les interesará:

Las contraseñas de las cuentas obviamente no se guardan tal cual (en texto plano), sino que lo que se almacena es el hash de la misma, que NO es lo mismo que la contraseña cifrada…

No, no es lo mismo pues cuando se cifra algo se hace con la intención de que (normalmente) mediante una llave (key), se puede decriptar, no obstante este hash NO está pensado para que funcione en sentido contrario… o sea:
Funciona:Contraseña -» Hash de la Contraseña

Esto funciona así, pues de la contraseña se saca el hash. Ustedes introducen una contraseña y el sistema para decirles si es correcta o no verifica el hash que genera de la contraseña que recién escribieron, lo compara con el hash que tiene guardado en el archivo shadow… en caso de que coincidan, entonces la contraseña es correcta y les permite entrar al sistema.

NO Funciona:Hash de la Contraseña -» Contraseña

Esto NO funciona, porque es un algoritmo de “one way”… en un solo sentido, no hay forma de sacar ni “decriptar” la contraseña real del hash.
No obstante… SI SE PUEDE intentar crackear la contraseña por medio de diccionarios o fuerza bruta

Como recién dije no se puede “aparecer” la contraseña de forma mágica, pero sí se puede probar hashes usando softwares hasta dar con el indicado.

Vendría siendo como tener cientos de miles de contraseñas, generarle a cada una un hash con el mismo algoritmo que usa el sistema, comparar cada uno de esos hashes con el que sacamos de /etc/shadow y si coincide, entonces ya tenemos la relación de hash de shadowhash con que comparamos – contraseña al que le generamos el hash.

Y sí, de esa forma podremos averiguar la contraseña del usuario.

Usando John The Ripper para encontrar el password

Usaremos el tan popular y mundialmente conocido John The Ripper para la tediosa tarea de comparar, ya de John habíamos hablado acá: “Las mejores 20 herramientas de hacking y penetración para Kali Linux".

Para instalar John por ejemplo para Debian, Ubuntu y derivados:

sudo apt-get install john

Lo primero sería probar usando un diccionario, vamos a descargar el siguiente diccionario que trae cerca de medio millón de passwords: Descargar Diccionario RockYou.

Nota: Este diccionario ha sido conformado uniendo las contraseñas más usadas, contraseñas que se han ido filtrando a lo largo del tiempo de miles de personas y servicios, etc.

Pero antes de empezar a comparar vamos a preparar el archivo, pues debemos “unir” la información tanto de /etc/passwd como de /etc/shadow.

Tanto en el archivo passwd como en el archivo shadow hay información de todos los usuarios del sistema, nosotros solo queremos sacar el password de un usuario ¿no? … pues bien, vamos a copiar la data de ese usuario hacia un archivo en nuestro Home.

Siguiendo el ejemplo que mencioné al inicio, de que el usuario sea maslinux, copiemos la información de estos dos archivos:

sudo cat /etc/passwd | grep tulinux >> passwd
sudo cat /etc/shadow | grep tulinux >> shadow

Ahora unimos ambas datas:

unshadow passwd shadow > full_data

Ahora sí tenemos un archivo cuyo resultado es la combinación de los datos de la cuenta.

Pasamos a la parte de probar passwords que están en el diccionario que recién descargamos:

john --wordlist=rockyou.txt full_data

Aquí les muestro en una imagen del output que nos genera, y vemos como nos muestra la contraseña:

contrasenas-02

Como pueden ver señalado en amarillo, nos muestra primero la contraseña que logró machear correctamente y luego, a su derecha, la cuenta a la que pertenece la misma.

El tiempo que demore depende mayormente del procesamiento del ordenador, si tienes una BUENA CPU, que te permite probar no cientos, sino más de 1000 passwords por segundo debes 10 minutos o menos… si comparan 250 passwords por segundo (por ejemplo), terminarán el diccionario en poco más de media hora aproximadamente, les hago estos cálculos para que tengan una ligera noción del tiempo.

Notarán que cuando saquen una contraseña, si intentan de nuevo ejecutar el mismo comando; o sea, sacar de nuevo la contraseña del mismo archivo NO les funcionará, esto es porque ya John ya hizo el procesamiento correspondiente a esa información (cuenta+hash), para mostrar la contraseña una vez la haya extraído una primera vez usen el comando:

john --show full_data

Les dejo una imagen:

contrasenas-03

¿Bueno y qué hacer cuando la contraseña no está en el diccionario?

Cuando la contraseña por su complejidad; o la ocurrencia de quien la puso… no se encuentra en el diccionario, pueden probar otro diccionario más genérico o extenso, pero generalmente lo único que nos quedaría sería probar fuerza bruta.

Para usar John The Ripper con fuerza bruta y no con un diccionario como recién hicimos, simplemente no pongan el argumento o parámetro que se refiere al diccionario, o sea sería:

john full_data

Y ahí si demorará una eternidad… o dos, o tres eternidades.

Usar fuerza bruta para intentar crackear una contraseña siempre es el último método que debemos usar, nuestra última opción… aún después de probar con diccionarios, aún después de ingeniería social, aún después de intentarlo todo, la fuerza bruta nos da casi que la certeza de que podremos obtener el password sí, pero puede demorarse 1 día, 1 semana, 1 mes, 1 año… o más.

 

Fuente: maslinux

¿Quién está en línea?

Hay 1964 invitados y ningún miembro en línea