19 KiB
19 KiB
US-ADM-007: Configurar Políticas de Seguridad
ID: US-ADM-007
Módulo: MAI-013
Relacionado con: RF-ADM-001, RF-ADM-002, ET-ADM-005
Prioridad: Alta
Story Points: 5
📖 Historia de Usuario
Como Director General
Quiero configurar políticas de seguridad de la organización (passwords, sesiones, intentos de login)
Para cumplir con estándares de seguridad y proteger el sistema contra accesos no autorizados
✅ Criterios de Aceptación
1. Configurar Política de Passwords
Given que soy Director General
When accedo a "Administración > Seguridad > Políticas de Password"
Then debo ver opciones configurables:
- Longitud mínima (slider: 8-20 caracteres, default: 12)
- Requerir mayúscula (toggle)
- Requerir minúscula (toggle)
- Requerir número (toggle)
- Requerir carácter especial (toggle)
- Expiración (días): 30, 60, 90, 180, nunca
- Prevenir reutilización (últimas N passwords): 0-10
- Bloquear passwords comunes (toggle)
When modifico la configuración
And hago clic en "Guardar"
Then el sistema debe:
- Aplicar la política a nuevos passwords inmediatamente
- Solicitar cambio de password en próximo login a usuarios existentes (si es más restrictiva)
- Enviar notificación a todos los usuarios sobre cambio de política
- Registrar en audit log
2. Configurar Política de Sesiones
Given que estoy configurando políticas de sesión
When accedo a "Seguridad > Sesiones"
Then debo ver opciones:
- Duración de sesión activa: 15min, 30min, 1h, 4h, 8h, 24h
- Timeout por inactividad: 5min, 15min, 30min, 1h
- Sesiones concurrentes máximas por usuario: 1-10
- Requerir re-autenticación para acciones críticas (toggle)
- IP whitelist (lista de IPs permitidas)
When configuro:
- Duración: 4 horas
- Timeout: 30 minutos
- Máximo 3 sesiones concurrentes
And guardo
Then el sistema debe:
- Aplicar límites inmediatamente a nuevas sesiones
- Cerrar sesiones existentes que excedan los nuevos límites
- Notificar a usuarios afectados
3. Configurar Política de Intentos de Login
Given que quiero proteger contra brute force attacks
When configuro políticas de login:
- Máximo intentos fallidos: 3, 5, 10
- Tiempo de bloqueo: 15min, 30min, 1h, 24h, permanente
- Bloqueo por IP: toggle
- Bloqueo por usuario: toggle
- Captcha después de N intentos: 0-5
And establezco:
- 5 intentos máximos
- Bloqueo de 30 minutos
- Captcha después de 3 intentos
Then el sistema debe:
- Aplicar reglas inmediatamente
- Mostrar captcha en login después de 3 fallos
- Bloquear cuenta por 30 min después de 5 fallos
- Enviar alerta de seguridad al administrador
4. Configurar Autenticación de Dos Factores (2FA)
Given que quiero habilitar 2FA
When accedo a "Seguridad > Autenticación"
Then debo ver opciones:
- Requerir 2FA para todos los usuarios (toggle)
- Requerir 2FA solo para roles críticos (director, finance)
- Métodos permitidos:
☑️ Aplicación Authenticator (Google, Microsoft)
☑️ SMS
☑️ Email
- Periodo de recordar dispositivo: 0, 7, 30, 90 días
When habilito 2FA obligatorio para directores
Then el sistema debe:
- Solicitar configuración de 2FA en próximo login de directores
- No permitir acceso hasta configurar 2FA
- Generar códigos de recuperación
5. Gestionar Sesiones Activas
Given que soy administrador
When accedo a "Seguridad > Sesiones Activas"
Then debo ver lista en tiempo real con:
- Usuario
- Dispositivo / Navegador
- IP
- Ubicación (geo-localización)
- Inicio de sesión
- Última actividad
- Acciones: [Revocar]
When hago clic en "Revocar" en una sesión
Then el sistema debe:
- Cerrar la sesión inmediatamente
- Forzar re-login del usuario
- Notificar al usuario por email
- Registrar en audit log
6. Configurar Alertas de Seguridad
Given que quiero recibir alertas de eventos críticos
When configuro reglas de alerta:
- Evento: "Login desde nueva IP"
- Condición: "Usuario con rol director o finance"
- Acción: "Enviar email + SMS"
- Destinatarios: ["director@constructora.com"]
And guardo la regla
Then el sistema debe:
- Evaluar cada evento de login
- Enviar alerta si cumple condición
- Incluir detalles: IP, ubicación, dispositivo
- Permitir bloquear sesión desde el email
7. Restricciones por Horario
Given que quiero limitar acceso a horarios laborales
When configuro:
- Horario permitido: Lun-Vie 8:00-18:00
- Zona horaria: America/Mexico_City
- Aplicar a rol: "resident"
Then el sistema debe:
- Permitir login solo en horario configurado
- Bloquear intentos fuera de horario con mensaje claro
- Permitir excepciones temporales
8. Whitelist/Blacklist de IPs
Given que quiero restringir acceso por IP
When agrego a whitelist:
- 192.168.1.0/24 (Oficina principal)
- 10.0.0.0/16 (VPN corporativa)
And agrego a blacklist:
- 203.0.113.0/24 (IP sospechosa)
Then el sistema debe:
- Solo permitir login desde IPs en whitelist
- Bloquear inmediatamente IPs en blacklist
- Registrar intentos bloqueados en audit log
9. Revisión Periódica de Seguridad
Given que quiero auditorías de seguridad automáticas
When configuro:
- Frecuencia: Semanal
- Día: Lunes 9:00 AM
- Enviar reporte a: ["director@constructora.com"]
Then el sistema debe generar reporte con:
- Usuarios con passwords expirados
- Usuarios sin 2FA habilitado
- Sesiones sospechosas
- Intentos de login fallidos (top 10)
- Recomendaciones de seguridad
10. Modo de Mantenimiento
Given que necesito mantenimiento del sistema
When activo "Modo Mantenimiento"
And configuro:
- Mensaje personalizado: "Sistema en mantenimiento..."
- Tiempo estimado: 2 horas
- Permitir acceso a IPs: [admin IPs]
Then el sistema debe:
- Mostrar página de mantenimiento a todos los usuarios
- Cerrar sesiones activas (excepto admins)
- Permitir solo acceso desde IPs autorizadas
- Registrar inicio/fin del mantenimiento
🎨 Mockup / Wireframe
Panel de Políticas de Seguridad
┌─────────────────────────────────────────────────────────────────┐
│ Políticas de Seguridad │
├─────────────────────────────────────────────────────────────────┤
│ │
│ 🔐 Políticas de Password │
│ ┌─────────────────────────────────────────────────────────────┐ │
│ │ Longitud mínima │ │
│ │ ●────────────────○───────── 12 caracteres │ │
│ │ │ │
│ │ ☑️ Requerir mayúscula ☑️ Requerir minúscula │ │
│ │ ☑️ Requerir número ☑️ Requerir carácter especial │ │
│ │ │ │
│ │ Expiración de password │ │
│ │ [v] 90 días │ │
│ │ │ │
│ │ Prevenir reutilización (últimas N passwords) │ │
│ │ [v] 5 passwords │ │
│ │ │ │
│ │ ☑️ Bloquear passwords comunes (123456, password, etc.) │ │
│ └─────────────────────────────────────────────────────────────┘ │
│ │
│ 🔓 Políticas de Sesión │
│ ┌─────────────────────────────────────────────────────────────┐ │
│ │ Duración máxima de sesión │ │
│ │ ◉ 4 horas ○ 8 horas ○ 24 horas ○ Sin límite │ │
│ │ │ │
│ │ Timeout por inactividad │ │
│ │ ○ 15 min ◉ 30 min ○ 1 hora ○ Sin timeout │ │
│ │ │ │
│ │ Sesiones concurrentes máximas por usuario │ │
│ │ [v] 3 dispositivos │ │
│ │ │ │
│ │ ☑️ Requerir re-autenticación para acciones críticas │ │
│ └─────────────────────────────────────────────────────────────┘ │
│ │
│ 🚫 Protección contra Brute Force │
│ ┌─────────────────────────────────────────────────────────────┐ │
│ │ Intentos de login fallidos antes de bloqueo │ │
│ │ [v] 5 intentos │ │
│ │ │ │
│ │ Tiempo de bloqueo │ │
│ │ ◉ 30 minutos ○ 1 hora ○ 24 horas ○ Permanente │ │
│ │ │ │
│ │ Mostrar captcha después de │ │
│ │ [v] 3 intentos fallidos │ │
│ │ │ │
│ │ ☑️ Bloquear por IP ☑️ Bloquear por usuario │ │
│ └─────────────────────────────────────────────────────────────┘ │
│ │
│ [Cancelar] [Guardar Cambios] │
└─────────────────────────────────────────────────────────────────┘
Sesiones Activas en Tiempo Real
┌─────────────────────────────────────────────────────────────────┐
│ Sesiones Activas (Tiempo Real) 🔄 Actualizar│
├─────────────────────────────────────────────────────────────────┤
│ 🟢 15 usuarios conectados │
├─────────────────────────────────────────────────────────────────┤
│ │
│ Usuario Dispositivo IP Inicio │
│ ────────────────────────────────────────────────────────────── │
│ 🟢 María López Chrome / Windows 10.0.1.45 09:15 AM │
│ Director 📍 Ciudad de México [Revocar] │
│ Última actividad: Hace 2 minutos │
│ │
│ 🟢 Juan Pérez Safari / macOS 192.168.1.89 08:45 AM │
│ Ingeniero 📍 Monterrey [Revocar] │
│ Última actividad: Hace 5 minutos │
│ │
│ 🟡 Ana García Mobile / Android 200.57.5.12 07:30 AM │
│ Residente 📍 Guadalajara [Revocar] │
│ ⚠️ IP no reconocida - Nueva ubicación │
│ │
│ 🔴 Pedro Morales Firefox / Linux 198.51.100.5 3 días │
│ Compras 📍 Desconocido [Revocar] │
│ ⚠️ Sesión inactiva por 3 días │
│ │
│ [Revocar Todas las Sesiones] │
└─────────────────────────────────────────────────────────────────┘
Configuración de Alertas de Seguridad
┌─────────────────────────────────────────────┐
│ Nueva Regla de Alerta [X]│
├─────────────────────────────────────────────┤
│ │
│ Evento * │
│ [v] Login desde nueva IP │
│ ▼ Login desde nueva IP │
│ Login fallido │
│ Password cambiado │
│ Permiso modificado │
│ Backup fallido │
│ Eliminación masiva │
│ │
│ Condición (opcional) │
│ ┌─────────────────────────────────────────┐ │
│ │ user.role IN ['director', 'finance'] │ │
│ └─────────────────────────────────────────┘ │
│ │
│ Acciones │
│ ☑️ Enviar email │
│ ☑️ Enviar SMS │
│ ☐ Crear ticket de soporte │
│ ☐ Bloquear usuario temporalmente │
│ │
│ Destinatarios │
│ ┌─────────────────────────────────────────┐ │
│ │ director@constructora.com │ │
│ │ seguridad@constructora.com [+ ] │ │
│ └─────────────────────────────────────────┘ │
│ │
│ Severidad │
│ ◉ Alta ○ Media ○ Baja │
│ │
│ [Cancelar] [Crear Regla] │
└─────────────────────────────────────────────┘
🧪 Casos de Prueba
CP-001: Cambiar Política de Password
Precondiciones:
- Política actual: 8 caracteres mínimos
Pasos:
- Ir a "Seguridad > Políticas de Password"
- Cambiar a 12 caracteres mínimos
- Habilitar requerir carácter especial
- Guardar
Resultado Esperado:
- ✅ Política actualizada inmediatamente
- ✅ Nuevos usuarios deben cumplir nueva política
- ✅ Usuarios existentes reciben notificación
- ✅ Audit log registra cambio
CP-002: Bloqueo por Intentos Fallidos
Precondiciones:
- Política: 5 intentos, bloqueo 30 min
Pasos:
- Intentar login con password incorrecto 5 veces
- Verificar estado de cuenta
Resultado Esperado:
- ✅ Después de 3 intentos: muestra captcha
- ✅ Después de 5 intentos: cuenta bloqueada por 30 min
- ✅ Mensaje: "Cuenta bloqueada por intentos fallidos"
- ✅ Email de alerta enviado al usuario
- ✅ Audit log registra bloqueo
CP-003: Revocar Sesión Activa
Precondiciones:
- Usuario "Juan" tiene sesión activa
Pasos:
- Ir a "Sesiones Activas"
- Clic "Revocar" en sesión de Juan
- Confirmar
Resultado Esperado:
- ✅ Sesión cerrada inmediatamente
- ✅ Juan desconectado del sistema
- ✅ Debe hacer login nuevamente
- ✅ Email enviado a Juan notificando
- ✅ Audit log registra revocación
CP-004: Alerta de Login desde Nueva IP
Precondiciones:
- Regla: Alertar login desde nueva IP para directores
Pasos:
- Director hace login desde IP nunca antes usada
- Verificar alertas
Resultado Esperado:
- ✅ Email enviado a director
- ✅ Email incluye IP, ubicación, dispositivo
- ✅ Opción para "Bloquear esta sesión" en email
- ✅ Audit log registra alerta
CP-005: IP Bloqueada en Blacklist
Precondiciones:
- IP 203.0.113.10 agregada a blacklist
Pasos:
- Intentar login desde IP bloqueada
Resultado Esperado:
- ✅ Login bloqueado inmediatamente
- ✅ Mensaje: "Acceso denegado desde esta ubicación"
- ✅ No se registra intento de login (bloqueado en firewall)
- ✅ Audit log registra intento bloqueado
🔗 Dependencias
Requisitos Previos:
- ET-ADM-005: PasswordPolicyService implementado
- ET-ADM-005: SessionSecurityService implementado
- ET-ADM-005: RateLimitGuard implementado
- Redis para tracking de intentos de login
APIs Necesarias:
GET /api/admin/security/policies- Obtener políticasPUT /api/admin/security/policies- Actualizar políticasGET /api/admin/security/sessions- Sesiones activasDELETE /api/admin/security/sessions/:id- Revocar sesiónPOST /api/admin/security/alert-rules- Crear regla de alertaGET /api/admin/security/ip-whitelist- Gestionar whitelist/blacklist
📊 Métricas de Éxito
- Passwords que cumplen política: 100%
- Tiempo de bloqueo después de 5 intentos: <1 segundo
- Alertas enviadas: 100% de eventos configurados
- Sesiones revocadas: <5 segundos
Generado: 2025-11-20
Estado: ✅ Listo para desarrollo