Tetragon - أمان وقت التشغيل eBPF
Tetragon هي أداة مفتوحة المصدر قائمة على eBPF لأمان وقت التشغيل والمراقبة من مشروع Cilium (CNCF). تخطاف النواة لالتقاط الأحداث ذات الصلة بالأمان — تنفيذ العملية والوصول إلى الملفات والاتصالات على الشبكة واستخدام القدرات وتصعيد الامتيازات — مع نفقية منخفضة جداً، و يمكنها تنفيذ السياسة داخل النواة (إنهاء أو تجاوز استدعاءات النظام) بدلاً من الإنذار فقط. تعمل على Kubernetes أو بشكل مستقل على مضيف Linux.
المتطلبات
- نواة Linux مع BTF (
/sys/kernel/btf/vmlinux موجود) — معظم التوزيعات الحديثة
- الجذر / حاوية مميزة (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
تثبيت 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
مراقبة الأحداث
| الأمر | الوصف |
|---|
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` |
يعرض الإخراج المضغوط ملخص سطر واحد لكل حدث، مثل تنفيذ العملية أو فتح الملف أو الاتصال، مع تعليق pod/binary/args.
TracingPolicy (ما يجب مراقبته)
يتم دفع سلوك Tetragon بموارد TracingPolicy مخصصة (أو YAML محلي في الوضع المستقل). تعلق السياسة على kprobes/tracepoints/LSM hooks وتضيف الإجراءات بشكل اختياري.
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 | إرجاع رمز خطأ مختار من استدعاء النظام |
Post | بث حدث فقط (مراقبة) |
NotifyEnforcer / Signal | إرسال إشارة إلى العملية |
matchActions:
- action: Sigkill # كتل، لا تسجيل فقط
الكشف الشائع
| الهدف | النهج |
|---|
| رؤية تنفيذ العملية | الأحداث المدمجة exec/exit للعملية (بدون سياسة مطلوبة) |
| الوصول إلى الملفات الحساسة | kprobe على security_file_permission مع محددات المسار |
| تصعيد الامتيازات | مراقبة تغييرات القدرات / عائلة setuid |
| خروج الشبكة غير المتوقع | خطاف tcp connect مع محددات CIDR |
| محاولات الهروب من الحاوية | مراقبة تغييرات Namespace/القدرات |
تصفية وتلميحات الإخراج
# عرض أحداث exec فقط لملف تنفيذي محدد
tetra getevents -o compact | grep curl
# تدفق مضغوط ملون وجميل
kubectl exec -n kube-system ds/tetragon -c tetragon -- tetra getevents -o compact --pods web
# تصدير JSON خام لخط أنابيب SIEM
tetra getevents -o json >> /var/log/tetragon-events.json
Tetragon مقابل Falco
| الجانب | Tetragon | Falco |
|---|
| المحرك | eBPF (Cilium) | eBPF / وحدة النواة |
| الإنفاذ | نعم (إنهاء/تجاوز داخل النواة) | التنبيهات تركز |
| نموذج السياسة | TracingPolicy CRDs | قواعد Falco (YAML) |
| سياق الهوية K8s | قوي (pod/labels) | نعم |
| الأفضل لـ | الوقاية + رؤية نواة عميقة | مكتبة قواعد ناضجة والكشف |
الموارد