Protege tus contraseñas con PAM: Tu aliado para la seguridad
La autenticación de contraseñas es esencial para la seguridad de cualquier red. Si la protección de contraseñas es débil, es solo cuestión de tiempo antes de que el sistema sea hackeado. En este artículo, explicaré cómo un administrador de sistemas puede utilizar los Módulos de Autenticación Enchufables (PAM) para aplicar una política de contraseñas en un sistema Linux. PAM brinda al administrador la discreción sobre la longitud de las contraseñas, la elección de contraseñas y el envejecimiento de las contraseñas. También discutiré formas de utilizar PAM para la protección del proceso de inicio de sesión de usuario.
- El archivo /etc/pam.d/passwd
- La biblioteca de la base de datos de contraseñas
- El módulo de tipo auth
- El módulo de tipo password
- El módulo de tipo account
- El módulo de tipo session
- El módulo pam_cracklib
- Comprobando la fortaleza de las contraseñas
- Apilando pam_cracklib y pam_pwdb con módulos de tipo password
- PAM y el inicio de sesión
- Resumen
El archivo /etc/pam.d/passwd
A continuación, se muestra un ejemplo de un archivo /etc/pam.d/passwd típico de un sistema Linux. Al examinar cada entrada en este archivo en detalle, podrá comprender mejor la administración de PAM. Los módulos de PAM normalmente utilizan la extensión de archivo .so. Para este artículo, me referiré a estos módulos sin esta extensión. Por lo tanto, pam_pwdb.so se referirá como pam_pwdb.
auth | required | /lib/security/pam_pwdb.so shadow |
account | required | /lib/security/pam_pwdb.so |
password | required | /lib/security/pam_cracklib.so retry=3 |
password | required | /lib/security/pam_pwdb.so use_authtok md5 shadow |
El archivo /etc/pam.d/passwd tiene dos secciones. La primera sección está precedida por la palabra clave usuario:, que se refiere a usuarios individuales. La segunda sección está precedida por la palabra clave grupo:, que se refiere a grupos.
Después de la palabra clave en la parte superior de cada sección, hay palabras clave agrupadas juntas por signos más (+). Estos agrupamientos se denominan listas. La lista unix+shadow en la sección usuario: es una lista que contiene el archivo /etc/passwd y el archivo /etc/shadow. La lista nis+unix+shadow contiene los registros de NIS, además de los archivos /etc/passwd y /etc/shadow. Las listas para la sección de grupo contienen listas idénticas.
Cuando se lee pam_pwdb, a su vez lee la biblioteca pwdb. La biblioteca pwdb busca la primera coincidencia para el nombre de usuario o grupo enviado por pam_pwdb, de acuerdo con las entradas en /etc/pwdb.conf. Primero se busca la primera lista en /etc/pwdb.conf y pwdb se conforma con la primera coincidencia. Si un usuario intenta acceder a un servicio en el sistema, primero se buscan coincidencias para el nombre de usuario y la contraseña en los archivos /etc/passwd y /etc/shadow. Dependiendo de los resultados de esta búsqueda, ocurrirá una de las siguientes acciones:
- Si se encuentra una coincidencia, la búsqueda termina y se otorga al usuario el acceso correspondiente.
- Si no se encuentra una coincidencia, se busca la segunda lista.
- Si no se encuentra ninguna coincidencia en la segunda lista, el usuario recibirá un mensaje indicando que se deniega el acceso.
La biblioteca de la base de datos de contraseñas
El módulo /lib/security/pam_pwdb utiliza el archivo /lib/lib_pwdb como biblioteca de base de datos de contraseñas. El propósito de /lib/lib_pwdb es actuar como fuente de contraseñas para pam_pwdb.
Cómo configurar un servidor VPN para hacer conexiones a través de firewallsLa biblioteca pwdb, a su vez, utiliza el archivo /etc/pwdb.conf como archivo de configuración. A continuación se muestra un ejemplo típico del archivo /etc/pwdb.conf:
user:
unix+shadow
nis+unix+shadow
group:
unix+shadow
nis+unix+shadow
El archivo /etc/pwdb.conf tiene dos secciones. La primera sección está precedida por la palabra clave usuario:, que se refiere a usuarios individuales. La segunda sección está precedida por la palabra clave grupo:, que se refiere a grupos.
Después de la palabra clave en la parte superior de cada sección, hay palabras clave agrupadas juntas por signos más (+). Estos agrupamientos se denominan listas. La lista unix+shadow en la sección usuario: es una lista que contiene el archivo /etc/passwd y el archivo /etc/shadow. La lista nis+unix+shadow contiene los registros de NIS, además de los archivos /etc/passwd y /etc/shadow. Las listas para la sección de grupo contienen listas idénticas.
Cuando se lee pam_pwdb, a su vez lee la biblioteca pwdb. La biblioteca pwdb busca la primera coincidencia para el nombre de usuario o grupo enviado por pam_pwdb, de acuerdo con las entradas en /etc/pwdb.conf. Primero se busca la primera lista en /etc/pwdb.conf y pwdb se conforma con la primera coincidencia. Si un usuario intenta acceder a un servicio en el sistema, primero se buscan coincidencias para el nombre de usuario y la contraseña en los archivos /etc/passwd y /etc/shadow. Dependiendo de los resultados de esta búsqueda, ocurrirá una de las siguientes acciones:
- Si se encuentra una coincidencia, la búsqueda termina y se otorga al usuario el acceso correspondiente.
- Si no se encuentra una coincidencia, se busca la segunda lista.
- Si no se encuentra ninguna coincidencia en la segunda lista, el usuario recibirá un mensaje indicando que se deniega el acceso.
El módulo de tipo auth
Observa la primera línea del archivo /etc/pam.d/passwd en la Tabla A.
¡Alerta! Un nuevo gusano de Linux está propagándoseObservará que el módulo de tipo auth realiza la autenticación real del usuario. Un módulo de tipo auth se utiliza típicamente para forzar a un usuario a proporcionar una contraseña para la autenticación. El módulo de tipo auth puede utilizar los siguientes argumentos:
- debug: Esto permite la generación de registros en el syslog.
- use_first_pass: Este módulo utiliza la contraseña del módulo anterior. Si este módulo falla, al usuario no se le pedirá otra contraseña. Solo se usa con los módulos de tipo auth y password.
- try_first_pass: Es similar a use_first_pass, pero si la contraseña falla aquí, se le pedirá otra contraseña al usuario.
- nullok: Esto permite el uso de cuentas sin contraseñas. (Sin embargo, este argumento nunca debe utilizarse).
- ndelay: En caso de fallo, esto obliga al módulo a devolver inmediatamente. (No utilice este módulo, ya que permitirá a los hackers tener más intentos para adivinar las contraseñas de su sistema).
Cualquier otro argumento que se pueda utilizar con pam_pwdb, pero que no sea compatible con el módulo de tipo auth, se ignora. Cualquier argumento que se ignore se registrará en syslog como un error, pero el rendimiento del módulo no se verá afectado.
A continuación se muestra un ejemplo sencillo del módulo de tipo auth en funcionamiento. Cada vez que un usuario desea cambiar su contraseña en un sistema Linux, se ejecuta el siguiente comando:
passwd
A continuación, se le solicitará al usuario su contraseña actual. Piense en lo que podría suceder en una red si no hubiera una solicitud de la contraseña actual del usuario. Cualquiera con acceso a un shell en su sistema simplemente podría ejecutar el comando passwd y cambiar la contraseña de cualquier usuario en el sistema. Esto podría resultar en el bloqueo de cualquier usuario en el sistema.
Después de ingresar la contraseña actual, al usuario se le solicitará la nueva contraseña mediante la siguiente línea:
Cuánto cuesta instalar y mantener un firewall empresarialPasswd required /lib/security/pam_cracklib.so retry 3
El módulo de tipo password
Un módulo de tipo password se utiliza para actualizar la contraseña del usuario. Cuando un usuario ejecuta el comando passwd, se utiliza pam_cracklib para determinar si la nueva contraseña cumple con los criterios establecidos por el administrador del sistema. La contraseña se puede verificar en cuanto a su longitud, los caracteres utilizados (numéricos, caracteres especiales, etc.) y la facilidad con la que se puede adivinar la contraseña.
Si pam_cracklib acepta la nueva contraseña, se utiliza pam_pwdb para actualizar la base de datos de contraseñas.
Los siguientes argumentos se pueden utilizar con un módulo de tipo password:
- use_first_pass
- nullok
- bigcrypt
- use_authtok
- try_first_pass
- md5
- shadow
- radius
- not_set_pass
- debug
- unix
Ahora observe la cuarta línea del archivo /etc/pam.d/passwd en la Tabla A. Lee de la siguiente manera:
password required /lib/security/pam_pwdb.so use_authtok
Cómo protegerse del ingeniero social: consejos y técnicas para evitar ser manipulado.Observe el uso del argumento use_authtok en esta línea. Al utilizar este argumento, se garantiza que la base de datos de contraseñas de PAM, pam_pwdb, utilizará la nueva contraseña enviada desde la biblioteca de PAM crack, pam_cracklib.
En pocas palabras, pam_cracklib determina si una contraseña es aceptable utilizando las reglas del sistema para contraseñas, y pam_pwdb se utiliza para actualizar la base de datos de contraseñas.
El módulo de tipo account
Un módulo de tipo account se utiliza típicamente para confirmar que un usuario ha cumplido los requisitos de acceso. Un módulo de account se puede utilizar para determinar si el usuario está accediendo al sistema desde un host remoto o si el usuario está sujeto a restricciones de inicio de sesión por hora del día.
El único argumento que aceptará el módulo de tipo account es el argumento debug.
El módulo de tipo session
El módulo de tipo session se utiliza para registrar el nombre de usuario y el tipo de servicio en syslog. Este registro se realiza una vez al iniciar sesión y al cerrar sesión. El módulo de tipo session no acepta argumentos.
El módulo pam_cracklib
El módulo pam_cracklib se utiliza para comprobar si la contraseña de un usuario cumple con los requisitos del sistema. Solo se realizan dos comprobaciones de criterios:
Actualizaciones semanales de parches y virus para Windows- ¿La contraseña tiene la suficiente longitud?
- ¿La contraseña es fácil de adivinar?
El módulo pam_cracklib solo funcionará cuando sea parte de una pila de módulos. Esto se debe a que no tiene capacidades de actualización de contraseña. Este módulo requiere dos componentes externos para funcionar:
- La biblioteca libcrack (/usr/lib/libcrack)
- El diccionario cracklib_dict (/usr/lib/cracklib_dict)
La Tabla B enumera las opciones disponibles para usar con pam_cracklib.
Opción | Función |
debug | Se utiliza para escribir información del módulo en syslog. |
type=string | Sustituye la cadena UNIX por "STRING" cuando un usuario utiliza el comando passwd. |
retry=n | Especifica cuántas veces puede intentar un usuario para cambiar una contraseña. |
difok=n | Especifica el número de caracteres en la nueva contraseña que deben ser diferentes a la contraseña actual. Se acepta una nueva contraseña con al menos la mitad de los caracteres diferentes a la contraseña actual. |
minlen=n | Especifica la longitud mínima de la contraseña +1. Un valor de minlen de 9 establecería una longitud mínima de contraseña de 10 caracteres. |
icredit=n | Especifica el número de caracteres por los cuales se reduce el valor minlen al tener al menos un carácter en minúscula en la nueva contraseña. Si minlen es 7, la longitud mínima de la contraseña sería de 4 + 1, o 5 caracteres. Desactivado estableciendo icredit en 0. |
Ucredit | Especifica el número de caracteres por los cuales se reduce la longitud de la contraseña al tener al menos un carácter en mayúscula en la nueva contraseña. |
dcredit=n | Especifica el número de caracteres por los cuales se reduce la longitud de la contraseña al tener al menos un carácter numérico en la nueva contraseña. |
ocredit=n | Especifica el número de caracteres por los cuales se reduce la longitud de la contraseña al tener al menos un carácter especial en la nueva contraseña. |
Comprobando la fortaleza de las contraseñas
La fortaleza de la contraseña se refiere a la capacidad de un atacante para adivinar una contraseña. Cuanto más fuerte sea la contraseña, más difícil será adivinarla. La fortaleza de la contraseña se verifica mediante pam_cracklib, que realiza tres comprobaciones:
- Se comprueba si la nueva contraseña está en el diccionario cracklib_dict. Si la contraseña está en cracklib_lib, se muestra una advertencia al usuario, pero no se le obliga a cambiar la contraseña.
- Se comprueba si la nueva contraseña es la inversa de la contraseña anterior.
- Se comprueba si la nueva contraseña es la contraseña anterior con el caso de los caracteres invertido.
Apilando pam_cracklib y pam_pwdb con módulos de tipo password
Ahora, veamos cómo interactúan pam_cracklib y pam_pwdb entre sí en el archivo /etc/pam.d/passwd.
La Tabla C muestra un archivo /etc/pam.d/passwd típico con entradas apiladas.
auth | required | /lib/security/pam_pwdb.so shadow |
account | required | /lib/security/pam_pwdb.so |
password | required | /lib/security/pam_cracklib.so retry=3 |
password | required | /lib/security/pam_pwdb.so use_authtok md5 shadow |
Las siguientes interacciones tienen lugar cuando el usuario Joe desea cambiar su contraseña:
Cómo instalar y configurar Snort en un sistema Linux para la detección de intrusiones- Cuando Joe ejecuta el comando passwd, se invoca a PAM.
- Luego, PAM lee el archivo /etc/pam.d/passwd y ejecuta cada secuencia de módulos.
- Se ejecuta pam_pwdb primero como un módulo auth, y se le solicita a Joe su contraseña actual.
- Luego, pam_pwdb se ejecuta como un módulo account y se verifica la solicitud de autenticación para asegurarse de que se cumplan las reglas de acceso para este usuario.
- Si se cumplen las reglas de acceso para Joe, se invoca el tercer módulo pam_cracklib y se le solicita a Joe su nueva contraseña.
- Después de ingresar la nueva contraseña, pam_cracklib le solicita al usuario que la repita para verificarla.
- Cuando se vuelve a ingresar la nueva contraseña, pam_cracklib verifica la contraseña para asegurarse de que cumple con las reglas de contraseña para este sistema.
- Si la nueva contraseña es aceptable, la cuarta entrada en /etc/pam.d/passwd llama a pam_pwdb.
- El argumento authtok en la cuarta entrada garantiza que pam_pwdb aceptará la nueva contraseña y enviará la nueva información a la biblioteca pwdb, para que se pueda actualizar la base de datos de contraseñas.
- Una vez actualizada la biblioteca de la base de datos de contraseñas, la nueva contraseña de Joe está en efecto.
PAM y el inicio de sesión
Cada vez que un usuario intenta iniciar sesión en un sistema Linux, se ejecuta el programa /bin/login. Cada vez que se ejecuta /bin/login, PAM lee el archivo de configuración /etc/pam.d/login. Ahora que hemos discutido PAM en detalle, podemos analizar detenidamente las acciones que realiza cada módulo en el archivo /etc/pam.d/login.
La Tabla D muestra un archivo /etc/pam.d/login típico.
#%PAM-1.0 | ||
auth | required | /lib/security/pam_securetty.so |
auth | required | /lib/security/pam_pwdb.so shadow nullok |
auth | required | /lib/security/pam_nologin.so |
account | required | /lib/security/pam_pwdb.so |
password | required | /lib/security/pam_cracklib.so |
password | required | /lib/security/pam_pwdb.so nullok use_authtok md5 shadow |
session | required | /lib/security/pam_pwdb.so |
session | optional | /lib/security/pam_console.so |
Las primeras tres líneas de este archivo (excluyendo la línea #%PAM-1.0) representan una pila de tres módulos de tipo auth. El primer módulo es el módulo pam_securetty. Este módulo:
- Solo se puede utilizar como un módulo de tipo auth.
- No acepta argumentos.
- Comprueba el dispositivo de inicio de sesión utilizado frente a la lista de dispositivos de inicio de sesión permitidos que figuran en /etc/securetty si el usuario intenta iniciar sesión como root.
- Fallará si el dispositivo de inicio de sesión no está en la lista /etc/securetty. (Si este módulo falla, el intento de inicio de sesión también fallará).
- Utiliza la marca de control "required". (Si este módulo falla, los demás módulos de la pila aún se ejecutarán, pero el acceso no se denegará hasta que los tres módulos de la pila hayan fallado).
El segundo módulo utilizado es pam_pwdb. El propósito de pam_pwdb es autenticar al usuario. El tercer módulo utilizado es pam_nologin. Este módulo es un módulo de tipo auth solamente. No aceptará argumentos. Se utiliza para comprobar la presencia del archivo /etc/nologin. Si el archivo /etc/nologin existe, no se permite que los usuarios, excepto root, inicien sesión en el sistema. El archivo /etc/nologin se utiliza normalmente cuando el sistema está fuera de servicio por razones administrativas. Si este es el caso, se puede colocar un mensaje en el archivo nologin, que se mostrará cada vez que se intente un inicio de sesión que no sea root. Si el archivo /etc/nologin no existe, se ejecutarán los módulos enumerados en /etc/pam.d/login.
La siguiente línea se utiliza para invocar pam_pwdb como un módulo de tipo account. Este módulo se utiliza para comprobar la cuenta del usuario. Si el usuario utiliza una contraseña no válida o si la contraseña del usuario ha caducado, este módulo detecta el problema y se ejecutarán las dos líneas siguientes en el archivo /etc/pam.d/login. Entonces se llevará a cabo el procedimiento descrito en la sección PAM y contraseñas. La última línea del archivo /etc/pam.d/logn utiliza el módulo pam_pwdb como un módulo de tipo session. Este módulo se utiliza para registrar información de conexión en syslog.
Cualquier aplicación en su sistema que requiera una contraseña utilizará algunos o todos los módulos enumerados en este archivo /etc/pam.d/login. Estas aplicaciones incluyen:
Tipos de autenticación en seguridad informática y redes- su
- ftp
- chfn
- ppp
- rsh
Un cambio en el archivo de configuración de cualquier aplicación generalmente se reflejará en los archivos de configuración de todas las aplicaciones que requieran contraseñas. Al proporcionar esta continuidad en los archivos de configuración de PAM, el administrador del sistema reduce el riesgo de problemas de seguridad derivados de conflictos entre los archivos de configuración de PAM.
Resumen
En este artículo, he explicado cómo utilizar PAM para administrar y proteger la política de contraseñas del sistema y el proceso de inicio de sesión del usuario. Discutí los tipos de módulos y la configuración necesaria para aplicar políticas de seguridad, así como cómo utilizar múltiples módulos en una pila. También expliqué cómo utilizar PAM para administrar el proceso de inicio de sesión del usuario.
En Newsmatic nos especializamos en tecnología de vanguardia, contamos con los artículos mas novedosos sobre Seguridad, allí encontraras muchos artículos similares a Protege tus contraseñas con PAM: Tu aliado para la seguridad , tenemos lo ultimo en tecnología 2023.
Artículos Relacionados