Modelado de amenazas
Sentarse antes de construir a preguntar quién podría atacar esto, cómo y qué hacer al respecto.
El modelado de amenazas (threat modeling) es una forma ordenada de pensar como un atacante mientras el sistema todavía está en el pizarrón. El equipo dibuja cómo funciona el sistema, por dónde entran y salen los datos y dónde una parte deja de confiar en otra. Después se hace cuatro preguntas simples, que popularizó el ingeniero de seguridad Adam Shostack: ¿qué estamos construyendo?, ¿qué puede salir mal?, ¿qué vamos a hacer al respecto? y ¿lo hicimos lo bastante bien?
El dibujo importa. Las flechas que cruzan un límite de confianza, como los pedidos que llegan desde internet a tu servidor o los que salen de tu servidor hacia la API de un tercero, son donde pasan la mayoría de los ataques. El conjunto de todos esos puntos de entrada es la superficie de ataque. Para no olvidarse categorías enteras, muchos equipos pasan cada pieza por STRIDE, una lista creada en Microsoft: Spoofing (hacerse pasar por otro), Tampering (alterar datos), Repudiation (negar que hiciste algo), Information disclosure (filtraciones), Denial of service (dejar el servicio fuera de juego) y Elevation of privilege (conseguir más permisos de los que te tocan).
Cada amenaza encontrada recibe una decisión: arreglarla, achicarla, aceptarla a conciencia o pasársela a otro (por ejemplo, a un proveedor de pagos). El resultado es un documento corto que vive junto al diseño y se revisa cuando el sistema cambia. Es barato comparado con lo que evita: un chequeo de permisos que falta, detectado en una reunión de diseño, cuesta una hora; la misma falla descubierta en producción después de una filtración le puede costar los clientes a una empresa. También sirve fuera del software: periodistas y activistas arman su propio modelo de amenazas para decidir qué protecciones valen la pena en su caso.
Para quedarse
- Cuatro preguntas: qué construimos, qué puede salir mal, qué vamos a hacer, ¿alcanzó?
- Dibujá los flujos de datos y los límites de confianza; los ataques se juntan donde cambia la confianza.
- STRIDE es una lista de seis tipos de amenaza para no saltearse ninguna categoría.
- Se hace en el diseño y se repasa cuando el sistema cambia, no una vez y a otra cosa.
Para seguir leyendo
- Threat Modeling Manifesto (en inglés)
- Threat Modeling Cheat Sheet (OWASP, en inglés)
- Threat model en Wikipedia (en inglés)