
कुबरनेट्स क्लस्टर में जोखिमपूर्ण अनुमतियों को स्कैन करने का एक उपकरण
कुबरनेट्स क्लस्टर में, कुबरनेट्स के रोल-आधारित एक्सेस कंट्रोल (RBAC) प्राधिकरण मॉडल में जोखिमपूर्ण अनुमतियों की स्कैनिंग के लिए एक उपकरण।
यह उपकरण "जोखिमपूर्ण अनुमतियों को समाप्त करके कुबरनेट्स क्लस्टर को सुरक्षित करना" शोध के भाग के रूप में प्रकाशित किया गया था https://www.cyberark.com/threat-research-blog/securing-kubernetes-clusters-by-eliminating-risky-permissions/।
KubiScan क्लस्टर प्रशासकों को उन अनुमतियों की पहचान करने में मदद करता है जिनका हमलावर क्लस्टर से समझौता करने के लिए संभावित रूप से शोषण कर सकते हैं। यह विशेष रूप से बड़े वातावरणों में सहायक हो सकता है जहाँ बहुत सारी अनुमतियाँ होती हैं और उन पर नज़र रखना चुनौतीपूर्ण हो सकता है। KubiScan जोखिमपूर्ण Roles\ClusterRoles, RoleBindings\ClusterRoleBindings, Users और Pods के बारे में जानकारी एकत्र करता है, पारंपरिक मैन्युअल प्रक्रियाओं को स्वचालित करता है और प्रशासकों को जोखिम कम करने के लिए आवश्यक दृश्यता प्रदान करता है।
आप इसे इस प्रकार चला सकते हैं:
./docker_run.sh <kube_config_file>
# उदाहरण: ./docker_run.sh ~/.kube/config
यह कॉन्फ़िगरेशन फ़ाइल के अंदर सभी लिंक की गई फ़ाइलों को कंटेनर में कॉपी करेगा और कंटेनर में एक शेल लॉन्च करेगा।
Docker छवि बनाने के लिए चलाएँ:
docker build -t kubiscan .
apt-get update
apt-get install -y python3 python3-pip
pip3 install -r requirements.txt
kubiscan का उपयोग करने के लिए alias kubiscan='python3 /<KubiScan_folder>/KubiScan.py' चलाएँ।
उपरोक्त सभी आवश्यकताओं को स्थापित करने के बाद, आप इसे दो तरीकों से चला सकते हैं:
सुनिश्चित करें कि आपके पास ~/.kube/config फ़ाइल और सभी संबंधित प्रमाणपत्रों तक पहुंच है, बस चलाएँ:
kubiscan <command>
उदाहरण: kubiscan -rs सभी जोखिमपूर्ण subjects (users, service accounts और groups) दिखाएगा।
कुछ कार्यक्षमताओं के लिए निम्नलिखित अनुमतियों वाले एक विशेषाधिकार प्राप्त service account की आवश्यकता होती है:
["roles", "clusterroles", "rolebindings", "clusterrolebindings", "pods", "secrets"]
verbs: ["get", "list"]["pods/exec"]
verbs: ["create", "get"]लेकिन अधिकांश कार्यक्षमताएँ ऐसी नहीं हैं, इसलिए आप सीमित service account के लिए इस सेटिंग का उपयोग कर सकते हैं: इसे निम्नलिखित चलाकर बनाया जा सकता है:
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 से, service account बनाने से कोई secret नहीं बनता है। इसका मतलब है कि हमें secret बनाना होगा।
1.24 से पहले, आप ऊपर दिए गए आदेशों से Secret ऑब्जेक्ट को हटा सकते हैं और service account के टोकन को एक फ़ाइल में सहेज सकते हैं:
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
ध्यान दें कि आप SSL कनेक्शन को सत्यापित करने के लिए प्रमाणपत्र प्राधिकरण (ca.crt) का भी उपयोग कर सकते हैं:
kubiscan -ho <master_ip:master_port> -t /token -c /ca.crt <command>
विशेषाधिकार प्राप्त service account को हटाने के लिए, निम्नलिखित आदेश चलाएँ:
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 नामक एक फ़ाइल है। इस फ़ाइल में प्राथमिकता के साथ जोखिमपूर्ण roles के टेम्पलेट हैं।
यद्यपि प्रत्येक role में kind Role है, ये टेम्पलेट क्लस्टर में किसी भी Role\ClusterRole के विरुद्ध तुलना किए जाएंगे।
जब इनमें से प्रत्येक role को क्लस्टर में किसी role के विरुद्ध जांचा जाता है, तो यह जांचता है कि क्या क्लस्टर में role में जोखिमपूर्ण role के नियम शामिल हैं। यदि ऐसा है, तो इसे जोखिमपूर्ण के रूप में चिह्नित किया जाएगा।
हमने वे सभी roles जोड़ दिए हैं जिन्हें हमने जोखिमपूर्ण पाया, लेकिन चूंकि प्रत्येक व्यक्ति "जोखिमपूर्ण" शब्द को अलग-अलग तरीके से परिभाषित कर सकता है, आप उन roles को जोड़कर\हटाकर फ़ाइल को संशोधित कर सकते हैं जिन्हें आप अधिक\कम जोखिमपूर्ण मानते हैं।
कॉपीराइट (c) 2020 CyberArk Software Ltd. सर्वाधिकार सुरक्षित
यह रिपॉजिटरी GPL-3.0 लाइसेंस के तहत लाइसेंस प्राप्त है - अधिक जानकारी के लिए LICENSE देखें।
अधिक टिप्पणियों, सुझावों या प्रश्नों के लिए, आप Eviatar Gerzi (@g3rzi) और CyberArk Labs से संपर्क कर सकते हैं।