Tecnologías de aislamiento de contenedores: una comparación de AppArmor y SELinux

He estudiado cómo los contenedores, las máquinas virtuales (VM) y los procesos, en general, están separados por diferentes tecnologías, a saber, AppArmor y SELinux. Mi objetivo era comparar estas soluciones para las capacidades de aislamiento/separación en el mundo de la nube.

Como recordatorio, Red Hat Enterprise Linux utiliza la tecnología SELinux para separar procesos, contenedores y máquinas virtuales. OpenShift también utiliza esta tecnología.

La primera opción es una tecnología de aislamiento llamada AppArmor, que es una tecnología muy similar a SELinux. Sin embargo, no se basa en etiquetas. Los perfiles de seguridad de AppArmor, que son equivalentes a las políticas de seguridad de SELinux, parecen más fáciles de usar, pero eso se debe a que AppArmor es menos complicado y controla menos operaciones.

SELinux y AppArmor son compatibles con el modelo de seguridad Type Enforcement, que es un tipo de control de acceso obligatorio basado en reglas donde los sujetos (procesos o usuarios) pueden acceder a objetos (archivos, directorios, sockets, etc.). Sin embargo, lo que AppArmor no tiene es Seguridad multinivel (MLS) y seguridad multicategoría (MCS). Esto significa que usar AppArmor en entornos que requieren MLS es muy difícil, si no imposible.

Las capacidades de MLS/MCS son una gran diferencia entre AppArmor y SELinux. Con AppArmor, no es posible mantener la separación entre contenedores. AppArmor separa los contenedores del host, pero la política de contenedores predeterminada es muy flexible y debe mejorarse para evitar el acceso a todo el sistema de archivos del host. La separación entre cada contenedor no es posible porque AppArmor no es compatible con MCS. SELinux, por defecto, separa los contenedores entre sí y también del sistema de archivos del host. Contenedores de katas podría ser otra solución y una mejor opción en la nube para la separación de contenedores.

La segunda opción es utilizar máquinas virtuales (VM) para aislar los contenedores. Este enfoque se logra colocando contenedores dentro de máquinas virtuales. Esto da como resultado una sobrecarga significativa de la infraestructura de la nube. Con SELinux, es posible aislar pods sin necesidad de usar máquinas virtuales.

Incluso puede generar una política de SELinux específica para contenedores personalizados a través de la údica herramienta.

La siguiente tabla resume las diferencias entre las tecnologías SELinux y AppArmor:

La tecnologia

Tipo de aplicacion

MLS/MCS

Generador de políticas

Generador de contenedores

AppArmor

No

No

SELinux

No*

* SELinux tiene herramientas para hacer esto (audit2allow), en lugar de un contenedor único
como AppArmor.

En resumen, SELinux es una tecnología más compleja que controla más operaciones en un sistema y segrega contenedores por defecto. Este nivel de control no es posible con AppArmor porque carece de MCS. Además, la falta de MLS significa que AppArmor no se puede utilizar en entornos muy seguros.

Las referencias:

[1] https://www.tipstecnologicos.es/en/topics/linux/que-es-selinux

[2] https://apparmor.net/

[3] https://selinuxproject.org/page/NB_TE

[4] https://selinuxproject.org/page/NB_MLS

[5] https://katacontainers.io/

[6] https://github.com/Contenedores/udica

Artículos de interés

Subir