コンテンツにスキップ

Tetragon - eBPF ランタイムセキュリティチートシート

Tetragon - eBPF ランタイムセキュリティチートシート

Tetragon は Cilium プロジェクト(CNCF)からのオープンソース eBPF ベースのランタイムセキュリティおよび可視性ツールです。カーネルをフックしてセキュリティ関連イベント(プロセス実行、ファイルアクセス、ネットワーク接続、機能使用、権限昇格)をキャプチャするため、非常にオーバーヘッドが少なく、アラートするだけでなくカーネルでポリシーを実施(キルまたはシステムコール上書き)できます。Kubernetes またはスタンドアロンで Linux ホストで実行します。

Requirements

  • BTF を備えた Linux カーネル(/sys/kernel/btf/vmlinux 存在) — ほとんどの最新ディストリビューション
  • ルート / 特権コンテナ(eBPF には 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

スタンドアロンホスト(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

Observing Events

CommandDescription
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ポッドでフィルタリング
`tetra getevents -o jsonjq`

コンパクト出力はイベントごとに 1 行の概要(プロセス実行、ファイルオープン、接続など)を表示し、ポッド/バイナリ/引数で注釈が付けられます。

TracingPolicy (What to Watch)

Tetragon の動作は TracingPolicy カスタムリソース(またはスタンドアロンモードでローカル YAML)で駆動されます。ポリシーは kprobes/tracepoints/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"
CommandDescription
kubectl apply -f policy.yamlTracingPolicy をロード(Kubernetes)
kubectl get tracingpoliciesアクティブなポリシーをリスト
kubectl delete tracingpolicy NAMEポリシーを削除
tetra tracingpolicy add policy.yamlポリシーをロード(スタンドアロン gRPC)
tetra tracingpolicy listロードされたポリシーをリスト(スタンドアロン)

Enforcement Actions

セレクターに matchActions ブロックを追加してカーネルで操作:

ActionEffect
Sigkill違反するプロセスを同期的にキル
Overrideシステムコールから選択したエラーコードを返す
Postイベントのみを放出(観察)
NotifyEnforcer / Signalプロセスにシグナルを送信
      matchActions:
      - action: Sigkill        # ブロック、ログだけでなく

Common Detections

GoalApproach
プロセス実行の可視性組み込みプロセス exec/exit イベント(ポリシー不要)
機密ファイルアクセスパスセレクターを持つ security_file_permission への kprobe
権限昇格機能変更 / setuid ファミリーを監視
予期しないネットワーク出力CIDR セレクターを持つ tcp connect フック
コンテナ脱出の試み名前空間/機能変更監視

Filtering & Output Tips

# 特定のバイナリの exec イベントのみを表示
tetra getevents -o compact | grep curl

# 立派でカラー化されたコンパクトストリーム
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

AspectTetragonFalco
エンジンeBPF(Cilium)eBPF / カーネルモジュール
実施はい(カーネル内キル/上書き)アラート焦点
ポリシーモデルTracingPolicy CRDFalco ルール(YAML)
K8s ID コンテキスト強い(ポッド/ラベル)はい
最適な対象防止 + 深いカーネル可視性成熟したルールライブラリ、検出

Resources