Llegamos a ustedes gracias a:



Reportajes y análisis

Contenedores y microservicios: Por qué protegerlos es un desafío

[02/07/2018] Los contenedores son una forma pequeña, rápida y fácil de implementar y ejecutar software en diferentes entornos informáticos. Al mantener el entorno de tiempo completo de ejecución de una aplicación, incluidas las bibliotecas, los binarios y los archivos de configuración, la plataforma y la infraestructura se abstraen, lo que permite que la aplicación se ejecute más o menos en cualquier lugar. Los contenedores están disponibles en todos los principales proveedores de la nube, así como en centros de datos locales y nubes híbridas. Además, pueden hacerles ahorrar mucho dinero a las empresas.

Utilizando contenedores, los desarrolladores pueden crear "microservicios", que son esencialmente, componentes pequeños y reutilizables de una aplicación. Debido a que son reutilizables, los microservicios pueden ahorrar tiempo a los desarrolladores y se pueden implementar en diferentes plataformas.

No es sorprendente, entonces, que la adopción de contenedores sea alta. Desafortunadamente, la seguridad todavía está aprendiendo cómo funcionan y cuál es la mejor manera de bloquearlos. Alrededor del 80% de las organizaciones con más de 500 empleados ahora utilizan contenedores, según una encuesta reciente de McAfee a 1.500 profesionales de TI globales. Solo el 66% tiene una estrategia de seguridad para los contenedores. De hecho, los contenedores ahora están vinculados con dispositivos móviles como el mayor desafío de seguridad para las organizaciones, según una encuesta realizada en marzo a 1.200 tomadores de decisiones de TI por CyberEdge.

Existen múltiples razones por las cuales la seguridad es un desafío en el universo del contenedor. Una es la velocidad a la que se implementan los contenedores. Otra es que los contenedores normalmente requieren que las aplicaciones se dividan en servicios más pequeños, lo que resulta en un aumento en el tráfico de datos y en reglas complejas de control de acceso. Finalmente, los contenedores a menudo se ejecutan en entornos basados en la nube, como Amazon, con nuevos tipos de controles de seguridad.

El ecosistema de herramientas de seguridad de contenedores todavía no está maduro, según Ali Golshan, cofundador y CTO en StackRox, un proveedor de seguridad en la nube basado en Mountain View. "Es como los primeros días de las máquinas virtuales y la nube", señala. "Las organizaciones necesitan construir herramientas e infraestructura patentadas para hacerlo funcionar, y necesita una gran cantidad de recursos para implementar. No hay muchas soluciones listas, y no hay suficientes soluciones para cubrir todos los casos de uso".

La vida de un contenedor es corta y mal administrada

El proceso tradicional de desarrollo de software (construir, probar, implementar) rápidamente se vuelve irrelevante en la era de los contenedores. De hecho, los desarrolladores a menudo toman imágenes listas para usar de repositorios públicos y las arrojan a la nube.

"Existe cierto nivel implícito de confianza que puede o no estar justificado", señala Robert Huber, director de seguridad y estrategia de Eastwind Networks. Una imagen de contenedor es un paquete conveniente de código listo para usarse, pero los proveedores pueden no tener el tiempo o el interés en monitorear los problemas de seguridad o publicar notas de la versión, señala.

"Idealmente, tiene un proceso para verificar el control de versiones, pero no he visto ninguna organización que lo haga", anota Huber. "Las empresas deben comprobar continuamente que las últimas versiones de los contenedores son las que se están utilizando, y que todo el código está actualizado y parcheado. Pero en este momento, se trata de un desarrollador y una verificación manual. Creo que las organizaciones se moverán hacia algún proceso que sea más automatizado, pero ahora hay una brecha. Es fuego y lo olvidas. Saca un contenedor, lo ejecuta y termina".

No es mucho mejor cuando los desarrolladores construyen sus propios contenedores. La velocidad de desarrollo significa que no hay tiempo para la garantía de calidad o las pruebas de seguridad. Para cuando alguien se da cuenta de que los contenedores están allí, han hecho su trabajo y se han ido.

"El ciclo de vida podría haber terminado cuando el equipo de seguridad pueda ingresar", anota Bo Lane, jefe de arquitectura de soluciones en Kudelski Security. "Ese es el desafío, y requiere una mentalidad diferente para la seguridad".

Se necesita desarrollar una conciencia de seguridad al principio del proceso de desarrollo, señala, y automatizar tanto como sea posible. Por ejemplo, si los desarrolladores están descargando una imagen desde una fuente externa, debe analizarse en busca de vulnerabilidades, el código no parcheado y otros posibles problemas antes de que el contenedor entre en funcionamiento. "Y una vez que el contenedor se activa, ¿cómo mantienen y monitorean el estado de su seguridad para algo que puede durar muy poco e interactúa con otros componentes?", pregunta.

Tomemos como ejemplo a Skyhigh Networks. El proveedor de seguridad en la nube tiene sus propias ofertas de servicios en la nube, por lo que se enfrenta a todos estos desafíos, afirma Sekhar Sarukkai, cofundador de Skyhigh Networks y vicepresidente de ingeniería de McAfee Cloud, que adquirió Skyhigh a principios de este año.

"Estamos implementando las últimas pilas de arquitectura, tenemos microservicios", indica. "De hecho, podemos implementarla en producción varias veces al día. Tradicionalmente, tendría pruebas de seguridad o pruebas de penetración, eso no funciona en un entorno devops".

Las empresas deben encontrar formas de automatizar muchas de estas funciones, afirma. Eso significa poder identificar todos los contenedores que se están implementando, asegurarse de que todos sus elementos sean seguros, que se implementen en un entorno seguro con controles de aplicaciones o listas blancas de aplicaciones, y luego realizar un seguimiento continuo.

McAfee ahora tiene un producto que hace precisamente eso, anunciado en abril en la conferencia RSA: la plataforma McAfee Cloud Workload Security. "Asegura contenedores Docker y cargas de trabajo en esos contenedores en entornos de nube públicos y privados", señala Sarukkai. Eso incluye AWS, Azure y VMWare. "Es la primera, creo, solución de carga de trabajo en la nube que puede poner en cuarentena cargas de trabajo y contenedores infectados", añade.

El producto también puede reducir los riesgos de configuración al verificar, por ejemplo, los privilegios de administrador innecesarios o los requisitos de cifrado no cumplidos, o incluso los segmentos de AWS configurados para ser legibles públicamente. "También aumenta la velocidad a la que puede remediar", señala. "Puede mejorarlo hasta en un 90%, según los estudios que hemos realizado con nuestros clientes".

Casi todos los problemas de seguridad del contenedor que ha visto hasta ahora, anota el ejecutivo, se deben a que no fueron configurados correctamente. "Creo que ahí es donde reside el mayor riesgo", sentencia.

Una red masiva de servicios

La gestión de la configuración y la gestión de parches son difíciles de hacer, y fáciles de explotar para los atacantes, pero son problemas resueltos. Un desafío más desalentador es el de la complejidad creada al dividir una aplicación en una gran cantidad de servicios más pequeños e interconectados.

Con las aplicaciones tradicionales y monolíticas, hay un solo servicio y solo un par de puertos. "Sabe exactamente dónde van a intentar entrar los malos", señala Antony Edwards, CTO de Testplant.

Eso hace que sea más fácil de asegurar, anota. "Sin embargo, con microservicios, tiene muchos servicios y, a menudo, muchos puertos, por lo que significa que hay muchas más puertas para proteger. Además, cada puerta tiene menos información sobre lo que está sucediendo, por lo que es más difícil identificar si alguien es malo".

Eso pone la carga de garantizar que la seguridad de los servicios individuales sea lo más ajustada posible, afirma, con principios como el menor privilegio, los controles de acceso estrictos, el aislamiento y la auditoría. "Todo esto ha existido desde la década de 1970, ahora solo tenemos que hacerlo", señala Edwards.

Es más fácil decirlo que hacerlo. "Las organizaciones están rompiendo sus monolitos en pedazos cada vez más pequeños, y los flujos de datos se vuelven mucho más complejos dentro de la aplicación, lo que hace difícil decir lo que hace cada microservicio", señala Manish Gupta, cofundador y CEO de ShiftLeft.

Si hay una credencial de acceso codificada en la mezcla, o un token de autenticación que se está filtrando, todo el sistema se vuelve vulnerable. "Este es un gran problema, y la gente no reconoce cuán grande es este problema", afirma Gupta.

El problema solo se está agrandando, añade, a medida que más sistemas críticos se mueven a un modelo de entrega de software como servicio. "Eso significa que está concentrando una gran cantidad de sus datos en sus aplicaciones: Equifax es un gran ejemplo, Uber es un gran ejemplo", anota. "Ahora, esta información muy sensible e importante fluye entre los microservicios, y pocas personas tienen buena visibilidad sobre ella".

Los contenedores con fugas crean vulnerabilidades

Existe otro desafío de seguridad potencial con los contenedores. Se ejecutan en un entorno compartido, que es particularmente preocupante en las nubes públicas, donde los clientes no saben quiénes son sus vecinos. De hecho, las vulnerabilidades en los sistemas de gestión de contenedores de Docker y Kubernetes se han descubierto en los últimos años.

Las empresas que usan contenedores en una nube pública están comenzando a reconocer este problema. "La mayoría de los clientes con los que hablo, se preguntan directamente cuáles son las herramientas disponibles para aislar al host del escape del contenedor y aislar los contenedores uno del otro", comenta Kirsten Newcomer, principal gerente de producto de la plataforma de contenedores de Red Hat, OpenShift.

Más del 70% de los encuestados manejan sus contenedores en Linux, según la encuesta de adopción de contenedores 2017 de Portworx. Las características que los administradores pueden usar para asegurarse de que los contenedores permanezcan aislados incluyen el uso de espacios de nombres de Linux y el uso de Security Enhanced Linux para una capa adicional de controles de acceso obligatorios, anota Newcomer. "Y luego hay algo llamado capacidades Linux, que le permite limitar los diferentes tipos de privilegios dentro de un sistema Linux al que tiene acceso un proceso".

Estos pueden ser conceptos familiares para los expertos en seguridad de Linux, pero pueden ser nuevos para los equipos que despliegan contenedores, o para las organizaciones que recientemente se pasaron desde Windows. Al menos las compañías que ejecutan sus propios entornos de contenedor, ya sea en nubes públicas o privadas, tienen control total sobre estas configuraciones de seguridad. Cuando utilizan contenedores listos para usar, tienen que confiar en que el proveedor de la nube obtenga la infraestructura de seguridad subyacente correcta.

Hasta el momento, ninguna de las vulnerabilidades que permiten que los procesos escapen de contenedores ha resultado en una brecha pública importante. El hecho de que el espacio esté dominado por un puñado de plataformas (Docker y Kubernetes son los grandes nombres aquí) significa que una sola vulnerabilidad puede tener un impacto muy amplio si los atacantes la explotan rápidamente, por lo que vale la pena estar preparado.