EL día de hoy termine de ver una sesión de Sam Newman llamada “Microservices Security”.

Fue una sesión de poco más de tres horas y durante la misma tome algunas notas que quiero compartir por si te son de utilidad como introducción a este tema y sobretodo compartir los recursos complementarios mencionados durante la sesión.

Sam Newman destacó que los sistemas basados en microservicios, al ser formados por múltiples servicios, presentan una superficie de ataque mayor, lo que significa que hay más elementos que proteger. 

Sam inicio comentándonos tres principios esenciales para la seguridad de los microservicios: 

1. Principio de Menor Privilegio: Este principio sostiene que cada participante solo debe tener acceso a los recursos que necesita, limitando así el daño potencial en caso de una brecha. 

2. Defensa en Profundidad: Este enfoque de seguridad implica proteger el sistema en diferentes niveles para garantizar su integridad. 

3. Automatización: La automatización permite un comportamiento reproducible y consistente, lo que facilita la recuperación después de un incidente de seguridad. Newman recomendó el libro «Infrastructure as Code » de Kief Morris para complementar el tema de la automatización.

Además, Sam mencionó el marco de trabajo NIST Five Functions, que ofrece una guía sobre cómo manejar la seguridad en los sistemas de microservicios: 

1. Identificar: Reconocer qué tenemos y cuáles son los riesgos asociados. 

2. Proteger: Asegurar que nuestros recursos están debidamente protegidos. 

3. Detectar: Saber cuándo alguien está intentando comprometer nuestros recursos. 

4. Responder: Conocer qué hacer cuando ocurre un incidente de seguridad. 

5. Recuperar: Tener un plan de respaldo y saber cómo implementarlo. 

También nos recomienda el uso del Threat Modelling como una práctica esencial para la seguridad en los microservicios. Al entender las amenazas potenciales, se puede diseñar y construir sistemas más seguros desde el principio, en lugar de tratar de solucionar problemas de seguridad después de que el sistema ya esté en funcionamiento.

El Threat Modelling es un proceso que se utiliza para identificar y gestionar posibles amenazas a la seguridad en un sistema, generalmente durante la fase de diseño. El objetivo es minimizar el riesgo de seguridad mediante una cuidadosa evaluación y planificación.

Sam abordó el concepto de Zero Trust, que implica un cambio de mentalidad hacia la seguridad: asumir que todo el ambiente puede estar comprometido. La decisión de implementar Zero Trust depende del resultado del Threat Modelling. 

En cuanto a la protección de los microservicios, mencionó varios aspectos: 

1. Patching: Todas las capas de nuestros microservicios requieren actualizaciones de seguridad (hardware, sistemas operativos, máquinas virtuales, runtime de contenedores, orquestador de contenedores, sistemas operativos de contenedores, aplicaciones). 

2. Datos en Tránsito: Debido a la cantidad de información que circula entre los microservicios, es crucial protegerla.

Se deben considerar 4 aspectos:

  1. Visibilidad de la información que queremos proteger: ¿Un atacante puede observar la información?
  2. Conocer cómo se manipula esa información: ¿Un atacante podría modificar la información?
  3. Cómo restringimos el acceso a la información: ¿Un atacante puede acceder a los puntos de acceso para obtener directamente lo que quiere?
  4. Suplantación de identidad: ¿Un atacante podría hacerse pasar por un punto de acceso?

Sam hizo énfasis en el uso de HTTPs como uno de los principales mecanismos para proteger los datos en tránsito. Además, mencionó el uso de Mutual TLS, donde tanto el cliente como el servidor usan certificados para validar sus identidades.

Para la autenticación y autorización, recomendó utilizar soluciones existentes en lugar de crear las propias. Newman destacó que, salvo en raras circunstancias, la autenticación inicial del usuario se realiza en un servicio dedicado y no en los microservicios mismos. 

Se hablo del problema del «Confused Deputy«, donde un servicio actúa en nombre de un usuario sin verificar adecuadamente los privilegios. Este problema es un ejemplo de por qué es crucial gestionar correctamente la autorización en los sistemas de microservicios. 

Imaginemos un sistema de almacenamiento de archivos en línea. Tienes tu propio espacio para guardar tus archivos, y no puedes ver los archivos de otra persona. Pero supongamos que encontramos una forma de engañar al sistema para que piense que somos otra persona. Le decimos al sistema que queremos ver nuestros archivos, pero en realidad accedemos a los archivos de la otra persona. El sistema no verifica quienes somos realmente, simplemente asume que somos quienes decimos ser. Como resultado, obtenemos acceso a los archivos de otra persona sin su permiso. Eso es esencialmente el problema del «Confused Deputy».

Sobre otro de los temas, se discutieron varias estrategias para la autorización:  

Autorización Centralizada: Cada servicio pregunta a un servicio centralizado si un usuario tiene permitido realizar cierta acción. Sin embargo, esta estrategia puede agregar latencia y más tráfico en la red, y requiere que el servicio central siempre esté en línea. 

Loopback Authorization: Centraliza la autorización en el gateway que sirve como capa de entrada a nuestros servicios, reduciendo el tráfico de red pero potencialmente sobrecargando un componente crítico del sistema. 

Newman no recomendó ninguna de esas dos estrategias en general, salvo en escenarios muy específicos, y sugirió en la mayoría de los casos el uso de JWT (JSON Web Tokens), un token que indica qué permisos tiene un usuario. Este token se envía en cada llamada, permitiendo a cada servicio validar y decidir qué operaciones están autorizadas. Sin embargo, se deben considerar ciertos problemas con JWT, como la necesidad de que cada servicio valide el token, la duración del token y el tamaño del token. 

Se mencionó también la existencia de Open Policy Agent para la autorización, una herramienta de código abierto que unifica y centraliza la autorización a través de diferentes sistemas. 

3. Datos en reposo: Sam no entro a detalle en este tema, solo comento que es un tema adicional para tomar en cuenta.

Finalmente, Sam hizo un resumen de la charla destacando que la seguridad de las aplicaciones es multifacética y va más allá de solousar HTTPS. Los microservicios ofrecen opciones para asegurar nuestros sistemas, pero también presentan desafíos. Elegir la tecnología adecuada puede ser de gran ayuda si se hace correctamente. 

Newman recomendó varias opciones de lectura para profundizar en estos temas.

  1. «DBIR – Data Breach Investigation Report» de Verizon
  2. «Agile Application Security: Enabling Security in a Continuous Delivery Pipeline» de Laura Bell, Michael Brunton-Spall, Rich Smith y Jim Bird
  3. «Threat Modeling: A Practical Guide for Development Teams» de Izar Tarandach y Matthew Coles
  4. «Building Microservices» de Sam Newman (específicamente el capítulo 11)
  5. Microsoft Operational Security practices
  6. OWASP

Humberto Jaimes
Humberto Jaimes

Me gusta ayudar a quienes están comenzando con el desarrollo móvil con Xamarin dando sesiones en línea, presenciales en universidades y también ayudo a las compañías que quieren capacitar a su equipo o en la creación de proyectos.