Un contenedor no es una caja fuerte aislada; por defecto, es una invitación a un escalamiento de privilegios si no se configura correctamente. La superficie de ataque en entornos cloud sigue siendo el mayor punto de fallo debido a configuraciones permisivas.
El error más común es ejecutar procesos como root. Si un atacante compromete el proceso principal, obtiene acceso inmediato al host si las defensas no son estrictas. La clave es aplicar «seguridad en profundidad» desde el build.
Prácticas fundamentales:
- Usuario No-Root: Define siempre un usuario en tu Dockerfile. Nunca uses el UID 0 en producción.
- Imágenes Minimales: Utiliza Distroless o imágenes basadas en Alpine. Eliminar shells, gestores de paquetes y utilidades de depuración reduce drásticamente el espacio de ataque.
- Multi-stage builds: Compila en una imagen pesada y despliega solo el binario final en una imagen base diminuta.
Ejemplo práctico (Dockerfile optimizado):
# Etapa 1: Build
FROM node:20 AS build
WORKDIR /app
COPY package*.json ./
RUN npm ci --omit=dev
# Etapa 2: Runtime (Segura)
FROM gcr.io/distroless/nodejs20-debian12
WORKDIR /app
# Crear/usar usuario no-privilegiado
USER 1000:1000
COPY --from=build /app/dist .
CMD ["server.js"]
Recomendación de Mitigación:
No omitas el escaneo automatizado. Integra herramientas como Trivy en tu pipeline de CI/CD para bloquear despliegues que contengan vulnerabilidades críticas antes de que lleguen al registro:
$ trivy image --severity CRITICAL,HIGH --exit-code 1 mi-imagen:latest
Además, en el orquestador (Kubernetes), refuerza la seguridad con securityContext:
- runAsNonRoot: true
- allowPrivilegeEscalation: false
- readOnlyRootFilesystem: true (si tu aplicación lo permite).
La seguridad en contenedores no es un «set-it-and-forget-it«. Si no auditas tus imágenes constantemente, la deriva de configuración y las nuevas vulnerabilidades te dejarán expuesto.
¿Estás aplicando cap_drop en tus despliegues de producción para restringir las capacidades del kernel, o sigues confiando únicamente en el escaneo básico de imágenes?
0 comentarios