Cómo automatizar las auditorías de seguridad de Docker con Docker Bench for Security – CloudSavvy IT

Tecnología junio 2, 2021

Logotipo de Docker

Docker es conveniente, pero también puede ser un riesgo para la seguridad. Es importante proteger Docker Engine contra posibles amenazas, especialmente si está ejecutando un host Docker en producción.

Banco Docker para seguridad es un script automatizado que puede ayudarlo a encontrar problemas con su configuración. El script de Bench escanea su host para encontrar debilidades en la configuración de su motor Docker. El propio Docker lo proporciona como una herramienta de auditoría de seguridad de código abierto.

Ejecutando el Script

La forma más sencilla de utilizar Docker Bench es descargar el script y ejecutarlo directamente. Puedes inspeccionarlo en GitHub si le preocupa su contenido.
Utilice Git para clonar el repositorio de Bench. Ejecute el script usando su shell. Docker Bench debe ejecutarse con sudo, ya que incluye comprobaciones que requieren acceso de root.

git clone https://github.com/docker/docker-bench-security.git
cd docker-bench-security
sudo sh docker-bench-security.sh

Verá los resultados de la auditoría que se muestran en su terminal. El escaneo tardará varios segundos. Puede ser un minuto o más si tiene muchos contenedores en ejecución.

Comprensión del informe

El informe está codificado por colores, por lo que puede identificar problemas rápidamente. Azul INFO las líneas registran la entrada en diferentes secciones de escaneo. Un verde PASS La línea muestra que su sistema cumplió con la verificación. rojo WARN Las líneas son indicativas de una vulnerabilidad potencial.

Docker Bench ejecuta más de 200 comprobaciones individuales en total. La lista exhaustiva está disponible en el repositorio de GitHub del proyecto. Así es como se clasifican las pruebas.

Configuración de host

Este grupo de pruebas se centra en las debilidades de la auditoría de seguridad de su host. Se realizan comprobaciones para la auditoría adecuada de los directorios de Docker, el uso de una partición dedicada para contenedores y la instalación de una versión actualizada de Docker.

Configuración del demonio

Las pruebas orientadas al demonio verifican que el socket del Docker no esté expuesto a través de una conexión no segura. Tráfico de red entre contenedores de forma predeterminada bridge La red debe estar restringida y los registros inseguros deben eliminarse.

Esta sección también busca concesiones de privilegios inapropiados a contenedores. Los contenedores no deberían poder adquirir nuevos privilegios. Esto podría permitir que un atacante supere el contenedor.

La siguiente sección, Archivos de configuración del demonio Docker, tiene un enfoque similar. Garantiza que el directorio de instalación de Docker y el socket Unix tengan los permisos y la propiedad adecuados. El sistema de archivos de Docker debe ser propiedad de root:root con permisos restrictivos de 644.

Imágenes de contenedores

Docker Bench realiza una verificación básica de los Dockerfiles para sus imágenes conocidas. Buscará usuarios de contenedores dedicados, la presencia de HEALTHCHECK instrucciones, y el uso de Confianza de contenido para verificar la integridad de los datos.

Esta sección de prueba también emitirá advertencias que le recordarán los pasos básicos para el endurecimiento de la imagen. Use imágenes base confiables, aplique nuevos parches de seguridad y evite la instalación de paquetes innecesarios. Estas medidas ayudan a eliminar vulnerabilidades dentro contenedores.

Container Runtime

Las pruebas de Container Runtime inspeccionan sus contenedores en ejecución. Esta sección contiene más de 30 pruebas, que van desde la disponibilidad de SELinux y AppArmor hasta el uso de opciones de red y montajes de sistema de archivos adecuados.

Dejará caer puntos si usa contenedores privilegiados o monta el socket de Docker en un contenedor. Los contenedores no deben poder obtener privilegios adicionales ni interferir con el sistema host.

Bench también busca servidores SSH en ejecución adentro contenedores. Esto no es aconsejable, ya que debe evitarse el acceso directo a los contenedores. Es preferible usar docker exec del host para interactuar con los contenedores.

Las pruebas adicionales analizan el uso de la CPU y los límites de memoria. Un contenedor ilimitado podría consumir recursos excesivos y eventualmente causar una condición de memoria insuficiente en el host. Los controles de red señalan los puertos no utilizados, así como las solicitudes para asignar puertos privilegiados a contenedores.

Enjambre de Docker

Docker Bench incluye una sección adicional para los usuarios de Docker Swarm. Se centra en marcar secretos no seguros y certificados que no se rotan correctamente. También requiere una configuración de red correcta, incluido el uso de cifrado redes superpuestas.

La sección Enjambre generará una advertencia si el modo Enjambre está habilitado pero no se usa realmente. Si no planeas usar Swarm, apágalo ejecutando docker swarm leave --force.

Abordar problemas comunes

La mayoría de los hosts de Docker presentarán varias advertencias si no ha tomado medidas activas para fortalecerlas. A continuación, se muestran algunas medidas que puede tomar para abordar algunos de los informes de Docker Bench más comunes.

Habilitación de la auditoría para archivos de Docker

Docker aconseja el uso de auditorías a nivel de sistema en directorios clave de Docker. La auditoría registra cualquier operación que afecte a los archivos y directorios supervisados. Esto le permite realizar un seguimiento de los cambios potencialmente destructivos.

Asegúrate de tener auditd instalado. Editar /etc/audit/audit.rules y agregue las siguientes líneas al final del archivo:

-w /etc/default/docker -p wa
-w /etc/docker -p wa
-w /etc/docker/daemon.json -p wa
-w /lib/systemd/system/docker.service -p wa
-w /lib/systemd/system/docker.socket -p wa
-w /usr/bin/docker -p wa
-w /usr/bin/docker-containerd -p wa
-w /usr/bin/docker-runc -p wa
-w /var/lib/docker -p wa

La -p wa instrucción significa que auditd registrará escrituras y cambios de atributos que afecten a los archivos. Si su salida de Docker Bench sugiere que utilice la auditoría para directorios adicionales, agréguelos también a la lista. Los directorios de Docker pueden cambiar con el tiempo.

Necesitarás reiniciar auditd para aplicar sus cambios:

sudo systemctl restart auditd

Fortalecimiento del demonio

Docker Bench generalmente encontrará problemas con la configuración de su demonio. Añadiendo lo siguiente a /etc/docker/daemon.json silenciará varias advertencias de demonios.

{
    "icc": false,
    "live-restore": true,
    "no-new-privileges": true,
    "userland-proxy": false,
    "userns-remap": "default"
}
  • icc: Esto evita que los contenedores se comuniquen entre sí por defecto. bridge la red. Los contenedores solo se llegarán entre sí si están explícitamente vinculados mediante un --link.
  • restauración en vivo: Establecer esto permite que los contenedores sigan ejecutándose incluso si el demonio se detiene. Esto es recomendable en entornos de producción donde desea minimizar el tiempo de inactividad.
  • no-nuevos-privilegios: Esto evita que los contenedores eleven sus privilegios mediante comandos como setuid y setgid.
  • proxy de usuario: Deshabilitar esto significa que iptables se utiliza para enrutar el tráfico del puerto del host hacia los contenedores. Sin él, se utiliza el proceso de proxy de área de usuario de Docker, lo que aumenta la superficie de ataque de su demonio.
  • userns-remap: Esto permite el uso de espacios de nombres de usuario, por lo que root en un contenedor se asigna a un usuario de host menos privilegiado. Esto reduce el riesgo de que un contenedor comprometido pueda funcionar root comandos en su host. Utilizando default le indicará a Docker que configure una cuenta de usuario dedicada para este propósito.

RELACIONADOS: Cómo utilizar Cron con sus contenedores Docker

Personalización de la salida del informe

Docker Bench admite varios indicadores que puede usar para ajustar su salida:

  • -B: Desactivar colores. Útil si está ejecutando el script en un entorno de CI que no admite la salida ANSI completa.
  • -pag: No incluya las medidas correctivas sugeridas. Útil cuando desea concentrarse en las advertencias y reducir el ruido en la salida.
  • -l report.txt: Escribir salida en report.txt en lugar de la terminal.
  • -c verificación_5.1, verificación_5.2: Ejecute solo las comprobaciones 5.1 y 5.2. La lista de pruebas está disponible en GitHub.
  • -e check_5.1, check_5.2: Excluya los cheques 5.1 y 5.2.

Puede combinar indicadores para producir el informe que necesita. Si una sección completa de comprobaciones no se aplica a usted, considere crear un alias de shell para que pueda ejecutar rápidamente Docker Bench con una secuencia de indicadores aplicados.

Conclusión

El uso del script Docker Bench for Security lo ayuda a encontrar y resolver las debilidades en la seguridad de su host Docker. Abordar cualquier advertencia que emita ayudará a fortalecer su host y mejorar su postura de seguridad.

Recuerde que Docker Bench no es una prueba exhaustiva. Hay otros aspectos para mantener la seguridad de Docker que tampoco deben pasarse por alto.

Un contenedor comprometido podría darles a los atacantes un punto de apoyo en sus sistemas, incluso si tiene una seguridad sólida a nivel de host. Puede reducir este riesgo utilizando Docker Bench, junto con escáneres de vulnerabilidad de contenedores activos como Trivy y Clair. Estos te ayudarán a identificar problemas. dentro sus contenedores, como dependencias desactualizadas que podrían explotarse.

Si bien un buen seguro es siempre el objetivo, también debe tener en cuenta que Docker Bench está dirigido a cargas de trabajo de producción. No todas las comprobaciones son relevantes para la instalación local de Docker de un desarrollador. Ejecute el script, lea las advertencias y evalúe cuáles se aplican a su entorno.