OP.EXP.2 Configuración de seguridad
Documentos de referencia
- Guías CCN-STIC:
- Serie CCN-STIC-500 - Guías para Entornos Windows
- Serie CCN-STIC-600 - Guías para otros Entornos
- Guía CCN-STIC-824 - Informe del Estado de Seguridad
- Guía CCN-STIC-827 - Gestión y uso de dispositivos móviles
- ISO/IEC 27000
- NIST SP 800-53 rev4:
- [CM-2] Baseline Configuration
- [CM-6] Configuration Settings
- [CM-7] Least Functionality
- [SI-5] Security Alerts, Advisories, and Directives
- Otras referencias:
- SANS - CIS Critical Security Controls - Version 6.1
- CSC.3 - Secure Configurations for Hardware and Software
- CSC.9 - Limitation and Control of Network Ports
- CSC.18 - Application Software Security
- FDCC - Federal Desktop Core Configuration http://nvd.nist.gov/fdcc/index.cfm
- USGCB - The United States Government Configuration Baseline http://usgcb.nist.gov/
- Manageable Network Plan
- Milestone 7: Manage Your Network, Part II (Baseline Management)
- SANS - CIS Critical Security Controls - Version 6.1
Guía de implantación
- Todos los sistemas deben ser configurados de forma sistemática antes de entrar en producción. El organismo debe elaborar unos pocos perfiles de configuración para las diferentes actividades a que pueden ser dedicados, siendo típicos los siguientes:
- usuarios normales (uso administrativo)
- atención a clientes
- gestión de proveedores (incluidos bancos)
- desarrollo
- operadores y administradores (técnicos de sistemas)
- responsable de seguridad (consola de configuración)
- auditoría
-
La medida se instrumenta por medio de una lista de verificación (checklists) que se debe aplicar sistemáticamente a cada equipo antes de entrar en producción.
-
En todos los perfiles de usuario, excepto en los de administrador, se debe bloquear la opción de que éste pueda cambiar la configuración del sistema o pueda instalar nuevos programas o nuevos periféricos (drivers).
-
La configuración de seguridad debe incluir un perfil básico de auditoría de uso del equipo.
Implementación en Legit Health Plus
Perfiles de configuración según rol
Perfil: Usuario Clínico (Dermatólogo/Médico)
ID del Perfil: LHP-CFG-CLINICAL
Descripción: Configuración de seguridad para profesionales sanitarios que utilizan el dispositivo para diagnóstico clínico.
Permisos Otorgados:
- Acceso a Diagnóstico: Completo (algoritmos de IA y herramientas clínicas)
- Carga de Imágenes: Permitido con límite de 50MB por imagen, formatos JPEG/PNG/DICOM
- Modificación de Informes: Solo pueden modificar sus propios informes
- Acceso a Historiales: Únicamente cuando existe consentimiento explícito del paciente
- Exportación de Datos: PDF cifrado con watermark obligatorio para trazabilidad
Restricciones de Seguridad:
- Sin acceso administrativo al sistema
- Sin capacidad de instalación de software adicional
- Sin permisos para modificar algoritmos diagnósticos
- Sesión máxima: 8 horas (timeout automático)
- Multi-Factor Authentication (MFA) obligatorio para cada inicio de sesión
Auditoría y Trazabilidad:
- Log completo de todas las visualizaciones de imágenes médicas
- Registro de todos los diagnósticos emitidos
- Tracking de exportaciones de datos clínicos
Perfil: Administrador del Sistema
ID del Perfil: LHP-CFG-ADMIN
Descripción: Configuración de seguridad para administradores técnicos responsables del mantenimiento del sistema.
Permisos Otorgados:
- Gestión de Usuarios: Completo (creación, modificación, desactivación de cuentas)
- Configuración del Sistema: Completo, requiere aprobación para cambios críticos
- Acceso a Logs: Lectura completa del sistema de auditoría
- Mantenimiento: Dentro de ventanas de mantenimiento programadas
Restricciones de Seguridad:
- Sin acceso a datos clínicos sin supervisión del Clinical Safety Officer
- Cambios críticos requieren doble autorización (principio de dos personas)
- Acceso únicamente desde direcciones IP autorizadas (whitelist)
- VPN obligatorio para cualquier acceso remoto
Auditoría y Trazabilidad:
- Log detallado de todos los comandos ejecutados
- Grabación completa de sesiones privilegiadas (terminal recording)
- Alertas en tiempo real al Security Officer para acciones críticas
Perfil: Auditor/Inspector Regulatorio
ID del Perfil: LHP-CFG-AUDIT
Descripción: Configuración de seguridad para auditorías y revisión por autoridades regulatorias (AEMPS, FDA, Organismos Notificados).
Permisos Otorgados:
- Acceso a Logs: Solo lectura, histórico completo del sistema de auditoría
- Visualización de Configuraciones: Acceso completo sin capacidad de modificación
- Generación de Informes: Reportes de auditoría y compliance
- Acceso a Documentación: Design History File (DHF), procedimientos, evidencias de V&V
Restricciones de Seguridad:
- Acceso temporal limitado a máximo 30 días (renovable previa aprobación)
- Sin capacidad de modificación de datos o configuraciones
- Sin exportación masiva de datos (protección contra exfiltración)
- Datos anonimizados cuando sea técnicamente posible
Auditoría y Trazabilidad:
- Registro completo de todos los accesos del auditor
- Lista de documentos visualizados
- Informes generados durante la auditoría
Perfil: Integración API (Sistemas HIS/EMR)
ID del Perfil: LHP-CFG-API
Descripción: Configuración de seguridad para integraciones con sistemas externos (Hospital Information Systems, Electronic Medical Records).
Permisos Otorgados:
- Endpoints Específicos: Acceso limitado según acuerdo de integración
- Rate Limiting: Máximo 100 solicitudes por minuto
- Formatos de Datos: HL7 FHIR R4, JSON
Restricciones de Seguridad:
- OAuth 2.0 + JWT obligatorio para autenticación
- IP whitelisting (solo IPs preautorizadas pueden conectarse)
- Sin acceso directo a base de datos (solo a través de API controlada)
- Certificados TLS mutuos (mTLS) para autenticación bidireccional
Auditoría y Trazabilidad:
- Log de todas las transacciones API con timestamp y origen
- Métricas de uso y rendimiento monitorizadas continuamente
- Alertas automáticas ante comportamiento anómalo o patrones de ataque
Baseline de configuración de seguridad
Sistema Operativo (Ubuntu 22.04 LTS)
Script de Hardening del Sistema Operativo:
La organización aplica las siguientes configuraciones de seguridad baseline a todos los servidores Ubuntu 22.04 LTS:
1. Hardening del Kernel:
- ASLR (Address Space Layout Randomization): Habilitado nivel 2 (aleatorización completa)
- Exec Shield: Protección contra buffer overflow habilitada
- TCP SYN Cookies: Protección contra ataques SYN flood habilitada
- Reverse Path Filtering: Validación de origen de paquetes IP habilitada
2. Deshabilitar Servicios Innecesarios:
Los siguientes servicios se deshabilitan para reducir la superficie de ataque:
- Bluetooth
- CUPS (servicio de impresión)
- Avahi-daemon (descubrimiento de servicios en red local)
3. Configuración del Firewall (UFW):
- Política por defecto entrante: DENY (denegar todo)
- Política por defecto saliente: ALLOW (permitir todo)
- Puertos permitidos:
- 443/TCP - HTTPS (tráfico web cifrado)
- 22/TCP - SSH (solo desde IPs de gestión autorizadas)
4. Configuración de SSH:
- Deshabilitar login root: No se permite login directo como root
- Intentos máximos de autenticación: 3 intentos antes de cerrar conexión
- Grupos permitidos: Solo el grupo "legit-health-admins" puede conectarse por SSH
5. Auditoría del Sistema (auditd):
Se configuran reglas de auditoría para monitorizar cambios críticos:
- /etc/passwd - Monitorizar cambios en archivo de usuarios
- /var/log/legit-health/ - Monitorizar acceso a logs de la aplicación
- /opt/legit-health/config/ - Monitorizar cambios en configuración de la aplicación
Cada regla registra escrituras y cambios de atributos con una etiqueta identificativa.
Aplicación Web (Frontend React)
Configuración de Seguridad del Frontend:
La aplicación web implementa las siguientes políticas y controles de seguridad:
1. Content Security Policy (CSP):
Política restrictiva para prevenir ataques XSS y code injection:
| Directiva | Política | Propósito |
|---|---|---|
| default-src | 'self' | Solo recursos del mismo origen |
| script-src | 'self' 'unsafe-inline' https://cdn.legit.health | Scripts del mismo origen + CDN autorizado |
| style-src | 'self' 'unsafe-inline' | Estilos del mismo origen |
| img-src | 'self' data: https: | Imágenes del mismo origen + data URIs + HTTPS |
| connect-src | 'self' https://api.legit.health | Conexiones solo a API oficial |
| frame-ancestors | 'none' | Prevenir clickjacking (no embebido en iframes) |
| form-action | 'self' | Formularios solo envían al mismo origen |
2. Cabeceras de Seguridad HTTP:
- Strict-Transport-Security (HSTS): max-age=31536000 includeSubDomains (forzar HTTPS por 1 año)
- X-Content-Type-Options: nosniff (prevenir MIME sniffing)
- X-Frame-Options: DENY (prevenir clickjacking)
- X-XSS-Protection: 1; mode=block (activar filtro XSS del navegador)
- Referrer-Policy: strict-origin-when-cross-origin (control de información de referencia)
3. Configuración de Sesión:
- Timeout de sesión: 28,800,000 ms (8 horas) para usuarios clínicos
- Aviso previo: 300,000 ms (5 minutos antes del timeout)
- Renovación de token: Cada 3,600,000 ms (1 hora)
- Sesiones concurrentes: Máximo 1 sesión por usuario
4. Validación de Entrada del Usuario:
- Tamaño máximo de imagen: 52,428,800 bytes (50 MB)
- Tipos de imagen permitidos: JPEG, PNG, DICOM
- Longitud máxima de texto: 5,000 caracteres
- Sanitización HTML: Habilitada (prevenir inyección de HTML/scripts)
Backend API (Python/FastAPI)
Configuración de Seguridad del Backend:
La API backend (Python/FastAPI) implementa las siguientes configuraciones de seguridad:
1. Autenticación y Autorización:
- Secret Key JWT: Generado criptográficamente aleatorio (32 bytes URL-safe)
- Algoritmo JWT: HS256 (HMAC SHA-256)
- Expiración Access Token: 480 minutos (8 horas)
- Expiración Refresh Token: 7 días
2. Rate Limiting (Protección contra DDoS):
- Límite de solicitudes: 100 requests
- Período: 60 segundos
- Resultado: Máximo 100 requests/minuto por cliente
3. Configuración CORS (Cross-Origin Resource Sharing):
Orígenes permitidos (whitelist estricta):
- https://app.legit.health (producción)
- https://staging.legit.health (staging)
Todos los demás orígenes son bloqueados automáticamente.
4. Cifrado:
- Clave de cifrado: Generada criptográficamente aleatorio (32 bytes URL-safe)
- Cifrado de base de datos: Habilitado (datos en reposo cifrados)
- Cifrado de archivos: Habilitado (imágenes médicas cifradas en storage)
5. Validación de Entrada:
- Tamaño máximo de carga: 52,428,800 bytes (50 MB)
- Extensiones permitidas: .jpg, .jpeg, .png, .dcm (DICOM)
6. Auditoría:
- Nivel de log: INFO (registrar información, advertencias y errores)
- Retención de logs: 3,650 días (10 años) según MDR 2017/745
7. Protección contra Ataques:
- SQL Injection Protection: Habilitada (parametrización de queries)
- XSS Protection: Habilitada (sanitización de salida)
- CSRF Protection: Habilitada (tokens CSRF en formularios)
8. Gestión de Configuración:
- Variables sensibles cargadas desde archivo
.env(no hardcoded) - Codificación UTF-8 para compatibilidad internacional
Base de Datos (PostgreSQL)
Configuración de Seguridad de PostgreSQL:
La base de datos PostgreSQL 14 implementa las siguientes configuraciones de seguridad:
1. Conexiones y Autenticación:
- Conexiones máximas: 100 conexiones totales
- Conexiones reservadas para superusuario: 3 (para mantenimiento de emergencia)
- Timeout de autenticación: 1 minuto
- Cifrado de contraseñas: SCRAM-SHA-256 (método más seguro de PostgreSQL)
2. SSL/TLS (Cifrado de Comunicaciones):
- SSL habilitado: Todas las conexiones deben usar cifrado TLS
- Certificado del servidor: /etc/postgresql/14/main/server.crt
- Clave privada: /etc/postgresql/14/main/server.key
- Suites de cifrado: HIGH:MEDIUM:+3DES:!aNULL (solo algoritmos seguros, sin cifrado nulo)
- Preferencia: Servidor selecciona suite de cifrado (ssl_prefer_server_ciphers)
3. Auditoría de Base de Datos:
Registro de Conexiones:
- Conexiones establecidas: ON
- Desconexiones: ON
- Duración de queries: OFF (por rendimiento)
- Hostname del cliente: ON
Formato de Log: %t [%p]: [%l-1] user=%u,db=%d,app=%a,client=%h Información registrada: timestamp, PID, usuario, base de datos, aplicación, cliente
Configuración de Logs:
- Verbosidad de errores: Default (nivel estándar)
- Log de statements: ALL (registrar todas las consultas SQL)
- Zona horaria: UTC (para trazabilidad internacional)
4. Auditoría Avanzada (pgAudit):
La organización utiliza la extensión pgAudit para auditoría exhaustiva:
- Módulos cargados: pg_stat_statements (estadísticas), pgaudit (auditoría)
- Nivel de auditoría: ALL (todas las operaciones)
- Auditar catálogo: ON (cambios en esquema de BD)
- Auditar parámetros: ON (registrar valores de parámetros en queries)
- Log por statement: Cada statement se registra individualmente (no agrupar)
Procedimientos de configuración segura
Checklist de despliegue seguro
Checklist de Configuración Segura - Nuevo Despliegue
Pre-despliegue
- Revisión de código de seguridad completada (SAST)
- Análisis de dependencias realizado (SCA)
- Pruebas de penetración ejecutadas
- Certificados SSL/TLS válidos instalados
- Secrets management configurado (HashiCorp Vault)
Configuración del sistema
- OS hardening aplicado según baseline
- Firewall configurado con reglas mínimas
- SELinux/AppArmor habilitado
- Actualizaciones de seguridad instaladas
- Servicios innecesarios deshabilitados
Configuración de la aplicación
- Variables de entorno seguras configuradas
- Modo debug deshabilitado
- Logs configurados sin información sensible
- Rate limiting implementado
- CORS configurado restrictivamente
Base de datos
- Conexiones cifradas (TLS)
- Usuarios con privilegios mínimos
- Auditoría habilitada
- Backup cifrado configurado
- Datos de prueba eliminados
Monitoreo y auditoría
- SIEM integrado
- Alertas de seguridad configuradas
- Logs centralizados
- Retention policy aplicada
- Dashboard de seguridad operativo
Proceso de revisión de configuración
-
Revisión trimestral programada
- Escaneo con herramientas automatizadas (Nessus, OpenVAS)
- Comparación con baseline documentado
- Identificación de desviaciones
-
Análisis de vulnerabilidades
- CVE scanning de componentes
- Revisión de boletines de seguridad
- Priorización según CVSS y contexto clínico
-
Remediación
- Plan de acción con plazos según criticidad
- Testing en entorno de staging
- Despliegue controlado con rollback plan
Herramientas de gestión de configuración
Infrastructure as Code (IaC)
Terraform - Configuración Segura de Infraestructura AWS:
La organización utiliza Terraform para definir la infraestructura de manera declarativa con configuraciones de seguridad integradas.
Recurso: Instancia EC2 de Aplicación
Configuración Base:
- AMI: ami-0c55b159cbfafe1f0 (Ubuntu 22.04 LTS hardened - con configuraciones de seguridad preinstaladas)
- Tipo de instancia: t3.xlarge
- Security Groups: Asociado al security group de aplicación (app_sg)
- Subnet: Desplegada en subnet privada (sin acceso directo desde Internet)
Disco Raíz (Root Block Device):
- Tipo de volumen: GP3 (SSD de propósito general, última generación)
- Tamaño: 100 GB
- Cifrado: Habilitado (datos en reposo cifrados)
- KMS Key: Clave KMS dedicada para la aplicación
Opciones de Metadatos (IMDSv2):
- Endpoint HTTP: Enabled (servicio de metadatos habilitado)
- Tokens HTTP: Required (IMDSv2 - versión segura con autenticación por token)
- Hop Limit: 1 (prevenir acceso a metadatos desde contenedores)
User Data:
- Script de inicialización:
security-baseline.shejecutado al arranque - Aplica configuraciones de hardening automáticamente
Etiquetas (Tags) para Gobernanza:
- Name: LegitHealth-Production
- Environment: Production
- Compliance: MDR-FDA-ENS (identificación de requisitos regulatorios)
- CostCenter: Medical-Device (para seguimiento de costos)
Configuration Management (Ansible)
Ansible Playbook - Aplicación Automática de Configuración de Seguridad:
La organización utiliza Ansible para aplicar configuraciones de seguridad de manera automática y consistente a todos los servidores de producción.
Playbook: security-playbook.yml
Alcance:
- Hosts: Servidores de producción (legit_health_production)
- Privilegios: Ejecución con sudo (become: yes)
Tareas Ejecutadas:
1. Instalar Actualizaciones de Seguridad:
- Ejecutar actualización completa del sistema (dist-upgrade)
- Actualizar caché de paquetes
- Eliminar paquetes obsoletos automáticamente
2. Configurar Reglas de Firewall:
- Módulo: UFW (Uncomplicated Firewall)
- Puertos permitidos:
- 443/TCP (HTTPS)
- 22/TCP (SSH)
- Restricción de origen: Solo redes confiables (trusted_networks)
- Protocolo: TCP
3. Aplicar Parámetros de Seguridad del Kernel:
Configurar parámetros sysctl para hardening del sistema:
| Parámetro | Valor | Propósito |
|---|---|---|
| kernel.randomize_va_space | 2 | ASLR completo (protección contra exploits) |
| net.ipv4.tcp_syncookies | 1 | Protección contra SYN flood |
| net.ipv4.conf.all.send_redirects | 0 | Deshabilitar envío de ICMP redirects |
Los cambios se aplican inmediatamente (reload: yes).
4. Configurar Reglas de Auditoría (auditd):
- Copiar plantilla de reglas (audit.rules.j2)
- Destino: /etc/audit/rules.d/legit-health.rules
- Reiniciar servicio auditd para aplicar cambios
5. Deshabilitar Servicios Innecesarios:
Los siguientes servicios se detienen y deshabilitan:
- Bluetooth
- CUPS (impresión)
- Avahi-daemon (descubrimiento de red)
Se ignoran errores si algún servicio no está instalado.
Monitorización de configuración
Detección de desviaciones
Sistema de Monitorización de Configuración:
La organización implementa un sistema automatizado de detección de desviaciones de configuración que compara continuamente el estado actual con el baseline aprobado.
Componentes:
- Baseline de referencia: Configuración aprobada cargada al inicio
- Cliente SNS: Para envío de alertas via AWS Simple Notification Service
Proceso de Verificación de Configuración:
Quién: Sistema automatizado ejecutándose periódicamente
Para cada sistema monitorizad:
- Obtener Configuración Actual del sistema
- Comparar con Baseline aprobado
- Si se detectan desviaciones:
- Enviar alertas al equipo de seguridad
- Registrar en SIEM para análisis forense
Tipos de Desviaciones Detectadas:
- Configuración Faltante (missing_configuration):
- Una configuración requerida no está presente en el sistema
- Se registra: clave faltante y valor esperado
- Desviación de Configuración (configuration_drift):
- Una configuración existe pero con valor diferente al baseline
- Se registra: clave, valor esperado, valor actual
Sistema de Alertas:
Para desviaciones críticas:
- Acción: Alerta inmediata via AWS SNS
- Topic ARN: arn:aws:sns:eu-west-1:123456789:security-alerts
- Asunto: "CRITICAL: Configuration Deviation -
{system_id}" - Mensaje: Detalles completos de las desviaciones en formato JSON
- Destinatarios: Security Officer, DevOps Lead, CISO
Métricas e indicadores
KPIs de configuración segura
- Drift Rate: % de sistemas con desviaciones del baseline
- Patch Compliance: % de sistemas con parches actualizados
- Configuration Coverage: % de sistemas con baseline definido
- MTTR: Tiempo medio de corrección de desviaciones
- Audit Success Rate: % de auditorías sin hallazgos críticos
Dashboard de seguridad
Dashboard de Métricas de Configuración:
La organización mantiene un dashboard centralizado con las siguientes métricas en tiempo real:
| Métrica | Valor Actual | Estado |
|---|---|---|
| Configuration Compliance | 98.5% | ✓ Objetivo alcanzado (>95%) |
| Systems at Baseline | 47/48 sistemas | 1 sistema pendiente de actualización |
| Critical Deviations | 0 | ✓ Sin desviaciones críticas |
| Pending Security Updates | 3 updates | No críticos, programados para próximo ciclo |
| Last Full Scan | 2024-01-20 14:30 UTC | Menos de 7 días |
| Next Scheduled Review | 2024-02-20 | Revisión trimestral programada |
Integración con el ecosistema de seguridad
- SIEM (Splunk): Envío de logs de configuración para correlación
- Vulnerability Scanner (Qualys): Escaneo periódico de configuraciones
- SOAR (Phantom): Automatización de respuesta a desviaciones
- GRC (ServiceNow): Tracking de compliance y excepciones
Consideraciones específicas MDR/FDA
Validación de configuración
- Todas las configuraciones críticas pasan por proceso V&V
- Documentación en DHF (Design History File)
- Trazabilidad con requisitos de ciberseguridad (PRS)
Control de cambios
- Procedimiento GP-005 para cambios en configuración
- Evaluación de impacto clínico obligatoria
- Aprobación del Clinical Safety Officer para cambios en algoritmos
Referencias y documentación relacionada
- T-024-004: Guía de hardening de sistemas
- T-024-005: Procedimiento de gestión de vulnerabilidades
- R-TF-013-002: Registro de gestión de riesgos
- GP-013: Gestión de la ciberseguridad
- FDA Cybersecurity Guidance: Postmarket Management of Cybersecurity
Signature meaning
The signatures for the approval process of this document can be found in the verified commits at the repository for the QMS. As a reference, the team members who are expected to participate in this document and their roles in the approval process, as defined in Annex I Responsibility Matrix of the GP-001, are:
- Author: Team members involved
- Reviewer: JD-003, JD-004
- Approver: JD-001