Usar John the Ripper para Descifrar Claves Privadas SSH

Kali LinuxBeginner
Practicar Ahora

Introducción

Las claves SSH (Secure Shell) son una forma segura de autenticarse en servidores remotos, ofreciendo una alternativa más robusta a los inicios de sesión basados en contraseñas. Para mayor seguridad, una clave privada SSH puede cifrarse con una frase de contraseña (passphrase). Si un atacante obtiene acceso a su archivo de clave privada, aún necesitará la frase de contraseña para usarla.

Sin embargo, una frase de contraseña débil puede ser una vulnerabilidad significativa. En este laboratorio, se pondrá en la piel de un analista de seguridad para comprender este riesgo. Aprenderá a utilizar John the Ripper, una potente herramienta de cracking de contraseñas de código abierto, para descifrar la frase de contraseña de una clave privada SSH. Este ejercicio tiene fines educativos para resaltar la importancia de usar frases de contraseña seguras.

Generar una Clave Privada SSH Protegida con Contraseña

En este paso, generará un nuevo par de claves SSH. La clave privada estará protegida con una frase de contraseña simple y fácil de adivinar. Esta clave servirá como objetivo para nuestro ejercicio de cracking en los pasos subsiguientes.

Utilizaremos el comando ssh-keygen para crear la clave. Especificaremos el tipo de clave, el tamaño en bits y el nombre del archivo para asegurarnos de que se cree dentro de nuestro directorio de proyecto.

Ejecute el siguiente comando para generar un par de claves RSA SSH. Cuando se le solicite una frase de contraseña, ingrese labex.

ssh-keygen -t rsa -b 2048 -f ./my_ssh_key -C "labex@labex.io"

Se le pedirá que ingrese y confirme una frase de contraseña. Escriba labex y presione Enter para ambas solicitudes.

Generating public/private rsa key pair.
Enter passphrase (empty for no passphrase): labex
Enter same passphrase again: labex
Your identification has been saved in ./my_ssh_key
Your public key has been saved in ./my_ssh_key.pub
The key fingerprint is:
SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx labex@labex.io
The key's randomart image is:
+---[RSA 2048]----+
|        .        |
|       . .       |
|      .   .      |
|     . . . .     |
|    . . S .      |
|   . . . o       |
|  . . . + .      |
| . . . =.o.o     |
|..  .oo*+E+      |
+----[SHA256]-----+

Ahora, liste los archivos en el directorio actual para ver el par de claves recién creado: la clave privada my_ssh_key y la clave pública my_ssh_key.pub.

ls -l
total 12
-rw------- 1 labex labex 1823 Jan 01 12:00 my_ssh_key
-rw-r--r-- 1 labex labex  401 Jan 01 12:00 my_ssh_key.pub
-rw-r--r-- 1 labex labex   48 Jan 01 12:00 wordlist.txt

Ha creado con éxito una clave privada SSH protegida con contraseña.

Extraer Hash de la Clave SSH usando ssh2john

John the Ripper no puede trabajar directamente con el formato de archivo de clave SSH. Requiere un formato de hash específico que represente la frase de contraseña cifrada. Para obtener este hash, utilizaremos una utilidad llamada ssh2john, que está incluida en la suite de John the Ripper.

En este paso, ejecutará ssh2john en la clave privada que creó (my_ssh_key) y guardará su salida en un nuevo archivo. Este archivo contendrá el hash que john podrá intentar descifrar.

Ejecute el siguiente comando para extraer el hash y guardarlo en un archivo llamado ssh_hash.txt:

ssh2john my_ssh_key > ssh_hash.txt

Este comando no produce ninguna salida en la terminal porque la hemos redirigido al archivo ssh_hash.txt utilizando el operador >.

Para ver el contenido del archivo hash generado, utilice el comando cat:

cat ssh_hash.txt

Verá una larga cadena de texto, que es la representación hash de la frase de contraseña de su clave. Se verá algo así:

my_ssh_key:$ssh2$0$16$xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx$1040$xxxxxxxx...

Ahora tiene el archivo hash listo para el proceso de cracking.

Descifrar Hash de Clave SSH con John the Ripper

Con el hash extraído, es hora de usar John the Ripper para descifrarlo. Realizaremos un "ataque de diccionario", donde john prueba cada palabra de una lista dada como una posible frase de contraseña. Para este laboratorio, utilizaremos el archivo wordlist.txt que se creó previamente en su entorno.

En un escenario del mundo real, los atacantes utilizan listas de palabras masivas que contienen millones de contraseñas comunes, nombres y palabras de diccionario. Nuestra lista de palabras simple contiene la frase de contraseña correcta, labex, lo que garantiza que el descifrado será exitoso para esta demostración.

Ejecute el comando john, especificando la lista de palabras y el archivo hash:

john --wordlist=wordlist.txt ssh_hash.txt

John iniciará el proceso de descifrado. Dado que la frase de contraseña está en nuestra corta lista de palabras, se encontrará casi al instante.

Using default input encoding: UTF-8
Loaded 1 password hash (SSH [RSA/DSA/EC/OPENSSH private keys ssh2john])
Cost 1 (KDF/cipher) is 0 for all loaded hashes
Cost 2 (iteration count) is 16 for all loaded hashes
Will run 4 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
labex            (my_ssh_key)
1g 0:00:00:00 DONE (2023-01-01 12:05) 12.50g/s 12.50p/s 12.50c/s 12.50C/s sunshine..labex
Use the "--show" option to display all of the cracked passwords reliably
Session completed

¡Éxito! La línea de salida labex (my_ssh_key) muestra que la frase de contraseña labex se recuperó con éxito para la clave my_ssh_key.

John the Ripper guarda las contraseñas descifradas en un archivo llamado "pot file" (~/.john/john.pot por defecto). Para ver la contraseña descifrada nuevamente sin volver a ejecutar el ataque, puede usar la opción --show:

john --show ssh_hash.txt
my_ssh_key:labex

1 password hash cracked, 0 left

Esto confirma la frase de contraseña descifrada. Ahora ha descifrado con éxito una frase de contraseña débil de una clave SSH.

Comprender la Seguridad de las Claves SSH

Este laboratorio demuestra un punto crítico: la seguridad de una clave SSH protegida por frase de contraseña es tan fuerte como la propia frase de contraseña. Analicemos los componentes de la seguridad de las claves SSH.

  • Fuerza de la Clave (Criptografía): Esto se refiere al algoritmo (por ejemplo, RSA, ECDSA, Ed25519) y al tamaño de la clave (por ejemplo, 2048, 4096 bits) utilizados para generar la clave. Un tamaño de clave mayor hace que sea exponencialmente más difícil para un atacante romper la criptografía subyacente mediante fuerza bruta. Esto protege contra ataques que intentan derivar la clave privada de la clave pública.

  • Fuerza de la Frase de Contraseña (Cifrado): Esto protege el archivo de clave privada en sí. Cuando establece una frase de contraseña, el archivo de clave privada se cifra. Si alguien roba este archivo, no puede usarlo sin descifrarlo primero. Como ha visto, una frase de contraseña débil, común o basada en diccionario se puede descifrar fácilmente. Una frase de contraseña fuerte debe ser larga, compleja y única, lo que hace que un ataque de diccionario o de fuerza bruta sea computacionalmente inviable.

  • Permisos de Archivo (Control de Acceso): Los permisos de archivo de su sistema operativo proporcionan la primera línea de defensa. Un archivo de clave privada siempre debe tener permisos que restrinjan el acceso solo al propietario (por ejemplo, 600 o -rw-------). Esto evita que otros usuarios del mismo sistema lean el archivo de clave.

En nuestro laboratorio, la fortaleza criptográfica de la clave fue irrelevante porque el vector de ataque no fue la criptografía en sí, sino la frase de contraseña débil utilizada para cifrar el archivo.

Mejores Prácticas para la Gestión de Claves SSH

Comprender los riesgos es el primer paso. Aplicar las mejores prácticas es cómo mitigarlos. Aquí hay reglas esenciales para administrar sus claves SSH de forma segura en un entorno del mundo real.

  • Use Frases de Contraseña Fuertes y Únicas:

    • Nunca use palabras comunes, nombres o patrones simples.
    • Una frase de contraseña fuerte debe ser larga (más de 15 caracteres) y contener una mezcla de letras mayúsculas, minúsculas, números y símbolos.
    • Considere usar un gestor de contraseñas para generar y almacenar frases de contraseña muy complejas.
  • Use Algoritmos Modernos y Tamaños de Clave Adecuados:

    • Prefiera algoritmos modernos como Ed25519 o ECDSA sobre el RSA más antiguo. Ofrecen mejor seguridad y rendimiento.
    • Si usa RSA, asegúrese de que el tamaño de la clave sea de al menos 2048 bits, y se recomiendan 4096 bits para la seguridad a largo plazo.
  • Asegure los Archivos de Clave Privada:

    • Siempre asegúrese de que sus archivos de clave privada (por ejemplo, ~/.ssh/id_rsa) tengan permisos de archivo estrictos. Use chmod 600 para permitir el acceso de lectura/escritura solo a su usuario.
  • Use un Agente SSH:

    • Un agente SSH (ssh-agent) es un programa en segundo plano que almacena en caché sus claves privadas descifradas en la memoria. Ingresa su frase de contraseña una vez cuando agrega la clave al agente, y no tendrá que volver a escribirla durante la sesión. Esto es conveniente y seguro, ya que la frase de contraseña no se escribe repetidamente ni se almacena en disco.
  • Rote las Claves Regularmente:

    • Genere periódicamente nuevos pares de claves SSH y desactive los antiguos. Esto limita la ventana de oportunidad para un atacante si una clave antigua se ve comprometida.
  • Nunca Comparta Claves Privadas:

    • Una clave privada es privada. Es su identidad única. Nunca la envíe por correo electrónico, chat o cualquier otro medio. Si otra persona necesita acceso, debe generar su propio par de claves y proporcionarle su clave pública.

Resumen

En este laboratorio, adquirió experiencia práctica con una tarea común de auditoría de seguridad. Ha logrado con éxito:

  • Generar un nuevo par de claves SSH protegido por una frase de contraseña.
  • Utilizar la utilidad ssh2john para extraer un hash susceptible de ser descifrado del archivo de clave privada.
  • Realizar un ataque de diccionario utilizando John the Ripper para descifrar la frase de contraseña débil.
  • Aprender los principios fundamentales de la seguridad de las claves SSH, incluidas las funciones distintas de la fortaleza criptográfica y la fortaleza de la frase de contraseña.
  • Revisar las mejores prácticas esenciales para la gestión segura de claves SSH.

Este ejercicio demuestra que incluso las herramientas criptográficas fuertes pueden verse socavadas por prácticas humanas débiles. Proteja siempre sus claves SSH con frases de contraseña fuertes y únicas para garantizar la integridad de su identidad digital.