Segurizar entorno Docker
De sobra es sabido que Docker se ha convertido en una forma ágil, sencilla y fiable de probar y desplegar aplicaciones en los diferentes entornos que se manejan, pero ¿tenemos realmente la certeza que el entorno configurado en Docker es tan seguro como debería ser?. Este articulo tiene como propósito el mostrar las acciones que se pueden realizar para comprobar el estado actual y aplicar (si procede) las acciones correctivas necesarias.
Controles CIS
Estas comprobaciones están basadas en las recomendaciones listadas desde el C.I.S (Center for Internet Security) que periódicamente publica plantillas con controles de seguridad para diferentes tecnologías, en este caso que nos trata se comentará sobre la plantillas de los controles de seguridad para Docker.
Este documento, en su versión 1.6 y está formado por 7 categorías que van desde la configuración del propio host hasta la configuración de Swarm o del runtime de los contenedores.
Como muestra de alguno de los controles y usando para ello el primero se puede ver:
1.1.1 Ensure a separate partition for containers has been created
En este caso el control indica que los containers deberían (así como la información asociadas a ellos) debería estar en una partición (o logical volume) diferente al de raíz o la partición "var" para evitar el llenado de dichas particiones. En el propio documento muestra como comprobar esto:
grep '/var/lib/docker\s' /proc/mounts
y como remediarlo en caso que hubiera necesidad de hacerlo. Adicionalmente mapea estos controles uno a uno (con CIS v8) para ver si se cumplen con ellos en nuestro entorno.
Bueno, se podría hacer así, pero eso sería un trabajo algo costoso, pesado y porqué no decirlo, aburrido... Para poder comprobar todos estos controles de una manera más ágil, Docker publicó en su Github un script que automatiza estas comprobaciones:
Uso del script
El script, como se ha comentado, está alojado en un repositorio de Github, con lo que el primer paso será clonar dicho repositorio.
Recomendado por LinkedIn
Desde el directorio clonado se lanzará el script, es importante que el servicio "docker" esté iniciado, si no se mostrará un error y el script no podrá continuar
si se lanza el script como usuario regular mostrará algunas advertencias indicando que algunos de los tests que se ejecutarán deben ser lanzados con permisos de "root":
Si se lanza de nuevo con permisos de "root", se ejecutarán todos los tests:
Como se puede ver en la imagen anterior, los controles 1.1.[3-18] han mostrado una advertencia, y si se lee el mensaje indica que el servicio docker (así como los servicios y archivos asociados) no están siendo monitoreados con "auditd", mirando en la hoja de los controles CIS para Docker muestra como resolver estas advertencias, ejemplo del punto 1.1.3:
Una vez añadidas las reglas indicadas en /etc/auditd/rules.d/audit.rules y reiniciado el servicio "auditd" (o recargadas las reglas) al volver al lanzar el script se puede ver que ya no muestra esas advertencias:
Estas remediaciones se pueden automatizar también (bien mediante templates en ansible o cualquier otra solución de orquestación o mediante scripting).
En definitiva, esta herramienta resultará de total utilidad para segurizar el entorno Docker, así como para ir consiguiendo la correcta aplicación de todos los controles CIS en el entorno y mejorar tanto la seguridad como el nivel de cumplimiento.
Hasta la próxima!!