
أداة لفحص مجموعة Kubernetes بحثًا عن الصلاحيات الخطرة
أداة لمسح مجموعات Kubernetes بحثاً عن الصلاحيات الخطرة في نموذج التحكم في الوصول المستند إلى الأدوار (RBAC) الخاص بـ Kubernetes.
تم نشر الأداة كجزء من البحث "تأمين مجموعات Kubernetes من خلال القضاء على الصلاحيات الخطرة" على الرابط https://www.cyberark.com/threat-research-blog/securing-kubernetes-clusters-by-eliminating-risky-permissions/.
تساعد KubiScan مسؤولي المجموعات في تحديد الصلاحيات التي قد يستغلها المهاجمون لاختراق المجموعات.
يمكن أن يكون هذا مفيداً بشكل خاص في البيئات الكبيرة حيث توجد الكثير من الصلاحيات التي يصعب تتبعها.
تقوم KubiScan بجمع معلومات حول الأدوار/الأدوار العنقودية الخطرة، وروابط الأدوار/روابط الأدوار العنقودية الخطرة، والمستخدمين والحاويات (pods)، مما يؤدي إلى أتمتة العمليات اليدوية التقليدية ويمنح المسؤولين الرؤية التي يحتاجون إليها لتقليل المخاطر.
يمكنك تشغيلها كالتالي:
./docker_run.sh <kube_config_file>
# مثال: ./docker_run.sh ~/.kube/config
سيقوم بنسخ جميع الملفات المرتبطة داخل ملف الإعدادات إلى الحاوية وفتح قشرة (shell) داخل الحاوية.
لبناء صورة Docker قم بتشغيل:
docker build -t kubiscan .
apt-get update
apt-get install -y python3 python3-pip
pip3 install -r requirements.txt
قم بتشغيل alias kubiscan='python3 /<KubiScan_folder>/KubiScan.py' لاستخدام kubiscan.
بعد تثبيت جميع المتطلبات المذكورة أعلاه، يمكنك تشغيلها بطريقتين مختلفتين:
تأكد من أن لديك صلاحية الوصول إلى ملف ~/.kube/config وجميع الشهادات ذات الصلة، ثم قم بتشغيل:
kubiscan <command>
مثال: kubiscan -rs سيعرض جميع الكيانات الخطرة (المستخدمين، حسابات الخدمة، المجموعات).
تتطلب بعض الوظائف حساب خدمة مخوّل بالصلاحيات التالية:
["roles", "clusterroles", "rolebindings", "clusterrolebindings", "pods", "secrets"]["get", "list"]["pods/exec"]["create", "get"]ولكن معظم الوظائف لا تحتاج ذلك، لذا يمكنك استخدام هذه الإعدادات لحساب خدمة محدود الصلاحيات:
يمكن إنشاؤه عن طريق تشغيل:
kubectl apply -f - << EOF
apiVersion: v1
kind: ServiceAccount
metadata:
name: kubiscan-sa
namespace: default
---
apiVersion: v1
kind: Secret
type: kubernetes.io/service-account-token
metadata:
name: kubiscan-sa-secret
annotations:
kubernetes.io/service-account.name: kubiscan-sa
---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: kubiscan-clusterrolebinding
subjects:
- kind: ServiceAccount
name: kubiscan-sa
namespace: default
apiGroup: ""
roleRef:
kind: ClusterRole
name: kubiscan-clusterrole
apiGroup: ""
---
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: kubiscan-clusterrole
rules:
- apiGroups: ["*"]
resources: ["roles", "clusterroles", "rolebindings", "clusterrolebindings", "pods"]
verbs: ["get", "list"]
EOF
لاحظ أنه بدءاً من Kubernetes 1.24، فإن إنشاء حساب خدمة لا يُنشئ سراً (secret). هذا يعني أننا بحاجة إلى إنشاء السر.
قبل 1.24، يمكنك إزالة كائن Secret من الأوامر أعلاه وحفظ رمز حساب الخدمة في ملف:
kubectl get secrets $(kubectl get sa kubiscan-sa -o=jsonpath='{.secrets[0].name}') -o=jsonpath='{.data.token}' | base64 -d > token
من 1.24، لا تحتاج لتغيير أي شيء واحفظ الرمز بهذه الطريقة:
kubectl get secrets kubiscan-sa-secret -o=jsonpath='{.data.token}' | base64 -d > token
بعد حفظ الرمز في الملف، يمكنك استخدامه هكذا:
python3 ./KubiScan.py -ho <master_ip:master_port> -t /token <command>
مثال:
alias kubiscan='python3 /<KubiScan_folder>/KubiScan.py
kubiscan -ho 192.168.21.129:8443 -t /token -rs
لاحظ أنه يمكنك أيضاً استخدام سلطة التصديق (ca.crt) للتحقق من اتصال SSL:
kubiscan -ho <master_ip:master_port> -t /token -c /ca.crt <command>
لإزالة حساب الخدمة المخوّل، قم بتشغيل الأوامر التالية:
kubectl delete clusterroles kubiscan-clusterrole
kubectl delete clusterrolebindings kubiscan-clusterrolebinding
kubectl delete sa kubiscan-sa
kubectl delete secrets kubiscan-sa-secret
لعرض جميع الأمثلة، قم بتشغيل python3 KubiScan.py -e أو من داخل الحاوية kubiscan -e.
مثال صغير على استخدام KubiScan:
يوجد ملف باسم risky_roles.yaml. يحتوي هذا الملف على قوالب للأدوار الخطرة مع أولوية.
على الرغم من أن النوع (kind) في كل دور هو Role، إلا أن هذه القوالب ستتم مقارنتها مع أي دور/دور عنقودي في المجموعة.
عند فحص كل من هذه الأدوار مقابل دور في المجموعة، يتم التحقق مما إذا كان الدور في المجموعة يحتوي على القواعد من الدور الخطير. إذا كان يحتوي، فسيتم وضع علامة عليه كخطر.
لقد أضفنا جميع الأدوار التي وجدنا أنها خطرة، ولكن نظراً لأن كل شخص يمكنه تعريف مصطلح "خطر" بطريقة مختلفة، يمكنك تعديل الملف بإضافة/إزالة الأدوار التي تعتقد أنها أكثر/أقل خطورة.
حقوق النشر (c) 2020 شركة CyberArk Software Ltd. جميع الحقوق محفوظة
هذا المستودع مرخص بموجب رخصة GPL-3.0 - راجع LICENSE للمزيد من التفاصيل.
لمزيد من التعليقات أو الاقتراحات أو الأسئلة، يمكنك الاتصال بـ Eviatar Gerzi (@g3rzi) و CyberArk Labs.