Detalles sobre los Hashes de Contraseñas de Cisco IOS
Detalles sobre los Hashes de Contraseñas de Cisco IOS

Detalles sobre los Hashes de Contraseñas de Cisco IOS

Las contraseñas “tipo 7” utilizadas en los viejos Cisco IOS se pueden revertir fácilmente. Por lo tanto, es preferible utilizar el tipo 5, ya que genera un hash MD5 que no se puede revertir. Sin embargo, el uso de MD5 no es su única ventaja.

El uso de una contraseña almacenada utilizando MD5 se realiza simplemente usando el comando “secret” en lugar de “password“.

Router(config)# username foo secret MyP4ssw0rd
Router(config)# do sh run | include username 
username foo secret 5 $1$jR5i$.HDBuKq.wIDOn2EYpCPYc0

En el ejemplo anterior, lo que sigue al 5 es calculado por el router y almacenado en la configuración en ejecución. Esto es más que un simple hash MD5, de hecho, el método retoma lo que se usa con frecuencia en los entornos UNIX, a saber, el uso de un “salt”. El resultado se compone de 3 elementos separados por el signo de dólar ($):

  • 1 – indica un hash que usa un salt
  • jR5i – salt de 24 bits generado aleatoriamente
  • .HDBuKq.wIDOn2EYpCPYc0 – el hash MD5

El hash y el salt son valores binarios que utilizan el formato de codificación Base64. Cuando el usuario foo desea autenticarse, la contraseña enviada en texto plano por el usuario se concatena con el salt de 24 bits almacenado en el archivo de configuración. Entonces se calcula un hash MD5 con toda la cadena salt+contraseña; si el hash calculado coincide con el 3er elemento almacenado en la configuración, entonces se considera que la contraseña proporcionada es válida.

El uso de este salt tiene 2 grandes beneficios. En primer lugar, 2 usuarios que hayan elegido la misma contraseña tendrán prácticamente 2 hashes diferentes. Consideremos la creación del usuario bar con la misma contraseña que el usuario foo creado anteriormente, aquí está el resultado:

Router(config)# user bar secret MyP4ssw0rd
Router(config)# do sh run | include username 
username foo secret 5 $1$jR5i$.HDBuKq.wIDOn2EYpCPYc0
username bar secret 5 $1$P9XX$y9d6Aw.t81.CoKvXITCpZ/

Los 2 usuarios podrán autenticarse con la misma contraseña: sin embargo, durante la creación de los usuarios, los 2 salts generados aleatoriamente han permitido eliminar cualquier similitud entre los hashes almacenados en el archivo de configuración.

El segundo beneficio, y no el menor, es que este salt permite protegerse contra los ataques de tipo Rainbow Table. En criptografía, una tabla arcoíris (llamada en inglés Rainbow Table) es una estructura de datos que permite recuperar una contraseña a partir de su huella digital. Son grandes tablas que contienen hashes (MD5 y otros) precalculados. Esto permite recuperar muy rápidamente la contraseña que dio un hash preciso.

Para tu información, los sistemas tipo UNIX utilizan la misma técnica para almacenar las cuentas locales (el salt siendo simplemente un poco más largo). La herramienta OpenSSL permite simular la operación realizada por el IOS de Cisco. Aquí hay un ejemplo para el usuario foo, podemos recuperar el mismo hash con OpenSSL:

fred@Sandbox$ openssl passwd -1 -salt jR5i MyP4ssw0rd
$1$jR5i$.HDBuKq.wIDOn2EYpCPYc0

Conclusión

Hay que recordar que Cisco IOS permite usar diferentes tipos de hash para almacenar las contraseñas:

  • Tipo 0: Contraseña en texto plano.
  • Tipo 5: Hash MD5 con salt, el más seguro.
  • Tipo 7: Hash reversible, menos seguro.
  • Tipo 8: Hash de contraseña con SHA-256.
  • Tipo 9: Hash de contraseña con SCRYPT.

Aunque los tipos 8 y 9 ofrecen mayor seguridad, el Tipo 5 se suele recomendar como la mejor opción por su buen equilibrio entre seguridad y compatibilidad con la mayoría de sistemas. Sin embargo, aún así se puede intentar descifrar contraseñas Cisco.

Un artículo basado en packetlife.net - https://packetlife.net/blog/2008/jul/09/a-bit-more-detail-on-ios-password-hashes/