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
| Command | Description |
|---|
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 json | jq` |
コンパクト出力はイベントごとに 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"
| Command | Description |
|---|
kubectl apply -f policy.yaml | TracingPolicy をロード(Kubernetes) |
kubectl get tracingpolicies | アクティブなポリシーをリスト |
kubectl delete tracingpolicy NAME | ポリシーを削除 |
tetra tracingpolicy add policy.yaml | ポリシーをロード(スタンドアロン gRPC) |
tetra tracingpolicy list | ロードされたポリシーをリスト(スタンドアロン) |
Enforcement Actions
セレクターに matchActions ブロックを追加してカーネルで操作:
| Action | Effect |
|---|
Sigkill | 違反するプロセスを同期的にキル |
Override | システムコールから選択したエラーコードを返す |
Post | イベントのみを放出(観察) |
NotifyEnforcer / Signal | プロセスにシグナルを送信 |
matchActions:
- action: Sigkill # ブロック、ログだけでなく
Common Detections
| Goal | Approach |
|---|
| プロセス実行の可視性 | 組み込みプロセス 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
| Aspect | Tetragon | Falco |
|---|
| エンジン | eBPF(Cilium) | eBPF / カーネルモジュール |
| 実施 | はい(カーネル内キル/上書き) | アラート焦点 |
| ポリシーモデル | TracingPolicy CRD | Falco ルール(YAML) |
| K8s ID コンテキスト | 強い(ポッド/ラベル) | はい |
| 最適な対象 | 防止 + 深いカーネル可視性 | 成熟したルールライブラリ、検出 |
Resources