No descubro nada nuevo si señalo que Docker: https://www.docker.com/ será, o más bien es, lo que la virtualización de sistemas operativos fue en su momento. Tampoco voy a adentrarme en explicar lo que es Docker, del que hablé por encima en un artículo anterior: https://ciberseguridadtotal.com/portainer-gestion-sencilla-de-docker-a-traves-de-la-web/, y sobre el que hay literatura más que suficiente en internet.

Pero si me parece interesante, porque además en ocasiones pasa desapercibido en la vorágine de levantar servicios de un modo “fácil y sencillo” con esta tecnología, el hablar de cómo cuidar los aspectos orientados a ciberseguridad.

Las premisas a tener en cuenta son muchas, a continuación trataré de señalar las principales, pero en todo caso debemos tener en cuenta que las medidas a adoptar sobre un contenedor en producción, poco tienen que ver con las tradicionales de un equipo o máquina virtual (me refiero a los típicos antivirus, firewalls web WAF, políticas de actualizaciones de OS o aplicaciones, etc…) que en este entorno deben entenderse de otra manera.

Y todo lo anterior partiendo de que a pesar de que Docker parte de la premisa de trabajar en un entorno  aislado y por más tanto seguro, no es sinónimo de creer que estamos libres de riesgo, ni mucho menos, las consideraciones y vulnerabilidades a abordar son las mismas que en un entorno tradicional, con la salvedad que el modo de abordarlo es diferente.

Vamos al lío entonces…

Repositorios de confianza:

Lo normal es dirigirnos a Docker Hub: https://hub.docker.com/ para descargar imágenes con las que empezar a trabajar en Docker. Estas imágenes pueden ser de cualquier cosa, un OS Ubuntu, una Base de Datos MySQL, un CMS como WordPress… lo que se nos ocurra. 

Podemos además encontrar imágenes oficiales, con imágenes creadas por cualquier persona o entidad que haya querido subirlas a Docker Hub. 

¿Qué consideraciones debemos tener? Pues la primera la de utilizar únicamente imágenes de confianza oficiales, con la etiqueta “Official Image” o de entidades de referencia como Bitnami: https://ciberseguridadtotal.com/bitnami-despliegue-facil-de-aplicaciones/, también conviene revisar el número de descargas y la calificación del repositorio por parte de los usuarios. 

Estas precauciones evitarán que podamos desplegar contenedores basados en imágenes manipuladas o comprometidas intencionadamente, por poner un ejemplo, recientemente Aqua Security descubrió un repositorio de imágenes Docker comprometido con malware, que había tenido más de 120.000 descargas. Es decir, el hecho de que la imagen esté en un sitio como Docker Hub, no quiere decir que sea “segura”, y debemos tomar las mismas medidas que cuando por ejemplo instalamos una app en el móvil o usamos cualquier otra tienda de aplicaciones, cuestión que ya tratamos en: https://ciberseguridadtotal.com/seguridad-tiendas-aplicaciones/

Seguridad de la imagen:

Una vez tenemos la imagen “oficial o de confianza” que vamos a utilizar, ésta puede que no esté libre de fallos, y eso es algo que tendremos que aceptar y en la medida de lo posible mitigar.

Un buen ejemplo es lo que ocurrió hace un par de años con Alpine Linux, el OS que trae por debajo una gran mayoría de imágenes Docker. La firma de seguridad Talos, descubrió la vulnerabilidad CVE-2019-5021, relacionada a que venían sin ninguna contraseña root, afectando al 20% de los 1000 repositorios Docker más populares: https://twitter.com/JGamblin/status/1130558955430785024?ref_src=twsrc%5Etfw%7Ctwcamp%5Etweetembed%7Ctwterm%5E1130558955430785024%7Ctwgr%5E%7Ctwcon%5Es1_c10&ref_url=https%3A%2F%2Fwww.redeszone.net%2F2019%2F05%2F23%2Fdocker-populares-no-llevan-contrasena-root%2F 

Limitar recursos del contenedor:

Podemos y es recomendable limitar los recursos hardware asignados al contenedor, tanto para aumentar la eficiencia del entorno y garantizar el servicio, como para evitar que un contenedor comprometido con un malware, pueda ocasionar daño al resto de servicios por un uso anómalo de RAM, CPU o similar.

Esto complementado a una monitorización de sistemas, nos permitirá una visión global y la detección temprana de anomalías, evitando fallos y atajando problemas en el menor tiempo posible.

Buenas prácticas en la configuración de Docker:

Esto dependerá de cómo hemos decidido montar nuestra infraestructura de Docker, de si tenemos simplemente un servidor con soporte Docker, o un orquestador, de la solución que utilicemos: Kubernetes, Rancher… o lo que sea.

Para todos los casos, cada uno con sus peculiaridades, será necesario hacer acopio de buenas prácticas que garanticen el entorno más seguro y robusto posible, hablamos de cosas como revisar la protección del usuario root (de forma predeterminada Docker requiere de root para crear y administrar contenedores), el uso de usuarios Docker específicos, la gestión de permisos con cgroups, el uso de espacios de nombre o la securización del demonio de Docker, la gestión de permisos o integración con una autenticación externa, etc..

También tendremos que tener claro el uso de subredes en Docker, y el acceso no sólo al servidor que hay por encima, sino a los accesos y comunicaciones entre contenedores existentes.

Herramientas de seguridad:

Muchas de las herramientas de seguridad a las que estamos habituados, son susceptibles de ser utilizadas en un entorno de ejecución de Docker, podemos desde detectar vulnerabilidades con OpenVAS: https://www.openvas.org/, a instalar elementos adicionales, como puede ser el uso de un Proxy Web adicional que proporcione cifrado y limite las conexiones a un contenedor web. Como es lógico, las soluciones a aplicar dependerán de nuestro entorno particular.

Actualizaciones:

Aunque nos consta somos unos pesados con el tema, no nos cansamos en este blog de hablar de la importancia de las actualizaciones: https://ciberseguridadtotal.com/c1b3rwall-2021-actualizaciones-actualizaciones-y-mas-actualizaciones/, y con Docker no íba a ser menos.

Imaginemos que levantamos un contenedor de una imagen Docker cualquiera, por ejemplo un Tomcat, en ese momento correremos la versión X.X del navegador, que como es lógico, presentará a lo largo del tiempo vulnerabilidades y fallos funcionales o de seguridad, que sólo podremos mitigar actualizando. 

Además en general, una de las ventajas de Docker es precisamente que facilita el proceso de actualización, sobre todo en entornos sencillos con un simple servidor Docker, muchas veces simplemente basta con un pull de la nueva imagen, y ejecutar el mismo comando original apuntando al almacenamiento persistente de turno.

Y cómo no, nuestra App

Es muy habitual que Docker ofrezca servicio a nuestra aplicación, a nuestro desarrollo propio, y en este sentido es crítico que hayamos desarrollado la misma teniendo en cuenta cuestiones de ciberseguridad. Para ello disponemos de muchos recursos, destacar por ejemplo OWASP: https://ciberseguridadtotal.com/c1b3rwall-2021-actualizaciones-actualizaciones-y-mas-actualizaciones/.