Saltar al contenido
Lectura14 minPreview

Qué es de verdad un contenedor y por qué no es una máquina virtual

Antes de hablar de ataques conviene tener muy claro qué es un contenedor, porque casi todos los riesgos del curso nacen de un malentendido: creer que un contenedor es una caja tan sellada como una máquina virtual. No lo es, y entender por qué es el primer paso para defenderse.

Qué es un contenedor

Un contenedor es un proceso normal del sistema operativo al que el núcleo le muestra una versión recortada de la máquina: ve solo sus propios archivos, sus propios procesos y su propia red, como si estuviera solo en el equipo. No es una computadora dentro de otra; es un programa que corre en el anfitrión con una venda en los ojos que le oculta todo lo demás.

Esa venda la ponen dos funciones del núcleo de Linux. Los espacios de nombres (namespaces) deciden qué puede ver el proceso: qué procesos existen, qué red hay, qué sistema de archivos. Los grupos de control (cgroups) deciden cuánto puede consumir: cuánta memoria, cuánta CPU. Juntos crean la ilusión de una máquina aparte. Pero debajo de la ilusión hay un solo núcleo, el del anfitrión, compartido por todos los contenedores.

Por qué no es una máquina virtual

Esta es la diferencia que lo cambia todo para la seguridad.

Máquina virtualContenedor
Qué aíslaHardware virtual completo sobre un hipervisorUn proceso, mediante funciones del núcleo
NúcleoCada máquina tiene el suyoTodos comparten el del anfitrión
ArranqueLento, pesado (un sistema completo)Rápido, liviano
Si falla el aislamientoHay que vencer al hipervisor, barrera gruesaBasta una mala configuración o una falla del núcleo

Una máquina virtual lleva su propio núcleo y se apoya en un hipervisor; para saltar de una a otra hay que atravesar una barrera diseñada precisamente para eso. Un contenedor, en cambio, es solo un proceso con la vista recortada. Si la configuración afloja la venda, o si aparece una falla en el núcleo compartido, ese proceso puede alcanzar al anfitrión. A eso se le llama escape de contenedor, y es el corazón del módulo 3.

Un poco de historia

ÉpocaQué cambió
Años setenta y dos milUnix ofrece aislar procesos con mecanismos como chroot; aparecen las jaulas y las primeras formas de aislamiento.
Años dos mil a 2008El núcleo de Linux incorpora los espacios de nombres y los grupos de control, la base técnica de los contenedores.
2013Docker populariza los contenedores: empaquetar una aplicación con todo lo que necesita en una imagen fácil de compartir.
2014 en adelanteGoogle libera Kubernetes para orquestar miles de contenedores; los contenedores se vuelven el estándar para desplegar software.

La lección de esta historia es que la comodidad llegó antes que la cultura de seguridad. Durante años se desplegaron contenedores como root, con imágenes sin revisar y clústeres abiertos, porque "funcionaba". Los ataques de este curso explotan justo esa herencia.

Dónde viven los contenedores

LugarEjemplo
Servidor de una empresaLa tienda en línea de Cafetal Digital empaquetada en contenedores
Nube públicaServicios gestionados de contenedores y clústeres de Kubernetes
Canalizaciones de integraciónCada cambio de código se prueba dentro de un contenedor
Equipo de una persona desarrolladoraBases de datos y servicios de prueba en contenedores locales

Conceptos clave

ConceptoQué significa
ImagenPlantilla de solo lectura, hecha de capas, con la aplicación y sus dependencias
ContenedorInstancia en ejecución de una imagen; un proceso aislado por el núcleo
RegistroServidor donde se guardan y descargan las imágenes
DemonioServicio que corre en el anfitrión y crea y maneja los contenedores
OrquestadorSistema que despliega y coordina muchos contenedores; Kubernetes es el más común
EscapeSalir del aislamiento del contenedor y alcanzar el anfitrión

Con este mapa en mente, el resto del curso recorre cada familia de ataques respondiendo siempre tres preguntas del defensor: cómo funciona, cómo se ve y cómo se frena.