OP.AAC.5 Mecanismo de autenticación
Objetivo
Establecer los mecanismos de autenticación robustos y multinivel para el sistema Legit Health Plus, garantizando la verificación fidedigna de la identidad de usuarios y sistemas mediante métodos apropiados al nivel de riesgo, cumpliendo con ENS, MDR y estándares de ciberseguridad para dispositivos médicos.
Alcance
Este procedimiento aplica a:
- Autenticación de profesionales sanitarios y personal administrativo
- Autenticación de sistemas y servicios automatizados
- Autenticación para integraciones API y servicios externos
- Mecanismos de autenticación multifactor (MFA)
- Gestión de credenciales y secretos
- Autenticación federada y Single Sign-On (SSO)
Implementación en Legit Health Plus
Arquitectura de Autenticación
Niveles de Autenticación según Criticidad
| Nivel | Contexto de Uso | Métodos Requeridos | Factores | Ejemplo |
|---|---|---|---|---|
| Nivel 1 - Básico | Acceso a información pública | Password robusto | 1 factor | Documentación, estadísticas |
| Nivel 2 - Medio | Acceso a datos no críticos | Password + MFA | 2 factores | Informes agregados |
| Nivel 3 - Alto | Acceso a datos de pacientes | Password + MFA + Contexto | 2+ factores | Historiales clínicos |
| Nivel 4 - Crítico | Modificación de algoritmos IA | Certificado + MFA + Biometría | 3 factores | Cambios en modelos diagnósticos |
| Nivel 5 - Máximo | Acceso administrativo total | Hardware token + Biometría + PIN | 3+ factores | Root access, PKI management |
Implementación de Autenticación Multifactor (MFA)
Configuración MFA por Rol
Requisitos de Autenticación Multifactor por Tipo de Usuario
| Rol | Métodos Permitidos | MFA Obligatorio | Período Gracia | Recordar Dispositivo | Evaluación Basada en Riesgo | Configuración Adicional |
|---|---|---|---|---|---|---|
| Profesionales Sanitarios (HCP) | TOTP, SMS, Push | Sí | 0 días | 7 días | Sí | - |
| Profesionales IT (ITP) | Token Hardware, TOTP | Sí | 0 días | No | No | - |
| Administradores (ADMIN) | Token Hardware, Biométrico | Sí | 0 días | No | No | Timeout sesión: 15 minutos |
| Clientes API (API) | Certificado Cliente | Sí | N/A | N/A | No | Mutual TLS requerido |
Leyenda de métodos MFA:
- TOTP: Time-based One-Time Password (aplicaciones como Google Authenticator, Authy)
- SMS: Código de verificación enviado por mensaje de texto
- Push: Notificación push a aplicación móvil autenticada
- Token Hardware: Dispositivo físico generador de tokens (ej: YubiKey)
- Biométrico: Huella digital, reconocimiento facial
- Certificado Cliente: Certificado digital X.509 para autenticación mTLS
PRO-AUTH-001: Aplicación de MFA Basada en Rol y Contexto
Objetivo: Determinar si se debe requerir autenticación multifactor para un intento de inicio de sesión específico, considerando el rol del usuario y el contexto de la autenticación.
Pasos:
-
Obtener configuración MFA del rol:
- Identificar el rol del usuario (HCP, ITP, ADMIN, API)
- Consultar requisitos MFA para ese rol en tabla de configuración
-
Verificar si MFA es obligatorio para el rol:
- Si MFA NO es obligatorio para el rol: PERMITIR acceso sin MFA
- Si MFA ES obligatorio: Continuar evaluación
-
Evaluar contexto basado en riesgo (si aplica al rol):
- Solo para roles con evaluación basada en riesgo activada (HCP)
- Calcular puntuación de riesgo del contexto (ver PRO-AUTH-002)
- Si puntuación de riesgo > 0.7 (70%): REQUERIR MFA obligatoriamente
- Si puntuación ≤ 0.7: Continuar evaluación
-
Verificar dispositivo recordado (si aplica):
- Solo si el rol permite recordar dispositivos (HCP: 7 días)
- Consultar si el dispositivo está en la lista de dispositivos recordados
- Verificar que no haya expirado el período de confianza
- Si dispositivo es recordado y válido: PERMITIR sin MFA
- Si no: REQUERIR MFA
-
Decisión final:
- Si llegamos aquí: REQUERIR MFA
Resultado: Decisión de si requerir o no MFA para el intento de autenticación
PRO-AUTH-002: Cálculo de Puntuación de Riesgo de Autenticación
Objetivo: Calcular una puntuación de riesgo (0.0 a 1.0) basada en el contexto del intento de autenticación.
Factores de riesgo evaluados:
-
Nueva ubicación geográfica (+0.3 puntos):
- El usuario intenta acceder desde un país o región no utilizado anteriormente
- Se compara con historial de ubicaciones del usuario
-
Dispositivo desconocido (+0.2 puntos):
- El dispositivo (identificado por fingerprint) no ha sido usado previamente por este usuario
- No está registrado en la lista de dispositivos conocidos
-
Hora inusual (+0.2 puntos):
- El intento de acceso ocurre fuera del horario habitual del usuario
- Se compara con patrón histórico de horas de acceso (ej: acceso a las 3 AM cuando normalmente accede de 8 AM a 6 PM)
-
Patrón de acceso anómalo (+0.3 puntos):
- El sistema de detección de anomalías ha identificado comportamiento sospechoso
- Ejemplos: múltiples intentos fallidos previos, velocidad de viaje imposible, cambio brusco de patrones
Cálculo:
- Inicializar puntuación = 0.0
- Evaluar cada factor:
- Si el factor está presente: Sumar el valor de riesgo correspondiente
- Si no está presente: No sumar nada
- Limitar puntuación máxima a 1.0 (100%)
Interpretación de puntuaciones:
- 0.0 - 0.3: Riesgo bajo - Contexto normal
- 0.4 - 0.6: Riesgo medio - Requiere atención
- 0.7 - 1.0: Riesgo alto - Requiere MFA obligatoriamente
Resultado: Puntuación de riesgo entre 0.0 y 1.0
Políticas de Contraseñas
Requisitos de Complejidad
| Parámetro | Usuario Estándar | Usuario Privilegiado | Administrador |
|---|---|---|---|
| Longitud mínima | 12 caracteres | 15 caracteres | 20 caracteres |
| Mayúsculas | Mínimo 1 | Mínimo 2 | Mínimo 3 |
| Minúsculas | Mínimo 1 | Mínimo 2 | Mínimo 3 |
| Números | Mínimo 1 | Mínimo 2 | Mínimo 3 |
| Caracteres especiales | Mínimo 1 | Mínimo 2 | Mínimo 3 |
| Historial | Últimas 12 | Últimas 24 | Últimas 36 |
| Expiración | 90 días | 60 días | 30 d ías |
| Intentos fallidos | 5 | 3 | 3 |
| Bloqueo | 30 minutos | 60 minutos | Manual |
Implementación de Políticas
PRO-AUTH-003: Validación de Contraseñas
Objetivo: Verificar que una contraseña propuesta cumple con los requisitos de complejidad según el tipo de usuario.
Pasos de validación:
-
Identificar política aplicable:
- Determinar tipo de usuario (estándar, privilegiado, administrador)
- Consultar requisitos en tabla de complejidad
-
Validar longitud mínima:
- Contar caracteres totales de la contraseña
- Comparar con longitud mínima requerida
- Si es menor: Agregar error "Mínimo X caracteres"
-
Validar mayúsculas:
- Contar letras mayúsculas (A-Z)
- Comparar con cantidad mínima requerida
- Si es insuficiente: Agregar error "Mínimo X mayúsculas"
-
Validar minúsculas:
- Contar letras minúsculas (a-z)
- Comparar con cantidad mínima requerida
- Si es insuficiente: Agregar error "Mínimo X minúsculas"
-
Validar números:
- Contar dígitos (0-9)
- Comparar con cantidad mínima requerida
- Si es insuficiente: Agregar error "Mínimo X números"
-
Validar caracteres especiales:
- Contar caracteres especiales (!@#$%^&*(),.?":|<>)
- Comparar con cantidad mínima requerida
- Si es insuficiente: Agregar error "Mínimo X caracteres especiales"
-
Verificar contra diccionario de contraseñas comunes:
- Consultar lista de contraseñas frecuentemente comprometidas
- Ejemplos: "Password123!", "Qwerty123!", "Admin2024!"
- Si coincide: Agregar error "Contraseña demasiado común"
-
Detectar patrones predecibles:
- Buscar secuencias consecutivas (123456, abcdef)
- Buscar patrones de teclado (qwerty, asdfgh)
- Buscar repeticiones excesivas (aaaaaa, 111111)
- Buscar información personal obvia (nombre+año)
- Si se detecta patrón: Agregar error "Contraseña contiene patrones predecibles"
-
Generar resultado:
- Si no hay errores: ACEPTAR contraseña
- Si hay errores: RECHAZAR y devolver lista de errores para corrección
Resultado: Contraseña aceptada o rechazada con lista de errores
PRO-AUTH-004: Generación de Contraseñas Seguras
Objetivo: Generar una contraseña aleatoria que cumpla automáticamente con todos los requisitos de seguridad.
Método de generación:
-
Obtener requisitos del tipo de usuario:
- Consultar política correspondiente (estándar/privilegiado/administrador)
- Extraer requisitos mínimos de cada tipo de carácter
-
Definir conjuntos de caracteres:
- Mayúsculas: A-Z (26 caracteres)
- Minúsculas: a-z (26 caracteres)
- Números: 0-9 (10 caracteres)
- Especiales: !@#$%^&*(),.?":|<> (20 caracteres)
-
Garantizar requisitos mínimos:
- Seleccionar aleatoriamente X mayúsculas (según requisito)
- Seleccionar aleatoriamente X minúsculas (según requisito)
- Seleccionar aleatoriamente X números (según requisito)
- Seleccionar aleatoriamente X caracteres especiales (según requisito)
- Usar generador criptográficamente seguro para selección
-
Completar longitud requerida:
- Calcular caracteres restantes = Longitud mínima - Caracteres ya seleccionados
- Seleccionar aleatoriamente de todos los conjuntos para completar
- Mantener aleatoriedad criptográficamente segura
-
Aleatorizar orden:
- Mezclar todos los caracteres usando algoritmo de shuffling criptográfico
- Evitar que los caracteres requeridos aparezcan siempre al inicio
- Garantizar distribución uniforme
-
Formar contraseña final:
- Unir todos los caracteres en orden aleatorizado
- Verificar que cumple todos los requisitos (paso de validación)
- Si no cumple (caso extremadamente raro): Regenerar
Resultado: Contraseña segura generada automáticamente
Ejemplo de contraseña generada para administrador (20 caracteres):
- Cumple: 3 mayúsculas, 3 minúsculas, 3 números, 3 especiales + 8 caracteres adicionales aleatorios
- Orden completamente aleatorio
- No contiene patrones predecibles
Autenticación Federada y SSO
Proveedores de Identidad Soportados
| Proveedor | Protocolo | Uso Principal | Configuración |
|---|---|---|---|
| Azure AD | SAML 2.0 / OIDC | Hospitales con Microsoft | Federación completa |
| Google Workspace | OAuth 2.0 / OIDC | Clínicas pequeñas | SSO simplificado |
| Okta | SAML 2.0 / OIDC | Empresas sanitarias | Integración avanzada |
| Custom LDAP | LDAP/LDAPS | Sistemas legacy | Bridge authentication |
| DNIe / Certificados | X.509 | Administración pública | PKI nacional |
Gestión de Sesiones
Parámetros de Sesión
Configuración de Sesiones por Tipo de Usuario
| Tipo de Usuario | Timeout Inactividad | Timeout Absoluto | Sesiones Concurrentes | Aviso de Inactividad | Configuración Adicional |
|---|---|---|---|---|---|
| Usuario Estándar | 30 minutos | 8 horas | 3 sesiones | 5 minutos antes | - |
| Usuario Privilegiado | 15 minutos | 4 horas | 1 sesión | 2 minutos antes | - |
| Cliente API | Token: 60 minutos | Refresh: 7 días | N/A | N/A | Rate limit: 100 req/min |
Definiciones:
- Timeout Inactividad: Tiempo máximo sin actividad antes de cerrar sesión automáticamente
- Timeout Absoluto: Tiempo máximo total de sesión, independientemente de la actividad (requiere re-autenticación)
- Sesiones Concurrentes: Número máximo de sesiones simultáneas permitidas para el mismo usuario
- Aviso de Inactividad: Notificación previa al cierre por timeout, permite al usuario extender la sesión
- Token Expiry: Duración de validez del token de acceso para APIs
- Refresh Token: Duración del token de renovación antes de requerir re-autenticación completa
- Rate Limit: Número máximo de peticiones API permitidas por minuto
Procedimientos
PRO-AAC-013: Configuración Inicial de Autenticación
-
Provisión de Credenciales
- Generación de credenciales temporales
- Envío por canal seguro
- Activación con cambio obligatorio
- Configuración de MFA
-
Verificación de Identidad
- Validación documental
- Confirmación telefónica
- Activación presencial si crítico
-
Registro de Factores
- Configuración de TOTP
- Registro biométrico si aplica
- Backup codes generation
PRO-AAC-015: Gestión de Privilegios de Administración
1. Clasificación de Accesos Privilegiados
| Nivel de Privilegio | Descripción | Autenticación Requerida | Revisión |
|---|---|---|---|
| Super Admin | Acceso root completo a infraestructura | Hardware Token + Biometría + PIN | Semanal |
| System Admin | Administración de sistemas operativos | Hardware Token + MFA | Quincenal |
| DB Admin | Gestión de bases de datos clínicas | Certificado + MFA | Quincenal |
| Security Admin | Configuración de seguridad | Hardware Token + MFA | Semanal |
| Application Admin | Configuración de aplicaciones | MFA + Aprobación | Mensual |
2. Procedimiento de Elevación de Privilegios
PRO-AUTH-005: Solicitud de Elevación Temporal de Privilegios
Objetivo: Gestionar la solicitud de elevación temporal de privilegios para realizar tareas administrativas específicas.
Duración por defecto: 4 horas (configurable según necesidad justificada)
Pasos:
-
Validar elegibilidad del usuario:
- Verificar que el usuario tiene autorización base para solicitar el nivel de privilegio
- Consultar lista de usuarios autorizados para cada nivel
- Si NO es elegible: RECHAZAR con mensaje "Usuario no elegible para este nivel"
-
Verificar MFA adicional para privilegios críticos:
- Solo para niveles críticos: Super Admin, Security Admin
- Solicitar factor de autenticación adicional (token hardware, biométrico)
- Verificar respuesta MFA adicional
- Si falla MFA adicional: RECHAZAR con mensaje "MFA adicional requerida"
-
Crear solicitud de elevación:
- Generar ID único de solicitud (formato: REQ-ELEV-YYYY-NNNN)
- Registrar ID del usuario solicitante
- Registrar nivel de privilegio solicitado
- Registrar justificación del negocio (obligatoria)
- Registrar duración solicitada (en horas)
- Anotar timestamp de la solicitud
- Establecer estado inicial: "PENDIENTE DE APROBACIÓN"
-
Determinar si requiere aprobación:
- Consultar matriz de aprobaciones según nivel de privilegio
- Niveles que requieren aprobación: Super Admin, Security Admin, System Admin
- Niveles sin aprobación: Application Admin (si duración ≤ 4 horas)
-
Procesar según requisito de aprobación:
- Si requiere aprobación:
- Enviar solicitud a aprobadores designados (ver tabla de tipos de cuentas)
- Notificar al solicitante: "Solicitud enviada para aprobación"
- Retornar ID de solicitud para seguimiento
- Si NO requiere aprobación:
- Proceder directamente a concesión (PRO-AUTH-006)
- Retornar token de sesión privilegiada
- Si requiere aprobación:
Resultado: Solicitud creada y procesada según requisitos de aprobación
PRO-AUTH-006: Concesión de Elevación de Privilegios
Objetivo: Conceder la elevación de privilegios una vez aprobada la solicitud (o si no requiere aprobación).
Prerequisito: La solicitud debe estar aprobada por los responsables requeridos (si aplica).
Pasos:
-
Crear token de sesión privilegiada:
- Generar token único criptográficamente seguro
- Asociar token al ID del usuario
- Asignar nivel de privilegio concedido
- Establecer duración de validez (según solicitud)
- Incluir timestamp de creación
- Marcar como sesión privilegiada (para auditoría diferenciada)
-
Registrar actividad de elevación:
- Guardar registro completo en log de auditoría:
- ID de solicitud
- Usuario beneficiario
- Nivel de privilegio concedido
- Duración concedida
- Aprobadores (si aplica)
- Justificación
- Timestamp de concesión
- Estado: "CONCEDIDO"
- Generar alerta para equipo de seguridad
- Notificar al usuario: "Privilegios elevados activados"
- Guardar registro completo en log de auditoría:
-
Programar revocación automática:
- Calcular timestamp de expiración = Ahora + Duración solicitada
- Crear tarea programada de revocación
- Configurar alertas previas:
- 30 minutos antes: Aviso al usuario
- 5 minutos antes: Aviso final al usuario
- Al expirar: Revocar token automáticamente (PRO-ACC-005)
-
Entregar token al usuario:
- Proporcionar token de sesión privilegiada al usuario
- Incluir instrucciones de uso
- Recordar duración limitada
- Indicar responsabilidades adicionales
Resultado: Privilegios elevados concedidos temporalmente con revocación automática programada
Seguimiento post-elevación:
- Monitoreo continuo de actividad privilegiada
- Revisión obligatoria de logs tras expiración
- Documentación de acciones realizadas (responsabilidad del usuario)
3. Just-In-Time (JIT) Access Management
Configuración JIT por Sistema:
| Sistema | Duración Máxima | Aprobación Requerida | Aprobadores | MFA Adicional | Controles Especiales |
|---|---|---|---|---|---|
| Base de Datos Producción | 2 horas | Sí | DB Lead + Security Lead | Sí | Grabación de sesión completa |
| Kubernetes Cluster | 4 horas | Sí | DevOps Lead | Sí | Comandos permitidos: kubectl get, kubectl describe únicamente |
| AWS Producción | 1 hora | Sí | Cloud Architect + Security Lead | Sí | Role assumption: arn:aws:iam::account:role/emergency-access |
Principios del Acceso Just-In-Time:
- Duración limitada: Los accesos son temporales y se revocan automáticamente al expirar
- Aprobación obligatoria: Todos los sistemas críticos requieren aprobación previa
- MFA adicional: Se requiere factor adicional de autenticación más allá del login normal
- Grabación de sesión: Las sesiones privilegiadas se graban para auditoría
- Whitelist de comandos: Algunos sistemas limitan los comandos permitidos para minimizar riesgo
- Least privilege: Se concede solo el nivel mínimo necesario para la tarea específica
PRO-AAC-016: Revisiones Obligatorias de Acceso
1. Calendario de Revisiones
| Tipo de Acceso | Frecuencia | Responsable | Herramienta |
|---|---|---|---|
| Accesos Privilegiados | Semanal | Security Admin | PAM Dashboard |
| Accesos Clínicos | Mensual | Clinical Lead | Access Review Portal |
| Accesos API | Quincenal | API Manager | API Gateway Console |
| Accesos Externos | Mensual | Partnership Manager | Identity Provider |
| Cuentas de Servicio | Trimestral | DevOps Lead | Service Account Audit |