Seguridad con Docker Bench con Pandora FMS
Aunque la principal misión de Pandora FMS es monitorizar, no es por menos que deja de hacer honor a su nombre: su flexibilidad nos permite extenderla hasta donde la necesitemos. Por ello os presentamos la Seguridad con Docker Bench y os proponemos algunas ideas para usarlas con nuestra versión de código abierto.
Entorno de trabajo
En Pandora FMS, a lo largo de los años, hemos seguido con atención a Docker. Incluso ha sido creado un complemento para monitorizar la salud de Docker Swarm, con lo que estamos hablando de crear y monitorizar una gran cantidad de contenedores de aplicaciones o, como casi siempre nos referimos, contenedores.
El proceso de contenedorización (la informática es rica en neologismos) es el proceso de distribuir e implementar aplicaciones de manera portátil de una manera predecible, pero no debemos descuidar las posibles vulnerabilidades. Implementar la seguridad con Docker Bench es tan solo una de sus aproximaciones. Docker es muy usado en proyectos de código abierto y software libre, y Docker Bench es también uno de ellos; su código reposa en GitHub y está amparado bajo licencia Apache 2.0 . Docker Bench está realizado por el propio equipo de Docker, basado en recomendaciones de empresas, y en GitHub reciben las mejoras y captura de errores de la entusiasta comunidad del software libre.
En nuestro caso os expondremos -de manera didáctica- en una máquina virtual de prueba con Ubuntu 18 con Docker instalado desde cero, es decir, un servidor dedicado y exclusivo para albergar contenedores y con las últimas actualizaciones disponibles. El usuario utilizado es jimmy y lo tenemos configurado para que ejecute sudo sin contraseña.
Instalando Seguridad con Docker Bench
Para instalar Docker Bench lo haremos en nuestra carpeta de usuario con el siguiente código:
cd ~
git clone https://github.com/docker/docker-bench-security.git
cd docker-bench-security
sudo ./docker-bench-security.sh
Con la primera línea vamos a nuestra carpeta de usuario, con la segunda descargamos el código fuente, con la tercera entramos al directorio y con la cuarta por fin lo ejecutamos. La salida es extensa, pero veréis algo parecido a esto, inicialmente:
Leyenda: Ejecución por vez primera del bash «docker-bench-security.sh»
Analizando los primeros resultados
Fijaros en los textos coloreados en rojo de la última figura: esos son los que nos interesa monitorizar con Pandora FMS. Ahora bien, no todo está mal en un primer intento; en la siguiente figura en toda la sección 7 hemos sido aprobados y al final nos muestra un resumen de los aspectos verificados y nuestra puntuación, que mientras más alta, mejor (luego os haremos una observación a esto):
Leyenda: Puntuación general de Seguridad con Docker Bench
Alimentando la monitorización
Aquí es donde comenzaremos a utilizar la Entrada Estándar que acompaña al Intérprete de comandos: un programa (en este caso Docker Bench) entregará el resultado a otro con el que lo filtraremos (usaremos grep para filtrar líneas) y por último filtraremos el segundo campo delimitado por el separador “:” (comando cut) para obtener solamente un valor numérico:
sudo ./docker-bench-security.sh | grep Score: | cut -d ':' -f 2
Con el valor obtenido, el cual consideramos como Generic numeric para nuestro agente software instalado en el servidor virtual Docker de prueba, lo adicionamos al código que planteamos. Sería más o menos lo siguiente:
module_begin
module_name DockerBenchSecurity
module_type generic_numeric
module_exec sudo ./docker-bench-security.sh | grep Score: | cut -d ':' -f 2
module_description Docker Bench Score
module_end
Solo quedarían los detalles sobre cómo implantar los agentes software, por ejemplo con Ansible, Puppet o vuestro software favorito para estas tareas.
Mejorando la puntuación
Por cada advertencia se verá perjudicada nuestra puntuación; regresemos a nuestra terminal de comandos y que nuestros dedos vuelen en el teclado para ver dónde están los problemas:
./docker-bench-security.sh | grep \\[WARN\\]
Obtendremos solo las advertencias (notad el uso de “\\” con grep para poder introducir los corchetes rectos):
Leyenda: Obteniendo solo las advertencias de Docker Bench
Fortaleciendo nuestros contenedores
Obtuvimos 74 verificaciones, pero no podemos aquí analizarlas todas, por lo que nos enfocaremos en casos puntuales:
Sección 1.1: «Asegúrese de tener los contenedores en una partición de disco aparte». Eso es lo que llamamos no tener todos los huevos en una sola canasta, así que creamos un disco duro virtual que agregamos a nuestra máquina virtual y movimos todo lo que está en el directorio /var/lib/docker y agregamos enlaces simbólicos de manera tal de no tener que cambiar los demás valores que tenemos establecidos. Lo que buscamos es la facilidad y rapidez, sin embargo la Seguridad con Docker Bench no mejora porque no es capaz de detectar hacia dónde dirigen dichos enlaces simbólicos. Problema (“issue”) para Docker Bench. Bien podemos ayudar a resolver esto al plantearlo en el repositorio GitHub; pero como estamos completamente seguros de que dicho aspecto está solucionado, también podremos excluir dicha comprobación con el siguiente comando:
sudo ./docker-bench-security.sh -e check_1_1
Si tuviéramos algunas otras pruebas a excluir agregaremos una coma sin dejar espacios y el código de la prueba y así sucesivamente.
Acerca de la puntuación
La puntuación en realidad no es tal; de hecho yo hice esa abstracción al revisar el código fuente de Docker Bench. Resulta ser que en algunas pruebas si resulta aprobado suma puntuación y si está reprobado la resta, pero en algunas otras solo aportan cero y son las que devuelven la etiqueta “[INFO]” (ejemplo: la 1.4 siempre devuelve cero). Por cada aprobado suma y por cada advertencia resta. Incluso hay funciones como la 1.6 que puede aportar siempre uno de los tres valores: -1, 0 ó 1. Pero la comprobación 1.3 (si Docker está ejecutando la última versión estable) de resultar aprobada no suma puntuación…
Leyenda: Ejecución única de la verificación 1.3
Dado este panorama, aparentemente confuso, resulta en que no califican el “score” como una puntuación real y he aquí lo bueno del software libre:
Nosotros podremos modificar a nuestro gusto y conveniencia la Seguridad con Docker Bench; todo este panorama de consideraciones es algo común en el campo de la monitorización.
Añadiendo software
Para seguir mejorando la puntuación solucionamos las pruebas desde la 1.5 hasta la 1.11 al instalar auditd :
sudo apt-get install auditd
De 12 puntos pasamos a 27 solo con lo anterior y configurando debidamente las reglas:
sudo nano /etc/audit/rules.d/audit.rules
con las siguientes configuraciones:
-w /lib/systemd/system/docker.service -p wa
-w /lib/systemd/system/docker.socket -p wa
-w /usr/bin/docker-containerd -p wa
-w /usr/bin/docker-runc -p wa-w /usr/bin/docker -p wa
-w /var/lib/docker -p wa
-w /etc/docker -p wa
-w /etc/default/docker -p wa
-w /etc/docker/daemon.json -p wa
¡Llegamos a una puntuación de 42!
Para finalizar observen que se menciona la ruta /var/lib/docker que debería ser modificada si no usáramos enlaces simbólicos, como os explicamos en la sección “Fortaleciendo nuestros contenedores”. Os dejamos como reto revisar y ahondar en Docker Bench. ¡Si lo deseáis colocad vuestros resultados y/o sugerencias y/o comentarios a continuación!
Eso sí, antes de finalizar… ¿quieres conocer mucho mejor qué es lo que Pandora FMS puede ofrecerte? Entra aquí.
En la actualidad, muchas empresas y organizaciones alrededor del mundo ya cuentan con Pandora FMS. ¿Quieres conocer algunos de nuestros clientes y leer algunos de nuestros casos de éxito?
Si cuentas con más de 100 dispositivos para monitorizar puedes contactar con el equipo de Pandora FMS a través del siguiente formulario.
Además, recuerda que si tus necesidades de monitorización son más limitadas tienes a tu disposición la versión OpenSource de Pandora FMS. Encuentra más información aquí.
Programador desde 1993 en KS7000.net.ve (desde 2014 soluciones en software libre para farmacias comerciales en Venezuela). Escribe regularmente para Pandora FMS y ofrece consejos en el foro. También colaborador entusiasta en Wikipedia y Wikidata. Machacador de hierros en gimnasios y cuando puede se ejercita en ciclismo también. Fanático de la ciencia ficción. Programmer since 1993 in KS7000.net.ve (since 2014 free software solutions for commercial pharmacies in Venezuela). He writes regularly for Pandora FMS and offers advice in the forum. Also an enthusiastic contributor to Wikipedia and Wikidata. Crusher of irons in gyms and when he can he exercises in cycling as well. Science fiction fan.