Cómo asegurar un clúster de Kubernetes evitando que se carguen módulos no deseados


El camino para asegurar los contenedores es largo y sinuoso. Una parada que debe emprender en ese viaje es descargar módulos innecesarios del kernel en sus contenedores de Linux.

Scull sobre fondo azul digital. conceptos de seguridad

Imagen: iStockphoto / BigNazik

Kubernetes es un increíble sistema de gestión de contenedores. Pero con ese poder viene una gran responsabilidad en nombre de los desarrolladores y administradores. Si no está implementando contenedores seguros en clústeres seguros, está librando una batalla perdida desde el principio.

Afortunadamente, estamos hablando de Linux, por lo que hay muchas cosas que puede hacer para ayudar a garantizar la seguridad de sus implementaciones.

Una tarea crucial que puede emprender es evitar que los módulos de kernel no deseados se carguen en sus contenedores. Te sorprendería la cantidad de módulos que se cargan en el arranque, muchos de los cuales probablemente no necesites usar dentro de tus contenedores.

¿Pero cómo evitas que se carguen? Voy a mostrarte.

VER: Seguridad de Windows 10: una guía para líderes empresariales (TechRepublic Top quality)

Lo que necesitarás

Demostraré esto usando un contenedor basado en la última imagen de Ubuntu Server. Estaré haciendo esto a través de Multipass herramienta. Para obtener más información sobre cómo instalar y usar Multipass, consulte mi tutorial: Cómo usar Multipass, una nueva herramienta para iniciar máquinas virtuales.

Si no está utilizando Multipass, aún puede encargarse de esto, independientemente de la tecnología de contenedor que esté utilizando, siempre que sus contenedores estén basados ​​en Linux.

Cómo implementar y acceder al contenedor de Ubuntu

Primero implementemos un nuevo contenedor con Multipass. Implementaremos Ubuntu Everyday 20.04 con el comando:

multipass launch every day:20.04

Una vez que se haya lanzado el contenedor, se le presentará el nombre generado aleatoriamente para la implementación. Si pierde ese nombre, puede verlo con el comando:

multipass checklist

Ahora que el contenedor se ha implementado, acceda a su shell con el comando:

multipass shell Title

Donde Identify es el nombre generado aleatoriamente para el contenedor.

Cómo descargar y poner en lista negra los módulos

Lo que vamos a hacer es poner en una lista negra los módulos que no queremos cargar en nuestros contenedores. Para hacer eso, primero debe saber qué módulos se están cargando. Para enumerar todos los módulos cargados actualmente, emita el comando:

lsmod

Se le presentarán todos los módulos que se cargan actualmente en el kernel (Figura A)

Figura A

Nuestros módulos cargados actualmente en Ubuntu 20.04.

«data-credit =» «rel =» noopener noreferrer nofollow «>modules-loaded.jpg "src =" https://tr4.cbsistatic.com/hub/i/r/2020/04/09/38de798f-4938-4253-9665-af1cd53e31c1/resize/770x/3adbd6188379043d9ff3bd6e32dda048/modules-loaded .jpg

Nuestros módulos cargados actualmente en Ubuntu 20.04.

Peine esa lista y encuentre todos los módulos que no desea cargar en el núcleo de su contenedor. Dado que los contenedores generalmente tienen un propósito muy específico, probablemente hay algunos que podemos incluir en la lista negra.

Antes de crear una lista negra de módulos que no queremos cargar en el arranque, tenemos que descargarlos. ¿Por qué? Este es un contenedor, no una máquina virtual o un sistema operativo estándar, por lo que no puede reiniciar. Es por eso que necesitamos descargar manualmente los módulos.

Para descargar manualmente un módulo en ejecución, emita el comando:

sudo modprobe -r MODULENAME

Donde MODULENAME es el nombre del módulo.

Si emite el comando lsmod, debería ver que el módulo ya no está cargado en el núcleo.

Una vez que haya compilado su lista, abra el archivo de la lista negra para editarlo con el comando:

sudo nano /and so forth/modprobe.d/blacklist.conf

En ese archivo, agregará todos los módulos que desea evitar que se carguen en forma de:

blacklist MODULENAME

Donde MODULENAME es el nombre del módulo. Digamos, por ejemplo, que desea evitar que se cargue el módulo del núcleo del disquete. Para hacer eso, la entrada sería:

blacklist floppy

Nota: Desea tener cuidado de no incluir en la lista negra los módulos que son cruciales para la ejecución del sistema operativo o de lo que dependa su contenedor. Entonces, antes de incluir en la lista negra un módulo, asegúrese de investigar un poco sobre lo que hace ese módulo.

En este punto, ha eliminado manualmente todos los módulos del núcleo que no desea cargar y ha creado una lista negra para evitar que se carguen. Debería poder detener e iniciar el contenedor y ver esos módulos en la lista negra que ya no se cargan.

Sin embargo, si encuentra que los módulos aún se están cargando, significa que la imagen todavía está usando la copia anterior de initramfs que no contiene su cambio. Reconstruya initramfs con el comando:

sudo update-initramfs -u

La próxima vez que pare e inicie su contenedor, encontrará que los módulos incluidos en la lista negra seguramente no se cargarán.

No es de talla única para todos

Esta no es una medida de seguridad única para todos sus contenedores Kubernetes. Sin embargo, es algo que debe considerar al desarrollar sus aplicaciones y servicios que dependen de un contenedor de Linux. No desea módulos extraños, ya veces inseguros, que se ejecutan en un contenedor que podría funcionar con el mínimo.

Piense en este proceso como uno de los muchos peldaños que debe cruzar para desplegar contenedores verdaderamente seguros.

Ver también



Enlace a la noticia authentic