Docker® tiene numerosas partes movibles y su protección es más compleja que la de las antiguas tecnologías de implementación. Requiere un enfoque holístico, desde firewalls de aplicaciones y red, hasta la defensa del tiempo de ejecución del contenedor, pasando por la protección del host.
La protección de un contenedor de Docker no es distinta a la protección de otros contenedores. Requiere un enfoque completamente inclusivo, protegiendo desde el host hasta la red y todo lo que hay entre ellos. Debido a sus partes móviles, para muchas organizaciones resulta difícil garantizar la seguridad de los contenedores, y requiere mucho más que un nivel rudimentario de vigilancia.
A continuación, encontrará algunos factores a considerar cuando proteja sus contenedores de Docker:
La utilización de cuotas de recursos le otorga la capacidad de limitar el consumo de memoria y CPU a un contenedor. La configuración de cuotas de recursos en cada contenedor no solo ayuda a aumentar la eficiencia del entorno, sino que también evita el desequilibrio de los recursos en los contenedores de su entorno.
Esto permitirá que sus contenedores rindan a la velocidad que espera y, lo más importante, le permitirá mejorar la seguridad. Si un contenedor resultase infectado con contenido malicioso, no podría dejar pasar una gran cantidad de recursos en el contenedor, dado que la cuota lo impediría, minimizando el impacto de los ataques. Esta es una sencilla táctica de seguridad que es posible aprovechar y se puede realizar utilizando marcadores de línea de comando
Durante el desarrollo de una aplicación, la práctica recomendada es adherirse al principio de menor privilegio. Esto significa limitar el acceso a la aplicación solo a los recursos necesarios para funcionar. Este es una de las principales formas de proteger sus contenedores de accesos no deseados.
Cuando se trata de la seguridad de sus contenedores de Docker, esto resulta fundamental y el por qué las configuraciones predeterminadas del Docker no se establecen para que ejecuten contenedores como raíz. Por ejemplo, si su aplicación en contenedor es vulnerable ante un exploit y está ejecutando con el usuario raíz, esto amplía la superficie del ataque y crea una ruta sencilla para que los atacantes se hagan con un escalado con privilegios.
Los registros de contenedores, en particular aquellos en contenedores de Docker, son los que hacen que de esta una plataforma sólida. Con los registro, puede crear un repositorio central de imágenes que son fácil y rápidamente descargables. No obstante, a pesar de todo su esplendor, conllevan muchos riesgos de seguridad si no utiliza un registro de confianza que ha realizado mediante una búsqueda exhaustiva en, por ejemplo, el Docker Trusted Registry. Con el registro de Docker, lo instala detrás del firewall ya implementado en su infraestructura de TI para mitigar los riesgos que supone internet, pero aun así, debería seguir denegando a los usuarios subir o descargar desde el registro.
Si bien esto puede ser muy tentador evitar todo este trabajo y otorgar libre acceso, este pequeño contratiempo podría evitar grandes filtraciones en el registro. Una táctica de gran ayuda para resolver esta tentación es implementar un controles de acceso basados en roles, lo que le proporciona la capacidad de controlar exactamente quién puede acceder a qué, en lo que respecta a los registros.
Ahora que tiene el registro de contenedor protegido, no desea infectarlo con imágenes de contenedores obtenidos de fuentes no fiables. Podría parecer cómodo simplemente descargar las imágenes de contenedores ya disponibles al público a tan solo un clic de distancia. Sin embargo, es extremadamente importante asegurarse de que la fuente de descarga es de confianza o está verificada.
En aras de la precaución y la seguridad, realmente lo mejor es evitar los registros de contenedores públicos y ceñirse a los que ofrece Docker, como Docker Hub. Para ir un paso más allá en la protección de sus contenedores de Docker, debería utilizar herramientas de análisis de imágenes para arrojar luz sobre las imágenes de Docker con vulnerabilidades y así protegerlas.
Tal y como analizamos anteriormente, es importante contar con fuentes fiables e imágenes de contenedores de confianza para sus contenedores de Docker. Sin embargo, también se recomienda investigar el código en las imágenes para asegurarse de que no contienen códigos infectados, incluso si dicha imagen procedió de un registro de confianza. Las imágenes de Docker tienen una combinación de código original y paquetes procedentes de fuentes externas, las cuales pueden que no provengan de fuentes de confianza.
En este caso, lo mejor es utilizar herramientas de análisis de código fuente. Una vez que tenga sus imágenes, puede analizar los paquetes para determinar el origen del código descargando las fuentes de todos los paquetes en sus imágenes de Docker. Esto le permitirá revelar si hay imágenes que tienen vulnerabilidades de seguridad conocidas, lo que le permite mantenerse protegido desde el inicio.
Para que los contenedores de Docker puedan comunicarse con otros, utilizan redes e interfaces de programación de aplicaciones (API). Esa comunicación es fundamental para que los contenedores funcionen correctamente, pero requiere una supervisión y seguridad adecuadas. Aunque las API y la red no forman parte del contenedor de Docker y conforman recursos que utiliza junto con Docker, aun así suponen un riesgo para la seguridad del contenedor. Sabiendo esto, para poder tener la capacidad de detener rápidamente una intrusión, necesita diseñar su API y red para una fácil supervisión y con la seguridad en mente.
La protección de sus contenedores de Docker no es un paseo, pero el resultado compensa con creces el trabajo invertido. Es necesario un enfoque holístico y que refuerce el entorno del contenedor en cada nivel. Y si bien las anteriores prácticas recomendadas parecen numerosas, le ahorrarán una enorme cantidad de tiempo en el futuro y disminuirá los principales riesgos de seguridad a los que se enfrenta.
Investigaciones relacionadas
Artículos relacionados