Tetragon - Cheatsheet Sicurezza Runtime eBPF
Tetragon è uno strumento di sicurezza runtime e osservabilità basato su eBPF open-source del progetto Cilium (CNCF). Hook nel kernel per catturare eventi rilevanti per la sicurezza — esecuzione di processi, accesso ai file, connessioni di rete, uso di capacità e escalation di privilegi — con overhead molto basso, e può applicare la politica in-kernel (kill o override di syscall) piuttosto che solo avvisare. Viene eseguito su Kubernetes o standalone su un host Linux.
Requisiti
- Kernel Linux con BTF (
/sys/kernel/btf/vmlinux presente) — la maggior parte delle distro moderne
- Root / container privilegiato (eBPF ha bisogno di
CAP_BPF / CAP_SYS_ADMIN)
Installazione
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 standalone (Docker)
docker run --name tetragon --rm --pull always \
--pid=host --cgroupns=host --privileged \
-v /sys/kernel:/sys/kernel \
quay.io/cilium/tetragon:latest
Installa 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
Osservazione degli Eventi
| Comando | Descrizione |
|---|
kubectl exec -n kube-system ds/tetragon -c tetragon -- tetra getevents -o compact | Flusso di eventi live (Kubernetes) |
docker exec tetragon tetra getevents -o compact | Flusso di eventi live (standalone) |
tetra getevents | Flusso di eventi JSON completo |
tetra getevents --processes | Solo eventi di exec/exit del processo |
tetra getevents --pods my-pod | Filtra per pod |
| `tetra getevents -o json | jq` |
L’output compatto mostra un riepilogo a riga singola per evento, es. exec di processo, apertura di file o connessione, annotato con pod/binario/argomenti.
TracingPolicy (Cosa Osservare)
Il comportamento di Tetragon è guidato da risorse personalizzate TracingPolicy (o YAML locale in modalità standalone). Una politica si attacca a kprobe/tracepoint/ganci LSM e facoltativamente aggiunge azioni.
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 | Descrizione |
|---|
kubectl apply -f policy.yaml | Carica una TracingPolicy (Kubernetes) |
kubectl get tracingpolicies | Elenca le politiche attive |
kubectl delete tracingpolicy NAME | Rimuovi una politica |
tetra tracingpolicy add policy.yaml | Carica una politica (standalone gRPC) |
tetra tracingpolicy list | Elenca le politiche caricate (standalone) |
Azioni di Enforcement
Aggiungi un blocco matchActions a un selettore per agire in-kernel:
| Azione | Effetto |
|---|
Sigkill | Uccidi sincronamente il processo trasgressore |
Override | Restituisci un codice di errore scelto dalla syscall |
Post | Emetti un evento solo (osserva) |
NotifyEnforcer / Signal | Invia un segnale al processo |
matchActions:
- action: Sigkill # blocca, non solo registrare
Rilevamenti Comuni
| Obiettivo | Approccio |
|---|
| Visibilità dell’esecuzione dei processi | Eventi incorporati di exec/exit del processo (nessuna politica necessaria) |
| Accesso ai file sensibili | kprobe su security_file_permission con selettori di percorso |
| Escalation di privilegi | Osserva i cambiamenti di capacità / famiglia setuid |
| Egresso di rete inaspettato | Hook di connessione tcp con selettori CIDR |
| Tentativi di fuga del container | Monitoraggio dei cambiamenti di namespace/capacità |
Suggerimenti per Filtraggio e Output
# Mostra solo eventi di exec per un binario specifico
tetra getevents -o compact | grep curl
# Flusso compatto gradevole e colorato
kubectl exec -n kube-system ds/tetragon -c tetragon -- tetra getevents -o compact --pods web
# Esporta JSON grezzo per una pipeline SIEM
tetra getevents -o json >> /var/log/tetragon-events.json
Tetragon vs Falco
| Aspetto | Tetragon | Falco |
|---|
| Engine | eBPF (Cilium) | eBPF / modulo kernel |
| Enforcement | Sì (kill/override in-kernel) | Orientato agli avvisi |
| Modello di politica | CRD TracingPolicy | Regole Falco (YAML) |
| Contesto di identità K8s | Forte (pod/etichette) | Sì |
| Migliore per | Prevenzione + visibilità kernel profonda | Libreria di regole matura, rilevamento |
Risorse