lección 5
Día 3 (tarde) -- El incidente de acceso no autorizado
Javier accedió a datos de pacientes sin autorización. El audit trail que acabas de implementar lo detecta. Gestión del incidente en tiempo real: contención, investigación, documentación y decisión sobre notificación a la AEPD.
⏱ 45 min
### Miércoles, 15:30 -- La alerta
Dataset de esta lección (en tu carpeta datos/): datos/access_log_sample.json (JSON Lines). Para la investigación forense del incidente de JFE-0024 te apoyarás en los campos user, timestamp, table, operation, query, rows_returned y source_ip de cada acceso, reconstruyendo la cronología de lo que hizo Javier. Es el mismo fichero de accesos del audit trail que preparaste por la mañana.
Estás terminando de desplegar los triggers de auditoría cuando tu correo recibe una alerta automática del sistema de detección de anomalías (que Laura configuró hace meses para queries sospechosas). El asunto dice: "ALERTA: acceso masivo a datos de pacientes - usuario JFE-0024". Te quedas frío. JFE-0024 es Javier.
1DE: alertas-seguridad@meditrack.es2PARA: laura.sanchez@meditrack.es, tu@meditrack.es3CC: rosa.martinez@meditrack.es4ASUNTO: [ALERTA SEGURIDAD] Acceso anomalo detectado56Timestamp: 2024-03-06 15:12:04 UTC7Usuario: JFE-0024 (Javier Fernandez, Junior Data Engineer)8Rol: data_engineer_junior910Actividad detectada:11- SELECT sobre tabla "historiales" -- 847 registros12- SELECT sobre tabla "pacientes" -- 312 registros (JOIN con historiales)13- Filtro: diagnostico_cie10 LIKE 'F%' (trastornos mentales)14- Sin justificacion registrada15- Sin finalidad declarada16- IP: 10.0.3.47 (red interna, puesto de Javier)1718Contexto:19El usuario JFE-0024 NO tiene asignada ninguna tarea que requiera20acceso a datos de salud mental. Su rol actual limita acceso a21datos de wearables y operaciones basicas.2223ACCION REQUERIDA: Verificar legitimidad del acceso.
El audit trail FUNCIONA -- acaba de detectar algo que no deberia pasar
Laura aparece en tu puesto en 30 segundos. "Has visto el email?" Asientes. Laura cierra la puerta de la sala: "Javier ha accedido a datos de salud mental de 312 pacientes sin autorización. No tiene ninguna tarea asignada que justifique ese acceso. Esto es un incidente de seguridad. Tenemos que actuar ahora."
Sientes un nudo en el estómago. Javier es TU compañero. Le mentorizas. Es un chaval de 24 años que probablemente no sabía lo que estaba haciendo. Pero eso no cambia el hecho: ha accedido a datos de categoría especial sin consentimiento, sin finalidad declarada y sin autorización de su rol. En términos legales, es una brecha de confidencialidad interna.
### Fase 1: Contención inmediata
Laura toma el mando: "Primero contenemos. Después investigamos. No acuses a nadie hasta que sepamos qué pasó." Las acciones inmediatas:
- 01.Revocar acceso de Javier a tablas de pacientes e historiales (inmediato, sin explicación todavía)
- 02.Verificar si los datos fueron exportados fuera del sistema (downloads, copias, envíos por email)
- 03.Preservar evidencia: snapshot del audit trail con las queries exactas de Javier
- 04.Notificar a Rosa (DPO) -- ella decide si hay obligación de notificar a la AEPD en 72h
- 05.No confrontar a Javier todavía -- Rosa quiere hablar con él primero junto con RRHH
1Laura Sanchez 15:38 PM DM a ti2No le digas nada a Javier todavía. Se que es tu compañero y esto3es incomodo. Pero Rosa tiene que evaluar la gravedad primero.45Necesito que hagas:61. Query al audit trail: TODO lo que hizo Javier hoy72. Verificar si hizo COPY TO o pg_dump (exportación)83. Comprobar si envio algo por email o Slack (esto lo hace IT)94. Documentar la cronologia exacta1011Yo voy a revocarle acceso ahora. Si te pregunta, dile que hay12un "mantenimiento de permisos" y que es temporal.1314Rosa Martinez 15:41 PM DM a Laura15Laura, necesito un informe del incidente en mi mesa antes de las 18h.16Tengo 72 horas para decidir si notificamos a la AEPD (Art. 33).17Si los datos NO salieron del sistema, puede que no sea obligatorio.18Pero necesito estar SEGURA.
La tensión es real -- tu compañero puede estar en problemas serios
### Fase 2: Investigación
Tu rol ahora es técnico: investigar qué hizo Javier exactamente. Sin juicio, sin emoción. Los hechos primero. Ejecutas una serie de queries contra el audit trail para reconstruir la cronología:
1-- Investigacion: reconstruir TODA la actividad de JFE-0024 el día del incidente2SELECT3 timestamp_utc,4 operación,5 tabla_afectada,6 num_registros,7 query_ejecutada,8 finalidad,9 justificacion,10 ip_origen11FROM audit_accesos_pacientes12WHERE usuario_id = 'JFE-0024'13 AND DATE(timestamp_utc) = '2024-03-06'14ORDER BY timestamp_utc ASC;1516-- Resultado:17-- 09:15 SELECT wearables 45 "SELECT COUNT(*) FROM wear..." operacional tarea-WEA-001 10.0.3.4718-- 09:47 SELECT wearables 120 "SELECT * FROM wearables..." operacional tarea-WEA-001 10.0.3.4719-- 11:30 SELECT consultas 50 "SELECT tipo, COUNT(*) ..." operacional tarea-OPS-003 10.0.3.4720-- 14:55 SELECT pacientes 1 "SELECT * FROM pacientes..." NULL NULL 10.0.3.47 ← AQUI EMPIEZA21-- 15:02 SELECT historiales 200 "SELECT * FROM historiale..." NULL NULL 10.0.3.4722-- 15:08 SELECT historiales 647 "SELECT h.*, p.fecha_nac..." NULL NULL 10.0.3.4723-- 15:12 SELECT pacientes+hist 312 "SELECT p.nombre, h.diag..." NULL NULL 10.0.3.47 ← LA ALERTA
El audit trail muestra la cronología exacta -- de lo legítimo a lo no autorizado
El patrón es claro: hasta las 11:30, Javier hacía queries normales sobre wearables y consultas (sus tareas asignadas). A las 14:55 -- justo después de comer -- empezó a explorar tablas que no le corresponden. Sin finalidad, sin justificación. Y la última query es la más grave: un JOIN entre pacientes (con nombres) e historiales filtrado por diagnósticos F% (trastornos mentales y del comportamiento). Vio nombres de personas con diagnósticos psiquiátricos.
### La conversación con Javier (después)
Rosa habla con Javier al día siguiente junto con RRHH y Laura. Tú no estás en esa reunión, pero Laura te cuenta después. La versión de Javier:
1Laura Sanchez (jueves mañana, después de la reunion con Javier)23"Te cuento lo que pasó. Javier dice que el Dr. Martin le pidió4directamente -- sin pasar por nosotros -- que le sacara 'unos datos5rapidos' sobre pacientes con trastornos de ansiedad para una6presentación interna. Javier, queriendo agradar, lo hizo sin7preguntar si tenía permiso.89Rosa está furiosa -- no con Javier (que es junior y no sabía),10sino con el protocolo que permitía que esto pasara. Un junior11NO deberia tener acceso a esas tablas en primer lugar.1213Consecuencias:14- Javier: amonestacion verbal + formacion obligatoria en GDPR15- Dr. Martin: Rosa va a tener una 'conversacion seria' con el16- Nosotros: implementar RLS para que esto SEA IMPOSIBLE tecnicamente17- Nadie ha sido despedido -- fue un error de ignorancia, no malicia1819La buena noticia: los datos NO salieron del sistema. Javier no20copio nada, no envio nada. Solo hizo SELECTs en DBeaver y miro21los resultados en pantalla. Eso significa que probablemente no22hay obligacion de notificar a la AEPD (Art. 33.1 -- solo si hay23'riesgo para los derechos y libertades'). Rosa decide que no."2425Tu: "Pobre Javier. Pero entiendo -- tiene que aprender que no26puedes tocar datos de salud mental porque alguien te lo pide27informalmente."2829Laura: "Exacto. Y por eso necesitamos RLS implementado MANANA.30Que sea tecnicamente imposible repetir esto."
No hubo malicia -- pero eso no cambia que sea un incidente de seguridad
Consejo de senior: Los incidentes de seguridad más comunes no son hackers externos -- son empleados internos que cometen errores por desconocimiento. El 80% de las brechas de datos son internas. La solución no es castigar (Javier no tenía mala intención) sino hacer que sea TECNICAMENTE IMPOSIBLE repetir el error. Eso es Row-Level Security: no depender de que la gente "se acuerde" de no acceder a datos -- hacer que el sistema IMPIDA el acceso aunque lo intenten.
Art. 33 GDPR: Obligación de notificar brechas a la AEPD en 72 horas SI hay riesgo para los derechos de los interesados. En este caso, los datos no salieron del sistema (solo SELECTs sin exportación), no se compartieron con terceros y se detectó en minutos. Rosa decide que no hay obligación de notificar. PERO documenta la decisión y la justificación por si la AEPD pregunta posteriormente.
### El post-mortem del incidente
Laura te pide que redactes el post-mortem técnico del incidente. Es un documento interno que queda en el registro de seguridad. Debe ser factual, sin juicios de valor, y con acciones correctivas claras:
- QUE pasó: un junior accedió a datos de salud mental sin autorización ni justificación
- CUANDO: 6 de marzo 2024, 14:55-15:12 UTC
- COMO se detectó: sistema de alertas automático sobre el audit trail (nuevo, implementado esa misma mañana)
- IMPACTO: 312 pacientes afectados (nombres + diagnósticos psiquiátricos visualizados)
- CONTENCION: acceso revocado en 26 minutos desde la detección
- CAUSA RAIZ: permisos de BD excesivos para rol junior + petición directa de Dr. Martin sin pasar por protocolo
- DATOS EXFILTRADOS: NO -- solo SELECT en cliente SQL local, sin exportación
- NOTIFICACION AEPD: NO -- sin riesgo para derechos de interesados (datos no salieron del sistema)
- ACCIONES CORRECTIVAS: implementar RLS, formación GDPR obligatoria, canal formal para peticiones de datos
## ejercicios
Investigacion forense del incidente
Usando el audit trail, escribe las queries necesarias para la investigacion completa: 1) cronologia de accesos de Javier el día del incidente, 2) verificar si hubo exportación (COPY, pg_dump), 3) identificar pacientes afectados, 4) determinar si el patron de acceso indica intencion o exploracion casual.
Informe post-mortem del incidente
Redacta el informe post-mortem técnico del incidente en formato estructurado. Incluye: resumen ejecutivo, cronologia, impacto, causa raiz, acciones tomadas, acciones correctivas pendientes y decisión sobre notificación a AEPD con justificacion legal.
Script de revocacion inmediata de acceso
Implementa una función SQL que revoque INMEDIATAMENTE todos los accesos de un usuario a tablas sensibles. Debe: 1) revocar GRANTs, 2) terminar sesiones activas del usuario, 3) registrar la revocacion en el audit trail, 4) notificar (simulado) al equipo. Es lo que Laura ejecuto en los 26 minutos de contencion.
Detector de patrones anomalos en accesos
Implementa una query SQL que detecte automaticamente accesos anomalos: 1) más de 50 pacientes distintos en 1 hora, 2) acceso fuera de horario a tablas críticas, 3) acceso a especialidades que no corresponden al medico, 4) queries sin justificacion sobre historiales.
Regístrate para guardar tu progreso.
## comentarios
Reporta erratas, ayuda a otros o comparte tu opinión. Sé constructivo.
Inicia sesión para comentar y responder.
cargando comentarios...