Tema 4

4. Threat modeling para sistemas distribuidos y superficies de ataque

En una arquitectura distribuida los riesgos no aparecen solo en el código. También aparecen en los flujos entre servicios, en las identidades técnicas, en los pipelines, en la configuración y en los límites de confianza. El threat modeling permite anticipar estos problemas antes de que lleguen a producción.

Objetivo Identificar amenazas antes de implementar
Enfoque Activos, flujos y límites de confianza
Resultado Priorizar mitigaciones con criterio

4.1 Introducción

Cuando un sistema crece, también crece la cantidad de decisiones que pueden introducir riesgo. En arquitecturas distribuidas esto ocurre con especial intensidad, porque una funcionalidad de negocio suele atravesar múltiples servicios, APIs, colas, bases de datos, secretos, identidades técnicas y componentes de infraestructura.

Esperar a que una auditoría o un incidente revele esos riesgos es una estrategia débil. El threat modeling busca adelantarse: obliga a pensar cómo funciona el sistema, qué activos son valiosos, quién podría atacarlos, por dónde podría hacerlo y qué consecuencias tendría ese ataque.

No se trata de adivinar el futuro con precisión absoluta. Se trata de tomar mejores decisiones de arquitectura y seguridad antes de construir, desplegar o exponer componentes que luego serán costosos de corregir.

4.2 Qué es el threat modeling

El threat modeling es una práctica sistemática para identificar amenazas sobre un sistema a partir de su diseño, sus flujos y sus activos. Su propósito es detectar riesgos relevantes de forma temprana y traducirlos en decisiones concretas de mitigación.

En términos prácticos, el threat modeling responde preguntas como estas:

  • Qué estamos construyendo realmente.
  • Qué activos o capacidades son más críticos.
  • Qué actores podrían abusar del sistema o de sus dependencias.
  • Qué caminos de ataque existen.
  • Qué controles conviene priorizar y por qué.
Threat modeling no es un documento para cumplir un proceso. Es una herramienta para pensar mejor antes de que el sistema quede expuesto.

4.3 Por qué es especialmente importante en microservicios

En un monolito muchos riesgos pueden verse dentro de una misma base de código. En una arquitectura distribuida, gran parte del riesgo aparece en los bordes entre componentes: autenticación entre servicios, contratos de API, eventos, secretos, despliegues, privilegios de runtime y confianza implícita entre partes.

Eso hace que el modelado de amenazas sea particularmente valioso, porque obliga a representar el sistema como un conjunto de relaciones y no solo como piezas aisladas. Si esos vínculos no se entienden, los controles suelen quedar incompletos o mal ubicados.

4.4 Qué activos debemos identificar

Un activo es cualquier elemento que el sistema necesita proteger porque su compromiso afecta al negocio, a los usuarios o a la operación. No todos los activos son datos; también pueden ser capacidades, identidades o procesos de entrega.

Tipo de activo Ejemplos Por qué importa
Datos Información personal, pagos, tokens, secretos Su exposición o alteración puede causar fraude o incumplimiento
Servicios API de pagos, autenticación, facturación Su indisponibilidad o abuso afecta procesos críticos
Infraestructura Clústeres, colas, gateways, pipelines Su compromiso puede impactar a múltiples dominios
Identidades Cuentas técnicas, certificados, roles Permiten acceso y movimiento lateral si son abusadas
Procesos Despliegue, publicación de artefactos, rotación de secretos Un fallo en ellos puede comprometer todo el ciclo de vida

4.5 Actores y perfiles de amenaza

No todas las amenazas vienen del mismo lugar. Para modelar bien hace falta pensar qué actores pueden interactuar con el sistema y con qué motivación, capacidad o nivel de acceso.

  • Usuarios externos legítimos: pueden abusar de funciones o límites de negocio.
  • Atacantes externos: buscan explotar exposición pública, credenciales o fallos de diseño.
  • Terceros integrados: pueden introducir riesgo por errores, abuso o compromiso propio.
  • Insiders o usuarios internos: pueden actuar con negligencia o malicia.
  • Servicios comprometidos: una identidad técnica abusada puede actuar como atacante interno.

En microservicios, un actor relevante puede ser un componente interno comprometido. Eso cambia por completo la forma de pensar la confianza.

4.6 Superficie de ataque

La superficie de ataque es el conjunto de puntos por los cuales un actor puede interactuar con el sistema de manera no deseada. En arquitecturas distribuidas esta superficie suele ser mucho más amplia de lo que parece a simple vista.

  • APIs públicas y privadas.
  • Interfaces administrativas y dashboards.
  • Mensajería y brokers de eventos.
  • Repositorios, pipelines y registros de imágenes.
  • Canales de observabilidad, logs y trazas.
  • Secret managers, vaults y mecanismos de configuración.
  • Relaciones de red entre pods, nodos, servicios y terceros.
Una superficie de ataque amplia no siempre es evitable, pero sí debe ser conocida, justificada y controlada.

4.7 Trust boundaries o límites de confianza

Un trust boundary es un punto donde cambia el nivel de confianza o el contexto de seguridad. En términos prácticos, es un borde donde el sistema debería dejar de asumir continuidad implícita y volver a autenticar, validar o restringir.

Ejemplos típicos de trust boundaries son:

  • El paso de internet al API Gateway.
  • La comunicación entre dos servicios distintos.
  • La entrada a una cola o broker de mensajes.
  • El acceso desde una cuenta técnica a una base de datos.
  • La transición entre pipeline de build y despliegue productivo.

Marcar estos límites ayuda a decidir dónde deben existir controles de autenticación, autorización, cifrado, validación de entrada y auditoría.

4.8 Flujos de datos y caminos de abuso

El threat modeling no se hace solo mirando componentes. También requiere observar cómo fluye la información entre ellos. Muchas vulnerabilidades nacen en esos recorridos: datos que cambian de formato, mensajes que cruzan varios servicios, credenciales que se propagan o eventos que disparan acciones sensibles.

Por eso conviene dibujar flujos simples que muestren:

  1. Quién inicia una operación.
  2. Qué servicios participan.
  3. Qué datos se intercambian.
  4. Qué identidades se usan.
  5. Qué decisiones sensibles se toman en el recorrido.

4.9 STRIDE como marco práctico

Uno de los marcos más conocidos para threat modeling es STRIDE. No resuelve el análisis por sí solo, pero ayuda a ordenar el pensamiento alrededor de categorías típicas de amenaza.

Categoría Qué busca detectar Ejemplo en microservicios
Spoofing Suplantación de identidad Un servicio falso se hace pasar por otro
Tampering Alteración indebida Mensajes o configuraciones modificadas
Repudiation Negación de acciones Falta de trazabilidad en operaciones sensibles
Information Disclosure Exposición de información Logs con secretos o APIs que filtran datos de más
Denial of Service Interrupción o degradación Saturación de una API o encadenamiento de timeouts
Elevation of Privilege Escalada de privilegios Un servicio obtiene acceso a recursos que no debería

4.10 Ejemplo de preguntas útiles

El valor del modelado aparece cuando se hacen preguntas concretas sobre el diseño. Algunas de las más útiles son:

  • Qué pasa si una cuenta técnica es comprometida.
  • Qué datos puede ver o alterar cada servicio.
  • Qué sucede si un mensaje se repite, se retrasa o llega manipulado.
  • Qué ocurre si un servicio interno deja de ser confiable.
  • Qué componente puede convertirse en punto único de fallo o abuso.
  • Qué eventos deben quedar trazados para investigar incidentes.

4.11 Priorización de amenazas

No todas las amenazas identificadas merecen la misma atención. Un threat model útil necesita priorización. Para eso se suele considerar impacto, probabilidad, detectabilidad y costo de mitigación.

En la práctica conviene priorizar primero los riesgos que:

  • Afectan activos muy sensibles o críticos de negocio.
  • Comprometen identidades técnicas o control del runtime.
  • Permiten movimiento lateral amplio o escalada de privilegios.
  • Son difíciles de detectar una vez en producción.
  • Pueden resolverse tempranamente con cambios simples de diseño.

4.12 Mitigaciones derivadas del análisis

El resultado del threat modeling no debería ser una lista abstracta de preocupaciones. Debería convertirse en decisiones concretas de arquitectura, implementación o plataforma.

Riesgo detectado Mitigación posible Tipo de control
Suplantación entre servicios mTLS, identidad de workload, validación mutua Preventivo
Exposición excesiva de datos Contratos mínimos, redacción de logs, autorización contextual Preventivo
Falta de trazabilidad Auditoría, correlation IDs, logs estructurados Detectivo
Abuso de cuentas técnicas Least privilege, rotación, secretos dinámicos Preventivo
Caídas por dependencia remota Timeouts, retries controlados, circuit breakers Resiliencia

4.13 Cuándo hacer threat modeling

Lo ideal es hacerlo temprano, cuando todavía es barato cambiar el diseño. Pero también conviene repetirlo cada vez que cambia algo importante en la arquitectura.

  • Al diseñar un nuevo servicio o capability.
  • Al incorporar un tercero o una dependencia crítica.
  • Al exponer una API o flujo nuevo.
  • Al introducir colas, eventos o mecanismos de integración sensibles.
  • Al cambiar el modelo de identidad, permisos o despliegue.

4.14 Errores comunes al modelar amenazas

  • Reducir el análisis a una lista genérica sin contexto de arquitectura.
  • Ignorar identidades técnicas, pipelines o componentes internos.
  • Asumir que la red interna es confiable por defecto.
  • No conectar amenazas con decisiones reales de mitigación.
  • Hacer el ejercicio una sola vez y no revisarlo cuando el sistema cambia.
Un threat model está vivo mientras la arquitectura esté viva. Si el sistema cambia y el análisis no, el modelo deja de servir.

4.15 Ejemplo conceptual breve

Supongamos un flujo donde un usuario crea una orden, el servicio de órdenes llama al de pagos, luego se publica un evento y finalmente logística recibe la confirmación. Un threat model razonable debería revisar:

  • Cómo se autentica el usuario inicial.
  • Cómo se autentican y autorizan órdenes y pagos entre sí.
  • Qué datos sensibles viajan en la llamada y en el evento.
  • Qué pasa si el evento es duplicado o modificado.
  • Qué registros quedan para reconstruir la operación.
  • Qué impacto tendría comprometer la cuenta técnica del servicio de pagos.

4.16 Qué debes recordar de este tema

  • Threat modeling sirve para detectar riesgos tempranos a partir del diseño.
  • En microservicios hay que mirar activos, actores, flujos y límites de confianza.
  • La superficie de ataque incluye mucho más que APIs públicas.
  • STRIDE es un marco útil para ordenar amenazas frecuentes.
  • El análisis debe terminar en mitigaciones concretas y priorizadas.

4.17 Conclusión

Modelar amenazas no elimina el riesgo, pero mejora radicalmente la calidad de las decisiones. En arquitecturas distribuidas esto es especialmente importante porque la complejidad se reparte entre componentes, contratos, identidades y flujos. Si esos elementos no se analizan antes, los controles suelen llegar tarde o quedar mal ubicados.

En el próximo tema abordaremos los principios de Zero Trust aplicados a microservicios para transformar este análisis en una postura de confianza mínima y verificación explícita.