OP.MON.3 Dashboard de KPIs y Métricas ENS
Documentos de referencia
- Real Decreto 311/2022, Esquema Nacional de Seguridad
- CCN-STIC 815: Métricas e indicadores del ENS
- CCN-STIC 824: Informe del estado de seguridad
- ISO/IEC 27004:2016 - Monitoring, measurement, analysis and evaluation
- NIST SP 800-55: Performance Measurement Guide for Information Security
Propósito
Establecer un sistema integral de indicadores clave de rendimiento (KPIs) y métricas para monitorizar el cumplimiento del ENS en sistemas de categoría MEDIA, específicamente adaptado al rol de Legit Health como proveedor de servicios de dispositivo médico Clase IIa.
Alcance
Este procedimiento aplica a todos los sistemas, procesos y controles implementados bajo el marco del ENS en Legit Health Plus, incluyendo la medición de efectividad de los tres marcos principales: Organizativo, Operacional y Medidas de Protección.
Marco de KPIs Estratégicos ENS
1.1 KPIs de Cumplimiento Global
ENS_Cumplimiento_Global:
Indicadores_Principales:
Puntuación_Cumplimiento_ENS:
objetivo: ">= 95%"
frecuencia_medición: "Mensual"
responsable: "Responsable de Seguridad"
fórmula: "(Controles_implementados / Total_controles_aplicables) × 100"
Madurez_Seguridad:
objetivo: "Nivel 4 (Gestionado)"
frecuencia_medición: "Trimestral"
responsable: "CISO"
escala: "1-5 (Inicial, Repetible, Definido, Gestionado, Optimizado)"
Certificación_ENS_Readiness:
objetivo: "100%"
frecuencia_medición: "Mensual"
responsable: "Comité de Seguridad"
componentes:
- "Documentación completa"
- "Controles implementados"
- "Evidencias disponibles"
- "No conformidades resueltas"
1.2 KPIs por Marco ENS
Marco Organizativo
KPIs_Marco_Organizativo:
ORG_1_Política_Seguridad:
indicador: "Conocimiento de la política"
objetivo: ">= 95%"
medición: "Encuestas trimestrales"
ORG_2_Normativa:
indicador: "Actualización normativa"
objetivo: "100% documentos actualizados"
medición: "Revisión mensual"
ORG_3_Procedimientos:
indicador: "Cumplimiento procedimientos"
objetivo: ">= 98%"
medición: "Auditorías internas"
ORG_4_Autorización:
indicador: "Autorizaciones documentadas"
objetivo: "100%"
medición: "Revisión continua"
Marco Operacional
KPIs_Marco_Operacional:
Planificación:
Análisis_Riesgos:
indicador: "Riesgos evaluados y tratados"
objetivo: "100% riesgos identificados"
frecuencia: "Trimestral"
Arquitectura_Seguridad:
indicador: "Conformidad arquitectura"
objetivo: ">= 95%"
frecuencia: "Semestral"
Control_Acceso:
Gestión_Identidades:
indicador: "Cuentas revisadas"
objetivo: "100% mensual"
umbral_crítico: "< 90%"
Autenticación_Fuerte:
indicador: "Usuarios con MFA"
objetivo: "100% accesos privilegiados"
umbral_crítico: "< 95%"
Explotación:
Gestión_Incidentes:
indicador: "MTTD (Mean Time To Detect)"
objetivo: "< 1 hora"
umbral_crítico: "> 4 horas"
Gestión_Cambios:
indicador: "Cambios exitosos"
objetivo: ">= 98%"
umbral_crítico: "< 95%"
Medidas de Protección
KPIs_Medidas_Protección:
Protección_Información:
Cifrado_Datos:
indicador: "Datos cifrados en reposo y tránsito"
objetivo: "100%"
verificación: "Escaneo automático mensual"
Clasificación_Información:
indicador: "Activos clasificados"
objetivo: "100%"
verificación: "Inventario trimestral"
Protección_Servicios:
Disponibilidad:
indicador: "Uptime servicios críticos"
objetivo: ">= 99.9%"
medición: "Monitorización continua"
Respaldo_Información:
indicador: "Backups exitosos"
objetivo: "100%"
verificación: "Pruebas mensuales restauración"
Dashboard Ejecutivo ENS
2.1 Vista General del Dashboard
interface ENSDashboard {
// Sección Superior: Estado Global
estadoGlobal: {
puntuacionENS: number; // 0-100%
tendencia: "mejorando" | "estable" | "degradando";
diasDesdeUltimoIncidente: number;
alertasActivas: number;
proximaAuditoria: Date;
};
// Sección Central: Marcos ENS
marcosENS: {
organizativo: {
puntuacion: number;
kpisEnVerde: number;
kpisEnAmbar: number;
kpisEnRojo: number;
};
operacional: {
puntuacion: number;
controlesActivos: number;
controlesConDesviacion: number;
};
medidasProteccion: {
puntuacion: number;
medidasImplementadas: number;
medidasPendientes: number;
};
};
// Sección Inferior: Métricas Operativas
metricasOperativas: {
incidentesSeguridad: {
abiertos: number;
cerradosEsteMes: number;
tiempoMedioResolucion: number;
};
vulnerabilidades: {
criticas: number;
altas: number;
medias: number;
bajas: number;
};
formacion: {
porcentajeCompletado: number;
proximasCampanas: string[];
};
};
}
2.2 Implementación Visual del Dashboard
Dashboard_Layout:
Header:
- Logo: "Legit Health"
- Título: "ENS Dashboard - Categoría MEDIA"
- Fecha_Actualización: "Tiempo real"
- Usuario: "ROL_USUARIO"
Panel_Estado_Global:
Widgets:
- tipo: "Gauge"
titulo: "Cumplimiento ENS"
valor: "92%"
objetivo: "95%"
colores:
verde: ">= 95%"
ambar: "85-94%"
rojo: "< 85%"
- tipo: "Contador"
titulo: "Días sin Incidentes Críticos"
valor: "127"
- tipo: "Semáforo"
titulo: "Estado Certificación"
estados:
- "Documentación: VERDE"
- "Implementación: AMBAR"
- "Evidencias: VERDE"
Panel_Tendencias:
Gráficos:
- tipo: "LineChart"
titulo: "Evolución Cumplimiento ENS (12 meses)"
series:
- "Marco Organizativo"
- "Marco Operacional"
- "Medidas Protección"
- tipo: "HeatMap"
titulo: "Mapa de Calor Controles ENS"
dimensiones:
x: "Categorías de Control"
y: "Nivel de Madurez"
Métricas Específicas para Proveedor de Servicios
3.1 Métricas de Cadena de Suministro
class MetricasCadenaaSuministro:
def __init__(self):
self.proveedores_criticos = self.identificar_proveedores_criticos()
self.slas = self.cargar_slas()
def calcular_kpis_proveedores(self):
"""KPIs específicos para rol de proveedor"""
return {
'cumplimiento_sla': {
'disponibilidad': self.medir_disponibilidad_servicio(),
'tiempo_respuesta': self.medir_tiempo_respuesta(),
'resolucion_incidentes': self.medir_resolucion_incidentes()
},
'seguridad_servicio': {
'vulnerabilidades_comunicadas': self.contar_vulnerabilidades_reportadas(),
'tiempo_parcheado': self.calcular_tiempo_medio_parcheado(),
'incidentes_seguridad': self.contar_incidentes_seguridad()
},
'conformidad_contractual': {
'auditorias_permitidas': self.verificar_auditorias_cliente(),
'reportes_entregados': self.verificar_reportes_mensuales(),
'certificaciones_vigentes': self.verificar_certificaciones()
}
}
3.2 Métricas de Interfaz con Clientes
Metricas_Interfaz_Cliente:
Transparencia_Seguridad:
Notificaciones_Incidentes:
objetivo: "< 4 horas desde detección"
medicion: "Tiempo desde detección hasta notificación"
Reportes_Cumplimiento:
objetivo: "100% entregados en plazo"
frecuencia: "Mensual"
Acceso_Evidencias:
objetivo: "Portal disponible 24/7"
medicion: "Disponibilidad portal cliente"
Gestión_Requisitos_Cliente:
Requisitos_Seguridad_Aceptados:
objetivo: "100% evaluados en 48h"
medicion: "Tiempo respuesta a requisitos"
Cambios_Implementados:
objetivo: ">= 95% en plazo acordado"
medicion: "Cumplimiento timeline cambios"
Sistema de Alertas y Umbrales
4.1 Matriz de Umbrales y Escalado
MATRIZ_UMBRALES_ENS = {
'CRITICO': {
'condiciones': [
'cumplimiento_ens < 80%',
'incidente_seguridad_critico == True',
'disponibilidad_servicio < 95%',
'brecha_datos == True'
],
'escalado': {
'inmediato': ['CEO', 'CISO', 'Responsable_ENS'],
'15_minutos': ['Comité_Crisis', 'Legal'],
'1_hora': ['Cliente_Afectado', 'CCN-CERT']
},
'acciones': [
'Activar protocolo crisis',
'Preservar evidencias',
'Notificar autoridades',
'Comunicación clientes'
]
},
'ALTO': {
'condiciones': [
'cumplimiento_ens >= 80% and < 90%',
'vulnerabilidad_critica_sin_parchear > 7_dias',
'formacion_seguridad < 80%'
],
'escalado': {
'inmediato': ['CISO', 'Responsable_ENS'],
'1_hora': ['CTO', 'Jefes_Departamento'],
'4_horas': ['Comité_Seguridad']
}
},
'MEDIO': {
'condiciones': [
'cumplimiento_ens >= 90% and < 95%',
'metricas_desviadas > 10%',
'auditorias_pendientes > 0'
],
'escalado': {
'4_horas': ['Responsable_ENS'],
'24_horas': ['Equipo_Seguridad']
}
}
}
4.2 Automatización de Respuestas
class GestorRespuestasAutomaticas:
def __init__(self):
self.acciones_automaticas = {
'bloqueo_cuenta_comprometida': self.bloquear_cuenta,
'aislamiento_sistema_infectado': self.aislar_sistema,
'rollback_cambio_fallido': self.revertir_cambio,
'activacion_backup': self.activar_sistema_respaldo
}
def procesar_alerta_kpi(self, alerta):
"""Procesa alerta y ejecuta respuesta automática"""
severidad = self.evaluar_severidad(alerta)
if severidad == 'CRITICO':
# Respuesta inmediata automática
self.ejecutar_protocolo_crisis()
self.notificar_escalado_critico(alerta)
# Preservación de evidencias
self.preservar_estado_sistema()
self.iniciar_grabacion_forense()
elif severidad == 'ALTO':
# Contención automática
self.aplicar_medidas_contencion(alerta)
self.notificar_equipo_seguridad(alerta)
# Registro en blockchain para auditoría
self.registrar_evento_inmutable(alerta)
return self.generar_informe_respuesta(alerta)
Reporting y Visualización
5.1 Informes Automatizados
Informes_Periodicos:
Diario:
nombre: "ENS Daily Status Report"
hora_generacion: "08:00"
destinatarios:
- "Responsable ENS"
- "Equipo Operaciones"
contenido:
- "Estado sistemas críticos"
- "Incidentes últimas 24h"
- "KPIs fuera de umbral"
- "Acciones pendientes"
Semanal:
nombre: "ENS Weekly Performance Report"
dia_generacion: "Lunes"
destinatarios:
- "CISO"
- "CTO"
- "Jefes Departamento"
contenido:
- "Tendencias KPIs"
- "Análisis incidentes"
- "Progreso planes acción"
- "Próximas actividades"
Mensual:
nombre: "ENS Compliance Report"
dia_generacion: "Día 5 del mes"
destinatarios:
- "CEO"
- "Comité Dirección"
- "Auditoría Interna"
contenido:
- "Puntuación cumplimiento ENS"
- "Estado certificación"
- "Análisis riesgos"
- "Recomendaciones mejora"
- "Comparativa mes anterior"
5.2 Portal de Métricas Web
<!-- Dashboard HTML Template -->
<!DOCTYPE html>
<html lang="es">
<head>
<title>ENS Dashboard - Legit Health</title>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
</head>
<body>
<div class="dashboard-container">
<!-- Header con KPIs principales -->
<header class="kpi-header">
<div class="kpi-card critical">
<h3>Cumplimiento ENS</h3>
<div class="kpi-value">92%</div>
<div class="kpi-trend up">↑ 2%</div>
</div>
<div class="kpi-card">
<h3>Incidentes Activos</h3>
<div class="kpi-value">2</div>
<div class="kpi-status amber">MEDIO</div>
</div>
<div class="kpi-card">
<h3>Disponibilidad</h3>
<div class="kpi-value">99.95%</div>
<div class="kpi-status green">OK</div>
</div>
</header>
<!-- Gráficos principales -->
<main class="charts-section">
<div class="chart-container">
<canvas id="ens-compliance-trend"></canvas>
</div>
<div class="chart-container">
<canvas id="security-incidents-chart"></canvas>
</div>
</main>
<!-- Tabla de controles ENS -->
<section class="controls-table">
<table id="ens-controls-status">
<thead>
<tr>
<th>Control ENS</th>
<th>Estado</th>
<th>Última Revisión</th>
<th>Responsable</th>
<th>Acciones</th>
</tr>
</thead>
<tbody>
<!-- Datos dinámicos -->
</tbody>
</table>
</section>
</div>
</body>
</html>
Integración con Herramientas
6.1 Stack Tecnológico de Monitorización
Herramientas_Monitorizacion:
Recolección_Métricas:
- herramienta: "Prometheus"
función: "Time-series database"
métricas:
- "Sistema operativo"
- "Aplicaciones"
- "Infraestructura"
- herramienta: "Elasticsearch"
función: "Logs y eventos"
datos:
- "Logs de seguridad"
- "Eventos de auditoría"
- "Registros de acceso"
Visualización:
- herramienta: "Grafana"
función: "Dashboards interactivos"
paneles:
- "ENS Compliance Overview"
- "Security Operations"
- "Risk Management"
- herramienta: "Kibana"
función: "Análisis de logs"
dashboards:
- "Security Events"
- "Access Analytics"
- "Threat Detection"
Alertas:
- herramienta: "AlertManager"
función: "Gestión de alertas"
integraciones:
- "Email"
- "Slack"
- "PagerDuty"
- "ServiceNow"
6.2 APIs de Integración
class ENSMetricsAPI:
"""API REST para consulta de métricas ENS"""
def __init__(self):
self.app = Flask(__name__)
self.setup_routes()
def setup_routes(self):
@self.app.route('/api/v1/ens/compliance', methods=['GET'])
def get_compliance_score():
"""Endpoint para obtener puntuación de cumplimiento"""
return {
'score': self.calculate_compliance_score(),
'timestamp': datetime.now().isoformat(),
'breakdown': {
'organizational': 95,
'operational': 92,
'protection_measures': 89
}
}
@self.app.route('/api/v1/ens/kpis', methods=['GET'])
def get_kpis():
"""Endpoint para obtener todos los KPIs"""
return {
'kpis': self.collect_all_kpis(),
'thresholds': self.get_threshold_status(),
'alerts': self.get_active_alerts()
}
@self.app.route('/api/v1/ens/dashboard', methods=['GET'])
def get_dashboard_data():
"""Endpoint para datos del dashboard"""
return {
'executive_summary': self.generate_executive_summary(),
'charts_data': self.prepare_charts_data(),
'tables_data': self.prepare_tables_data()
}
Procedimiento de Revisión de KPIs
7.1 Calendario de Revisión
Calendario_Revision_KPIs:
Revisión_Diaria:
hora: "09:00"
duración: "30 minutos"
participantes:
- "Responsable Operaciones"
- "Equipo SOC"
agenda:
- "KPIs críticos del día anterior"
- "Incidentes nocturnos"
- "Sistemas fuera de umbral"
- "Acciones inmediatas"
Revisión_Semanal:
día: "Miércoles"
hora: "11:00"
duración: "1 hora"
participantes:
- "CISO"
- "Responsable ENS"
- "Jefes de Área"
agenda:
- "Tendencias semanales"
- "Cumplimiento objetivos"
- "Planes de acción"
- "Recursos necesarios"
Revisión_Mensual:
día: "Primer martes del mes"
hora: "10:00"
duración: "2 horas"
participantes:
- "Comité de Dirección"
- "CISO"
- "Responsable ENS"
- "Auditoría Interna"
agenda:
- "Informe mensual ENS"
- "Análisis de tendencias"
- "Decisiones estratégicas"
- "Aprobación inversiones"
7.2 Proceso de Mejora Continua
class ProcesoMejoraContinuaKPIs:
def __init__(self):
self.historico_kpis = []
self.acciones_mejora = []
def analizar_desviaciones(self, kpi_actual, kpi_objetivo):
"""Analiza desviaciones y propone mejoras"""
desviacion = kpi_objetivo - kpi_actual
if abs(desviacion) > 0.1: # Desviación significativa > 10%
analisis = {
'kpi': kpi_actual,
'objetivo': kpi_objetivo,
'desviacion': desviacion,
'causa_raiz': self.analisis_causa_raiz(kpi_actual),
'acciones_correctivas': self.generar_acciones_correctivas(desviacion),
'responsable': self.asignar_responsable(kpi_actual),
'fecha_limite': self.calcular_fecha_limite(desviacion)
}
self.acciones_mejora.append(analisis)
return analisis
def seguimiento_acciones(self):
"""Seguimiento de acciones de mejora"""
for accion in self.acciones_mejora:
if accion['fecha_limite'] < datetime.now():
self.escalar_accion_vencida(accion)
else:
self.verificar_progreso(accion)
Referencias y Documentación Relacionada
- OP.MON.1: Sistema de detección de intrusión
- OP.MON.2: Sistema de métricas base
- ORG.1: Política de seguridad ENS
- CCN-STIC 815: Métricas e Indicadores en el ENS
- GP-004: Gestión de indicadores y objetivos del SGC
- R-TF-013-002: Registro de gestión de riesgos
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