Seguridad de aplicación es una rama en la cual se ve bastante temas de vulnerabilidades, pentesting, análisis de amenazas e incluso respuesta incidentes (Al menos en mi caso); sin embargo creo que hay algo que no se ve, o no llegué a ver en AppSec : el Modelado de amenaza.

Desde el punto de vista del desarrollador, es un proceso estructurado que permite identificar, analizar y priorizar las amenazas potenciales con base en las funcionalidades y caracteristicas de la aplicación. El análisis de la arquitectura, flujos de datos , actores que interactuan, permite anticipar los vectores de ataques de forma anticipada.

Para el Pentester, es una herramienta para mapear las superficie de ataque, identificar vectores prioriatrios y estructurar las pruebas con mayor precisión, realizando un trabajo quirurgico con base en las amenazas y vectores identificados.

Para este caso práctico de modelado de amenazas utilizaremos DVWA https://github.com/digininja/DVWA, aplicación desarrollada deliberadamente vulnerable para prácticar y mejorar las habilidades de seguridad web, pentesting web, hacking web, o como querras llamarlo.

1.- Metodología

  1. Descomponer : ¿Qué funcionalidad ofrece la aplicación? , Salida : Mapa de Capacidades
  2. Modelar diseño : ¿Quién las usa y qué datos/activos tocan?, Salida : DFD por funcionalidad
  3. Enumerar Amenazas: ¿Qué podria salir mal (STRIDE)?, Salida : Hipótesis de amenaza
  4. Planificar Verificación: ¿ Cómo confirmo o descarto cada hipétesis?, Salida: Técnica de prueba por amenaza.
  5. Ejecutar pruebas: ¿Qué ocurre en un entorno controlado? , Salida: Evidencia
  6. Corroborar: ¿La hipótesis es real?, Salida : Veredicto (Confirmada / Refutada)
  7. Documentar: ¿Qué priorizamos y mitigamos?, Salida: Registro + backlog

image

2.- Descomposición funcional

DVWA se analizó como un conjunto de capacidades de negocio, dejando a un lado las vulnerabilidades. Cada módulo se re interpreta como una funcionalidad que presentaría una aplicación real. En la siguiente imagen solo estan mapeados algunas de las funciones, como un ejemplo, no estan todas las funcionalidades mapeadas.

image

IDFuncionalidad (negocio)Módulo DVWAPropósito declarado
F1Inicio de sesiónbrute / login.phpAutenticar a un usuario con credenciales
F3Generación de identificador de sesiónweak_idEmitir un token que identifica la sesión
F4Cambio de contraseñacsrfPermitir al usuario actualizar su contraseña
F5Cambio de contraseña con CAPTCHAcaptchaIgual que F4 con verificación anti-bot
F6Control de acceso por rolauthbypass / bacRestringir recursos según privilegios
F7Búsqueda de usuario por IDsqliConsultar datos de un usuario por identificador
F8Consulta con respuesta booleanasqli_blindIndicar existencia de un registro (sí/no)
F9API de datosapiExponer datos/operaciones de forma programática
F10Subida de ficherosuploadPermitir cargar un fichero (p. ej. avatar)
F11Carga dinámica de páginasfiCargar contenido/página según un parámetro
F12Saludo personalizadoxss_rMostrar un mensaje que incluye datos del usuario
F13Libro de visitasxss_sPublicar y mostrar mensajes a otros usuarios
F14Selección de idioma (cliente)xss_dCambiar el idioma usando lógica de navegador
F16Reto validado en clientejavascriptEnviar un valor que se valida en el navegador
F17Diagnóstico de red (ping)execComprobar conectividad hacia una dirección
F18Redirección de navegaciónopen_redirectLlevar al usuario a otra ubicación
F19Cifrado / descifrado de datoscryptographyProteger datos mediante operaciones criptográficas

3.-Modelo de diseño : Flujo genérico de una funcionalidad

Toda funcionalidad de DVWA comparte el mismo patrón de flujo de datos. Modelarlo una vez permite razonar las amenazas de forma sistemática y consistente: cada paso y cada cruce de frontera es un punto de control candidato.

f03-dfd-generico

Lectura del flujo: el usuario envía datos (1) que se reciben (2), deberían validarse y autorizarse (3), alimentan la lógica de negocio (4–5) y se renderizan en la respuesta (6). Las amenazas aparecen en los puntos donde un control esperado podría faltar o ser insuficiente: recepción, validación/autorización, acceso a recursos y construcción de la salida.

4.-Modelado de amenazas por funcionalidad (STRIDE)

Para cada funcionalidad se plantea qué podría salir mal según su propósito, sin mirar la implementación. Las categorías son STRIDE: Spoofing, Tampering, Repudiation, Info disclosure, Denial of service, Elevation

4.1.- Capacidad : Identidad y acceso

image

4.2.- Capacidad : Consulta de Datos

image

4.3.- Capacidad : Ficheros y contenido

image

5.- Mapa de trazabilidad amenaza (Verificación)

Cada hipótesis avanza por el mismo recorrido hasta un veredicto. Este es el núcleo del enfoque: el modelo produce preguntas; la verificación produce respuestas.

f04-trazabilidad

6.- Plan de verificación y confirmación

Para cada hipótesis se asigna una técnica de verificación y un criterio de corroboración (qué evidencia confirma o refuta la amenaza). Todas las pruebas se ejecutan en el entorno aislado de DVWA (127.0.0.1).

image

Niveles de seguridad como banco de pruebas

DVWA permite repetir cada verificación bajo cuatro configuraciones (low, medium, high, impossible). Esto convierte la corroboración en un experimento controlado:

  • Una hipótesis que se confirma en low pero se refuta en impossible demuestra que el control esperado existe y funciona.
  • El punto exacto donde la amenaza deja de corroborarse identifica qué control concreto la mitiga (limitación de tasa, parametrización, token de intención, validación servidor, etc.).

7.- Registro de resultados (Plantilla)

La corroboración se documenta de forma homogénea para cada hipótesis y configuración:

image

El modelado de amenazas nos permite anticipar a vectores de ataques, en el caso de desarrolladores, ahora para vos que queres ser Web Pentester, te permite mapear de manera quirurgicas las posibles vulnerabilidades para intentar explotarlas, no reemplaza tu metodologia de web pentesting, la complementa.

Hasta la proxima!