🎨 Sysprovider Code
Sysprovider LogoWiki
🇪🇸Hosting español para ecommerce

Seguridad en Contenedores: Runtime y Políticas con Falco

Actualizado el 16 de mayo de 2026

La seguridad en contenedores ha pasado de ser una preocupación secundaria a un pilar fundamental en cualquier infraestructura moderna. Con la adopción masiva de Kubernetes y entornos cloud-native, el runtime security se ha convertido en la primera línea de defensa contra amenazas que operan dentro del propio sistema operativo. En este contexto, Falco se ha consolidado como la herramienta de referencia para la detección de anomalías y la aplicación de políticas de seguridad en tiempo real.

Este artículo está diseñado para SysAdmins y profesionales de Linux que buscan entender cómo implementar Falco para monitorizar el comportamiento de los contenedores, detectar actividades maliciosas y establecer políticas granulares que protejan el kernel de Linux. Hablaremos de configuración, reglas, integración con orquestadores y casos de uso reales.

¿Qué es Falco y por qué es clave para la seguridad en contenedores?

Falco es un proyecto de la Cloud Native Computing Foundation (CNCF) que actúa como un detector de amenazas en tiempo real para el runtime de contenedores y el kernel de Linux. A diferencia de los firewalls tradicionales o los antivirus, Falco no analiza archivos estáticos, sino que intercepta llamadas al sistema (syscalls) y eventos del kernel para identificar comportamientos sospechosos.

Su funcionamiento se basa en tres pilares:

  • Captura de eventos: Utiliza eBPF (Extended Berkeley Packet Filter) o un módulo del kernel para interceptar syscalls.
  • Motor de reglas: Compara los eventos con un conjunto de reglas definidas por el usuario o por la comunidad.
  • Salida de alertas: Envía notificaciones a múltiples canales (syslog, stdout, webhooks, Slack, etc.).

Para un SysAdmin, Falco es la pieza que cierra el círculo de la seguridad en contenedores. Mientras que los escáneres de imágenes (Trivy, Clair) protegen el build, y las políticas de red (Calico, Cilium) controlan el tráfico, Falco protege el runtime: detecta si un contenedor intenta ejecutar un shell, leer archivos sensibles del host, o modificar la configuración de red.

[INFO] Falco no reemplaza herramientas como SELinux o AppArmor, sino que las complementa. Mientras que los LSM (Linux Security Modules) aplican políticas de control de acceso, Falco genera alertas sobre comportamientos anómalos que podrían indicar un ataque en curso.

Instalación y configuración básica de Falco en Linux

La instalación de Falco es directa en cualquier distribución moderna de Linux. El método recomendado es mediante el repositorio oficial.

Instalación mediante script oficial

curl -fsSL https://falco.org/repo/falcosecurity-3674BA8F.asc | gpg --dearmor -o /usr/share/keyrings/falco-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/falco-archive-keyring.gpg] https://download.falco.org/packages/deb stable main" | tee /etc/apt/sources.list.d/falcosecurity.list
apt-get update && apt-get install -y falco

Para sistemas RHEL/CentOS:

rpm --import https://falco.org/repo/falcosecurity-3674BA8F.asc
cat > /etc/yum.repos.d/falcosecurity.repo <<EOF
[falcosecurity]
name=Falco Repository
baseurl=https://download.falco.org/packages/rpm
enabled=1
gpgcheck=1
gpgkey=https://falco.org/repo/falcosecurity-3674BA8F.asc
EOF
yum install -y falco

Configuración del driver

Falco necesita un driver de kernel para capturar syscalls. Por defecto, intenta usar eBPF. Si tu kernel lo soporta (versión 4.15+), puedes habilitarlo explícitamente editando /etc/falco/falco.yaml:

engine:
  kind: ebpf
  bpf:
    probe: /root/.falco/falco-bpf.o

Si tu kernel no soporta eBPF, Falco usará un módulo del kernel que puedes compilar con:

falco-driver-loader

Primeros pasos con Falco

Una vez instalado, inicia el servicio:

systemctl start falco
systemctl enable falco

Puedes ver las alertas en tiempo real con:

journalctl -u falco -f

O bien ejecutar Falco en primer plano para pruebas:

falco -c /etc/falco/falco.yaml

Políticas de seguridad: El corazón de Falco

Falco es tan potente como sus reglas. El archivo /etc/falco/falco_rules.yaml contiene las políticas por defecto, pero para una seguridad contenedores efectiva, necesitas personalizarlas.

Estructura de una regla

Cada regla sigue este formato:

- rule: Nombre descriptivo
  desc: Descripción detallada
  condition: >
    evt.type=openat and
    fd.name contains /etc/shadow
  output: "Se ha intentado acceder a %fd.name (usuario=%user.name, proceso=%proc.name)"
  priority: WARNING
  tags: [filesystem, sensitive]

Componentes clave:

  • condition: Expresión lógica que combina campos como evt.type, fd.name, proc.name, container.id.
  • output: Plantilla de mensaje con variables de contexto.
  • priority: Nivel de severidad (EMERGENCY, ALERT, CRITICAL, ERROR, WARNING, NOTICE, INFO, DEBUG).

Reglas esenciales para runtime security

Aquí tienes un conjunto de reglas que todo SysAdmin debería considerar para proteger el runtime:

1. Detectar ejecución de shell en contenedores

- rule: Shell en contenedor
  desc: Detección de shell interactivo dentro de un contenedor
  condition: >
    spawned_process and
    container.id != host and
    proc.name in (bash, zsh, sh, dash, ksh)
  output: "Shell detectado en contenedor (usuario=%user.name, comando=%proc.cmdline, contenedor=%container.name)"
  priority: CRITICAL
  tags: [container, shell]

2. Acceso a archivos sensibles del host

- rule: Acceso a /etc/shadow desde contenedor
  desc: Intento de leer el archivo de contraseñas del host
  condition: >
    open_read and
    fd.name = /etc/shadow and
    container.id != host
  output: "Intento de acceso a %fd.name desde contenedor %container.name"
  priority: CRITICAL
  tags: [filesystem, privilege-escalation]

3. Montaje de dispositivos del host

- rule: Montaje de disco desde contenedor
  desc: Un contenedor intenta montar un disco del host
  condition: >
    evt.type = mount and
    container.id != host
  output: "Montaje de dispositivo detectado en contenedor %container.name"
  priority: ALERT
  tags: [privilege-escalation, host]

[WARNING] Las reglas por defecto de Falco son muy sensibles. En entornos de producción, es probable que generen falsos positivos. Ajusta las condiciones y prioridades según tu contexto.

Integración de Falco con Kubernetes y orquestadores

Para un entorno cloud-native, Falco se despliega típicamente como un DaemonSet en Kubernetes. Esto asegura que cada nodo ejecute una instancia de Falco que monitoriza todos los contenedores.

Despliegue rápido con Helm

helm repo add falcosecurity https://falcosecurity.github.io/charts
helm repo update
helm install falco falcosecurity/falco \
  --namespace falco \
  --create-namespace \
  --set falco.driver.kind=ebpf

Configuración para Kubernetes

Puedes pasar reglas personalizadas mediante un ConfigMap:

kubectl create configmap falco-rules \
  --from-file=custom_rules.yaml \
  -n falco

Y luego montarlo en el DaemonSet editando los valores de Helm:

falco:
  rulesFile:
    - /etc/falco/custom_rules.yaml
  customRules:
    custom_rules.yaml: |-
      - rule: Kubectl exec en contenedor
        desc: Detectar ejecución de kubectl exec
        condition: >
          spawned_process and
          container.id != host and
          proc.name = kubectl
        output: "kubectl exec detectado (usuario=%user.name, comando=%proc.cmdline)"
        priority: WARNING
        tags: [k8s, exec]

Envío de alertas a sistemas externos

Falco puede enviar alertas a múltiples destinos. Aquí un ejemplo para enviar a un webhook de Slack:

programOutput:
  enabled: true
  keepAlive: false
  program: "jq '{text: .output}' | curl -X POST -H 'Content-type: application/json' --data-binary @- https://hooks.slack.com/services/TXXXXX/BXXXXX/XXXXXX"

Casos de uso reales para SysAdmin 2025

En el contexto de SysAdmin 2025, la seguridad runtime con Falco se aplica a escenarios concretos:

1. Detección de cryptominers

Los atacantes despliegan contenedores que ejecutan mineros de criptomonedas. Falco puede detectar el uso intensivo de CPU y procesos con nombres sospechosos:

- rule: Cryptominer detectado
  desc: Proceso con alta probabilidad de ser un minero
  condition: >
    spawned_process and
    (proc.name in (xmrig, cpuminer, minerd, ccminer) or
     proc.cmdline contains "stratum+tcp://")
  output: "Posible cryptominer ejecutándose (usuario=%user.name, comando=%proc.cmdline)"
  priority: CRITICAL
  tags: [crypto, malware]

2. Prevención de escalada de privilegios

Un contenedor que intenta ejecutar nsenter para escapar al host:

- rule: Escalada con nsenter
  desc: Intento de usar nsenter para escapar del contenedor
  condition: >
    spawned_process and
    proc.name = nsenter and
    container.id != host
  output: "Posible intento de escape de contenedor con nsenter"
  priority: ALERT
  tags: [privilege-escalation, container-escape]

3. Monitorización de conexiones de red inusuales

Falco puede detectar conexiones salientes a IPs sospechosas:

- rule: Conexión a IP maliciosa
  desc: Conexión saliente a una IP de reputación conocida
  condition: >
    outbound and
    fd.ip in (list_of_malicious_ips)
  output: "Conexión saliente a IP maliciosa (%fd.ip) desde contenedor %container.name"
  priority: CRITICAL
  tags: [network, c2]

Buenas prácticas para el rendimiento y la gestión de Falco

Falco, al interceptar syscalls, puede tener un impacto en el rendimiento del sistema. Sigue estas recomendaciones para minimizar la sobrecarga:

  • Usa eBPF en lugar del módulo del kernel: eBPF tiene menor latencia y no requiere compilación de módulos.
  • Ajusta la frecuencia de muestreo: En falco.yaml, modifica syscall_event_drops.max_burst para evitar saturar el sistema.
  • Excluye namespaces de sistema: Ignora contenedores del sistema (kube-system) con condiciones como not (container.image contains "kube").
  • Prioriza reglas: Las reglas se evalúan en orden. Coloca las más específicas al principio.
  • Monitoriza el propio Falco: Usa métricas Prometheus para verificar que Falco no está perdiendo eventos.

[TIP] Para entornos de alta densidad de contenedores, considera usar Falco con sidecar en lugar de DaemonSet, aunque esto aumenta la complejidad.

Conclusión: Falco como estándar para runtime security

La seguridad en contenedores no termina en el escaneo de imágenes ni en las políticas de red. El runtime security, con herramientas como Falco, ofrece la visibilidad necesaria para detectar amenazas en tiempo real, desde ataques de escalada de privilegios hasta ejecución de malware.

Para un SysAdmin en 2025, dominar Falco significa poder responder a incidentes antes de que se conviertan en brechas. La combinación de reglas personalizadas, integración con Kubernetes y alertas en tiempo real convierte a Falco en una pieza indispensable del stack de seguridad.

Comienza por desplegar Falco en un entorno de pruebas, ajusta las reglas a tu contexto, y escala progresivamente. La seguridad runtime no es un lujo, es una necesidad en cualquier infraestructura cloud-native.

¿Necesitas ayuda?Son dos de nuestros técnicos, Agustín y Mikel, y están disponibles para resolver cualquier problema.

Hablar con ellos ahora
Agustín y Mikel