Tetragon - Sécurité d’exécution eBPF
Tetragon est un outil open-source de sécurité d’exécution et d’observabilité basé sur eBPF du projet Cilium (CNCF). Il hook le noyau pour capturer les événements liés à la sécurité — exécution de processus, accès aux fichiers, connexions réseau, utilisation de capacités et escalade de privilèges — avec une très faible surcharge, et peut appliquer la politique in-kernel (tuer ou surcharger les syscalls) plutôt que seulement alerter. Il s’exécute sur Kubernetes ou seul sur un hôte Linux.
Exigences
- Noyau Linux avec BTF (
/sys/kernel/btf/vmlinux présent) — la plupart des distros modernes
- Root / conteneur privilégié (eBPF nécessite
CAP_BPF / CAP_SYS_ADMIN)
Installation
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
Hôte standalone (Docker)
docker run --name tetragon --rm --pull always \
--pid=host --cgroupns=host --privileged \
-v /sys/kernel:/sys/kernel \
quay.io/cilium/tetragon:latest
Installer 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
Observer les événements
| Commande | Description |
|---|
kubectl exec -n kube-system ds/tetragon -c tetragon -- tetra getevents -o compact | Flux d’événements en direct (Kubernetes) |
docker exec tetragon tetra getevents -o compact | Flux d’événements en direct (standalone) |
tetra getevents | Flux d’événements JSON complet |
tetra getevents --processes | Uniquement les événements exec/exit de processus |
tetra getevents --pods my-pod | Filtrer par pod |
| `tetra getevents -o json | jq` |
La sortie compacte affiche un résumé d’une ligne par événement, par ex. exec de processus, ouverture de fichier ou connexion, annoté avec pod/binaire/args.
TracingPolicy (Qu’observer)
Le comportement de Tetragon est piloté par les ressources personnalisées TracingPolicy (ou YAML local en mode standalone). Une politique s’attache aux kprobes/tracepoints/hooks LSM et ajoute optionnellement des actions.
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"
| Commande | Description |
|---|
kubectl apply -f policy.yaml | Charger une TracingPolicy (Kubernetes) |
kubectl get tracingpolicies | Lister les politiques actives |
kubectl delete tracingpolicy NAME | Supprimer une politique |
tetra tracingpolicy add policy.yaml | Charger une politique (gRPC standalone) |
tetra tracingpolicy list | Lister les politiques chargées (standalone) |
Actions d’application
Ajouter un bloc matchActions à un sélecteur pour agir in-kernel :
| Action | Effet |
|---|
Sigkill | Tuer le processus contrevenant de manière synchrone |
Override | Retourner un code d’erreur choisi du syscall |
Post | Émettre uniquement un événement (observer) |
NotifyEnforcer / Signal | Envoyer un signal au processus |
matchActions:
- action: Sigkill # bloquer, ne pas seulement enregistrer
Détections courantes
| Objectif | Approche |
|---|
| Visibilité d’exécution de processus | Événements exec/exit de processus intégrés (pas de politique nécessaire) |
| Accès aux fichiers sensibles | kprobe sur security_file_permission avec sélecteurs de chemin |
| Escalade de privilèges | Surveiller les changements de capacité / famille setuid |
| Sortie réseau inattendue | Hooks de connexion tcp avec sélecteurs CIDR |
| Tentatives d’échappement de conteneur | Surveillance des changements de namespace/capacité |
Conseils de filtrage et de sortie
# Afficher uniquement les événements exec pour un binaire spécifique
tetra getevents -o compact | grep curl
# Flux compact joli et colorisé
kubectl exec -n kube-system ds/tetragon -c tetragon -- tetra getevents -o compact --pods web
# Exporter du JSON brut pour un pipeline SIEM
tetra getevents -o json >> /var/log/tetragon-events.json
Tetragon vs Falco
| Aspect | Tetragon | Falco |
|---|
| Moteur | eBPF (Cilium) | eBPF / module du noyau |
| Application | Oui (kill/override in-kernel) | Alerting centrée |
| Modèle de politique | TracingPolicy CRDs | Règles Falco (YAML) |
| Contexte d’identité K8s | Fort (pod/labels) | Oui |
| Meilleur pour | Prévention + visibilité profonde du noyau | Bibliothèque de règles mature, détection |
Ressources