Seguridad de nube e infraestructura

Seguridad de contenedores

Se lee en aproximadamente 4 minutos

Qué es la seguridad de contenedores

La seguridad de contenedores es el esfuerzo por garantizar la seguridad a lo largo de todo el ciclo de vida de los contenedores, desde la construcción hasta el despliegue y la ejecución. Como los contenedores comparten el kernel del SO host, requieren un modelo de seguridad diferente al de las máquinas virtuales.

La seguridad de contenedores se divide en 3 fases: tiempo de construcción (seguridad de la imagen), tiempo de despliegue (seguridad de la configuración) y tiempo de ejecución (protección en ejecución). Proteger solo una fase es insuficiente; se requiere defensa en profundidad a través de todas las fases. Gestionar la configuración de contenedores con IaC e incorporar verificaciones de seguridad en el pipeline CI/CD es el punto de partida práctico.

Seguridad de imágenes y protección de la cadena de suministro

Las imágenes de contenedores son propensas a ser punto de partida de ataques, y la seguridad en tiempo de construcción es la más importante.

  • Selección de imagen base: Usar imágenes base con paquetes mínimos como Alpine o distroless. Menos paquetes innecesarios significa menor superficie de ataque
  • Escaneo de imágenes: Detectar vulnerabilidades en paquetes del SO y bibliotecas contenidas en la imagen con herramientas como Trivy, Grype y Snyk Container. Integrar en el pipeline CI/CD para bloquear automáticamente el despliegue de imágenes con vulnerabilidades Critical
  • Firma de imágenes: Firmar imágenes con Cosign (Sigstore) y verificar la firma al desplegar. Previene la ejecución de imágenes manipuladas o no autorizadas
  • Registro privado: Obtener imágenes para producción de registros privados con control de acceso. No usar directamente imágenes públicas de Docker Hub en producción

Seguridad en tiempo de ejecución y mínimo privilegio

En la ejecución de contenedores, la minimización de privilegios y la detección de anomalías son los pilares de la defensa.

  • Ejecución no root: Ejecutar procesos de contenedor con usuarios distintos de root. Especificar un usuario no privilegiado con la directiva USER del Dockerfile
  • Sistema de archivos de solo lectura: Configurar readOnlyRootFilesystem: true para prevenir la alteración de archivos dentro del contenedor. Montar solo los directorios que necesitan escritura como tmpfs
  • Restricción de Capabilities: Eliminar todas las Linux Capabilities (drop: ALL) y añadir solo las mínimas necesarias
  • Monitoreo en tiempo de ejecución: Monitorear las llamadas al sistema dentro del contenedor con herramientas como Falco para detectar anomalías como inicio de shell, conexiones de red inesperadas y acceso a archivos sensibles

También es importante asignar roles IAM por unidad de contenedor (Pod) y restringir la comunicación entre Pods con segmentación de red.

Configuración de seguridad de Kubernetes

En entornos Kubernetes, la configuración de seguridad de la capa de orquestación es indispensable.

  • Pod Security Standards: Aplicar el perfil Restricted con Pod Security Admission de Kubernetes para prohibir la ejecución de contenedores privilegiados y el uso de hostNetwork
  • NetworkPolicy: Denegar toda comunicación entre Pods por defecto y permitir solo la comunicación necesaria mediante lista blanca. Bloquear rutas de comunicación innecesarias entre microservicios
  • RBAC: Definir Roles de mínimo privilegio para administradores de clúster, desarrolladores y pipelines CI/CD. Limitar el uso de cluster-admin a emergencias
  • Gestión de Secrets: Los Secrets de Kubernetes son solo codificación Base64, no cifrado. Diseñar para inyectar Secrets desde servicios externos de gestión de secretos (AWS Secrets Manager, HashiCorp Vault)

Conceptos erróneos comunes

Los contenedores están aislados al mismo nivel que las máquinas virtuales, así que son seguros
Los contenedores comparten el kernel del SO host y no tienen el mismo nivel de aislamiento que las máquinas virtuales. Si se explota una vulnerabilidad del kernel, es posible escapar del contenedor al host (container escape). Se necesita defensa en profundidad con Seccomp, AppArmor, ejecución no root, etc.
Las imágenes oficiales de Docker se pueden usar directamente en producción de forma segura
No es raro que las imágenes oficiales contengan vulnerabilidades conocidas. Antes de usar en producción, siempre realiza escaneo de imágenes y crea imágenes personalizadas eliminando paquetes innecesarios. Además, fija con digest (SHA256) en lugar de tags para prevenir actualizaciones no intencionadas.

Diferencia entre seguridad de contenedores y seguridad de VM

Contenedor

Comparte el kernel del SO host. Inicio rápido e imagen ligera. La superficie de ataque depende del contenido de la imagen. Susceptible a vulnerabilidades del kernel. Fácil operación inmutable.

Máquina virtual

Completamente aislada por hipervisor. Inicio lento e imagen grande. Requiere gestión de parches de todo el SO. Aislamiento fuerte a nivel de kernel. Operación con estado generalmente común.

Términos relacionados

Artículos relacionados