Skip to main content
QMSQMS
QMS
  • Welcome to your QMS
  • Quality Manual
  • Procedures
    • GP-001 Control of documents
    • GP-002 Quality planning
    • GP-003 Audits
    • GP-004 Vigilance system
    • GP-005 Human Resources and Training
    • GP-006 Non-conformity, Corrective and Preventive actions
    • GP-007 Post-market surveillance
    • GP-008 Product requirements
    • GP-009 Sales
    • GP-010 Purchases and suppliers evaluation
    • GP-011 Provision of service
    • GP-012 Design, redesign and development
    • GP-013 Risk management
    • GP-014 Feedback and complaints
    • GP-015 Clinical evaluation
    • GP-016 Traceability and identification
    • GP-017 Technical assistance service
    • GP-018 Infrastructure and facilities
    • GP-019 Software validation plan
    • GP-020 QMS Data analysis
    • GP-021 Communications
    • GP-022 Document translation
    • GP-023 Change control management
    • GP-024 Predetermined Change Control Plan
    • GP-025 Usability and Human Factors Engineering
    • GP-027 Corporate Governance
    • GP-028 AI Development
    • GP-029 Software Delivery And Comissioning
    • GP-050 Data Protection
    • GP-051 Security violations
    • GP-052 Data Privacy Impact Assessment (DPIA)
    • GP-100 Business Continuity (BCP) and Disaster Recovery plans (DRP)
    • GP-101 Information security
    • GP-200 Remote Data Acquisition in Clinical Investigations
    • GP-026 Market-specific product requirements
    • GP-110 Esquema Nacional de Seguridad
      • ORG Marco organizativo
      • OP Marco operacional
        • OP.PL Planificación
        • OP.ACC Control de acceso
        • OP.EXP Explotación
          • OP.EXP.1 Inventario de activos
          • OP.EXP.10 Protección de los registros de actividad
          • OP.EXP.11 Protección de las claves criptográficas
          • OP.EXP.2 Configuración de seguridad
          • OP.EXP.3 Gestión de la configuración
          • OP.EXP.4 Mantenimiento
          • OP.EXP.5 Gestión de Cambios - Procedimiento Formal ENS
          • OP.EXP.6 Protección frente a código dañino
          • OP.EXP.7 Gestión de incidentes
          • OP.EXP.8 Registro de la actividad de los usuarios
          • OP.EXP.9 Registro de la gestión de incidentes
        • OP.EXT Servicios externos
        • OP.NUB Servicios en la nube
        • OP.CONT Continuidad del servicio
        • OP.MON Monitorización del sistema
      • MP Medidas de protección
      • Sin asignar
      • Real Decreto 311/2022, de 3 de mayo, por el que se regula el Esquema Nacional de Seguridad.
  • Records
  • Legit.Health Plus Version 1.1.0.0
  • Legit.Health Plus Version 1.1.0.1
  • Licenses and accreditations
  • Applicable Standards and Regulations
  • Public tenders
  • Procedures
  • GP-110 Esquema Nacional de Seguridad
  • OP Marco operacional
  • OP.EXP Explotación
  • OP.EXP.2 Configuración de seguridad

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)

Guía de implantación​

  1. 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
  1. 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.

  2. 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).

  3. 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​

1.1 Perfil: Usuario Clínico (Dermatólogo/Médico)​

Profile_ID: LHP-CFG-CLINICAL
Descripción: Configuración para profesionales sanitarios
Permisos:
- Acceso_Diagnóstico: Completo
- Carga_Imágenes: Permitido (máx 50MB, formatos JPEG/PNG/DICOM)
- Modificación_Informes: Solo propios
- Acceso_Historiales: Según consentimiento del paciente
- Exportación_Datos: PDF cifrado, watermark obligatorio
Restricciones:
- Sin acceso administrativo
- Sin instalación de software
- Sin modificación de algoritmos
- Sesión máxima: 8 horas
- MFA obligatorio
Auditoría:
- Log de todas las visualizaciones de imágenes
- Registro de diagnósticos emitidos
- Tracking de exportaciones

1.2 Perfil: Administrador del Sistema​

Profile_ID: LHP-CFG-ADMIN
Descripción: Configuración para administradores técnicos
Permisos:
- Gestión_Usuarios: Completo
- Configuración_Sistema: Completo con aprobación
- Acceso_Logs: Lectura completa
- Mantenimiento: Ventanas programadas
Restricciones:
- Sin acceso a datos clínicos sin supervisión
- Cambios críticos requieren doble autorización
- Acceso desde IPs autorizadas
- VPN obligatorio para acceso remoto
Auditoría:
- Log detallado de todos los comandos
- Grabación de sesiones privilegiadas
- Alertas en tiempo real para acciones críticas

1.3 Perfil: Auditor/Inspector Regulatorio​

Profile_ID: LHP-CFG-AUDIT
Descripción: Configuración para auditorías y revisión
Permisos:
- Acceso_Logs: Solo lectura, histórico completo
- Visualización_Configuraciones: Sin modificación
- Generación_Informes: Auditoría y compliance
- Acceso_Documentación: DHF, procedimientos, evidencias
Restricciones:
- Acceso temporal limitado (30 días máx)
- Sin modificación de datos
- Sin exportación masiva
- Datos anonimizados cuando sea posible
Auditoría:
- Registro completo de accesos
- Documentos visualizados
- Informes generados

1.4 Perfil: Integración API (Sistemas HIS/EMR)​

Profile_ID: LHP-CFG-API
Descripción: Configuración para integraciones externas
Permisos:
- Endpoints específicos según integración
- Rate limiting: 100 req/min
- Formatos: HL7 FHIR, JSON
Restricciones:
- OAuth 2.0 + JWT obligatorio
- IP whitelisting
- Sin acceso directo a base de datos
- Certificados TLS mutuos
Auditoría:
- Log de todas las transacciones
- Métricas de uso y rendimiento
- Alertas de comportamiento anómalo

Baseline de configuración de seguridad​

2.1 Sistema Operativo (Ubuntu 22.04 LTS)​

#!/bin/bash
# LHP Security Baseline Script v1.0

# Hardening del kernel
echo "kernel.randomize_va_space = 2" >> /etc/sysctl.conf
echo "kernel.exec-shield = 1" >> /etc/sysctl.conf
echo "net.ipv4.tcp_syncookies = 1" >> /etc/sysctl.conf
echo "net.ipv4.conf.all.rp_filter = 1" >> /etc/sysctl.conf

# Deshabilitar servicios innecesarios
systemctl disable bluetooth
systemctl disable cups
systemctl disable avahi-daemon

# Configuración de firewall (ufw)
ufw default deny incoming
ufw default allow outgoing
ufw allow 443/tcp # HTTPS
ufw allow 22/tcp # SSH (solo desde IPs de gestión)
ufw enable

# Configuración SSH
sed -i 's/PermitRootLogin yes/PermitRootLogin no/' /etc/ssh/sshd_config
sed -i 's/#MaxAuthTries 6/MaxAuthTries 3/' /etc/ssh/sshd_config
echo "AllowGroups legit-health-admins" >> /etc/ssh/sshd_config

# Auditoría con auditd
auditctl -w /etc/passwd -p wa -k passwd_changes
auditctl -w /var/log/legit-health/ -p wa -k app_logs
auditctl -w /opt/legit-health/config/ -p wa -k config_changes

2.2 Aplicación Web (Frontend React)​

// security-config.js
const securityConfig = {
// Content Security Policy
CSP: {
"default-src": "'self'",
"script-src": "'self' 'unsafe-inline' https://cdn.legit.health",
"style-src": "'self' 'unsafe-inline'",
"img-src": "'self' data: https:",
"connect-src": "'self' https://api.legit.health",
"frame-ancestors": "'none'",
"form-action": "'self'",
},

// Cabeceras de seguridad
headers: {
"Strict-Transport-Security": "max-age=31536000; includeSubDomains",
"X-Content-Type-Options": "nosniff",
"X-Frame-Options": "DENY",
"X-XSS-Protection": "1; mode=block",
"Referrer-Policy": "strict-origin-when-cross-origin",
},

// Configuración de sesión
session: {
timeout: 28800000, // 8 horas para usuarios clínicos
warningTime: 300000, // Aviso 5 minutos antes
refreshTokenInterval: 3600000, // Renovar token cada hora
maxConcurrentSessions: 1,
},

// Validación de entrada
validation: {
maxImageSize: 52428800, // 50MB
allowedImageTypes: ["image/jpeg", "image/png", "application/dicom"],
maxTextLength: 5000,
sanitizeHTML: true,
},
};

2.3 Backend API (Python/FastAPI)​

# security_config.py
from pydantic import BaseSettings
import secrets

class SecuritySettings(BaseSettings):
# Autenticación y autorización
JWT_SECRET_KEY: str = secrets.token_urlsafe(32)
JWT_ALGORITHM: str = "HS256"
ACCESS_TOKEN_EXPIRE_MINUTES: int = 480 # 8 horas
REFRESH_TOKEN_EXPIRE_DAYS: int = 7

# Rate limiting
RATE_LIMIT_REQUESTS: int = 100
RATE_LIMIT_PERIOD: int = 60 # segundos

# Configuración CORS
ALLOWED_ORIGINS: list = [
"https://app.legit.health",
"https://staging.legit.health"
]

# Cifrado
ENCRYPTION_KEY: str = secrets.token_urlsafe(32)
DATABASE_ENCRYPTION: bool = True
FILE_ENCRYPTION: bool = True

# Validación de entrada
MAX_UPLOAD_SIZE: int = 52428800 # 50MB
ALLOWED_EXTENSIONS: set = {".jpg", ".jpeg", ".png", ".dcm"}

# Auditoría
AUDIT_LOG_LEVEL: str = "INFO"
AUDIT_LOG_RETENTION_DAYS: int = 3650 # 10 años MDR

# Protección contra ataques
SQL_INJECTION_PROTECTION: bool = True
XSS_PROTECTION: bool = True
CSRF_PROTECTION: bool = True

class Config:
env_file = ".env"
env_file_encoding = 'utf-8'

2.4 Base de Datos (PostgreSQL)​

-- Configuración de seguridad PostgreSQL
-- Archivo: postgresql_security.conf

-- Conexiones y autenticación
max_connections = 100
superuser_reserved_connections = 3
authentication_timeout = 1min
password_encryption = scram-sha-256

-- SSL/TLS
ssl = on
ssl_cert_file = '/etc/postgresql/14/main/server.crt'
ssl_key_file = '/etc/postgresql/14/main/server.key'
ssl_ciphers = 'HIGH:MEDIUM:+3DES:!aNULL'
ssl_prefer_server_ciphers = on

-- Auditoría
log_connections = on
log_disconnections = on
log_duration = off
log_error_verbosity = default
log_hostname = on
log_line_prefix = '%t [%p]: [%l-1] user=%u,db=%d,app=%a,client=%h '
log_statement = 'all'
log_timezone = 'UTC'

-- Configuración de seguridad adicional
shared_preload_libraries = 'pg_stat_statements,pgaudit'
pgaudit.log = 'ALL'
pgaudit.log_catalog = on
pgaudit.log_parameter = on
pgaudit.log_statement_once = off

Procedimientos de configuración segura​

3.1 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

3.2 Proceso de revisión de configuración​

  1. Revisión trimestral programada

    • Escaneo con herramientas automatizadas (Nessus, OpenVAS)
    • Comparación con baseline documentado
    • Identificación de desviaciones
  2. Análisis de vulnerabilidades

    • CVE scanning de componentes
    • Revisión de boletines de seguridad
    • Priorización según CVSS y contexto clínico
  3. 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​

4.1 Infrastructure as Code (IaC)​

# main.tf - Configuración segura de infraestructura
resource "aws_instance" "legit_health_app" {
ami = "ami-0c55b159cbfafe1f0" # Ubuntu 22.04 hardened
instance_type = "t3.xlarge"

vpc_security_group_ids = [aws_security_group.app_sg.id]
subnet_id = aws_subnet.private.id

root_block_device {
volume_type = "gp3"
volume_size = 100
encrypted = true
kms_key_id = aws_kms_key.app_key.id
}

metadata_options {
http_endpoint = "enabled"
http_tokens = "required" # IMDSv2
http_put_response_hop_limit = 1
}

user_data = file("${path.module}/security-baseline.sh")

tags = {
Name = "LegitHealth-Production"
Environment = "Production"
Compliance = "MDR-FDA-ENS"
CostCenter = "Medical-Device"
}
}

4.2 Configuration Management (Ansible)​

# security-playbook.yml
---
- name: Apply Security Configuration to Legit Health Servers
hosts: legit_health_production
become: yes

tasks:
- name: Ensure security updates are installed
apt:
upgrade: dist
update_cache: yes
autoremove: yes

- name: Configure firewall rules
ufw:
rule: allow
port: "{{ item }}"
proto: tcp
src: "{{ trusted_networks }}"
loop:
- 443
- 22

- name: Apply sysctl security parameters
sysctl:
name: "{{ item.key }}"
value: "{{ item.value }}"
state: present
reload: yes
loop:
- { key: "kernel.randomize_va_space", value: "2" }
- { key: "net.ipv4.tcp_syncookies", value: "1" }
- { key: "net.ipv4.conf.all.send_redirects", value: "0" }

- name: Configure auditd rules
template:
src: audit.rules.j2
dest: /etc/audit/rules.d/legit-health.rules
notify: restart auditd

- name: Ensure unnecessary services are disabled
systemd:
name: "{{ item }}"
enabled: no
state: stopped
loop:
- bluetooth
- cups
- avahi-daemon
ignore_errors: yes

Monitorización de configuración​

5.1 Detección de desviaciones​

# config_monitor.py
import hashlib
import json
from datetime import datetime
import boto3

class ConfigurationMonitor:
def __init__(self):
self.baseline = self.load_baseline()
self.sns_client = boto3.client('sns')

def check_configuration(self, system_id):
current_config = self.get_current_config(system_id)
deviations = self.compare_with_baseline(current_config)

if deviations:
self.alert_deviations(system_id, deviations)
self.log_to_siem(system_id, deviations)

return deviations

def compare_with_baseline(self, current):
deviations = []

for key, baseline_value in self.baseline.items():
if key not in current:
deviations.append({
'type': 'missing_configuration',
'key': key,
'expected': baseline_value
})
elif current[key] != baseline_value:
deviations.append({
'type': 'configuration_drift',
'key': key,
'expected': baseline_value,
'actual': current[key]
})

return deviations

def alert_deviations(self, system_id, deviations):
if self.is_critical_deviation(deviations):
# Alerta inmediata para desviaciones críticas
self.sns_client.publish(
TopicArn='arn:aws:sns:eu-west-1:123456789:security-alerts',
Subject=f'CRITICAL: Configuration Deviation - {system_id}',
Message=json.dumps(deviations, indent=2)
)

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​

Metrics Dashboard:
- Configuration Compliance: 98.5%
- Systems at Baseline: 47/48
- Critical Deviations: 0
- Pending Security Updates: 3 (non-critical)
- Last Full Scan: 2024-01-20 14:30 UTC
- Next Scheduled Review: 2024-02-20

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
Previous
OP.EXP.11 Protección de las claves criptográficas
Next
OP.EXP.3 Gestión de la configuración
  • Documentos de referencia
  • Guía de implantación
  • Implementación en Legit Health Plus
    • Perfiles de configuración según rol
      • 1.1 Perfil: Usuario Clínico (Dermatólogo/Médico)
      • 1.2 Perfil: Administrador del Sistema
      • 1.3 Perfil: Auditor/Inspector Regulatorio
      • 1.4 Perfil: Integración API (Sistemas HIS/EMR)
    • Baseline de configuración de seguridad
      • 2.1 Sistema Operativo (Ubuntu 22.04 LTS)
      • 2.2 Aplicación Web (Frontend React)
      • 2.3 Backend API (Python/FastAPI)
      • 2.4 Base de Datos (PostgreSQL)
    • Procedimientos de configuración segura
      • 3.1 Checklist de despliegue seguro
      • 3.2 Proceso de revisión de configuración
    • Herramientas de gestión de configuración
      • 4.1 Infrastructure as Code (IaC)
      • 4.2 Configuration Management (Ansible)
    • Monitorización de configuración
      • 5.1 Detección de desviaciones
    • Métricas e indicadores
      • KPIs de configuración segura
      • Dashboard de seguridad
    • Integración con el ecosistema de seguridad
    • Consideraciones específicas MDR/FDA
      • Validación de configuración
      • Control de cambios
    • Referencias y documentación relacionada
All the information contained in this QMS is confidential. The recipient agrees not to transmit or reproduce the information, neither by himself nor by third parties, through whichever means, without obtaining the prior written permission of Legit.Health (AI LABS GROUP S.L.)