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:

seguridad con docker bench 1

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):

seguridad con docker bench 2

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):

seguridad con docker bench 3

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…

seguridad con docker bench 4

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í.

Shares