Como tal vez muchos sepan, me gusta bastante la criptografía, y sobre todo implementarla en el uso diario de nuestros sistemas. En este post explicare como utilizar hashes SHA-512 en el archivo /etc/shadow, donde se almacenan los passwords en forma de hash. Este archivo utiliza por regla general el algoritmo criptografico md5.

Funciones Hash

Una función hash, es aquella función múltiple que asigna su entrada a un valor dentro de un grupo finito. También pueden ser definidas como funciones trampa de un solo sentido, ya que deben ser faciles de calcular, pero dificiles de revertir. Fácil de calcular se refiere a que un algortimo la puede computar en tiempo polinomial, en función del largo de la entrada. Difícil de invertir significa que no hay algoritmo probabilístico que en tiempo polinomial puede computar una preimagen de f(x) cuando x es escogido al azar.

Esta técnica consta en tres elementos: Datos de entrada, función hash y datos de salida.
Los datos originales ingresan, se les aplica la función hash la cual retorna un valor (propia del cálculo ocasionado por el algoritmo), y los datos son devueltos con el valor hash o valor de resumen listo, asociando siempre la misma salida para este valor de entrada.

Un buen algoritmo hash, es aquel en el que se generan pocas colisiones, es decir, que información completamente distinta tengan un mismo valor hash, que es rápido de calcular, dados los datos de salida debe ser sumamente difícil reconstruir la entrada original y por sobre todo debe asignar el mismo valor de salida para una misma entrada (evitar colisiones nuevamente).
Ultimamente el algoritmo md5 se ha visto bastante comprometido, por lo cual es realizable que un atacante realize la inversa a la función hash md5, por lo cual haciendose con el archivo /etc/shadow, podria obtener todas las claves del sistema en texto plano y legible para el.

Manos a la obra

Para poder utilizar esto es necesario tener pambase-20081028, y tener compilado PAM contra una version de glibc >= 2.7.

Como primer punto, necesitamos editar el archivo /etc/default/passwd, y buscamos la clave CRYPT=md5
Y la reemplazamos por CRYPT=sha512, quedando como el siguiente ejemplo:

# Define default crypt hash
# CRYPT={des,md5,blowfish}
CRYPT=sha512

Paso siguiente procedemos a editar el archivo /etc/pam.d/passwd y reemplazamos md5 por sha512:

#%PAM-1.0
#password required pam_cracklib.so difok=2 minlen=8 dcredit=2 ocredit=2 retry=3
#password required pam_unix.so md5 shadow use_authtok
password required pam_unix.so sha512 shadow nullok

Ahora solo nos queda regenerar las passwords de los usuarios utilizando passwd. Y listo.
Para saber si estamos utilizando sha512 nos fijamos dentro del archivo /etc/shadow si cada hash comienza con $6 (ademas de ser considerablemente mas largo) estamos utilizando SHA512. En caso de que comienze con $1, lamentablemente todavia estamos usando md5.

Random Posts

Tags: , , , ,

2 Comentarios

  1. Martita says:

    > Ultimamente el algoritmo md5 se ha visto bastante comprometido, por lo cual es realizable que un atacante realize la inversa a la función hash md5, por lo cual haciendose con el archivo /etc/shadow, podria obtener todas las claves del sistema en texto plano y legible para el.

    Esa afirmación necesitaría una cita, y que no sean por algoritmos que buscan la clave por fuerza bruta, ya que sería la misma vulnerabilidad de cualquier algoritmo.

    Para demostrarnos tu afirmación te dejo una cadena cifrada con md5 y una con sha512, es la misma frase, la de sha512 es para que comprobés que es la clave (8 characteres) correcta.

    5119743ded7b2475aaad7d2182794a53

    14b4e0ce881e7d72a782875eb25d3c970c4badb19975a5e0de0eac956614cd381c999db7625f27926113157c40b9db72dc7e83686b8ac3e8aa468966938b1e8d

    nos vemos!

  2. Ramón says:

    Creo que aprenderé bastante leyendo tu blog…

    *guardando*.

Comentar articulo:

Importante: Los comentarios son moderados.


Creative Commons License
Esta obra es publicada bajo una licencia Creative Commons.