
عامل أمن وقت التشغيل قائم على eBPF لـ Kubernetes يكتشف العمليات غير المعروفة وتغييرات الملفات، ويفرض القيود المسجلة مسبقًا، ويقوم بأتمتة حذف البود أو التنبيه للتخفيف من هجمات الفدية والهجمات الأخرى.

احمِ تطبيقاتك التي تعمل على Kubernetes من الهجمات الضارة عن طريق التسجيل المسبق للعمليات الموثوقة وتوقيعات الملفات الموثوقة. سيكتشف تاريان العمليات غير المعروفة والتغييرات في الملفات المسجلة، ثم سيرسل تنبيهات ويتخذ إجراءً آليًا. أنقذ بيئة K8s الخاصة بك من برامج الفدية!
نريد الحفاظ على هذا كمشروع مفتوح المصدر لمكافحة الهجمات على نظام Kubernetes البيئي المفضل لدينا. من خلال المساهمة المستمرة، يمكننا مواجهة التهديدات معًا كمجتمع.
كيف يعمل تاريان؟
يعمل وكيل مجموعة تاريان (Cluster Agent) في مجموعة Kubernetes ويكتشف العمليات غير المعروفة والتغييرات غير المعروفة في الملفات، ويبلغ بها إلى خادم تاريان، ويمكنه اتخاذ إجراء اختياري: حذف البود المخالف. يستخدم eBPF لاكتشاف العمليات الجديدة. بالنسبة لاكتشاف تغييرات الملفات، يقوم وكيل مجموعة تاريان بحقن حاوية جانبية (sidecar) في بود تطبيقك الرئيسي، والتي ستتحقق من المجاميع الاختبارية للملفات في المسار المكوّن وتقارنها مع المجاميع الاختبارية المسجلة في خادم تاريان. سيكون تاريان جزءًا من بود تطبيقك من بيئة التطوير إلى بيئة الإنتاج، وبالتالي يمكنك التسجيل في قاعدة بيانات تاريان الخاصة بك ما يفترض حدوثه وتشغيله في الحاوية الخاصة بك + توقيعات الملفات التي يجب مراقبتها + ما يمكن إخطاره + الإجراء الذي سيتم اتخاذه (تدمير البود ذاتيًا) بناءً على التغييرات المكتشفة. انقل آلية الكشف الخاصة بك إلى اليسار!
ماذا لو حدث تغيير غير معروف داخل الحاوية ليس في قاعدة بيانات تسجيل تاريان، كيف سيتفاعل تاريان معه؟
إذا حدث تغيير غير معروف، يمكن لتاريان ببساطة إخطار فريق الأمان لديك بالتحليلات المرصودة. بعد ذلك، يمكن لمهندسي الأمن لديك تسجيل هذا التغيير في قاعدة بيانات تاريان سواء اعتبر تهديدًا أم لا. أيضًا، بناءً على تحليلهم، يمكنهم تكوين الإجراء الذي يجب اتخاذه عند حدوث هذا التغيير مرة أخرى.
كيف تساعد مساهمة المجتمع في مكافحة التهديدات عبر تاريان؟
أي اكتشاف جديد يتم تحليله ووضع علامة عليه كتهديد من قبل خبراء الأمن لديك، إذا اختاروا ذلك، يمكن مشاركته مع قاعدة بيانات مجتمع تاريان مفتوحة المصدر مع جميع السجلات والسلاسل النصية التي يجب البحث عنها والملاحظات والشفافية والإجراءات التي يجب تكوينها... بشكل أساسي أي شيء يريد الخبراء التحذير منه ومشاركته مع المجتمع. يمكنك استخدام هذه المعلومات كمستخدم لتاريان وتكوين الإجراءات في تطبيق تاريان المستخدم في بيئتك. هذه بآلية أساسية لمشاركة المعلومات حول التهديدات وما يجب فعله بها. يساعد هذا الجميع الذين يستخدمون تاريان على اتخاذ الإجراءات معًا في بيئات K8s الخاصة بهم من خلال مشاركة معرفتهم وخبراتهم.
ما نوع الإجراءات التي سيتخذها تاريان بناءً على التهديدات المعروفة؟
سيدمر تاريان ببساطة البود الذي يعمل عليه ذاتيًا. إذا انتشر البرنامج الضار/الفيروس إلى بقية البيئة، فأنت تعرف ما يحدث. لذلك، تم تصميم تاريان بشكل أساسي للمساعدة في تقليل المخاطر قدر الإمكان عن طريق تدمير البودات. سيتم التعامل مع توفير بود جديد من خلال نشر K8s. سيقوم تاريان فقط بتدمير البودات إذا أخبرته بذلك. إذا كنت لا تريد حدوث أي إجراءات، فلا يتعين عليك تكوين أو تشغيل أي منها؛ يمكنك ببساطة إخبار تاريان بإخطارك فقط. يقوم تاريان بما تريده لتقليل المخاطر.
لماذا أداة أمنية جديدة أخرى عندما تتوفر بالفعل العديد من الأدوات، مثل Falco وKube-Hunter وKube-Bench وCalico Enterprise Security وغيرها الكثير من الأدوات الأمنية (مفتوحة المصدر والتجارية) التي يمكنها اكتشاف التهديدات ومنعها على مستوى الشبكة والبنية التحتية والتطبيق؟ لماذا تاريان؟
السبب الرئيسي وراء إنشاء تاريان هو مكافحة التهديدات في Kubernetes معًا كمجتمع. سبب آخر هو، ماذا لو كان لا يزال هناك هجوم متطور قادر على اختراق كل طبقة من طبقات الأمان الخاصة بك، وقادر على الوصول إلى تطبيق وقت التشغيل (Remote Code Execution) وأحجام التخزين الخاصة بك، وقادر على الانتشار لإتلاف أو قفل البنية التحتية والبيانات الخاصة بك؟! ماذا تريد أن تفعل حيال مثل هذه الهجمات، خاصة تلك التي تتحول إلى برامج فدية. تم تصميم تاريان لتقليل هذه المخاطر، من خلال اتخاذ إجراءات. نحن نعلم أن تاريان ليس الحل الأمثل، لكننا واثقون من أنه يمكن أن يساعد في تقليل المخاطر خاصة عند مشاركة المعرفة باستمرار من قبل المجتمع. من منظور تقني، يمكن لتاريان المساعدة في تقليل المخاطر عن طريق تدمير الموارد المصابة.

kubectl create namespace tarian-system
يمكنك استخدام أي خيار تثبيت Dgraph طالما يمكن الوصول إليه من خادم تاريان.
helm repo add tarian https://kube-tarian.github.io/helm-charts
helm repo update
helm upgrade -i tarian-server tarian/tarian-server --devel -n tarian-system --set server.dgraph.address=DGRAPH_ADDRESS:PORT
helm upgrade -i tarian-cluster-agent tarian/tarian-cluster-agent --devel -n tarian-system
kubectl wait --for=condition=ready pod --all -n tarian-system
kubectl exec -ti deploy/tarian-server -n tarian-system -- ./tarian-server dgraph apply-schema
قم بتنزيل ملف tarianctl الثنائي من صفحة إصدارات GitHub.
شغّل:
tarianctl install
يمكنك استخدام العلامات التالية لتخصيص التثبيت الخاص بك.
تثبيت تاريان على Kubernetes.
الاستخدام:
tarianctl install [flags]
العلامات:
--agents-values strings مسار ملف قيم Helm لوكيل مجموعة تاريان ووكيل العقدة.
--charts string مسار دليل مخططات Helm الخاصة بتاريان.
--dgraph-values strings مسار ملف قيم Helm لـ DGraph.
-h, --help مساعدة للتثبيت
-n, --namespace string المساحة الاسمية لتثبيت تاريان. (الافتراضي "tarian-system")
--nats-values strings مسار ملف قيم Helm لـ Nats.
--server-values strings مسار ملف قيم Helm لخادم تاريان.
العلامات العامة:
-k, --kubeconfig string مسار ملف kubeconfig للاستخدام
-e, --log-formatter string منسق السجل الصحيح: json, text(default) (الافتراضي "text")
-l, --log-level string مستويات السجل الصحيحة: debug, info(default), warn/warning, error, fatal (الافتراضي "info")
-s, --server-address string عنوان خادم تاريان للاتصال به (الافتراضي "localhost:50051")
-c, --server-tls-ca-file string ملف CA الذي يستخدمه الخادم لاتصال TLS
-t, --server-tls-enabled إذا تم تمكينه، سيتواصل مع الخادم باستخدام TLS
-i, --server-tls-insecure-skip-verify إذا تم تعيينه على true، فسيتخطى التحقق من سلسلة شهادات الخادم واسم المضيف (الافتراضي true)
راجع قيم مخطط Helm لـ
تقوم مجموعة GKE الخاصة افتراضيًا بإنشاء قواعد جدار الحماية لتقييد الاتصال من السيد إلى العقد فقط على المنفذين 443 و 10250.
لحقن حاوية tarian-pod-agent، يستخدم تاريان خطاف قبول متحول (mutating admission webhook). يعمل خادم الويب هوك على المنفذ 9443. لذلك، نحتاج
إلى إنشاء قاعدة جدار حماية جديدة للسماح بالدخول من نطاق عنوان IP للسيد إلى العقد على منفذ TCP 9443.
لمزيد من التفاصيل، راجع وثائق GKE حول هذا الموضوع: https://cloud.google.com/kubernetes-engine/docs/how-to/private-clusters#add_firewall_rules.
kubectl port-forward svc/tarian-server -n tarian-system 41051:80
export TARIAN_SERVER_ADDRESS=localhost:41051
tarianctl get events
tarianctl add constraint --name nginx --namespace default \
--match-labels run=nginx \
--allowed-processes=pause,tarian-pod-agent,nginx
tarianctl get constraints
tarianctl add constraint --name nginx-files --namespace default \
--match-labels run=nginx \
--allowed-file-sha256sums=/usr/share/nginx/html/index.html=38ffd4972ae513a0c79a8be4573403edcd709f0f572105362b08ff50cf6de521
tarianctl get constraints
بعد إنشاء القيود، نقوم بحقن tarian-pod-agent في البود عن طريق إضافة تعليق توضيحي (annotation):
metadata:
annotations:
pod-agent.k8s.tarian.dev/threat-scan: "true"
سيكون للبود مع هذا التعليق التوضيحي حاوية إضافية محقونة (tarian-pod-agent). ستقوم حاوية tarian-pod-agent
بفحص بيئة وقت التشغيل بشكل مستمر بناءً على القيود المسجلة. سيتم الإبلاغ عن أي انتهاك، وسيكون
قابلاً للوصول باستخدام tarianctl get events.
kubectl apply -f https://raw.githubusercontent.com/kube-tarian/tarian/main/dev/config/monitored-pod/configmap.yaml
kubectl apply -f https://raw.githubusercontent.com/kube-tarian/tarian/main/dev/config/monitored-pod/pod.yaml
# انتظر حتى يصبح جاهزًا
kubectl wait --for=condition=ready pod nginx
# محاكاة تشغيل عملية غير معروفة
kubectl exec -ti nginx -c nginx -- sleep 15
# يجب أن تراها تم الإبلاغ عنها في تاريان
tarianctl get events
يأتي تاريان مع Prometheus Alert Manager افتراضيًا. إذا كنت تريد استخدام مثيل آخر من Alert Manager:
helm install tarian-server tarian/tarian-server --devel \
--set server.alert.alertManagerAddress=http://alertmanager.monitoring.svc:9093 \
--set alertManager.install=false \
-n tarian-system
لتعطيله، يمكنك تعيين قيمة alertManagerAddress على فارغة.
عندما يعمل tarian-pod-agent في وضع التسجيل، بدلاً من الإبلاغ عن العمليات والملفات غير المعروفة كانتهاكات، يقوم بتسجيلها تلقائيًا كقيد جديد. هذا مناسب لتوفير الوقت من التسجيل يدويًا.
لتمكين تسجيل القيد، يجب تكوين وكيل المجموعة.
helm install tarian-cluster-agent tarian/tarian-cluster-agent --devel -n tarian-system \
--set clusterAgent.enableAddConstraint=true
metadata:
annotations:
# سجل كلاً من العمليات والمجاميع الاختبارية للملفات
pod-agent.k8s.tarian.dev/register: "processes,files"
# تجاهل مسارات محددة من التسجيل التلقائي
pod-agent.k8s.tarian.dev/register-file-ignore-paths: "/usr/share/nginx/**/*.txt"
يمكن أيضًا إجراء التسجيل التلقائي للقيود في مجموعة dev/staging، بحيث يكون هناك تغييرات أقل في الإنتاج.
metadata:
annotations:
# حدد عدد المرات التي يجب أن يتحقق فيها tarian-pod-agent من المجموع الاختباري للملف
pod-agent.k8s.tarian.dev/file-validation-interval: "1m"
لتأمين خادم تاريان باستخدام TLS، قم بإنشاء secret يحتوي على شهادة TLS. يمكنك إنشاء secret يدويًا، أو باستخدام Cert Manager. بمجرد حصولك على secret، يمكنك تمرير الاسم إلى قيمة مخطط Helm:
helm upgrade -i tarian-server tarian/tarian-server --devel -n tarian-system \
--set server.tlsSecretName=tarian-server-tls
راجع docs/contributing.md
راجع CODE_OF_CONDUCT.md
راجع MAINTAINERS.md
| البيئة | حالة العمل | ملاحظات |
|---|
| Kind v0.14.0 | ✔️ | |
| Minikube v1.26.0 | ✔️ | |
| Linode Kubernetes Engine (LKE) 1.22 | ✔️ | |
| Digital Ocean Kubernetes Engine (DOKS) 1.22 | ✔️ | |
| Google Kubernetes Engine (GKE) 1.22 | ✔️ | |
| Amazon Elastic Kubernetes Engine (EKS) | ➖ | kernel < 5.8 |
| Azure Kubernetes Service (AKS) | ➖ | kernel < 5.8 |