¿Qué es la seguridad de los contenedores?
Es el proceso para proteger las aplicaciones organizadas en contenedores del malware y otros puntos vulnerables. Implica definir y seguir las prácticas de diseño, implementación y tiempo de ejecución que protejan un contenedor de Linux, desde las aplicaciones que admite hasta la infraestructura en la que se basa.
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
Descubre 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 durante el ciclo de desarrollo. Los puntos vulnerables pueden detectarse y solucionarse temprano y rápidamente en lugar de ignorarse 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 buscar 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 esenciales
- La política como código que integra controles de seguridad directamente en el canal de integración y distribución continuas (CI/CD)
- Firmas y verificaciones que demuestran la autenticidad y establecen confianza al comprobar 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 te permite crear imágenes compatibles con OCI y Docker desde cero, con o sin un punto de partida de imagen de contenedor actual.
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 las cargas de trabajo en diferentes proveedores. La solución de seguridad de contenedores ideal debería admitir todas las arquitecturas, ya sea que tu 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.
La 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 debes hacer es hallar fuentes confiables para las imágenes base. Comprueba que la imagen provenga de una empresa o grupo open source conocidos, que esté alojada en un registro confiable, y que el código fuente de todos sus elementos esté disponible.
Sin embargo, incluso si utilizas imágenes confiables, cuando se agregan aplicaciones y se modifica la configuración, se introducen variables nuevas. Al incorporar contenido externo para crear tus aplicaciones, recuerda gestionar los puntos vulnerables de manera preventiva:
- Utiliza una herramienta para analizar las imágenes, ya sea integrada o separada del registro, y lleva a cabo este proceso con frecuencia. Busca una herramienta que se base en lenguajes, paquetes y capas de imágenes específicos.
- Identifica imágenes de contenedores con modificaciones que infrinjan las políticas o las prácticas recomendadas documentadas, conocidas como configuraciones incorrectas de contenedores, para reducir la probabilidad y el impacto de posibles riesgos.
Anticípate a los puntos vulnerables y corrígelos
Los contenedores se utilizan bastante porque permiten diseñar, empaquetar y promover fácilmente aplicaciones o servicios, además de 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. Ayudan a implementar un nivel de seguridad más detallado en las cargas de trabajo, pero también incorporan nuevos elementos de infraestructura y superficies de ataque desconocidas. La solución de seguridad adecuada debe proteger la infraestructura del clúster y el organizador, así como las aplicaciones en contenedores que ejecuta.
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 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 tu infraestructura, podrás garantizar que tus contenedores sean confiables y tengan capacidad de ajuste.
Cuando recopiles las imágenes de contenedores, hazte 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?
- ¿El tiempo de ejecución y el sistema operativo están actualizados?
- ¿Qué tan rápido se actualizará el contenedor y con qué frecuencia lo hará?
- ¿Se identificaron los riesgos de seguridad? ¿Cómo se realizará un seguimiento de ellos?
Gestión del acceso
Una vez que hayas obtenido las imágenes, el próximo paso es gestionar el acceso a todas las imágenes de contenedores que utiliza tu equipo y la promoción de ellas. Esto implica proteger no solo las imágenes que descargas, sino también las que diseñas. Al usar un registro privado, podrás controlar el acceso con asignaciones basadas en funciones y, a la vez, gestionar el contenido con la asignación de metadatos relacionados con el contenedor. Estos metadatos te ayudarán a identificar y realizar un seguimiento de los puntos vulnerables conocidos. Un registro de contenedores privado también te 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 decidas la forma de gestionar el acceso, hazte una serie de preguntas:
- ¿Cuáles son los controles de acceso basado en funciones que puedes 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 te permitan hacer un seguimiento de los puntos vulnerables conocidos?
- ¿Puedes 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 automatización de la implementación
La última etapa del canal es la implementación. Una vez que terminas de diseñar las imágenes, debes gestionarlas según los estándares del sector, como los que establece el Center for Internet Security (CIS) y el Instituto Nacional de Estándares y Tecnología (NIST) de Estados Unidos. Es fundamental entender de qué forma puedes automatizar las políticas para identificar los diseños que tengan problemas de seguridad, especialmente a medida que se detectan puntos vulnerables nuevos. 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 tus contenedores.
Siempre es más conveniente volver a diseñar los contenedores que ejecutar parches en ellos. Por eso, debes 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 integres las pruebas de seguridad y la implementación automatizada, hazte una serie de preguntas:
- ¿Alguno de tus contenedores tiene puntos vulnerables conocidos que debas corregir antes de implementarlos en un entorno de producción?
- ¿La configuración de tus implementaciones es correcta? ¿Hay algún contenedor con demasiados privilegios innecesarios? ¿Utilizas un sistema de archivos de superusuario de solo lectura?
- ¿Cuál es tu estrategia de cumplimiento en relación con los indicadores de CIS y NIST SP 800-190?
- ¿Aíslas cargas de trabajo que consideras confidenciales con las funciones integradas como las políticas de redes y los espacios de nombres?
- ¿Utilizas funciones de fortalecimiento y seguridad integradas como SELinux, AppArmor y perfiles de seguridad de 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; incluye la ejecución de 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 comporten 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 otro aspecto que debes tener en cuenta 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 aplicas las políticas de confianza cero, te puedes asegurar de que ningún pod comprometido afecte 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), el cual notifica el incidente al dueño de la aplicación y brinda información detallada sobre cada implementación que se debe corregir y los pasos que deben seguirse. 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, debes optar por uno que ofrezca el mayor aislamiento posible para los contenedores. Este es un aspecto importante de la protección de tu 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.
El SO host debe aislarse de los contenedores para evitar que el que esté afectado comprometa al SO y a los demás contenedores. Para que tu plataforma de contenedores sea resistente, debes utilizar espacios de nombres de red que aíslen las aplicaciones y los entornos, y conectar el almacenamiento por medio de montajes seguros. No configures el tiempo de ejecución del contenedor para que se comparta el espacio de nombres de la red host, de IPC o de UPC. Elige un sistema operativo host optimizado para contenedores que ya esté reforzado y utiliza 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 ligero de acceso a directorios (LDAP), controles de acceso en los extremos y límites de frecuencia.
Cuando decidas cómo proteger tu infraestructura de contenedores, hazte una serie de preguntas:
- ¿Qué contenedores necesitan acceso a otros? ¿Cómo hacen para detectarse unos a otros?
- ¿Cómo controlarás el acceso a los recursos compartidos (p. ej., la red y el almacenamiento) y su gestión?
- ¿Cómo supervisarás el estado de los contenedores?
- ¿Cómo ajustarás automáticamente la capacidad de las aplicaciones para satisfacer la demanda?
- ¿Cómo gestionarás las actualizaciones del host? ¿Todos los contenedores requerirán actualizaciones al mismo tiempo?
Podemos ayudarte
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 te permite acceder 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 entornos 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 reducir las amenazas y aplicar políticas de seguridad que minimicen 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 a través de 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 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&