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.
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.
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 STRIDECó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.
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
- Gestión de riesgos de seguridadgrcel modelo de amenazas alimenta el registro de riesgos
- A06 Insecure Designowaspel método que encuentra la falla antes que el código
- Zero-trust - modelo de confianzacloudsecdefine las fronteras de confianza
- Guardrails - filtros de entrada y salidaai-agentsmapea lo que el agente no puede hacer
Estudia antes
pon a prueba lo que entendiste
Cargando preguntas…