ATALAIA
  1. Inicio
  2. Recursos
  3. Blog
  4. Fronteras de confianza que puedes dibujar en una página
Diseño · Análisis a fondo

Fronteras de confianza que puedes dibujar en una página

Si tu diagrama de arquitectura no puede mostrar dónde cambia la confianza, no puede decirte hacia dónde van los ataques. Así se dibuja uno que sí lo haga.

4 min de lecturaEquipo Atalaia

ArquitecturaTrust boundariesSTRIDE

Los diagramas de arquitectura suelen dibujarse para explicar cómo funciona un sistema. Es útil, pero no es la pregunta que hace una revisión de seguridad. Una revisión pregunta dónde cambia la confianza: dónde una petición de alguien a quien no controlas llega a algo que te importa.

La buena noticia es que puedes responder esa pregunta en una sola página. El diagrama no tiene que ser bonito ni completo. Tiene que mostrar los límites y cada flecha que los cruza.

Qué cuenta como frontera de confianza

Una frontera de confianza es cualquier punto donde los datos o el control pasan entre dos partes que tienen privilegios distintos o que controlan personas distintas. Algunas son obvias, como el borde de internet. Muchas no lo son:

  • Entre el navegador y tu API, porque el navegador pertenece al usuario.
  • Entre tenants dentro de la misma base de datos, porque un cliente no debe leer a otro.
  • Entre tu servicio y un webhook de terceros, porque quien envía es otra persona.
  • Entre el runner de CI y producción, porque el runner ejecuta código de las pull requests.
  • Entre una herramienta de soporte y los datos de clientes, porque el acceso del personal es un privilegio en sí mismo.
  • Entre un agente de IA y las herramientas que puede llamar, porque el prompt puede venir de contenido no confiable.

Si solo dibujas el primero, la revisión solo encontrará problemas en el primero.

Cinco tipos de caja

Mantén la notación pequeña. Usamos cinco formas, que se corresponden aproximadamente con los elementos de un diagrama de flujo de datos clásico:

FormaMediosEjemplo
PersonaUn actor humanoCliente, admin, agente de soporte
CajaAlgo que gestionas túAPI, worker, panel de administración
CilindroAlgo que guarda datosBase de datos, bucket, cola
CloudAlgo que no gestionas túProveedor de pagos, proveedor de identidad, API SaaS
Línea discontinuaUna frontera de confianzaBorde de internet, límite de tenant, de CI a prod

Las flechas muestran el flujo de datos y apuntan en la dirección en que viaja la petición. Etiqueta cada flecha con el protocolo y lo que transporta: HTTPS, JSON, invoice ids. Esa etiqueta es lo que convierte el dibujo en algo que se puede revisar.

Anatomía de una frontera pasada por alto

La mayoría de los hallazgos de revisión siguen la misma forma. Existe una frontera, nadie la dibujó, así que nadie hizo las preguntas que la acompañan. Un ejemplo habitual es un panel de admin interno que se dio por seguro porque está «dentro»:

  1. SuposiciónEl panel de administración es interno, así que se salta las comprobaciones de autorización por objeto.
  2. ExposiciónEs accesible desde la red corporativa o una VPN que comparten muchas personas y dispositivos.
  3. Punto de apoyoSe compromete un portátil de un empleado o una credencial compartida.
  4. ImpactoEl atacante lee o edita cualquier registro de cliente a través de una herramienta que confiaba en su ubicación de red.

Dibujar una línea discontinua entre "staff" y "panel de admin" obliga a plantear la pregunta que el diseño se saltó: ¿cómo sabe este servicio quién llama y qué puede tocar?

Las preguntas para cada flecha que cruza

Una vez dibujadas las fronteras, ve flecha por flecha. Para cada flecha que cruza una línea discontinua, escribe respuestas cortas a estas preguntas. STRIDE es una buena lista de apoyo aquí:

  1. Spoofing. ¿Cómo se autentica quien llama? ¿Token, mTLS, firma, nada?
  2. Tampering. ¿Se valida la entrada en el lado receptor, y no solo en el emisor?
  3. Repudio. ¿Se registra la llamada con quién la hizo?
  4. Divulgación de información. ¿Contiene la respuesta más de lo que debería ver quien llama?
  5. Denegación de servicio. ¿Hay un límite de frecuencia, tamaño o coste?
  6. Elevación de privilegios. ¿Puede quien llama alcanzar acciones por encima de su rol?

Las respuestas en blanco son tu lista de hallazgos. En la práctica, las celdas vacías se concentran en dos o tres flechas, y ahí es donde debe ir el tiempo de revisión.

Mantener la página al día

Un diagrama dibujado una vez para una revisión se queda obsoleto en un trimestre. Dos hábitos lo mantienen honesto:

  • Guárdalo como código. Un formato de texto como Mermaid o PlantUML en el repositorio hace que los cambios aparezcan en las pull requests junto al código que los provocó.
  • Átalo al cambio. Una nueva integración externa, un nuevo almacén de datos o un nuevo rol son motivo para actualizar la página. Ponlo en la plantilla de pull request.

Un pequeño esquema en Mermaid basta para empezar:

flowchart LR
  user([Customer]) -->|HTTPS, JSON| api[API]
  subgraph tenant [Tenant boundary]
    api -->|SQL, row-level filter| db[(Postgres)]
  end
  psp((Payment provider)) -->|Signed webhook| api
  ci[CI runner] -.->|Deploy token| api

Compruébalo en 10 minutos

  1. Abre tu diagrama de arquitectura actual. Cuenta las líneas discontinuas. Si no hay ninguna, empieza por ahí.
  2. Añade una frontera para las herramientas internas, para CI hacia producción y para cada callback de terceros.
  3. Elige las tres flechas que cruzan el límite más sensible y responde a las seis preguntas.
  4. Cualquier respuesta en blanco se convierte en un ticket, o en un tema para una sesión de revisión de arquitectura.

Dónde encaja en la línea

En la torre (en desarrollo):

Habladlo

Una llamada de 30 minutos. Sin diapositivas, sin lista de precios y con un siguiente paso en cualquier caso.