Auditoría de seguridad de cuentas inactivas: Crear un script o informe para detectar cuentas de usuario que no han iniciado sesión en los últimos 90 días y proceder a su desactivación.
Objetivo:
Auditar, identificar y gestionar de manera automatizada las cuentas de usuario locales o del sistema que acumulan un periodo de inactividad superior a 90 días (sin registrar inicios de sesión exitosos), generando un informe de riesgos y procediendo a su desactivación preventiva para minimizar la superficie de ataque frente a robos de credenciales.
Escenario:
- Una máquina virtual o equipo físico con un sistema operativo Windows (Pro / Enterprise / Server) o GNU/Linux.
- Privilegios de administrador del sistema o superusuario necesarios para consultar las propiedades de autenticación y modificar el estado de habilitación de las cuentas de usuario.
Instrucciones:
Opción A: Auditoría y desactivación de cuentas inactivas en entornos Windows
- Abre una terminal de PowerShell con privilegios de administrador y crea un script de auditoría (por ejemplo,
auditar_inactivos.ps1):# Script para detectar y desactivar cuentas locales inactivas más de 90 días $limiteDias = (Get-Date).AddDays(-90) Write-Host "Buscando cuentas locales sin actividad desde: $($limiteDias.ToShortDateString())" -ForegroundColor Cyan # Obtener usuarios locales y comprobar su última fecha de inicio de sesión $usuarios = Get-LocalUser | Where-Object { $_.Enabled -eq $true } foreach ($usuario in $usuarios) { # Comprobar si el usuario ha iniciado sesión alguna vez if ($usuario.LastLogon -and $usuario.LastLogon -lt $limiteDias) { Write-Host "Cuenta inactiva detectada: $($usuario.Name). Último acceso: $($usuario.LastLogon)" -ForegroundColor Yellow # Desactivar la cuenta de forma preventiva Disable-LocalUser -Name $usuario.Name Write-Host "Cuenta $($usuario.Name) desactivada correctamente." -ForegroundColor Green } } - Ejecuta el script creado en la terminal de PowerShell:
.\auditar_inactivos.ps1
Opción B: Auditoría y bloqueo de cuentas inactivas en entornos GNU/Linux
- Abre una terminal en tu distribución Linux con privilegios de superusuario.
- Consultar el estado de caducidad y último acceso de las cuentas del sistema:
- Utiliza el comando
chagepara auditar los parámetros de caducidad de un usuario específico (por ejemplo,usuario_prueba):sudo chage -l usuario_prueba
- Utiliza el comando
- Desactivar o bloquear una cuenta inactiva mediante comandos:
- Para bloquear de inmediato una cuenta de usuario impidiendo el inicio de sesión por cualquier vía (contraseña o clave SSH) sin eliminar sus ficheros personales, ejecuta:
sudo passwd -l nombre_de_usuario :: O alternativamente bloqueando la contraseña y el intérprete de comandos: sudo usermod -L -s /usr/sbin/nologin nombre_de_usuario
- Para bloquear de inmediato una cuenta de usuario impidiendo el inicio de sesión por cualquier vía (contraseña o clave SSH) sin eliminar sus ficheros personales, ejecuta:
Verificación:
- En Windows, comprueba ejecutando
Get-LocalUserque las cuentas detectadas como inactivas muestran ahora la propiedad Enabled en estadoFalse. - En Linux, verifica ejecutando
sudo passwd -S nombre_de_usuarioque el estado de la contraseña aparece marcado como bloqueado (LK).
Preguntas de reflexión:
- ¿Por qué las cuentas de usuario antiguas, huérfanas o sin actividad prolongada (cuentas zombis) representan un vector de riesgo crítico de seguridad para la organización?
- ¿Qué precauciones se deben adoptar al automatizar la desactivación masiva de cuentas mediante scripts para evitar bloquear por error a cuentas de servicio de aplicaciones críticas o procesos del sistema?
- ¿Qué ventajas aporta establecer directivas estrictas de caducidad de contraseñas y bloqueo automático frente a la acumulación indefinida de usuarios inactivos en los sistemas operativos?
Haz clic aquí para ver las soluciones y explicaciones
1. ¿Por qué las cuentas inactivas son un riesgo crítico de seguridad?
Las cuentas de usuario que ya no se utilizan rara vez son monitorizadas o auditadas por los administradores. Si un atacante logra comprometer las credenciales estáticas de una de estas cuentas olvidadas, puede utilizarlas para moverse lateralmente por la red de forma sigilosa durante semanas o meses sin levantar sospechas, ya que el usuario legítimo nunca comprobará su actividad.
2. ¿Qué precauciones hay que tomar al automatizar la desactivación?
Es imprescindible excluir explícitamente del script a las cuentas de servicio del sistema, cuentas de aplicaciones automatizadas, cuentas de administración general (como el usuario Administrador o root principal) y cuentas de usuarios en permisos de baja temporal justificada (como vacaciones o bajas médicas), para evitar interrumpir servicios críticos o bloquear accesos legítimos.
3. ¿Qué ventajas aportan las directivas de caducidad y bloqueo automático?
Garantizan el cumplimiento normativo de seguridad (compliance) y reducen de forma automatizada la superficie de ataque de la infraestructura, asegurando que ninguna credencial estática desatendida permanezca habilitada indefinidamente en el sistema.