콘텐츠로 이동

Tetragon - eBPF 런타임 보안 치트시트

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-podpod별 필터
`tetra getevents -o jsonjq`

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.yamlTracingPolicy 로드 (Kubernetes)
kubectl get tracingpolicies활성 정책 나열
kubectl delete tracingpolicy NAME정책 제거
tetra tracingpolicy add policy.yaml정책 로드 (독립 실행형 gRPC)
tetra tracingpolicy list로드된 정책 나열 (독립 실행형)

시행 작업

선택자에 matchActions 블록을 추가하여 커널 내에서 작업합니다:

동작효과
Sigkill오프성 프로세스를 동기식으로 종료
Overridesyscall에서 선택한 오류 코드 반환
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

측면TetragonFalco
엔진eBPF (Cilium)eBPF / 커널 모듈
시행네 (커널 내 종료/재정의)경고 중심
정책 모델TracingPolicy CRDFalco 규칙 (YAML)
K8s 신원 컨텍스트강함 (pod/labels)
최적 용도방지 + 깊은 커널 가시성성숙한 규칙 라이브러리, 감지

자료