Tetragon - Hoja de Trucos de Seguridad en Tiempo de Ejecución eBPF
Tetragon es una herramienta de código abierto de seguridad en tiempo de ejecución y observabilidad basada en eBPF del proyecto Cilium (CNCF). Engancha el kernel para capturar eventos relevantes para la seguridad — ejecución de procesos, acceso a archivos, conexiones de red, uso de capacidades y escaladas de privilegios — con muy baja sobrecarga, y puede aplicar política en el kernel (matar o anular llamadas al sistema) en lugar de solo alertar. Se ejecuta en Kubernetes o independientemente en un host Linux.
Requisitos
- Kernel Linux con BTF (
/sys/kernel/btf/vmlinux presente) — la mayoría de distros modernas
- Root / contenedor privilegiado (eBPF necesita
CAP_BPF / CAP_SYS_ADMIN)
Instalación
Kubernetes (Helm)
helm repo add cilium https://helm.cilium.io
helm repo update
helm install tetragon cilium/tetragon -n kube-system
kubectl rollout status -n kube-system ds/tetragon -w
Host independiente (Docker)
docker run --name tetragon --rm --pull always \
--pid=host --cgroupns=host --privileged \
-v /sys/kernel:/sys/kernel \
quay.io/cilium/tetragon:latest
Instala la CLI tetra
# Linux amd64
curl -L https://github.com/cilium/tetragon/releases/latest/download/tetra-linux-amd64.tar.gz | tar -xz
sudo mv tetra /usr/local/bin/
tetra version
Observando Eventos
| Comando | Descripción |
|---|
kubectl exec -n kube-system ds/tetragon -c tetragon -- tetra getevents -o compact | Flujo de eventos en vivo (Kubernetes) |
docker exec tetragon tetra getevents -o compact | Flujo de eventos en vivo (independiente) |
tetra getevents | Flujo completo de eventos JSON |
tetra getevents --processes | Solo eventos de ejecución/salida de procesos |
tetra getevents --pods my-pod | Filtra por pod |
| `tetra getevents -o json | jq` |
La salida compacta muestra un resumen de una línea por evento, p. ej. ejecución de proceso, apertura de archivo o conexión, anotada con pod/binario/argumentos.
TracingPolicy (Qué Observar)
El comportamiento de Tetragon es impulsado por recursos personalizados TracingPolicy (o YAML local en modo independiente). Una política se adjunta a kprobes/tracepoints/ganchos LSM y opcionalmente añade acciones.
apiVersion: cilium.io/v1alpha1
kind: TracingPolicy
metadata:
name: monitor-sensitive-files
spec:
kprobes:
- call: "security_file_permission"
syscall: false
args:
- index: 0
type: "file"
selectors:
- matchArgs:
- index: 0
operator: "Prefix"
values:
- "/etc/shadow"
- "/etc/sudoers"
| Comando | Descripción |
|---|
kubectl apply -f policy.yaml | Carga una TracingPolicy (Kubernetes) |
kubectl get tracingpolicies | Lista las políticas activas |
kubectl delete tracingpolicy NAME | Elimina una política |
tetra tracingpolicy add policy.yaml | Carga una política (gRPC independiente) |
tetra tracingpolicy list | Lista las políticas cargadas (independiente) |
Acciones de Aplicación
Añade un bloque matchActions a un selector para actuar en el kernel:
| Acción | Efecto |
|---|
Sigkill | Mata el proceso ofensor de forma síncrona |
Override | Retorna un código de error elegido de la llamada al sistema |
Post | Emite solo un evento (observa) |
NotifyEnforcer / Signal | Envía una señal al proceso |
matchActions:
- action: Sigkill # bloquea, no solo registra
Detecciones Comunes
| Objetivo | Enfoque |
|---|
| Visibilidad de ejecución de procesos | Eventos de ejecución/salida de procesos integrados (no necesita política) |
| Acceso a archivos sensibles | kprobe en security_file_permission con selectores de ruta |
| Escalada de privilegios | Observa cambios de capacidad / familia setuid |
| Egreso de red inesperado | Ganchos de conexión tcp con selectores CIDR |
| Intentos de escape de contenedor | Monitoreo de cambios de espacio de nombres/capacidad |
Consejos de Filtrado y Salida
# Muestra solo eventos exec para un binario específico
tetra getevents -o compact | grep curl
# Flujo compacto bonito y coloreado
kubectl exec -n kube-system ds/tetragon -c tetragon -- tetra getevents -o compact --pods web
# Exporta JSON crudo para un pipeline SIEM
tetra getevents -o json >> /var/log/tetragon-events.json
Tetragon vs Falco
| Aspecto | Tetragon | Falco |
|---|
| Motor | eBPF (Cilium) | eBPF / módulo kernel |
| Aplicación | Sí (matar/anular en kernel) | Enfocada en alertas |
| Modelo de política | CRDs TracingPolicy | Reglas Falco (YAML) |
| Contexto de identidad K8s | Fuerte (pod/etiquetas) | Sí |
| Mejor para | Prevención + visibilidad profunda del kernel | Biblioteca de reglas madura, detección |
Recursos