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:

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 toda la sección 7 hemos sido aprobado 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):

Alimentando la monitorización
Acá 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 el 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.
¿Quieres conocer mucho mejor qué es lo que Pandora FMS puede ofrecerte? Entra aquí: https://pandorafms.com/es/
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? Echa un vistazo: https://pandorafms.com/es/clientes-de-pandora/
O también puedes enviar cualquier consulta que tengas acerca de Pandora FMS. Hazlo de una manera muy sencilla, gracias al formulario de contacto que se encuentra en la siguiente dirección: https://pandorafms.com/es/contactar/
Y sí, que aquí acaba este artículo, pero si os gustó y vuestra vena hacker palpita con fuerza, seguid leyendo por favor.
Mejorando la puntuación
Por cada advertencia se vará 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):

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 algunas pruebas si resulta aprobado suma puntuación y si está reprobado lo resta pero 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…

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 doce 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 colocáis vuestros resultados y/o sugerencias y/o comentarios a continuación!
| Título | Enlace |
|---|---|
| How To Audit Docker Host Security with Docker Bench for Security on Ubuntu 16.04 | https://www.digitalocean.com/community/tutorials/how-to-audit-docker-host-security-with-docker-bench-for-security-on-ubuntu-16-04 https://web.archive.org/web/20181001221443/https://www.digitalocean.com/community/tutorials/how-to-audit-docker-host-security-with-docker-bench-for-security-on-ubuntu-16-04 |
| Docker Bench Security | https://github.com/docker/docker-bench-security |
| The Docker Ecosystem: An Introduction to Common Components | https://www.digitalocean.com/community/tutorials/the-docker-ecosystem-an-introduction-to-common-components |
| What does the score indicate? | https://github.com/docker/docker-bench-security/issues/365 |
| Linux and Unix cut command tutorial with examples | https://shapeshed.com/unix-cut/#how-to-cut-by-byte-position |
| How to run sudo command with no password? | https://askubuntu.com/questions/192050/how-to-run-sudo-command-with-no-password |
docker-bench-security/functions_lib.sh | https://github.com/docker/docker-bench-security/blob/master/functions_lib.sh |
| Moving docker root folder to a new drive / partition | https://stackoverflow.com/questions/24258458/moving-docker-root-folder-to-a-new-drive-partition#26846845 |