Sysdig
Learn Cloud Native

Sign up to receive our newsletter

¿Qué es la seguridad de containers?

La seguridad de containers es el proceso de proteger los containers contra el malware, las filtraciones de datos y otras amenazas en todas las etapas de su ciclo de vida. Desde el instante en que crea una imagen de container hasta que la carga en un registro y la despliega en un entorno de producción, es necesario implementar herramientas y procesos que garanticen que el container está protegido contra posibles amenazas.

En este artículo repasamos todo lo que necesita saber sobre la gestión de la seguridad de containers a lo largo de su ciclo de vida.

Amenazas más comunes a la seguridad de containers

Para entender la seguridad de containers hay que conocer primero las amenazas que pueden afectarlos.

Estas amenazas son demasiado numerosas como para detallarlas aquí, pero las más comunes son las siguientes:

Malware para containers

El malware es un código malicioso que se despliega dentro de un container. Puede infiltrarse en los containers en diferentes etapas de su ciclo de vida. Si su entorno de CI/CD se ve comprometido, un atacante podría insertar malware en los repositorios de código fuente que se usan posteriormente para crear imágenes de containers, por ejemplo. O bien los atacantes podrían entrar en su registro de containers y reemplazar sus imágenes por otras contaminadas que contengan malware. Un tercer tipo de ataque de malware para containers consiste en engañar a los usuarios para que descarguen imágenes de containers maliciosas desde fuentes externas.

En cualquiera de estos casos, si el malware se detecta antes de que se ejecute un container, entrará en su entorno de ejecución, pudiendo ocasionar numerosos problemas de seguridad, como recopilar datos sensibles de una aplicación o afectar a otros containers.

Privilegios inseguros en los containers

Normalmente, los containers deben ejecutarse en modo sin privilegios, lo que significa que no tienen acceso a ningún recurso fuera del entorno que controlan directamente. También deben restringirse las comunicaciones entre containers, salvo que estos tengan una razón para comunicarse entre sí (por ejemplo, si se está ejecutando un container sidecar que recopila los registros de un container de aplicación).

Cuando se permite que los containers se ejecuten con más privilegios de los que estrictamente requieren, se generan riesgos de seguridad. Los privilegios inseguros suelen tienen su causa en configuraciones problemáticas con el orquestador de containers. Por ejemplo, los containers orquestados por Kubernetes pueden tener más privilegios de los que deberían si no se definen correctamente los contextos de seguridad y las políticas de red de Kubernetes.

Containers con datos sensibles

Los containers no están pensados para almacenar datos. Pero, a veces, las organizaciones cometen el error de almacenar información sensible en las imágenes de containers. Por ejemplo, todo el código fuente de Vine quedó expuesto cuando alguien descubrió un registro de containers que Vine pensaba que era privado, pero que resultó ser de acceso público y alojaba imágenes que contenían el código fuente. (A decir verdad, esto ocurrió en una etapa relativamente temprana del desarrollo de los containers cuando aún no se habían establecido del todo las mejores prácticas para la gestión de imágenes de containers, por lo que es comprensible que se produjera un error como este).

Gestión de la seguridad a lo largo del ciclo de vida de los containers

Para evitar este tipo de riesgos, las empresas deben implementar controles de seguridad que protejan los containers en todas las etapas de su ciclo de vida. A continuación ofrecemos una descripción general de cada etapa y de los tipos de amenazas que los equipos deben gestionar en cada una de ellas. 

La pipeline de desarrollo

El ciclo de vida de los containers comienza con la pipeline de desarrollo, que es donde se genera el código que más tarde llegará a los containers.

Como señalamos antes, los atacantes que comprometen las herramientas de desarrollo pueden insertar código malicioso en los repositorios de código fuente y dar lugar a un ataque a la cadena de suministro de software. Si los desarrolladores no detectan el código malicioso antes de utilizarlo para crear imágenes, el código puede fluir por la cadena de suministro y llegar a los entornos de producción.

Implementar controles de acceso a las herramientas de desarrollo y aplicar el principio de mínimo privilegio ayuda a prevenir este riesgo. Lo mismo ocurre con el escaneo del código fuente para detectar malware antes de crearlo y enviarlo.

Imágenes de containers

Una imagen de container es un archivo que contiene el código necesario para ejecutar un container. La imagen no es el container en sí, sino un modelo en el que se basará un container en ejecución. Por lo tanto, si el contenido de una imagen de container incluye malware o datos sensibles, los containers que se creen a partir de esa imagen serán inseguros.

Como ya hemos indicado, es conveniente que escanee su código fuente interno para asegurarse de que el malware no se infiltre en sus imágenes de containers.

Sin embargo, dado que las imágenes de containers suelen incluir recursos importados de fuentes de terceros, no es suficiente con escanear su propio código. También debería analizar toda la imagen del container utilizando un escáner de containers que evalúe el contenido de la imagen y marque cualquier componente que se considere inseguro. El escaneo de imágenes no puede detectar todos los tipos de amenazas (en particular, el malware personalizado que aún no se ha registrado en las bases de datos de vulnerabilidades podría eludir la detección), pero sí le avisará de la mayoría de las amenazas conocidas.

Registros de containers

Una vez creadas las imágenes de los containers, estas suelen almacenarse en un registro de containers desde el que los usuarios pueden descargarlas.

Existen algunas mejores prácticas recomendadas para gestionar la seguridad del registro. En primer lugar, le recomendamos que aplique controles de acceso para garantizar que solo los usuarios autorizados puedan acceder a las imágenes de su registro. Esto ayuda a evitar las filtraciones de datos accidentales que pueden producirse si las imágenes contienen aplicaciones o datos privados.

En segundo lugar, audite regularmente los registros para saber qué imágenes contienen. Elimine también las imágenes antiguas que contengan versiones obsoletas de una aplicación para minimizar su superficie de ataque.

Por último, cuando trabaje con imágenes de containers de registros de terceros, asegúrese de que se trata de una fuente de confianza. La mitad de las imágenes de Docker Hub, el registro público de containers más popular, contienen al menos una vulnerabilidad de seguridad. Además, a veces los atacantes suben deliberadamente imágenes maliciosas con nombres (como mysqlimage o nginxapp) diseñados para atraer a usuarios desprevenidos. Evite obtener imágenes de cualquier registro público no oficial y asegúrese de escanear todas las imágenes aunque confíe en la organización que las creó.

Entorno de ejecución de containers

La etapa final del ciclo de vida del container es el tiempo de ejecución. Esto es cuando los containers se despliegan en un entorno activo utilizando imágenes de containers que se han descargado de un registro.

La seguridad en tiempo de ejecución es uno de los aspectos más complejos de la seguridad de los containers, porque involucra a varios elementos que pueden variar dependiendo del tipo de pila de aplicaciones de containers que utilice. En la mayoría de los casos, sin embargo, la seguridad en tiempo de ejecución se basa en proteger lo siguiente:

  • El tiempo de ejecución del container: Este es el proceso en el servidor que se encarga de ejecutar los containers. Es importante que se asegure de que su software de ejecución esté actualizado y parcheado contra las vulnerabilidades de seguridad conocidas.
  • El orquestador: El orquestador despliega y gestiona los containers. La mayoría de los orquestadores disponen de una serie de herramientas que ayudan a restringir los privilegios de los containers y a minimizar los riesgos de seguridad, pero también es conveniente que utilice herramientas de análisis y monitorización de terceros para detectar problemas de seguridad en el nivel del orquestador.
  • Nodos: Los nodos son los servidores que alojan los containers. Es necesario asegurar el sistema operativo de los nodos, las cuentas de usuario, las configuraciones de red y otros recursos para garantizar que, si se produce un fallo en el nivel de nodo, los atacantes no puedan dañar su entorno de containers.

Seguridad continua de los containers

El ciclo de vida de los containers es un proceso circular y continuo. Una vez que los containers de una determinada aplicación se han desplegado en un entorno de ejecución, el ciclo comienza de nuevo al actualizar la aplicación, lo cual hace que se envíe un nuevo conjunto de containers a la pipeline. Cada uno de los nuevos containers puede contener nuevos riesgos.

Por lo tanto, la seguridad de los containers no es algo que se pueda configurar y olvidarse de ello. A medida que su entorno evoluciona, será preciso que supervise continuamente los riesgos a lo largo del ciclo de vida de los containers y que mantenga actualizadas sus herramientas de monitorización, bases de datos de vulnerabilidades y configuraciones para asegurarse de seguir aplicando las mejores prácticas de seguridad.