Protegiendo tu Entorno Docker: Implementación de Políticas SELinux Personalizadas para Mitigar Riesgos de Seguridad

Identificación del Problema: Como vimos en nuestra entrada anterior, Docker ofrece una gran flexibilidad y potencia, pero esta misma flexibilidad puede ser explotada por atacantes con intenciones maliciosas. Uno de los escenarios más preocupantes es la posibilidad de que un contenedor Docker pueda montar el sistema de archivos raíz del host o acceder a áreas sensibles como /etc, lo que potencialmente permite a un atacante obtener control total sobre el sistema.

Solución: Creación de una Política SELinux Personalizada: Una forma efectiva de mitigar el riesgo de escalada de privilegios en entornos Docker es utilizando SELinux (Security-Enhanced Linux). SELinux es un sistema de seguridad basado en etiquetas que permite aplicar políticas de control de acceso obligatorio (MAC) en el nivel del núcleo del sistema operativo.

Para abordar específicamente la preocupación de montar el sistema de archivos raíz o acceder a áreas sensibles como /etc, podemos crear una política SELinux personalizada que prohíba estas acciones. Utilizando herramientas como audit2allow, podemos generar una política SELinux basada en los eventos de auditoría y luego ajustarla según nuestras necesidades específicas.

Paso 1: Generar una Política SELinux Personalizada

  • Ejecuta el comando audit2allow para generar una política SELinux basada en los eventos de auditoría:
audit2allow -a -M dockerpolicy.pp

Esto generará un archivo dockerpolicy.pp que contendrá la política SELinux.

Paso 2: Editar la Política SELinux

  1. Abre el archivo dockerpolicy.te (o el archivo con el nombre que hayas especificado al ejecutar audit2allow).
  2. Agrega la siguiente línea dentro del bloque require para permitir la gestión de montaje y desmontaje de archivos:
 class file { mount unmount append create getattr ioctl open read watch_mount watch_with_perm write };

  • Agrega la regla para denegar a Docker el montaje del sistema de archivos raíz dentro del archivo:
# Deny Docker to mount root filesystem
deny docker_t root_t:file { mount unmount };

Paso 3: Compilar e Instalar la Política SELinux

  • Instala el módulo de política SELinux recién creado usando semodule:
 semodule -i dockerpolicy.pp
  • Verifica que la política SELinux se haya aplicado correctamente:
semodule -l | grep dockerpolicy

Probamos montar el file system raiz

Conclusión:

Con estos pasos, has creado y aplicado con éxito una política SELinux personalizada para prevenir la escalada de privilegios a través de Docker. Ahora tu sistema está protegido contra montajes de sistemas de archivos raíz no autorizados por contenedores Docker. Recuerda siempre revisar y ajustar las políticas SELinux según las necesidades y el entorno específico de tu sistema.

:wq!

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *