Seguridad informática empresas

Consejos de ciberseguridad en el uso de Dockers (microservicios)

11 enero 2024

Docker es una tecnología utilizada por la mayoría de las compañías del mundo. En este post explicamos cuáles serían las mejores recomendaciones de ciberseguridad para proteger su uso, ya que en numerosas ocasiones no se le da la suficiente importancia a securizar nuestros contenedores.

Como pequeña introducción, Docker es un proyecto de código abierto que automatiza el despliegue de aplicaciones dentro de contenedores de software, proporcionando una capa adicional de abstracción y automatización de virtualización de aplicaciones en múltiples sistemas operativos.

Centrándonos en lo que nos compete en este post, desde Ciberso queremos realizar una serie de recomendaciones que se deberían tener en cuenta a la hora de comenzar a trabajar con esta tecnología.

  • Uso de imágenes mínimas.
  • Usuario con menos privilegios.
  • Firmar y verificar las imágenes.
  • Encontrar, reparar y monitorizar las vulnerabilidades de código abierto.
  • No dejar información sensible en las imágenes de Docker.
  • Añadir información adicional en los tags.
  • Utilizar COPY en lugar de ADD.
  • Utilizar etiquetas de tipo metadatos.
  • Utilizar la compilación para varias imágenes.
  • Utilizar módulos de buenas prácticas.

Uso de imágenes mínimas

La primera recomendación sería el uso de imágenes con las necesidades mínimas para el servicio que nos va a ofrecer dicho Docker, no solo por el hecho de que el Docker cuanto más pequeño sea menos impacto computacional va a tener en nuestras aplicaciones, sino también es importante tener en cuenta que el contenedor que vayamos a desplegar no utilice, en la medida de lo posible aplicaciones instaladas que NO se vayan a utilizar. Por ejemplo, si queremos desplegar una imagen de una aplicación desarrollada en Spring, que por detrás tiene su Tomcat, no utilizar una imagen de Ubuntu, sino utilizar una imagen de Alpine (https://hub.docker.com/_/alpine), distribución más sencilla, ya que Ubuntu tendrá muchas más aplicaciones que podrían tener numerosas vulnerabilidades que ni siquiera se van a utilizar.

Usuario con menos privilegios

Muchas de las imágenes que se descargan desde repositorios oficiales, por defecto utilizan el usuario root, por lo que si alguien accediese al mismo tendría dichos permisos, es decir, un control absoluto del contenedor que acabamos de desplegar, por ello, se debería cambiar la imagen para utilizar un usuario con permisos reducidos, tal y como se muestra en el siguiente Dockerfile:

Firmar y verificar imágenes

Cuando utilizamos imágenes es importante comprobar la veracidad de estas. De hecho, debería ser una obligación para los desarrolladores ya que es muy sencillo encontrar una imagen modificada. Es más habitual de lo que pensamos que alguien modifique una imagen original e introduzca algún tipo de malware que, por supuesto, será desplegado cuando nuestro Docker esté en producción, por ello existen diversas recomendaciones como:

  • Asegurarse de que no hay actualizaciones de la imagen.
  • Export DOCKER_CONTENT_TRUST=1
  • Utilizar imágenes firmadas por el proveedor.
  • Docker Notary se encarga de comprobar las imágenes que se están utilizando.

Observar las vulnerabilidades de código abierto

Otra de las recomendaciones que se deben tener en cuenta es conocer el riesgo provocado por las vulnerabilidades que pueda tener nuestra imagen. Para ello existen herramientas que nos ayudan a realizar este tipo de análisis, tanto públicas como privadas.

Las herramientas más conocidas para hacer este tipo de análisis son:

  • Snyk .
  • Prisma, anteriormente conocido como Twislock.

Información sensible en las imágenes Docker

Otro de los consejos que en ocasiones parece hasta obvio, pero os sorprenderíais de las veces que sería necesario: la recomendación en este punto es no almacenar información sensible como claves o secretos en las imágenes ya que cualquiera podría acceder a ellas. La forma lógica es, una vez la imagen está corriendo, es decir, en el propio contenedor, inyectar dichos datos a través de aplicaciones recomendadas como Consul (https://www.consul.io/) o Vault (https://www.vaultproject.io/).

Información en los tags

Los tags son una buena forma de dar más información acerca de qué novedades tiene la actualización; no es recomendable utilizar el tag LATEST sino tenerlo versionado para controlar qué contenedor ha sido desplegado. De hecho, al utilizar versionado sabemos exactamente qué versión desplegamos en nuestro sistema, pero si siempre desplegamos a través del tag LATEST, podría ocurrir que exista una nueva versión que sea la que se despliegue y que por algún motivo no sea compatible con el resto del entorno por alguna actualización que no hayamos controlado.

Utilizar COPY en lugar de ADD

El comando COPY implica añadir la ruta a la que debe ir y no deja ningún tipo de duda, pero en el caso de ADD se copia directamente, y si no existe la ruta la crea, por lo que podría provocar que el Docker sea más vulnerable al poder generar algunas rutas ocultas que de partida dicho Docker no tenga.

Etiquetas de tipo de metadatos

En el Dockerfile o en el Docker-compose es importante añadir más información tal y como se muestra en los siguientes comandos:

LABEL maintainer=”jaime.morales@ciberso.com”

LABEL securitytxt=”https://securitytxt.org/” #En este web se indican algunas recomendaciones que podrían ser aplicadas a la hora de generar nuestros Dockers

Utilizar compilación para varias imágenes

Al crear las imágenes de Docker se pueden crear varios artefactos que son sólo útiles a la hora de las compilaciones, por lo que sería necesario realizar una limpia en el Docker que se va a desplegar en producción.

Docker tiene varias opciones para la compilación por lo que, para producción, la recomendación es que sea lo más liviana posible:

  • Primera imagen: Imagen muy grande, incluida con muchas dependencias que se utilizan para crear su aplicación y ejecutar pruebas.
  • Segunda imagen: Imagen más pequeña, en términos de tamaño y número de bibliotecas.

Módulos de buenas prácticas

Todas las compañías deberían definir un modelo de buenas prácticas a través de sus equipos de arquitectura y seguridad. El objetivo es que se tengan en cuenta en estos procedimientos una serie de políticas de seguridad para seguir unos patrones mínimos, además de aceptar lo mínimo indispensable que debe tener un Docker para ser subido a los entornos de producción como, por ejemplo, puertos abiertos, respuestas a códigos de error, logs, usuarios con permisos, etc.

En Ciberso tenemos una gran experiencia en el mundo de microservicios y podemos ayudarte a mejorar la seguridad de los mismos, acompañándote en cualquier parte del ciclo de vida definido para vuestras aplicaciones basadas en microservicios.

    Solicita más información

    Si necesitas contactar con nosotros puedes rellenar formulario a continuación. Nos pondremos en contacto contigo lo antes posible.