Envejecimiento de contraseñas

En casi todas las implementaciones de Shadow Password actuales9.7 se suele incluir la implementación para otro mecanismo de protección de las claves denominado envejecimiento de contraseñas (Aging Password). La idea básica de este mecanismo es proteger los passwords de los usuarios dándoles un determinado periodo de vida: una contraseña sólo va a ser válida durante un cierto tiempo, pasado el cual expirará y el usuario deberá cambiarla.

Realmente, el envejecimiento previene más que problemas con las claves problemas con la transmisión de éstas por la red: cuando conectamos mediante mecanismos como telnet, ftp o rlogin a un sistema Unix, cualquier equipo entre el nuestro y el servidor puede leer los paquetes que enviamos por la red, incluyendo aquellos que contienen nuestro nombre de usuario y nuestra contraseña (hablaremos de esto más a fondo en los capítulos dedicados a la seguridad del sistema de red y a la criptografía); de esta forma, un atacante situado en un ordenador intermedio puede obtener muy fácilmente nuestro login y nuestro password. Si la clave capturada es válida indefinidamente, esa persona tiene un acceso asegurado al servidor en el momento que quiera; sin embargo, si la clave tiene un periodo de vida, el atacante sólo podrá utilizarla antes de que el sistema nos obligue a cambiarla.

A primera vista, puede parecer que la utilidad del envejecimiento de contraseñas no es muy grande; al fin y al cabo, la lectura de paquetes destinados a otros equipos (sniffing) no se hace por casualidad: el atacante que lea la red en busca de claves y nombres de usuario lo va a hacer porque quiere utilizar estos datos contra un sistema. Sin embargo, una práctica habitual es dejar programas escuchando durante días y grabando la información leída en ficheros; cada cierto tiempo el pirata consultará los resultados de tales programas, y si la clave leída ya ha expirado y su propietario la ha cambiado por otra, el haberla capturado no le servirá de nada a ese atacante.

Figura 8.5: La herramienta de administración admintool (Solaris), con opciones para envejecimiento de claves.
Image admintool.png



Los periodos de expiración de las claves se suelen definir a la hora de crear a los usuarios con las herramientas que cada sistema ofrece para ello (por ejemplo, Solaris y su admintool, mostrado en la figura 8.5). Si queremos modificar alguno de estos periodos una vez establecidos, desde esas mismas herramientas de administración podremos hacerlo, y también desde línea de órdenes mediante órdenes como chage o usermod. Como antes hemos dicho, en el archivo /etc/shadow se almacena, junto a la clave cifrada de cada usuario, la información necesaria para implementar el envejecimiento de contraseñas; una entrada de este archivo es de la forma
toni:LEgPN8jqSCHCg:10322:0:99999:7:::
Tras el login y el password de cada usuario se guardan los campos siguientes: Como podemos ver, cuando un usuario cambia su clave el sistema le impide volverla a cambiar durante un periodo de tiempo; con esto se consigue que cuando el sistema obligue a cambiar la contraseña el usuario no restaure inmediatamente su clave antigua (en este caso el esquema no serviría de nada). Cuando este periodo finaliza, suele existir un intervalo de cambio voluntario: está permitido el cambio de contraseña, aunque no es obligatorio; al finalizar este nuevo periodo, el password ha expirado y ya es obligatorio cambiar la clave. Si el número máximo de días en los que el usuario no puede cambiar su contraseña es mayor que el número de días tras los cuales es obligatorio el cambio, el usuario no puede cambiar nunca su clave. Si tras el periodo de cambio obligatorio el password permanece inalterado, la cuenta se bloquea.

En los sistemas Unix más antiguos (hasta System V Release 3.2), sin shadow password, toda la información de envejecimiento se almacena en /etc/passwd, junto al campo correspondiente a la clave cifrada de cada usuario pero separada de éste por una coma:
root:cp5zOHITeZLWM,A.B8:0:0:El Spiritu Santo,,,:/root:/bin/bash

Tabla 8.2: Códigos de caracteres para el envejecimiento de contraseñas.
Carácter . / 0 1 2 3 4 5 6 7 8 9 A B C
Valor (semanas) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
Carácter D E F G H I J K L M N O P Q R
Valor (semanas) 16 17 18 19 20 21 21 22 23 24 25 26 27 28 29
Carácter S T U V W X Y Z a b c d e f g
Valor (semanas) 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
Carácter h i j k l m n o p q r s t u v
Valor (semanas) 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
Carácter w x y z                      
Valor (semanas) 60 61 62 63                      


En este caso el primer carácter tras la coma es el número máximo de semanas antes de que el password expire; el siguiente carácter es el número mínimo de semanas antes de que el usuario pueda cambiar su clave, y el tercer y cuarto carácter indican el tiempo transcurrido desde el 1 de enero de 1970 hasta el último cambio de contraseña. Todos estos tiempos se indican mediante determinados caracteres con un significado especial, mostrados en la tabla 8.2. También se contemplan en este esquema tres casos especiales: si los dos primeros caracteres son `..' el usuario será obligado a cambiar su clave la siguiente vez que conecte al sistema; el programa passwd modificará entonces su entrada en el archivo para que el usuario no se vuelva a ver afectado por el envejecimiento. Otro caso especial ocurre cuando los dos últimos caracteres también son `..', situación en la cual el usuario igualmente se verá obligado a cambiar su clave la próxima vez que conecte al sistema pero el envejecimiento seguirá definido por los dos primeros caracteres. Por último, si el primer carácter tras la coma es menor que el siguiente, el usuario no puede cambiar su password nunca, y sólo puede ser modificado a través de la cuenta root.
© 2002 Antonio Villalón Huerta