Tetragon - eBPF 런타임 보안 치트시트
Tetragon은 Cilium 프로젝트(CNCF)의 오픈 소스 eBPF 기반 런타임 보안 및 관찰성 도구입니다. 커널을 후킹하여 보안 관련 이벤트(프로세스 실행, 파일 액세스, 네트워크 연결, 권한 사용 및 권한 상승)를 매우 낮은 오버헤드로 캡처하며, 경고만 하는 대신 커널 내에서 정책을 시행(syscall 종료 또는 재정의)할 수 있습니다. Kubernetes 또는 Linux 호스트에 독립 실행형으로 실행됩니다.
요구 사항
- BTF가 있는 Linux 커널 (
/sys/kernel/btf/vmlinux 존재) — 대부분의 최신 배포판
- Root / 권한 있는 컨테이너 (eBPF는
CAP_BPF / CAP_SYS_ADMIN 필요)
설치
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
독립 실행형 호스트 (Docker)
docker run --name tetragon --rm --pull always \
--pid=host --cgroupns=host --privileged \
-v /sys/kernel:/sys/kernel \
quay.io/cilium/tetragon:latest
tetra CLI 설치
# 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
이벤트 관찰
| 명령어 | 설명 |
|---|
kubectl exec -n kube-system ds/tetragon -c tetragon -- tetra getevents -o compact | 라이브 이벤트 스트림 (Kubernetes) |
docker exec tetragon tetra getevents -o compact | 라이브 이벤트 스트림 (독립 실행형) |
tetra getevents | 전체 JSON 이벤트 스트림 |
tetra getevents --processes | 프로세스 exec/exit 이벤트만 |
tetra getevents --pods my-pod | pod별 필터 |
| `tetra getevents -o json | jq` |
Compact 출력은 이벤트당 한 줄 요약(예: 프로세스 exec, 파일 열기 또는 연결)을 표시하며 pod/binary/args로 주석이 달립니다.
TracingPolicy (감시할 항목)
Tetragon의 동작은 TracingPolicy 사용자 정의 리소스(또는 독립 실행형 모드에서 로컬 YAML)로 구동됩니다. 정책은 kprobe/tracepoint/LSM 훅에 연결되고 선택적으로 작업을 추가합니다.
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"
| 명령어 | 설명 |
|---|
kubectl apply -f policy.yaml | TracingPolicy 로드 (Kubernetes) |
kubectl get tracingpolicies | 활성 정책 나열 |
kubectl delete tracingpolicy NAME | 정책 제거 |
tetra tracingpolicy add policy.yaml | 정책 로드 (독립 실행형 gRPC) |
tetra tracingpolicy list | 로드된 정책 나열 (독립 실행형) |
시행 작업
선택자에 matchActions 블록을 추가하여 커널 내에서 작업합니다:
| 동작 | 효과 |
|---|
Sigkill | 오프성 프로세스를 동기식으로 종료 |
Override | syscall에서 선택한 오류 코드 반환 |
Post | 이벤트만 내보냄 (관찰) |
NotifyEnforcer / Signal | 프로세스에 신호 전송 |
matchActions:
- action: Sigkill # block, don't just log
일반적인 감지
| 목표 | 접근 방법 |
|---|
| 프로세스 실행 가시성 | 내장 프로세스 exec/exit 이벤트 (정책 불필요) |
| 민감한 파일 액세스 | security_file_permission에서 kprobe, 경로 선택자 포함 |
| 권한 상승 | 권한 변경 / setuid 계열 감시 |
| 예상치 못한 네트워크 유출 | CIDR 선택자가 있는 tcp 연결 훅 |
| 컨테이너 이스케이프 시도 | 네임스페이스/권한 변경 모니터링 |
필터링 및 출력 팁
# 특정 바이너리의 exec 이벤트만 표시
tetra getevents -o compact | grep curl
# 예쁜, 색상화된 compact 스트림
kubectl exec -n kube-system ds/tetragon -c tetragon -- tetra getevents -o compact --pods web
# SIEM 파이프라인용 원시 JSON 내보내기
tetra getevents -o json >> /var/log/tetragon-events.json
Tetragon vs Falco
| 측면 | Tetragon | Falco |
|---|
| 엔진 | eBPF (Cilium) | eBPF / 커널 모듈 |
| 시행 | 네 (커널 내 종료/재정의) | 경고 중심 |
| 정책 모델 | TracingPolicy CRD | Falco 규칙 (YAML) |
| K8s 신원 컨텍스트 | 강함 (pod/labels) | 네 |
| 최적 용도 | 방지 + 깊은 커널 가시성 | 성숙한 규칙 라이브러리, 감지 |
자료