saltar al contenido
volver al mapa
práctica
etapa: source
3 min de lectura

Threat modeling: pensar como el atacante antes de programar

El modelado de amenazas es la conversación estructurada que descubre qué puede salir mal mientras todavía es barato corregirlo: en el diseño, no en el pentest.

STRIDEOWASP Threat DragonMicrosoft Threat Modeling ToolpytmIriusRisk

Qué es

El threat modeling es el ejercicio de mirar un sistema (o una feature) y preguntar, de forma sistemática, qué puede salir mal, quién podría causarlo y qué hacemos al respecto. Ocurre antes o durante el diseño, cuando cambiar una decisión cuesta una conversación y no un sprint entero.

, y encuentran defectos que ya existen en el código o en el entorno. El threat model encuentra defectos de diseño: el servicio que confía en un header que controla el cliente, el flujo de restablecimiento de contraseña que filtra si el correo existe, el bucket que mezcla datos de tenants. Ningún scanner ve eso porque ninguna línea de código está "mal".

Las cuatro preguntas

El método más simple cabe en cuatro preguntas, repetidas en cada cambio relevante de arquitectura:

  • ¿En qué estamos trabajando? Un (DFD) con actores, procesos, almacenes y fronteras de confianza.
  • ¿Qué puede salir mal? Recorrer cada elemento y cada flujo que cruza una buscando amenazas ( ayuda aquí).
  • ¿Qué vamos a hacer al respecto? Para cada amenaza: mitigar, eliminar, transferir o aceptar, con un responsable y una decisión registrada.
  • ¿Hicimos un buen trabajo? Revisar el modelo después del release y después de cada incidente, porque el sistema cambia y el modelo envejece.

STRIDE: un checklist de amenazas

STRIDE es un mnemónico de Microsoft que asocia cada letra con una propiedad de seguridad violada. Al mirar un flujo en el diagrama, preguntas si cada una de las seis categorías aplica:

  • Spoofing (suplantación de identidad) viola la autenticidad: alguien se hace pasar por otro usuario o servicio.
  • Tampering (manipulación) viola la integridad: datos o código alterados en tránsito o en reposo.
  • Repudiation (repudio) viola el no repudio: no hay log para probar quién hizo qué.
  • Information disclosure (filtración) viola la confidencialidad: datos expuestos a quien no debería verlos.
  • Denial of service (denegación de servicio) viola la disponibilidad: el servicio se agota o se cae.
  • Elevation of privilege (elevación de privilegios) viola la autorización: un usuario común pasa a actuar como admin.

Threat model como código

El modelo no tiene por qué vivir en una diapositiva olvidada. Herramientas como pytm describen el sistema en código, generan el DFD y listan las amenazas aplicables. Versionado junto al repositorio, el modelo pasa por code review y cambia en el mismo PR que cambia la arquitectura.

tm.py - ejemplo con pytmpython
from pytm import TM, Server, Datastore, Dataflow, Boundary, Actor

tm = TM("Checkout API")
internet = Boundary("Internet")
vpc = Boundary("VPC privada")

user = Actor("Cliente", inBoundary=internet)
api = Server("API de checkout", inBoundary=vpc)
db = Datastore("Pedidos", inBoundary=vpc, isEncrypted=True)

Dataflow(user, api, "POST /checkout (HTTPS)", isEncrypted=True)
Dataflow(api, db, "INSERT pedido")

tm.process()  # genera el DFD y la lista de amenazas STRIDE

Cómo encajarlo en el pipeline

El disparador más práctico es el mismo del code review: una feature nueva que toca autenticación, datos sensibles, un servicio externo o una frontera de confianza pide media hora de threat model antes del primer commit. Para el resto, una revisión rápida de amenazas en la plantilla del PR ya alcanza.

Las amenazas se vuelven ítems rastreables: cada mitigación apunta a una prueba, una regla de SAST o un gate del pipeline. Así el threat model deja de ser un documento y pasa a generar verificaciones que corren solas, y el mapa cierra el ciclo: el diseño informa qué deben revisar el SAST, el DAST y los gates.

SASTAnálisis estático: examina el código sin ejecutarlo. Encuentra problemas por análisis de flujo, no por adivinación.ver en el glosario →DASTPrueba dinámica: ataca la aplicación en ejecución, desde afuera, en caja negra.ver en el glosario →SCAAnálisis de composición: inventaría las dependencias de terceros y las cruza con CVEs conocidos.ver en el glosario →DFDdiagrama de flujo de datosDibujo de los actores, procesos, almacenes y flujos de un sistema, con las fronteras de confianza marcadas. Es la entrada del threat modeling: las amenazas aparecen donde un flujo cruza una frontera.ver en el glosario →Frontera de confianzatrust boundaryLínea donde cambia el nivel de confianza de los datos o de quien los envía (internet a VPC, servicio a base de datos, usuario a admin). Todo lo que la cruza debe ser autenticado, autorizado y validado.ver en el glosario →STRIDEMnemónico de seis categorías de amenaza (Spoofing, Tampering, Repudiation, Information disclosure, Denial of service, Elevation of privilege) usado como checklist al recorrer un diagrama de flujo de datos.ver en el glosario →

conexiones en el mapa

  • Shift-leftempieza en el diseñoThreat modeling: pensar como el atacante antes de programar
  • Threat modeling: pensar como el atacante antes de programardefine qué probarSAST
  • Threat modeling: pensar como el atacante antes de programarse convierte en gateDevSecOps

actualizado el 14/10/2026 · fuentes para profundizar · reportar un error

en otros dominios

Estudia antes

pon a prueba lo que entendiste

Cargando preguntas…