Be Software Architecture Wise
Be Wise Apps

Read in English · Lire en français · Auf Deutsch lesen

Sección 8.1 de 8.8 · Intermedio · 20 min de lectura

Principios de seguridad para arquitectos

Videolección

5 min · narrado en inglés, con subtítulos
Solo escuchar (audio)
Leer la transcripción

La mayoría de las brechas graves no proceden de ataques ingeniosos contra la criptografía. Proceden de decisiones de diseño sobre la confianza que nadie tomó de forma explícita. Esta lección te da los principios para tomarlas de forma deliberada.

Piensa en cómo se protege una sucursal bancaria. Hay una puerta principal cerrada con llave, y el personal solo tiene llaves de las salas que necesita. La cámara acorazada necesita dos personas para abrirse. Hay cámaras de vigilancia y una alarma que avisa a la policía. Y todo se diseñó así desde el principio. La seguridad del software funciona igual: los arquitectos deciden pronto dónde están las puertas cerradas, quién recibe qué llaves y qué ocurre cuando falla una cerradura.

El vocabulario de partida es la tríada CIA. En la plataforma de reparto de comida, la confidencialidad abarca las direcciones de los clientes, la ubicación en tiempo real de los repartidores y los datos bancarios a los que se pagan las liquidaciones de los restaurantes. La integridad abarca los precios, los reembolsos y las liquidaciones. Un atacante que pone a cero el precio de un plato no ha leído nada secreto, pero ha causado un daño real. La disponibilidad importa sobre todo durante el pico de la noche. Nombra las propiedades que importan para cada activo, porque entran en conflicto. Fallar en cerrado protege los datos, pero cuesta disponibilidad. Una carta pública puede fallar en abierto hacia una copia en caché, mientras que un reembolso debe fallar en cerrado.

En 1975, Jerome Saltzer y Michael Schroeder publicaron ocho principios de diseño que siguen siendo la base del diseño seguro, porque tratan de la estructura, no de la tecnología. Veamos cinco. Economía del mecanismo: mantén la seguridad pequeña y sencilla. Una única biblioteca de autorización, compartida y bien revisada, y no comprobaciones escritas de forma distinta en cada servicio. Valores predeterminados a prueba de fallos: ante la duda, o cuando algo falla, la respuesta es no. Un motor de políticas inalcanzable significa denegar. Mediación completa: comprueba cada acceso, todas las veces. El servicio de pedidos comprueba en cada solicitud que este cliente es el dueño de este pedido. Separación de privilegios: exige dos condiciones independientes, como dos llaves. Un reembolso grande necesita un segundo aprobador. Y mínimo privilegio: solo los privilegios necesarios, durante el tiempo necesario. La cuenta de base de datos del servicio de carta no puede leer los datos de pagos.

La defensa en profundidad superpone controles independientes, para que un solo fallo no deje el activo al descubierto. Estas son las capas en la ruta de los pedidos de la plataforma. La app del cliente está fuera del límite de confianza. Se comunica con la plataforma solo por HTTPS, y no se confía en nada de lo que hay en el dispositivo. Dentro, el borde absorbe las avalanchas de tráfico y aplica límites de tasa. El API gateway comprueba la firma, la caducidad, la audiencia y el alcance de cada token. El servicio de pedidos comprueba que este cliente puede ver este pedido. Así, aunque el gateway tenga un error, un cliente no puede leer el pedido de otro. La base de datos usa una cuenta con mínimo privilegio y está cifrada en reposo, con las copias de seguridad bajo claves distintas. El logging y las alertas en todas las capas deberían detectar lo que consiga pasar. La palabra clave es independientes: dos capas que fallan por la misma razón son una sola capa dibujada dos veces.

Seguro por defecto significa que debilitar la protección requiere un acto deliberado. Si la plantilla de servicio compartida ya incluye la validación de tokens y el logging de seguridad, cada nuevo servicio empieza siendo seguro. Hay quien lo llama un camino pavimentado. La superficie de ataque es todo lo que un atacante puede alcanzar. Eliminar un endpoint sin uso reduce el riesgo de forma más barata que cualquier control añadido. Un límite de confianza es donde cambia la confianza, y ahí es donde deben estar la autenticación, la autorización y la validación de la entrada. Todo lo que está en el dispositivo del cliente está bajo el control del atacante, así que ocultar un botón no es autorización.

Apliquemos los principios. Un primer diseño de los reembolsos de soporte permite a cualquier agente reembolsar cualquier pedido, por cualquier importe. Con el mínimo privilegio, los agentes solo pueden reembolsar pedidos de su propio mercado, y la herramienta nunca puede leer datos de tarjetas. Con valores predeterminados a prueba de fallos, si una comprobación falla o agota el tiempo de espera, el reembolso se rechaza. Ninguna ruta alternativa se salta las comprobaciones. Con la mediación completa, el propio servicio de Pagos comprueba cada reembolso frente al cargo original, en lugar de fiarse de la herramienta. Con la separación de privilegios, los reembolsos de más de cien libras, o un tercer reembolso al mismo cliente en una semana, necesitan la aprobación de un supervisor. Y cada reembolso va a un log de auditoría al que solo se pueden añadir entradas. Ahora, un agente deshonesto, o alguien que se haya hecho con la cuenta de un agente, queda limitado a reembolsos pequeños y registrados en un solo mercado.

Los arquitectos son responsables de las decisiones que afectan a varios equipos y son caras de cambiar: los límites de confianza, el modelo de identidad y de autorización, y qué datos se cifran con qué claves. Los equipos son responsables de aplicarlas correctamente: autorización en cada endpoint y cada objeto, validación de la entrada y dependencias al día. Y el OWASP Top 10, la lista de riesgos de las aplicaciones web del Open Worldwide Application Security Project, es una lista de concienciación, no una norma. Te ayuda a comprobar que no falta nada importante.

La sección completa incluye los ocho principios, la tabla del OWASP Top 10 y el ciclo de vida de desarrollo seguro. A continuación, en la sección ocho punto dos, aprenderás a modelar las amenazas de un diseño. Nos vemos allí.

Lo que necesitas saber

La seguridad como cualidad de la estructura

El Capítulo 2 presentó la seguridad como atributo de calidad: la capacidad del sistema de proteger datos y funciones frente al uso no autorizado mientras sirve a quienes sí están autorizados, expresada mediante escenarios de seguridad comprobables que nombran un atacante, un ataque, un objetivo y una respuesta medible. Este capítulo da el paso siguiente y se pregunta cómo produce la arquitectura esa cualidad. La respuesta es que la mayoría de las propiedades de seguridad las decide la estructura: qué componentes existen, cuáles confían en cuáles, dónde se almacenan y se copian los datos y por qué pocos puntos debe pasar cada solicitud.

Piensa en cómo se producen las brechas reales. Un atacante cambia el número de pedido en una URL y ve la dirección de otro cliente, porque el servicio comprobó que el usuario había iniciado sesión, pero no que el pedido fuera suyo. Un bucket de almacenamiento con exportaciones de la base de datos se puede leer desde internet porque alguien cambió un valor predeterminado hace años. Un servicio interno de informes acepta cualquier solicitud que venga de dentro de la red, así que una sola computadora portátil comprometida llega a todos los registros de clientes. Ninguno de estos casos necesita criptografía ingeniosa para explotarse; cada uno es una decisión de diseño sobre la confianza que nadie tomó de forma explícita. Seguridad desde el diseño significa tomar esas decisiones de forma deliberada, pronto y por escrito, y después hacer que sea difícil violarlas por accidente.

Por eso la arquitectura de seguridad se sitúa junto a las demás inquietudes transversales de la sección 8 de arc42: un modelo de identidad, un modelo de autorización, un concepto de protección de datos y un concepto de logging que todos los equipos siguen. El resto de esta sección establece el vocabulario y los principios sobre los que se apoyan las demás secciones del capítulo.

Confidencialidad, integridad y disponibilidad en un sistema real

La tríada CIA es el punto de partida. En la plataforma de reparto de comida, la confidencialidad abarca los nombres, direcciones, números de teléfono e historiales de pedidos de los clientes, la ubicación en tiempo real y los documentos de identidad de los repartidores, los datos bancarios a los que se pagan las liquidaciones de los restaurantes y los propios secretos de la plataforma. La integridad abarca los precios, los totales del carrito, los reembolsos, los pagos a los repartidores y la carta que ve el cliente: un atacante que puede poner a cero el precio de un plato, o desviar las liquidaciones de un restaurante a su propia cuenta bancaria, no ha leído nada secreto, pero ha causado un daño grave. La disponibilidad importa sobre todo durante el pico de la noche, cuando un ataque de denegación de servicio o una infección de ransomware cuesta ingresos a cada minuto.

ISO/IEC 25010:2023 añade la autenticidad (las identidades se pueden demostrar), la responsabilidad (las acciones se pueden atribuir a quien las realizó), el no repudio (se puede demostrar que las acciones ocurrieron) y la resistencia (el producto sigue funcionando como se espera bajo ataque). Los arquitectos deben nombrar qué propiedades importan para cada activo, porque tiran en direcciones distintas. Fallar en cerrado protege la confidencialidad y la integridad, pero cuesta disponibilidad: si el servicio de autorización está caído, un servicio de pedidos que falla en cerrado rechaza los pedidos. Fallar en abierto preserva la disponibilidad y se juega todo lo demás. La elección correcta varía según la operación: ver una carta pública puede fallar en abierto hacia una copia en caché, mientras que emitir un reembolso debe fallar en cerrado.

Los principios de diseño de Saltzer y Schroeder

En 1975, Jerome Saltzer y Michael Schroeder, a partir de su experiencia con el sistema operativo Multics en el MIT, publicaron ocho principios de diseño para los mecanismos de protección en The Protection of Information in Computer Systems. Medio siglo después siguen siendo la base más citada del diseño seguro, porque tratan de la estructura y no de la tecnología. La tabla reformula cada uno y da un ejemplo actual de la plataforma de reparto de comida.

Los ocho principios de diseño con ejemplos actuales

PrincipioQué pideEjemplo actual
Economía del mecanismoMantener el diseño de seguridad tan pequeño y sencillo como sea posible, para poder inspeccionarlo y probarlo a fondo.Una única biblioteca de autorización o un único motor de políticas, compartido y bien revisado, en lugar de comprobaciones de permisos escritas a mano de forma distinta en cada servicio.
Valores predeterminados a prueba de fallosBasar el acceso en un permiso explícito; ante la duda, o cuando algo falla, la respuesta es no.Un nuevo endpoint de la API está denegado hasta que una política conceda acceso a él; un motor de políticas inalcanzable significa denegar, no permitir.
Mediación completaComprobar cada acceso a cada objeto todas las veces, no solo la primera.El servicio de pedidos comprueba la propiedad en cada GET /orders/{id} en lugar de fiarse de cualquier ID que llegue de un usuario con sesión iniciada; las decisiones en caché caducan pronto.
Diseño abiertoLa seguridad no debe depender de que el diseño sea secreto; solo las claves y las contraseñas deben ser secretas.Algoritmos publicados (AES, TLS 1.3) y protocolos estándar (OAuth 2.0) que siguen siendo seguros aunque los atacantes lean el código fuente.
Separación de privilegiosSiempre que sea posible, exigir dos condiciones independientes (dos llaves) antes de conceder el acceso.Los reembolsos por encima de un umbral necesitan un segundo aprobador; un lanzamiento a producción necesita tanto una revisión de código como un pipeline superado; inicio de sesión multifactor.
Mínimo privilegioDar a cada programa y a cada usuario solo los privilegios necesarios para su tarea, durante el tiempo necesario.La cuenta de base de datos del servicio de carta no puede leer el esquema de pagos; el rol en la nube de un job de compilación puede subir imágenes, pero no eliminar clústeres.
Mínimo mecanismo comúnMinimizar los mecanismos compartidos entre usuarios, porque cada mecanismo compartido es una vía por la que puede filtrarse información.Cachés, colas o pools de conexiones separados por inquilino o por nivel de confianza; una caché compartida con claves mal diseñadas sirve los datos de un usuario a otro.
Aceptabilidad psicológicaLa protección debe ser fácil de usar correctamente, o la gente le buscará atajos.Passkeys en lugar de reglas complejas de contraseñas; valores predeterminados seguros en la plataforma; advertencias poco frecuentes y que, por eso, se leen.

Defensa en profundidad

La defensa en profundidad consiste en superponer varios controles independientes, de modo que el fallo o la elusión de uno no deje el activo al descubierto. La idea procede de la fortificación militar y es práctica habitual tanto en la ingeniería de seguridad física (safety) como en la seguridad. Su valor depende por completo de la palabra independientes: dos capas que fallan por la misma razón, como dos servicios que confían en la misma cabecera falsificada, son una sola capa dibujada dos veces.

El diagrama muestra las capas en la ruta de un pedido en la plataforma de reparto de comida. Si la validación de tokens del gateway tiene un error, la comprobación a nivel de objeto del servicio de pedidos sigue impidiendo que un cliente lea el pedido de otro. Si un atacante roba las instantáneas de disco de la base de datos, el cifrado en reposo con claves guardadas en otro lugar las protege. Si todo eso falla, la monitorización debería detectar el patrón inusual de solicitudes y alguien debería responder. La defensa en profundidad es también la respuesta honesta a la pregunta "¿y si falla este control?", que todo modelo de amenazas plantea.

Defensa en profundidad en la ruta de un pedido: una solicitud de la app del cliente cruza un límite de confianza y pasa por el borde, el API gateway, el servicio de pedidos y la BD de pedidos, cada uno con sus propios controles independientes, y monitorización en todas las capasApp clienteSolo HTTPS (TLS 1.2 o 1.3); passkey, o contraseña más MFAla plataforma no confía en nada del dispositivoBorde: CDN y WAFabsorbe DDoS volumétricos; límites de tasa por cuenta e IPreglas del WAF bloquean ataques conocidosAPI gatewayvalida firma, caducidad, audiencia y alcance del tokenrechaza solicitudes que no cumplen el esquema de la APIServicio Pedidosverifica que el cliente puede ver el pedido (nivel de objeto)valida la entrada; usa consultas parametrizadasBD de pedidoscuenta propia del servicio con mínimo privilegiocifrada en reposo; copias cifradas con claves distintasLímite de confianzaLogging de seguridad, detección y alertas en todas las capas
Cada capa aplica sus propios controles; saltarse un único control no deja los datos al descubierto.

Seguro por defecto y seguro desde el diseño

Un producto es seguro por defecto cuando su configuración de fábrica es la segura, de modo que debilitar la protección requiere un acto deliberado. Muchas brechas grandes se debieron a valores predeterminados inseguros que nadie cambió: bases de datos que escuchaban en internet sin contraseña, consolas de administración con las credenciales de fábrica, buckets de almacenamiento que podían hacerse públicos con un solo ajuste. Los proveedores han reaccionado: desde abril de 2023, por ejemplo, los nuevos buckets de Amazon S3 se crean con Block Public Access activado y las listas de control de acceso desactivadas. En 2023, la Agencia de Ciberseguridad y Seguridad de las Infraestructuras de EE. UU. (CISA) y agencias asociadas de varios países publicaron una guía conjunta que instaba a los fabricantes a hacer productos seguros desde el diseño y por defecto, y en 2024 CISA lanzó un compromiso voluntario, el Secure by Design pledge, para los fabricantes de software.

Para los arquitectos, el principio de seguro por defecto se aplica a la plataforma tanto como a los productos. Si la plantilla de servicio compartida ya incluye la validación de tokens, el logging de seguridad estructurado, un usuario de contenedor que no es root y una cuenta de base de datos con mínimo privilegio, cada nuevo servicio empieza siendo seguro y los equipos tienen que renunciar a ello de forma explícita, lo que se ve en la revisión. Es lo que algunas organizaciones llaman un camino pavimentado (paved road): el camino más fácil es también el seguro.

Muy relacionado está cómo se comporta un sistema cuando algo sale mal. El OWASP Top 10:2025 añadió una categoría para la mala gestión de condiciones excepcionales, que incluye fallar en abierto: un error en una comprobación de permisos que se captura y se ignora, un timeout que por defecto da "permitido", un fallo de análisis que se salta la validación. Los valores predeterminados a prueba de fallos, aplicados en el código, significan que toda ruta de excepción en una decisión de seguridad termina en denegación.

Superficie de ataque y límites de confianza

La superficie de ataque es todo lo que un atacante puede alcanzar e influir: los endpoints públicos y sus parámetros, los puertos abiertos, las subidas de archivos, las colas de mensajes que aceptan entradas de socios, los webhooks, las consolas de administración, las apps para dispositivos móviles que se pueden descompilar, y el código de terceros y las personas en los que confía el sistema. Michael Howard, de Microsoft, popularizó la idea de medirla a principios de la década de 2000; la regla práctica es hacerla lo más pequeña posible y saber exactamente qué hay en ella. Eliminar un endpoint sin uso, cerrar a internet un puerto de administración o desactivar una funcionalidad que nadie usa reduce el riesgo de forma más barata que cualquier control añadido. Cada elección de estilo arquitectónico del Capítulo 6 tiene aquí un costo de seguridad: cada nuevo servicio accesible por red añade endpoints, credenciales y tráfico que proteger.

Un límite de confianza es el punto en el que los datos o el control pasan entre partes con distintos niveles de confianza o de privilegio. El más evidente está entre internet y la plataforma, pero hay muchos más: entre la app del cliente y la API, entre la tableta de un restaurante y el servicio de carta, entre servicios de equipos distintos, entre la plataforma y un proveedor de pagos, entre el código de la aplicación y la base de datos, y entre los usuarios corrientes y los administradores. Los límites de confianza importan porque es ahí donde deben estar las comprobaciones: la autenticación, la autorización, la validación de la entrada y la codificación de la salida se hacen cuando los datos cruzan un límite, nunca suponiendo que el otro lado ya las ha hecho. Dibujar los límites de confianza en un diagrama de flujo de datos es el primer paso del modelado de amenazas.

El OWASP Top 10 como lista de concienciación

El OWASP Top 10 es la lista clasificada de los riesgos de seguridad más críticos de las aplicaciones web que elabora el Open Worldwide Application Security Project a partir de datos de vulnerabilidades aportados y de una encuesta a la comunidad. La edición actual, el OWASP Top 10:2025, es la octava. Frente a la edición de 2021, el control de acceso roto (broken access control) sigue en primer lugar y ahora incluye la falsificación de solicitudes del lado del servidor (SSRF), la configuración de seguridad incorrecta sube al segundo puesto, la antigua categoría de componentes vulnerables y desactualizados se amplía hasta convertirse en fallos de la cadena de suministro de software, y una nueva categoría cubre la mala gestión de condiciones excepcionales.

OWASP Top 10:2025 y las palancas arquitectónicas

CategoríaQué sale malPalanca arquitectónica
A01 Broken Access Control (control de acceso roto)Los usuarios actúan fuera de sus permisos, por ejemplo leyendo el pedido de otro cliente al cambiar un ID; incluye la falsificación de solicitudes del lado del servidor.Un único modelo de autorización, denegar por defecto, comprobaciones a nivel de objeto en cada servicio, acceso de red saliente restringido.
A02 Security Misconfiguration (configuración de seguridad incorrecta)Valores predeterminados inseguros, almacenamiento abierto, páginas de error demasiado detalladas, funcionalidades innecesarias activadas.Infraestructura como código, plantillas reforzadas, comprobaciones automatizadas de políticas en el pipeline.
A03 Software Supply Chain Failures (fallos de la cadena de suministro de software)Dependencias, herramientas de compilación y canales de distribución vulnerables o comprometidos.Inventario de dependencias (SBOM), fijación de versiones (pinning), procedencia firmada; consulta seguridad de la cadena de suministro.
A04 Cryptographic Failures (fallos criptográficos)Datos sensibles sin cifrar, algoritmos débiles, mala gestión de las claves.Clasificación de datos, TLS en todas partes, un KMS y cifrado de sobre.
A05 Injection (inyección)Datos no confiables interpretados como código: SQL, comandos del sistema operativo, cross-site scripting.Consultas parametrizadas, codificación de la salida según el contexto, API seguras del framework.
A06 Insecure Design (diseño inseguro)Controles ausentes o ineficaces que ninguna cantidad de código correcto puede arreglar.Modelado de amenazas, patrones de diseño seguro, casos de abuso junto a las historias de usuario.
A07 Authentication Failures (fallos de autenticación)Relleno de credenciales (credential stuffing), flujos de recuperación débiles, defectos en la gestión de sesiones.Un proveedor de identidad central, MFA o passkeys, límites de tasa en el inicio de sesión.
A08 Software or Data Integrity Failures (fallos de integridad del software o de los datos)Confiar en código, actualizaciones o datos sin verificar su integridad, como actualizaciones sin firmar o una deserialización insegura.Verificación de firmas, comprobaciones de integridad de los datos que cruzan límites.
A09 Security Logging and Alerting Failures (fallos de logging y alertas de seguridad)Los ataques no se registran, o se registran pero nadie los advierte ni actúa ante ellos.Un estándar de logging de seguridad, alertas, runbooks de incidentes.
A10 Mishandling of Exceptional Conditions (mala gestión de condiciones excepcionales)Errores gestionados de forma incoherente, sistemas que fallan en abierto, mensajes de error que revelan detalles.Fallar en cerrado, gestión centralizada de errores, límites de recursos.

Trata la lista como lo que OWASP dice que es: un documento de concienciación, no una norma. Es útil para la formación, para comprobar que un modelo de amenazas no ha pasado por alto toda una clase de problemas y para hablar con las partes interesadas. No es un conjunto completo de requisitos, y "cumplimos el OWASP Top 10" significa poco. Para requisitos verificables, el Application Security Verification Standard (ASVS) de OWASP enumera controles comprobables en tres niveles de rigor, y el OWASP API Security Top 10, independiente del anterior, cubre los riesgos propios de las API, como la autorización a nivel de objeto rota (broken object-level authorisation).

Un ciclo de vida de desarrollo seguro y el shift left

Un ciclo de vida de desarrollo seguro integra actividades de seguridad en cada etapa de la entrega, en lugar de depender de una prueba justo antes del lanzamiento. Microsoft hizo obligatorio su Security Development Lifecycle en 2004, tras el memorando Trustworthy Computing de Bill Gates de 2002, y la idea se extendió por todo el sector. La referencia actual es el Secure Software Development Framework (SSDF) del NIST, SP 800-218, cuya versión 1.1 se publicó en febrero de 2022; el NIST publicó un borrador de revisión (versión 1.2) para comentarios en diciembre de 2025, que no se había aprobado de forma definitiva en el momento de redactar este texto. El SSDF agrupa las prácticas en cuatro familias: preparar a la organización (roles, formación, cadenas de herramientas, requisitos de seguridad), proteger el software (proteger la integridad del código y de la compilación, conservar la procedencia), producir software bien protegido (diseñar para cumplir los requisitos de seguridad, modelar amenazas, revisar y probar, configurar de forma segura por defecto) y responder a las vulnerabilidades (identificarlas, corregirlas y analizar las causas raíz para que la misma clase no se repita). Describe resultados en lugar de prescribir herramientas, lo que lo convierte en una buena lista de comprobación para un arquitecto que evalúa un proceso de entrega.

Hacer shift left (desplazar a la izquierda) es adelantar el trabajo de seguridad: requisitos de seguridad y casos de abuso junto con las historias de usuario, modelado de amenazas en el diseño, análisis estático y detección de secretos en cada commit, comprobación de dependencias en el pipeline. El argumento económico es conocido desde el Capítulo 1: una comprobación de autorización ausente que se detecta en una revisión de diseño cuesta una hora; el mismo defecto detectado tras una brecha cuesta una notificación a los reguladores. Los profesionales discrepan sobre hasta dónde llevarlo. Sus defensores dicen que los desarrolladores que entienden de seguridad escriben menos vulnerabilidades. Sus críticos señalan que limitarse a poner herramientas de seguridad delante de los desarrolladores los inunda de hallazgos de baja calidad y convierte la seguridad en el trabajo a tiempo parcial de todos y en la especialidad de nadie; abogan por valores predeterminados seguros integrados en la plataforma (el camino pavimentado), para que el camino seguro no exija un esfuerzo adicional, y por especialistas en seguridad integrados allí donde el riesgo es mayor. La mayoría de las organizaciones maduras hacen ambas cosas y además siguen probando y monitorizando en producción, por lo que algunas hablan ya de llevar la seguridad a todas partes (shifting security everywhere).

Qué es responsabilidad de los arquitectos y qué de los desarrolladores

El trabajo de seguridad es compartido, y la confusión sobre quién es responsable de qué es en sí misma una vulnerabilidad. El arquitecto es responsable de las decisiones que cruzan los límites entre equipos y son caras de cambiar; los equipos son responsables de aplicarlas correctamente. Un patrón habitual es un pequeño equipo central de seguridad que fija los estándares y gestiona los servicios de seguridad de la plataforma, campeones de seguridad (security champions) en cada equipo de producto que dirigen el modelado de amenazas y las revisiones, y arquitectos que se aseguran de que las decisiones estructurales se tomen y se registren.

Reparto de las responsabilidades de seguridad

InquietudArquitecto (y arquitectura de seguridad)Equipos de desarrollo
Límites de confianza y flujos de datosDefinirlos, documentarlos y dirigir los modelos de amenazas de los cambios significativos.Mantener el código coherente con ellos; plantear los cambios que desplazan un límite.
Identidad y accesoElegir el proveedor de identidad, el modelo de tokens, el modelo de autorización y dónde se decide la política.Aplicar la autorización en cada endpoint y cada objeto; probarla.
Protección de datosClasificar los datos; decidir qué se cifra, dónde y con qué claves; elegir el KMS y el almacén de secretos.Usar las bibliotecas aprobadas; no registrar nunca secretos ni datos personales sin necesidad.
Tratamiento de la entrada y la salidaFijar la estrategia de validación y codificación en los límites; proporcionar bibliotecas compartidas.Validar, codificar y parametrizar en cada handler.
Dependencias y compilaciónFijar los controles del pipeline, las fuentes aprobadas y la política de SBOM.Mantener las dependencias al día; actuar ante las alertas en los plazos acordados.
Detección y respuestaDefinir el logging de seguridad, los eventos de auditoría y los roles ante incidentes.Emitir los eventos acordados; corregir las vulnerabilidades dentro de los niveles de servicio acordados.

Ejemplo práctico

Ejemplo práctico: aplicar los principios a una función de reembolsos para el equipo de soporte

Los agentes de soporte de la plataforma de reparto de comida necesitan reembolsar a los clientes por entregas fallidas desde la herramienta de back office. Un primer diseño permite a cualquier agente llamar al endpoint de reembolsos del servicio de Pagos con cualquier número de pedido y cualquier importe. La tabla muestra cómo lo transforman los principios.

Mínimo privilegioLos agentes reciben un permiso refund:create solo para los pedidos de su propio mercado; la identidad de servicio de la herramienta de back office puede llamar a la API de reembolsos, pero nunca leer datos de tarjetas.
Valores predeterminados a prueba de fallosSi la comprobación de la política o la consulta del pedido fallan o agotan el tiempo de espera, el reembolso se rechaza con un mensaje de "inténtalo de nuevo"; no existe ninguna ruta alternativa que se salte las comprobaciones.
Mediación completaEl propio servicio de Pagos vuelve a comprobar cada reembolso frente al cargo original (el reembolso no puede superar el importe capturado menos los reembolsos anteriores), en lugar de fiarse de la herramienta de back office.
Separación de privilegiosLos reembolsos de más de £100, o un tercer reembolso al mismo cliente en una semana, necesitan la aprobación de un supervisor en la misma herramienta.
Economía del mecanismoUsa el motor de políticas y la biblioteca de auditoría que ya tiene la plataforma; no se escribe ningún código de permisos especial para los reembolsos.
Aceptabilidad psicológicaLa aprobación se solicita con un clic; los motivos se eligen de una lista breve, para que el control no frene a los agentes honrados.
ResponsabilidadCada reembolso se escribe en un log de auditoría de solo anexado (append-only) con el agente, el aprobador, el pedido, el importe y el motivo.
Defensa en profundidadA la herramienta de back office solo se accede mediante inicio de sesión único (SSO) con MFA resistente al phishing, desde dispositivos gestionados.

Ahora, tanto un agente deshonesto como un atacante que se haya hecho con la cuenta de un agente quedan limitados a reembolsos pequeños y registrados en un solo mercado.

El costo es un breve retraso en los reembolsos grandes y algo de trabajo de diseño adicional, lo que resulta mucho más barato que incorporar estos controles a posteriori, una vez descubierto el fraude.

Comprueba lo que has entendido

¿Por qué la defensa en profundidad depende de que las capas sean independientes?

Si dos capas fallan por la misma razón, como que ambas confíen en la misma cabecera falsificada, un solo ataque las derrota a las dos, así que no dan más protección que una sola capa.

¿Qué principio de Saltzer y Schroeder se viola cuando un servicio comprueba que el usuario ha iniciado sesión, pero no que el pedido solicitado le pertenece?

La mediación completa: hay que comprobar la autorización de cada acceso a cada objeto, no solo el hecho de que el usuario se haya autenticado.

Un equipo afirma que su aplicación "cumple el OWASP Top 10". ¿Qué tiene de malo esa afirmación?

El Top 10 es una lista de concienciación de categorías de riesgo, no una norma con requisitos comprobables; la verificación necesita algo como el ASVS de OWASP y un modelo de amenazas del sistema real.

Da un ejemplo de fallar en abierto y explica por qué es peligroso.

Una comprobación de permisos que trata un timeout del motor de políticas como "permitido". Un atacante capaz de ralentizar o averiar el motor de políticas obtiene entonces acceso a todo lo que este protege.

Siguiente · 8.2Modelado de amenazasLas cuatro preguntas de Shostack, los diagramas de flujo de datos con límites de confianza, STRIDE y los árboles de ataque, cómo valorar el riesgo sin falsa precisión y un ejemplo práctico de modelo de amenazas del proceso de pago de una plataforma de reparto de comida.Continuar →

Fuentes y lecturas recomendadas

¿Tienes una pregunta sobre esta sección? ArchitectBot, el asistente de estudio con IA del curso, responde primero a partir del curso.

Pregunta: “¿Qué decisiones de seguridad de nuestro diseño de reparto de comida debería tomar un arquitecto de forma centralizada y cuáles debería tomar cada equipo por su cuenta?”