Introducción
La seguridad de las contraseñas es un componente crítico para proteger los sistemas y datos del acceso no autorizado. Las contraseñas débiles o comprometidas son uno de los puntos de entrada más comunes para los atacantes. Implementar una política de contraseñas robusta es una práctica de seguridad fundamental.
En este laboratorio, aprenderá a implementar varias de las mejores prácticas para la seguridad de las contraseñas en un sistema Linux. Configurará reglas de complejidad de contraseñas, configurará la Autenticación Multifactor (MFA), comprenderá el papel de los gestores de contraseñas, aplicará la rotación de contraseñas y aprenderá sobre la importancia de la educación del usuario.
Comprender los Requisitos de Complejidad de Contraseñas
En este paso, aplicará reglas de complejidad de contraseñas para asegurar que los usuarios creen contraseñas seguras. Una contraseña segura típicamente incluye una mezcla de letras mayúsculas, letras minúsculas, números y caracteres especiales, y tiene una longitud suficiente. Utilizaremos el Módulo de Autenticación Conectable (PAM) pam_pwquality para lograr esto.
Primero, instalemos el paquete libpam-pwquality, que proporciona las herramientas necesarias.
sudo apt-get install libpam-pwquality -y
Ahora, necesita configurar la pila de PAM para usar este módulo para los cambios de contraseña. Editaremos el archivo /etc/pam.d/common-password. Este archivo contiene la configuración común para la gestión de contraseñas.
Abra el archivo usando el editor nano:
sudo nano /etc/pam.d/common-password
Busque la línea que contiene pam_unix.so y agregue la siguiente línea encima de ella. Esto asegura que la verificación de calidad ocurra antes de que la contraseña sea realmente cambiada por el módulo pam_unix.
password requisite pam_pwquality.so retry=3 minlen=12 ucredit=-1 lcredit=-1 dcredit=-1 ocredit=-1
Analicemos estas opciones:
retry=3: El usuario tiene 3 intentos para ingresar una contraseña que cumpla con los requisitos.minlen=12: La longitud mínima de la contraseña es de 12 caracteres.ucredit=-1: Requiere al menos una letra mayúscula.lcredit=-1: Requiere al menos una letra minúscula.dcredit=-1: Requiere al menos un dígito.ocredit=-1: Requiere al menos un carácter especial (otro).
Su archivo debería verse similar a esto (algunas líneas pueden diferir):
## /etc/pam.d/common-password
...
password requisite pam_pwquality.so retry=3 minlen=12 ucredit=-1 lcredit=-1 dcredit=-1 ocredit=-1
password [success=1 default=ignore] pam_unix.so obscure sha512
...
Presione Ctrl+X, luego Y, y Enter para guardar el archivo y salir de nano.
Ahora, probemos la nueva política. Intentaremos cambiar la contraseña del usuario labex.
passwd
Primero, ingrese su contraseña actual (puede simplemente presionar Enter ya que no hay contraseña configurada para labex). Luego, intente establecer una contraseña débil como password. El sistema debería rechazarla y mostrar un mensaje de error porque no cumple con los requisitos de complejidad.
(current) UNIX password:
New password:
BAD PASSWORD: The password is shorter than 12 characters
Retype new password:
Sorry, passwords do not match.
passwd: Authentication token manipulation error
passwd: password unchanged
Ahora, intente de nuevo con una contraseña segura como Labex!P@ssw0rd. Esta contraseña debería ser aceptada.
Ha configurado con éxito los requisitos de complejidad de contraseñas en su sistema.
Implementar Autenticación Multifactor
En este paso, aprenderá a implementar la Autenticación Multifactor (MFA). La MFA añade una segunda capa de seguridad al requerir que los usuarios proporcionen dos o más factores de verificación para obtener acceso. Utilizaremos el módulo PAM de Google Authenticator para añadir la autenticación de Contraseña de Un Solo Uso Basada en Tiempo (TOTP).
Primero, instale el paquete libpam-google-authenticator.
sudo apt-get install libpam-google-authenticator -y
A continuación, necesita generar una configuración de MFA para su usuario. Ejecute el siguiente comando como el usuario labex (no con sudo).
google-authenticator
El comando le hará una serie de preguntas. Para el propósito de este laboratorio, respóndalas de la siguiente manera:
Do you want authentication tokens to be time-based (y/n): PresioneyyEnter.- Verá un código QR, una clave secreta y códigos de emergencia. En un escenario del mundo real, escanearía el código QR con una aplicación de autenticación en su teléfono. Para este laboratorio, simplemente continuaremos.
Do you want me to update your "/home/labex/.google_authenticator" file? (y/n): PresioneyyEnter. Esto guarda su clave secreta.Do you want to disallow multiple uses of the same authentication token?: PresioneyyEnter.Do you want to increase the time-skew window?: PresionenyEnter.Do you want to enable rate-limiting for the authentication module?: PresioneyyEnter.
Esto crea un archivo .google_authenticator en su directorio de inicio (/home/labex).
Ahora, configuremos SSH para usar este token de MFA. Primero, debemos indicarle a PAM que lo requiera para las sesiones SSH.
Abra el archivo /etc/pam.d/sshd:
sudo nano /etc/pam.d/sshd
Agregue la siguiente línea al final del archivo:
auth required pam_google_authenticator.so
Guarde y salga del archivo (Ctrl+X, Y, Enter).
A continuación, debemos habilitar la autenticación de desafío-respuesta en la configuración del servidor SSH.
Abra /etc/ssh/sshd_config:
sudo nano /etc/ssh/sshd_config
Busque la línea ChallengeResponseAuthentication no y cámbiela a yes. Si la línea está comentada con un #, elimine el #.
## /etc/ssh/sshd_config
...
ChallengeResponseAuthentication yes
...
Guarde y salga del archivo. En un sistema real, reiniciaría el servicio SSH. Sin embargo, en este entorno contenedorizado, reiniciar servicios como sshd no es compatible. La conclusión clave es comprender los pasos de configuración necesarios para habilitar la MFA para SSH.
Usar Gestores de Contraseñas
En este paso, discutiremos la importancia de los gestores de contraseñas. Reutilizar contraseñas en diferentes servicios es un riesgo de seguridad importante. Si un servicio sufre una brecha, los atacantes pueden usar la contraseña filtrada para acceder a sus otras cuentas. Un gestor de contraseñas le ayuda a generar, almacenar y gestionar contraseñas únicas y seguras para cada servicio.
KeePassXC es un gestor de contraseñas popular, de código abierto y gratuito que almacena sus contraseñas en una base de datos segura y cifrada. Aunque es una aplicación gráfica, la instalaremos para comprender cómo se integran estas herramientas en el flujo de trabajo de un usuario.
Instalemos KeePassXC usando apt-get.
sudo apt-get install keepassxc -y
Una vez completada la instalación, puede verificarla comprobando la existencia del comando.
which keepassxc
Debería ver la siguiente salida, lo que indica que la aplicación está instalada y disponible en la ruta de su sistema.
/usr/bin/keepassxc
En un entorno de escritorio, iniciaría KeePassXC, crearía una nueva base de datos cifrada con una contraseña maestra segura y comenzaría a añadir sus credenciales de inicio de sesión para varios sitios web y servicios. La aplicación también puede generar automáticamente contraseñas muy seguras para usted. El principio clave es recordar una única contraseña maestra segura para desbloquear el gestor, y dejar que el gestor se encargue de todas sus otras contraseñas complejas.
Rotar Contraseñas Regularmente
En este paso, aprenderá a aplicar la rotación de contraseñas, también conocida como envejecimiento de contraseñas. Cambiar las contraseñas regularmente limita la ventana de oportunidad para un atacante que pueda haber robado una contraseña.
En Linux, puede establecer políticas de envejecimiento de contraseñas a nivel de sistema en el archivo /etc/login.defs. También puede establecer políticas para usuarios individuales con el comando chage. Nos centraremos en el comando chage.
Primero, veamos la configuración actual de envejecimiento de contraseñas para el usuario labex.
sudo chage -l labex
Verá una salida similar a esta, con la mayoría de los valores establecidos en never.
Last password change : May 20, 2024
Password expires : never
Password inactive : never
Account expires : never
Minimum number of days between password change : 0
Maximum number of days between password change : 99999
Number of days of warning before password expires : 7
El Maximum number of days between password change está establecido en 99999, lo que efectivamente significa que la contraseña nunca expira. Cambiemos esto para forzar un cambio de contraseña cada 90 días.
Utilice el comando chage con la opción -M para establecer la edad máxima.
sudo chage -M 90 labex
Ahora, compruebe la configuración de nuevo para confirmar el cambio.
sudo chage -l labex
La salida ahora debería mostrar que el número máximo de días es 90. La fecha de Password expires también se actualizará en consecuencia.
Last password change : May 20, 2024
Password expires : Aug 18, 2024
Password inactive : never
Account expires : never
Minimum number of days between password change : 0
Maximum number of days between password change : 90
Number of days of warning before password expires : 7
Ha configurado correctamente una política de rotación de contraseñas para un usuario.
Educar a los Usuarios sobre Higiene de Contraseñas
En este paso, nos centraremos en el elemento humano de la seguridad. Los controles técnicos son esenciales, pero son más efectivos cuando los usuarios también practican una buena higiene de contraseñas. Educar a los usuarios sobre las mejores prácticas de seguridad es un control crucial y no técnico.
Aquí hay algunos puntos clave de una buena higiene de contraseñas:
- No reutilice contraseñas: Use una contraseña única para cada cuenta.
- No comparta contraseñas: Nunca comparta su contraseña con nadie, incluido el personal de TI.
- Tenga cuidado con el phishing: Sea sospechoso de correos electrónicos o mensajes que soliciten sus credenciales de inicio de sesión.
- Bloquee su pantalla: Siempre bloquee su computadora cuando se aleje de ella.
- Use frases de contraseña (passphrases): Una frase de contraseña larga como
correct-horse-battery-staplepuede ser más segura y fácil de recordar que una contraseña corta y compleja comoJ%7d*fQ!.
Para simular la creación de un documento de política dirigido a los usuarios, creemos un archivo de texto simple en nuestro directorio de proyecto que describa estas reglas.
Primero, cree el archivo y agregue la primera regla usando el comando echo y la redirección de salida >.
echo "1. No comparta su contraseña con nadie." > ~/project/password_policy.txt
Ahora, agreguemos dos reglas más al archivo usando el operador de adición >>.
echo "2. Use una contraseña única para cada servicio." >> ~/project/password_policy.txt
echo "3. Tenga cuidado con los correos electrónicos de phishing que solicitan credenciales." >> ~/project/password_policy.txt
Finalmente, muestre el contenido de su nuevo documento de política usando el comando cat.
cat ~/project/password_policy.txt
Debería ver la siguiente salida:
1. No comparta su contraseña con nadie.
2. Use una contraseña única para cada servicio.
3. Tenga cuidado con los correos electrónicos de phishing que solicitan credenciales.
Este simple ejercicio demuestra cómo se pueden documentar y compartir las políticas de seguridad. En una organización real, esto sería parte de un programa más amplio de concienciación sobre seguridad.
Resumen
En este laboratorio, ha implementado con éxito varias mejores prácticas clave para la seguridad de contraseñas en un entorno Linux. Un enfoque de múltiples capas que combina controles técnicos con educación del usuario proporciona la defensa más sólida contra el acceso no autorizado.
Ha aprendido a:
- Aplicar la creación de contraseñas seguras configurando requisitos de complejidad con
pam_pwquality. - Agregar una segunda capa crítica de seguridad configurando la Autenticación Multifactor (MFA) con
pam_google_authenticator. - Comprender el papel de los gestores de contraseñas como KeePassXC en la creación y almacenamiento de contraseñas únicas y seguras.
- Implementar políticas de rotación de contraseñas utilizando el comando
chagepara limitar el riesgo de credenciales comprometidas. - Reconocer la importancia de la educación del usuario y la documentación de las políticas de seguridad para una buena higiene de contraseñas.
Al aplicar estas prácticas, puede mejorar significativamente la postura de seguridad de cualquier sistema que administre.


