Saltar al contenido
Como cualquier otra tecnología, Docker no está exento de posibles problemas de seguridad. Para minimizarlos lo mejor es aplicar buenas prácticas y auditar nuestra infraestructura frecuentemente en busca de vulnerabilidades. Aquí van cuatro consejos para comenzar de una manera sencilla.


Dockerbench

Docker mantiene una herramienta de auditoria de la infraestructura donde se ejecuta Docker Engine. Como no podía ser de otra manera, mediante la ejecución de un contenedor comprueba nuestra instalación y analiza si hemos aplicado las buenas prácticas recogidas en este documento de casi 200 páginas publicado por el Centro para la seguridad en internet (CIS)
 
Simplemente para auditar nuestro motor debemos ejecutar:
docker run -it --net host --pid host --cap-add audit_control \
    -e DOCKER_CONTENT_TRUST=$DOCKER_CONTENT_TRUST \
    -v /var/lib:/var/lib \
    -v /var/run/docker.sock:/var/run/docker.sock \
    -v /usr/lib/systemd:/usr/lib/systemd \
    -v /etc:/etc --label docker_bench_security \
    docker/docker-bench-security
Esto nos generará una salida en pantalla con el diagnostico de cada uno de los escenarios programado similar a esto:

Existe una página del proyecto alojada en github donde podemos ampliar información sobre sus funcionalidades.


Docker security scanning

Otra manera de comprobar cómo de seguras son nuestras imágenes es mediante el escaneo en búsqueda de vulnerabilidades conocidas. Docker Inc mantiene un servicio encargado de esto que utiliza la base de datos de CVE para encontrar en nuestras imágenes librerías, binarios y exploits de los programas que se ejecutan en ellas. Este servicio está disponible para los repositorios privados de Docker hub, en Docker cloud y recientemente on-premise en la versión 1.13 de Docker DataCenter, siendo en todos los casos un servicio de pago aunque hay servicios de terceros que ofrecen una funcionalidad similar de manera gratuita.


Content trust

Si queremos que en nuestro motor solo se ejecuten imágenes firmadas en las que confiemos podemos habilitar Content trust. Para habilitar esta opción que por defecto viene desactivada simplemente tenemos que definir la variable de entorno DOCKER_CONTENT_TRUST o ejecutar Docker Engine con la opción --disable-content-trust=false
 
Como el mantener una infraestructura basado en confianza mediante claves públicas y privadas puede ser algo tedioso, tenemos la posibilidad de instalar un componente llamado Docker Notary que hará la labor de "certificadora" entre el repositorio de imágenes (Docker Registry) y nuestro nodo.



En Docker Datacenter esta funcionalidad está integrada con Docker Trusted Registry y podemos habilitarla de forma nativa añadiendo toda la capilaridad de la gestión de roles y usuarios corporativos.


Contenedores en solo lectura

Docker utiliza la tecnología copy on write para acelerar el inicio de los contenedores y optimizar el uso de disco en las imágenes, es decir, por naturaleza podríamos decir que son inmutables (o siguen los preceptos de la infraestructura inmutable). Para ser exactos, los contenedores montan una capa temporal en modo lectura/escritura que perdura solo mientras el contenedor está en ejecución. Al desaparecer el contenedor esta capa desaparece con él. 
 
Una buena práctica, si nuestra aplicación no necesita tener acceso al disco, es crear esta capa en modo solo lectura con el fin de poner aún más difícil la tarea de explotar vulnerabilidades a un potencial atacante. Simplemente pondremos en ejecución nuestros contenedores con la opción --read-only. 
 
El experto en seguridad Diogo Monica explica en este artículo un caso de uso práctico donde esta funcionalidad solventa un error de programación en PHP.
  
Con todo esto, el tema de la seguridad es un mundo complejo en el que conviene estar bien informado y al día. Para esto podemos consultar la página de seguridad de Docker, realizar los laboratorios oficiales sobre seguridad o empaparnos de los principios de seguridad de Docker Engine.

 

Otros artículos destacados