Resumen
La seguridad de los contenedores implica definir y obedecer prácticas de diseño, implementación y tiempo de ejecución que protejan un contenedor de Linux, desde las aplicaciones que admiten hasta la infraestructura en la que se basan.
A medida que las empresas adoptan patrones de diseño de microservicios y tecnologías de contenedores, como Docker y Kubernetes, los equipos de seguridad deben desarrollar soluciones de seguridad que faciliten estos cambios de infraestructura. La seguridad de los contenedores debe estar integrada y ser permanente, además de respaldar la estrategia de seguridad general de la empresa.
El organizador de contenedores (Kubernetes) tiene una función esencial en la seguridad de los contenedores y ofrece acceso a mucha información contextual para tener una mejor supervisión y cumplimiento normativo, creación de perfiles de riesgo basados en el contexto, redes y detección de los tiempos de ejecución. La seguridad eficiente de los contenedores se basa en los elementos de Kubernetes, como las implementaciones, los pods, las políticas de las redes y más. Por ejemplo, las políticas de las redes de Kubernetes son funciones integradas que deberían utilizarse para controlar la comunicación entre los pods y disminuir la gravedad de un ataque.
En general, la seguridad permanente de los contenedores de la empresa consiste en tres tareas:
- Proteger el canal de los contenedores y la aplicación
- Proteger la infraestructura y los entornos de implementación de los contenedores
- Proteger las cargas de trabajo organizadas en contenedores en los tiempos de ejecución
Descubra la manera en que las empresas implementan iniciativas de seguridad de contenedores
La seguridad de los contenedores es la seguridad de la cadena de suministro del software
En el método tradicional de desarrollo de software, una revisión de la seguridad puede ser una serie de pruebas al final del desarrollo. Sin embargo, debido a los flujos de trabajo modernos de desarrollo en la nube, la superficie de ataque es mucho más grande y la seguridad se vuelve un problema más complejo. En los entornos de la nube, donde los contenedores son el formato estándar de distribución de aplicaciones, el código se actualiza con frecuencia y se incorpora desde varios repositorios. Los errores humanos, como los de configuración, pueden provocar que se acceda sin autorización a muchos puntos en los ciclos de desarrollo e implementación, por lo que pueden generarse puntos vulnerables de seguridad en casi cualquier parte. Es por esto que la seguridad debe ser un proceso constante.
Así como se gestiona la implementación de los contenedores con la automatización (con el uso de herramientas de organización en contenedores como Kubernetes), también se debe automatizar la seguridad. Con los principios de DevSecOps (un concepto que se creó para hacer hincapié en la seguridad de DevOps), los códigos se pueden examinar y revisar constantemente en el ciclo de desarrollo. Los puntos vulnerables pueden detectarse y solucionarse temprano y rápidamente en lugar de restarles importancia hasta que surgen como sorpresas que demandan mucho tiempo. Como los contenedores no se pueden modificar, su seguridad implica aplicar códigos de parches en la etapa de diseño, en lugar de hacerlo mientras se ejecutan, por lo que los puntos vulnerables no vuelven a surgir cuando los contenedores se eliminan y diseñan nuevamente.
Es fundamental analizar las imágenes de contenedores para encontrar malware y otros puntos vulnerables, por lo que esta tarea debería ser una de las varias capas de la seguridad. Las empresas necesitan tener en cuenta la seguridad de toda la cadena de suministro del software, es decir, todas las etapas de desarrollo e implementación del software organizado en contenedores, que incluyen las dependencias y los entornos de tiempos de ejecución.
Estas son algunas estrategias específicas para el desarrollo en contenedores que contemplan la seguridad de la cadena de suministro:
- El contenido confiable y un repositorio de nivel empresarial que distribuye imágenes reforzadas anteriormente con controles avanzados de seguridad y acceso
- Un enfoque de confianza cero que asigna los menores niveles de acceso posibles para los recursos fundamentales
- La política como código que integra controles de seguridad directamente en el canal de CI/CD
- Firmas y verificaciones que demuestran la autenticidad y establecen confianza comprobando que no se hayan alterado las imágenes de los contenedores
- Prácticas de GitOps que permiten gestionar las configuraciones de la seguridad de los contenedores y las aplicaciones
Primeros pasos para la incorporación de la seguridad al canal de los contenedores
Recopilación de imágenes
Los contenedores se crean a partir de capas de archivos que se denominan imágenes de contenedores.
Una herramienta como Buildah le permite diseñar imágenes compatibles con OCI y Docker desde cero, con un punto de partida de imagen de contenedor que ya posee o sin él.
Las imágenes de contenedores son el formato de distribución de aplicaciones estándar en los entornos desarrollados en la nube, pero incluso las empresas de nube combinan cargas de trabajo entre proveedores de nube. La solución de seguridad de contenedores ideal debería admitir todas las arquitecturas, ya sea que su infraestructura se ejecute en un hardware privado, un centro de datos compartido o una nube pública como Amazon Web Services (AWS), Microsoft Azure o Google Cloud Platform.
Una imagen de base, o de referencia, es una de las más importantes para la seguridad, ya que funciona como punto de partida para crear otras imágenes derivadas. Para comenzar a proteger los contenedores, lo primero que debe hacer es hallar fuentes confiables para las imágenes base. Confirme que la imagen proviene de una empresa o un grupo open source conocidos y está alojada en un registro confiable, y que el código fuente de todos los elementos de la imagen está disponible.
Sin embargo, se introducen variables nuevas incluso cuando se utilizan imágenes confiables, se agregan aplicaciones y se modifica la configuración. Al incorporar contenido externo para diseñar sus aplicaciones, recuerde gestionar los puntos vulnerables de manera preventiva:
- Utilice una herramienta para analizar las imágenes, ya sea que se encuentre integrada o separada del registro, y llevar a cabo este proceso con frecuencia. Busque una herramienta que se base en lenguajes, paquetes y capas de imágenes específicas.
- Identifique imágenes de contenedores con modificaciones que infrinjan las políticas o las prácticas recomendadas que están documentadas, conocidas como errores de configuraciones de contenedores, para reducir la probabilidad y el impacto de posibles riesgos.
Anticipación a los puntos vulnerables y corrección
Los contenedores son muy utilizados porque permiten diseñar, empaquetar y promover fácilmente aplicaciones o servicios, incluidas todas sus dependencias, durante todo el ciclo de vida, en distintos flujos de trabajo y con diferentes objetivos de implementación. Sin embargo, su seguridad presenta algunos desafíos. Los contenedores pueden ayudarlo a implementar un nivel de seguridad más detallado en términos de carga de trabajo, pero también incorporan nuevos elementos de infraestructura y superficies de ataque desconocidas. La solución de seguridad de contenedores adecuada debe proteger la infraestructura del clúster y el organizador, así como las aplicaciones en contenedores que ejecutan.
Las listas de verificación y las políticas de seguridad estáticas no se adaptan a los contenedores de la empresa:
- La cadena de suministro necesita incorporar más servicios relacionados con estas políticas.
- Los equipos de seguridad deben hallar un equilibrio entre las necesidades relacionadas con las redes y con el control de los entornos en contenedores.
- Las herramientas que se utilizan durante las etapas de diseño, mantenimiento y servicio deben tener diferentes políticas de permisos.
Un programa de seguridad de contenedores eficaz tiene como fin corregir los puntos vulnerables de inmediato y reducir la superficie de ataque antes de que se implementen las imágenes, y, al mismo tiempo, retiene la información sobre la procedencia. Al incorporar la seguridad al canal de los contenedores y proteger su infraestructura, podrá garantizar que sus contenedores sean confiables y puedan ampliarse.
Cuando recopile las imágenes de contenedores, hágase una serie de preguntas:
- ¿Las imágenes de contenedores están firmadas y provienen de fuentes confiables?
- ¿De dónde vienen las imágenes y cómo puedo volver a diseñarlas?
- ¿Cuál es la fecha del último análisis de una imagen determinada?
- ¿Están actualizados el tiempo de ejecución y el sistema operativo?
- ¿Qué tan rápido se actualizará el contenedor y con qué frecuencia lo hará?
- ¿Se han identificado los riesgos de seguridad? ¿De qué forma se realizará un seguimiento de ellos?
Gestión del acceso
Una vez que haya obtenido las imágenes, el próximo paso es gestionar el acceso a todas las imágenes de contenedores que utiliza su equipo y la promoción de ellas. Esto implica proteger no solo las imágenes que descarga, sino también las que diseña. Al usar un registro privado, podrá controlar el acceso con asignaciones basadas en funciones y, a la vez, gestionar el contenido con la asignación de metadatos relacionados al contenedor. Estos metadatos lo ayudarán a identificar y realizar un seguimiento de los puntos vulnerables conocidos. Un registro de contenedores privado también le permite automatizar y asignar políticas para las imágenes almacenadas, lo cual reduce los errores humanos que podrían generar puntos vulnerables en el entorno del contenedor. Un registro que cuenta con funciones de seguridad de nivel empresarial también tiene herramientas de análisis de puntos vulnerables integradas.
Cuando decida la forma de gestionar el acceso, hágase una serie de preguntas:
- ¿Qué controles de acceso basado en funciones puedo usar para gestionar las imágenes de contenedores?
- ¿Es posible etiquetar las imágenes para facilitar su clasificación? ¿Se pueden etiquetar las imágenes para indicar que están aprobadas solo para los entornos de desarrollo, luego para los de prueba y finalmente para los de producción?
- ¿El registro proporciona metadatos visibles que me permitan hacer un seguimiento de los puntos vulnerables conocidos?
- ¿Puedo usar el registro para asignar y automatizar las políticas (p. ej., verificar firmas, escanear códigos de aplicaciones, etc.)?
Integración de las pruebas de seguridad y la automatización de la implementación
La última etapa del proceso es la implementación. Una vez que termina de diseñar las imágenes, debe gestionarlas según los estándares del sector, como los que establece el Centro de Seguridad de Internet (CIS) y el Instituto Nacional de Estándares y Tecnología (NIST) de Estados Unidos. Es fundamental entender de qué forma puede automatizar las políticas para identificar los diseños que tengan problemas de seguridad, especialmente a medida que se detectan nuevos puntos vulnerables en este aspecto. Si bien el análisis de los puntos vulnerables sigue siendo importante, es solo una parte de un conjunto más amplio de iniciativas de seguridad que se utilizan para proteger los entornos de sus contenedores.
Siempre es más conveniente volver a diseñar los contenedores que ejecutar parches en ellos. Por eso, debe tener en cuenta las políticas que activan el rediseño automático al integrar las pruebas de seguridad. La primera parte de esta etapa consiste en ejecutar las herramientas de análisis de los elementos que pueden realizar un seguimiento de los problemas e identificarlos. La segunda parte implica determinar las herramientas necesarias para la implementación automatizada y basada en políticas.
Cuando integre las pruebas de seguridad y la implementación automatizada, hágase una serie de preguntas:
- ¿Alguno de mis contenedores tiene puntos vulnerables conocidos que deba corregir antes de implementarlos en un entorno de producción?
- ¿La configuración de mis implementaciones es correcta? ¿Hay algún contenedor con demasiados privilegios innecesarios? ¿Utilizo un sistema de archivos de superusuario de solo lectura?
- ¿Cuál es mi estrategia de cumplimiento con los indicadores de CIS y NIST SP 800-190?
- ¿Aíslo carga de trabajo aislada que considero confidencial con las funciones integradas como las políticas de redes y los espacios para los nombres?
- ¿Utilizo funciones de fortalecimiento y seguridad integradas como SELinux, AppArmor y perfiles de informática segura (seccomp)?
Protección de las cargas de trabajo organizadas en contenedores en los tiempos de ejecución
La seguridad de los contenedores continúa después de las pruebas y la implementación y se extiende cuando se ejecutan las aplicaciones organizadas en ellos. Allí se vuelven más relevantes los aspectos como la detección de amenazas, la seguridad de la red y la respuesta ante incidentes.
En el tiempo de ejecución, las aplicaciones pueden enfrentar amenazas reales impredecibles que se aprovechan de los puntos vulnerables y los errores de configuración que se pasaron por alto en la etapa de diseño. La seguridad de los tiempos de ejecución debe incluir la búsqueda de aplicaciones que se comportan de manera impredecible. La detección de anomalías en este período permite identificar el aumento de privilegios, la criptominería, los flujos de redes inesperados, las fugas en los contenedores y otros comportamientos inseguros.
La segmentación de las redes es otra preocupación para disminuir la superficie de ataque. En Kubernetes, las políticas de redes predeterminadas permiten que los pods se comuniquen con otros dentro de un clúster. Cuando se aplican las políticas de confianza cero, ningún pod comprometido afectará a todos los que se encuentran en ese clúster.
Por último, las estrategias de respuestas a los incidentes permiten que los equipos respondan de manera adecuada a los eventos. Las respuestas pueden incluir el envío de eventos a un sistema de gestión de la información y los eventos de seguridad (SIEM), que le notifica el incidente al dueño y le brinda información detallada y pasos a tomar para cada implementación que se debe corregir. También pueden incluir la eliminación y el reinicio de los pods de forma automática. Además, deben seguir la práctica de diseñar e implementar nuevamente los contenedores problemáticos en lugar de aplicar parches a un contenedor que se está ejecutando.
Protección de la infraestructura
Otra capa de la seguridad de los contenedores es el aislamiento que aporta el sistema operativo (SO) host o el nodo del contenedor. Por eso, debe optar por uno que ofrezca el mayor aislamiento posible. Este es un aspecto importante de la protección de su entorno de implementaciones de contenedores. El SO host en un entorno de Kubernetes organizado en contenedores se comparte con otros contenedores y se gestiona con un tiempo de ejecución, el cual interactúa con Kubernetes para crear y gestionar contenedores o pods de contenedores.
El SO host debe aislarse de los contenedores para evitar que el que esté afectado lo comprometa a él y a los otros contenedores. Para que su plataforma de contenedores sea resistente, debe utilizar espacios de nombres de red que aíslen a las aplicaciones y los entornos y conectar el almacenamiento por medio de montajes seguros. No configure el tiempo de ejecución del contenedor para que se comparta el espacio de nombres de la red host, de IPC o de UPC. Elija un sistema operativo host optimizado para contenedores que ya esté reforzado y utilice el análisis de puntos vulnerables host.
Las soluciones de gestión de las API deben incluir funciones de autenticación y autorización, integración con el protocolo LDAP, controles de acceso en los extremos y límites de frecuencia.
Cuando decida la forma de proteger su infraestructura de contenedores, hágase una serie de preguntas:
- ¿Qué contenedores necesitan poder acceder a otros? ¿Cómo harán para detectarse unos a otros?
- ¿Cómo controlaré el acceso a los recursos compartidos (p. ej., la red y el almacenamiento) y su gestión?
- ¿Cómo supervisaré el estado de los contenedores?
- ¿Cómo ajustaré automáticamente la capacidad de las aplicaciones para satisfacer la demanda?
- ¿Cómo gestionaré las actualizaciones del host? ¿Todos los contenedores requerirán actualizaciones al mismo tiempo?
Podemos ayudarlo
Red Hat® OpenShift® incluye Red Hat Enterprise Linux®. Automatiza el ciclo de vida de las aplicaciones de contenedores, integra la seguridad en el canal de los contenedores y permite la transición de la estrategia de DevOps a una de DevSecOps. Nuestro catálogo de contenedores le otorga acceso a una gran cantidad de imágenes certificadas, tiempos de ejecución de lenguajes, bases de datos y middleware que pueden ejecutarse en los mismos lugares que Red Hat Enterprise Linux. Las imágenes de Red Hat siempre están firmadas y verificadas, lo cual garantiza su procedencia e integridad.
Controlamos nuestras imágenes de contenedores para detectar puntos vulnerables identificados recientemente (lo cual incluye un índice de estado público que se actualiza de forma permanente) y lanzamos actualizaciones de seguridad y nuevos diseños de contenedores que se envían a nuestro registro público. Red Hat Advanced Cluster Security for Kubernetes se integra a las herramientas de seguridad y DevOps para eliminar las amenazas y aplicar políticas de seguridad que disminuyen el riesgo operativo para las aplicaciones.
Red Hat Service Interconnect permite que los contenedores accedan unos a otros y se comuniquen entre sí, al mismo tiempo que se disminuye el riesgo para la seguridad de la empresa y los datos de los usuarios.
Los partners de seguridad de Red Hat pueden ampliar y mejorar las funciones de los contenedores en este aspecto con integraciones certificadas. Red Hat OpenShift cuenta con seguridad integrada a la plataforma, la cual complementa las soluciones de estos partners para proteger las aplicaciones y los contenedores durante el ciclo de vida de DevOps.
También ofrece otras características útiles:
- Organización y gestión de contenedores a escala web
- Consola web completa con funciones de colaboración para distintos usuarios
- Interfaces de CLI e IDE
- Integración con CI
- Automatización del diseño y herramienta source-to-image
- Automatización de la implementación
- Compatibilidad con volúmenes de almacenamiento remoto
- Instalación y administración simplificadas
- Compatibilidad con una amplia variedad de servicios, marcos y lenguajes de programación