Tetragon - Segurança de Runtime eBPF
Tetragon é uma ferramenta open-source de segurança de runtime e observabilidade baseada em eBPF do projeto Cilium (CNCF). Ele engancha o kernel para capturar eventos relevantes para segurança — execução de processo, acesso a arquivos, conexões de rede, uso de capacidade e escalada de privilégio — com overhead muito baixo, e pode aplicar política no kernel (matar ou substituir syscalls) em vez de apenas alertar. Ele funciona em Kubernetes ou standalone em um host Linux.
Requisitos
- Kernel Linux com BTF (
/sys/kernel/btf/vmlinux presente) — a maioria das distros modernas
- Root / contêiner privilegiado (eBPF precisa de
CAP_BPF / CAP_SYS_ADMIN)
Instalação
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
Instala a 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 | Descrição |
|---|
kubectl exec -n kube-system ds/tetragon -c tetragon -- tetra getevents -o compact | Stream de eventos ao vivo (Kubernetes) |
docker exec tetragon tetra getevents -o compact | Stream de eventos ao vivo (standalone) |
tetra getevents | Stream de eventos JSON completo |
tetra getevents --processes | Apenas eventos de exec/exit de processo |
tetra getevents --pods my-pod | Filtra por pod |
tetra getevents -o json | jq | Encanamento JSON para consultas ad-hoc |
A saída compacta mostra um resumo de uma linha por evento, ex: exec de processo, abertura de arquivo ou conexão, anotado com pod/binário/args.
TracingPolicy (O que Observar)
O comportamento do Tetragon é impulsionado por recursos TracingPolicy customizados (ou YAML local em modo standalone). Uma política se anexa a kprobes/tracepoints/hooks LSM e opcionalmente adiciona ações.
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 | Descrição |
|---|
kubectl apply -f policy.yaml | Carrega uma TracingPolicy (Kubernetes) |
kubectl get tracingpolicies | Lista políticas ativas |
kubectl delete tracingpolicy NAME | Remove uma política |
tetra tracingpolicy add policy.yaml | Carrega uma política (gRPC standalone) |
tetra tracingpolicy list | Lista políticas carregadas (standalone) |
Ações de Aplicação
Adiciona um bloco matchActions a um seletor para agir no kernel:
| Ação | Efeito |
|---|
Sigkill | Mata o processo ofensor sincronamente |
Override | Retorna um código de erro escolhido da syscall |
Post | Emite um evento apenas (observar) |
NotifyEnforcer / Signal | Envia um sinal ao processo |
matchActions:
- action: Sigkill # bloqueia, não apenas registra
Detecções Comuns
| Objetivo | Abordagem |
|---|
| Visibilidade de execução de processo | Eventos integrados de exec/exit de processo (sem política necessária) |
| Acesso a arquivo sensível | kprobe em security_file_permission com seletores de caminho |
| Escalada de privilégio | Observa mudanças de capacidade / família setuid |
| Egresso de rede inesperado | Hooks de tcp connect com seletores CIDR |
| Tentativas de escape de contêiner | Monitoramento de mudança de namespace/capacidade |
Dicas de Filtragem & Saída
# Mostra apenas eventos de exec para um binário específico
tetra getevents -o compact | grep curl
# Stream compacto bem formado, colorizado
kubectl exec -n kube-system ds/tetragon -c tetragon -- tetra getevents -o compact --pods web
# Exporta JSON bruto para um pipeline SIEM
tetra getevents -o json >> /var/log/tetragon-events.json
Tetragon vs Falco
| Aspecto | Tetragon | Falco |
|---|
| Mecanismo | eBPF (Cilium) | eBPF / módulo de kernel |
| Aplicação | Sim (kill/override no kernel) | Focado em alertas |
| Modelo de política | CRDs TracingPolicy | Regras Falco (YAML) |
| Contexto de identidade K8s | Forte (pod/labels) | Sim |
| Melhor para | Prevenção + visibilidade profunda de kernel | Biblioteca de regras madura, detecção |
Recursos