
Kubernetes क्लस्टर में सुरक्षा कमजोरियों की तलाश करें
kube-hunter अब सक्रिय रूप से विकसित नहीं किया जा रहा है। यदि आप ज्ञात कमजोरियों के लिए Kubernetes क्लस्टर स्कैन करने में रुचि रखते हैं, तो हम Trivy का उपयोग करने की सलाह देते हैं। विशेष रूप से, Trivy का Kubernetes गलत-कॉन्फ़िगरेशन स्कैनिंग और KBOM भेद्यता स्कैनिंग। Trivy Docs में और जानें।
kube-hunter Kubernetes क्लस्टर में सुरक्षा कमजोरियों की खोज करता है। यह टूल Kubernetes वातावरण में सुरक्षा मुद्दों के बारे में जागरूकता और दृश्यता बढ़ाने के लिए विकसित किया गया था। आपको kube-hunter को उस Kubernetes क्लस्टर पर नहीं चलाना चाहिए जो आपका नहीं है!
kube-hunter चलाएँ: kube-hunter एक कंटेनर (aquasec/kube-hunter) के रूप में उपलब्ध है, और हम kube-hunter.aquasec.com पर एक वेब साइट भी प्रदान करते हैं जहाँ आप एक टोकन प्राप्त करने के लिए ऑनलाइन पंजीकरण कर सकते हैं जो आपको परिणाम ऑनलाइन देखने और साझा करने की अनुमति देता है। आप नीचे बताए अनुसार Python कोड स्वयं भी चला सकते हैं।
कमजोरियों का अन्वेषण करें: kube-hunter ज्ञानकोष में खोज योग्य कमजोरियों और मुद्दों के बारे में लेख शामिल हैं। जब kube-hunter कोई मुद्दा रिपोर्ट करता है, तो वह अपना VID (भेद्यता आईडी) दिखाएगा ताकि आप इसे KB में https://aquasecurity.github.io/kube-hunter/ पर देख सकें।
यदि आप Kubernetes ATT&CK मैट्रिक्स के साथ kube-hunter के एकीकरण में रुचि रखते हैं तो पढ़ना जारी रखें
kube-hunter अब Kubernetes ATT&CK मैट्रिक्स के नए प्रारूप का समर्थन करता है। जबकि kube-hunter की कमजोरियाँ क्लस्टर के अंदर (या बाहर) एक हमलावर की नकल करने के लिए डिज़ाइन की गई रचनात्मक तकनीकों का एक संग्रह हैं, Mitre का ATT&CK ऐसा करने के लिए अधिक सामान्यीकृत श्रेणियों को परिभाषित करता है।
आप kube-hunter कमजोरियों को एक हमलावर के लिए छोटे कदमों के रूप में सोच सकते हैं, जो एक अधिक सामान्य तकनीक के ट्रैक का अनुसरण करता है जिसे वह लक्षित करेगा। kube-hunter के अधिकांश शिकारी और कमजोरियाँ इन तकनीकों के अंतर्गत आ सकती हैं, इसलिए हम मैट्रिक्स मानक का पालन करने के लिए आगे बढ़े हैं।
कुछ kube-hunter कमजोरियाँ जिन्हें हम Mitre तकनीक से मैप नहीं कर सके, उनके साथ General कीवर्ड जोड़ा गया है

kube-hunter चलाने के तीन अलग-अलग तरीके हैं, प्रत्येक आपके क्लस्टर में कमजोरियों का पता लगाने के लिए एक अलग दृष्टिकोण प्रदान करता है:
kube-hunter को किसी भी मशीन (आपके लैपटॉप सहित) पर चलाएँ, रिमोट स्कैनिंग चुनें और अपने Kubernetes क्लस्टर का IP पता या डोमेन नाम दें। यह आपको आपके Kubernetes सेटअप का एक हमलावर-दृष्टिकोण देगा।
आप kube-hunter को सीधे क्लस्टर में एक मशीन पर चला सकते हैं, और सभी स्थानीय नेटवर्क इंटरफेस को प्रोब करने का विकल्प चुन सकते हैं।
आप kube-hunter को क्लस्टर के भीतर एक पॉड में भी चला सकते हैं। यह इंगित करता है कि यदि आपके एप्लिकेशन पॉड में से एक से समझौता किया जाता है (उदाहरण के लिए, सॉफ़्टवेयर भेद्यता के माध्यम से) तो आपका क्लस्टर कितना उजागर होगा। (--pod फ़्लैग)
पहले इन पूर्वावश्यकताओं की जाँच करें।
डिफ़ॉल्ट रूप से, kube-hunter एक इंटरैक्टिव सत्र खोलेगा, जिसमें आप निम्नलिखित स्कैन विकल्पों में से एक का चयन कर सकेंगे। आप कमांड लाइन से मैन्युअल रूप से भी स्कैन विकल्प निर्दिष्ट कर सकते हैं। ये आपके विकल्प हैं:
शिकार के लिए रिमोट मशीनों को निर्दिष्ट करने के लिए, विकल्प 1 चुनें या --remote विकल्प का उपयोग करें। उदाहरण:
kube-hunter --remote some.node.com
इंटरफ़ेस स्कैनिंग निर्दिष्ट करने के लिए, आप --interface विकल्प का उपयोग कर सकते हैं (यह मशीन के सभी नेटवर्क इंटरफेस को स्कैन करेगा)। उदाहरण:
kube-hunter --interface
स्कैन करने के लिए एक विशिष्ट CIDR निर्दिष्ट करने के लिए, --cidr विकल्प का उपयोग करें। उदाहरण:
kube-hunter --cidr 192.168.0.0/24
--k8s-auto-discover-nodes फ़्लैग सेट करें ताकि क्लस्टर में सभी नोड्स के लिए Kubernetes से क्वेरी करें, और फिर उन सभी को स्कैन करने का प्रयास करें। डिफ़ॉल्ट रूप से, यह Kubernetes API से कनेक्ट करने के लिए इन-क्लस्टर कॉन्फ़िग का उपयोग करेगा। यदि आप एक स्पष्ट kubeconfig फ़ाइल का उपयोग करना चाहते हैं, तो --kubeconfig /location/of/kubeconfig/file सेट करें।
यह भी ध्यान दें कि --pod मोड का उपयोग करते समय हमेशा ऐसा किया जाता है।
एक हमलावर की नकल करने के लिए उसके शुरुआती चरणों में, kube-hunter को शिकार के लिए किसी प्रमाणीकरण की आवश्यकता नहीं होती है।
प्रतिरूपण (Impersonate) - आप --service-account-token फ़्लैग के साथ मैन्युअल रूप से सेवा-खाता रहस्य (service-account secret) का JWT Bearer टोकन पास करके शिकार करते समय उपयोग करने के लिए kube-hunter को एक विशिष्ट सेवा खाता टोकन प्रदान कर सकते हैं।
उदाहरण:
$ kube-hunter --active --service-account-token eyJhbGciOiJSUzI1Ni...
--pod फ़्लैग के साथ चलाते समय, kube-hunter शिकार के दौरान मिलने वाली सेवाओं को प्रमाणित करने के लिए पॉड के अंदर माउंट किए गए सेवा खाता टोकन का उपयोग करता है।
--service-account-token फ़्लैग को प्राथमिकता मिलती है।सक्रिय खोज एक विकल्प है जिसमें kube-hunter आगे की कमजोरियों का पता लगाने के लिए मिली कमजोरियों का शोषण करेगा। सामान्य और सक्रिय खोज के बीच मुख्य अंतर यह है कि एक सामान्य खोज कभी भी क्लस्टर की स्थिति को नहीं बदलेगी, जबकि सक्रिय खोज संभावित रूप से क्लस्टर पर स्थिति-बदलने वाले संचालन कर सकती है, जो हानिकारक हो सकता है।
डिफ़ॉल्ट रूप से, kube-hunter सक्रिय खोज नहीं करता है। किसी क्लस्टर को सक्रिय रूप से शिकार करने के लिए, --active फ़्लैग का उपयोग करें। उदाहरण:
kube-hunter --remote some.domain.com --active
आप --list विकल्प के साथ परीक्षणों की सूची देख सकते हैं: उदाहरण:
kube-hunter --list
सक्रिय खोज परीक्षणों के साथ-साथ निष्क्रिय देखने के लिए:
kube-hunter --list --active
अपने नोड्स नेटवर्क का केवल एक मैपिंग देखने के लिए, --mapping विकल्प के साथ चलाएँ। उदाहरण:
kube-hunter --cidr 192.168.0.0/24 --mapping
यह kube-hunter द्वारा पाए गए सभी Kubernetes नोड्स को आउटपुट करेगा।
लॉगिंग को नियंत्रित करने के लिए, आप --log विकल्प का उपयोग करके एक लॉग स्तर निर्दिष्ट कर सकते हैं। उदाहरण:
kube-hunter --active --log WARNING
उपलब्ध लॉग स्तर हैं:
डिफ़ॉल्ट रूप से, रिपोर्ट stdout पर भेजी जाएगी, लेकिन आप --dispatch विकल्प का उपयोग करके विभिन्न विधियाँ निर्दिष्ट कर सकते हैं। उदाहरण:
kube-hunter --report json --dispatch http
उपलब्ध डिस्पैच विधियाँ हैं:
Azure या AWS वातावरण में पॉड के रूप में चलाते समय, kube-hunter इंस्टेंस मेटाडेटा सेवा से सबनेट प्राप्त करेगा। स्वाभाविक रूप से यह खोज प्रक्रिया को लंबा बनाता है।
सबनेट स्कैनिंग को /24 CIDR तक सीमित करने के लिए, --quick विकल्प का उपयोग करें।
कस्टम खोज उन्नत उपयोगकर्ताओं को यह नियंत्रित करने में सक्षम बनाता है कि शिकार की शुरुआत में कौन से शिकारी पंजीकृत होते हैं। यदि आप जानते हैं कि आप क्या कर रहे हैं, तो यह मदद कर सकता है यदि आप अपनी आवश्यकताओं के लिए kube-hunter की खोज और खोज प्रक्रिया को समायोजित करना चाहते हैं।
उदाहरण:
kube-hunter --custom <HunterName1> <HunterName2>
कस्टम खोज सक्षम करने से दिए गए श्वेतसूचीबद्ध शिकारियों को छोड़कर, शिकार प्रक्रिया से सभी शिकारी हटा दिए जाते हैं।
--custom फ़्लैग शिकारी वर्ग नामों की एक सूची पढ़ता है, kube-hunter के सभी वर्ग नामों को देखने के लिए, आप --list फ़्लैग के साथ --raw-hunter-names फ़्लैग को जोड़ सकते हैं।
उदाहरण:
kube-hunter --active --list --raw-hunter-names
सूचना: kube-hunter के आर्किटेक्चरल डिज़ाइन के कारण, निम्नलिखित "कोर हंटर्स/क्लासेस" हमेशा पंजीकृत होंगे (कस्टम खोज का उपयोग करने पर भी):
kube-hunter को तैनात करने के तीन तरीके हैं:
आप kube-hunter को सीधे अपनी मशीन पर चला सकते हैं।
आपको निम्नलिखित स्थापित करने की आवश्यकता होगी:
इंस्टॉल करें:
pip install kube-hunter
चलाएँ:
kube-hunter
रिपॉजिटरी को क्लोन करें:
git clone https://github.com/aquasecurity/kube-hunter.git
मॉड्यूल निर्भरताएँ स्थापित करें। (आप इसे वर्चुअल एनवायरनमेंट के भीतर करना पसंद कर सकते हैं)
cd ./kube-hunter
pip install -r requirements.txt
चलाएँ:
python3 kube_hunter
यदि आप pyinstaller/py2exe का उपयोग करना चाहते हैं, तो आपको पहले install_imports.py स्क्रिप्ट चलानी होगी।
Aqua Security kube-hunter का एक कंटेनरीकृत संस्करण aquasec/kube-hunter:aqua पर बनाए रखता है। इस कंटेनर में यह स्रोत कोड, साथ ही एक अतिरिक्त (बंद स्रोत) रिपोर्टिंग प्लगइन शामिल है जो परिणामों को एक रिपोर्ट में अपलोड करने के लिए है जिसे kube-hunter.aquasec.com पर देखा जा सकता है। कृपया ध्यान दें, aquasec/kube-hunter कंटेनर चलाना और रिपोर्ट डेटा अपलोड करना अतिरिक्त नियमों और शर्तों के अधीन है।
इस रिपॉजिटरी में Dockerfile आपको रिपोर्टिंग प्लगइन के बिना एक कंटेनरीकृत संस्करण बनाने की अनुमति देता है।
यदि आप kube-hunter कंटेनर को होस्ट नेटवर्क के साथ चलाते हैं, तो यह होस्ट पर सभी इंटरफेस को प्रोब करने में सक्षम होगा:
docker run -it --rm --network host aquasec/kube-hunter
Docker for Mac/Windows के लिए नोट: ध्यान रखें कि Docker for Mac या Windows के लिए "होस्ट" वह VM है जिसमें Docker कंटेनर चलाता है। इसलिए --network host निर्दिष्ट करने से kube-hunter को उस VM के नेटवर्क इंटरफेस तक पहुँच मिलती है, न कि आपकी मशीन के।
डिफ़ॉल्ट रूप से, kube-hunter इंटरैक्टिव मोड में चलता है। आप ऊपर वर्णित मापदंडों के साथ स्कैनिंग विकल्प भी निर्दिष्ट कर सकते हैं, उदा.
docker run --rm aquasec/kube-hunter --cidr 192.168.0.0/24
यह विकल्प आपको यह पता लगाने देता है कि एक दुर्भावनापूर्ण कंटेनर चलाने से आपके क्लस्टर पर क्या हो सकता है/पता लगा सकता है। यह एक परिप्रेक्ष्य देता है कि यदि कोई हमलावर किसी पॉड से समझौता करने में सक्षम होता है, संभवतः एक सॉफ़्टवेयर भेद्यता के माध्यम से, तो वह क्या कर सकता है। यह काफी अधिक कमजोरियों को प्रकट कर सकता है।
उदाहरण job.yaml फ़ाइल एक Job को परिभाषित करती है जो डिफ़ॉल्ट Kubernetes पॉड एक्सेस सेटिंग्स का उपयोग करके एक पॉड में kube-hunter चलाएगी। (आप इस परिभाषा को संशोधित करना चाह सकते हैं, उदाहरण के लिए गैर-रूट उपयोगकर्ता के रूप में चलाने के लिए, या किसी भिन्न नेमस्पेस में चलाने के लिए।)
kubectl create -f ./job.yaml के साथ Job चलाएँkubectl describe job kube-hunter के साथ पॉड का नाम खोजेंkubectl logs <pod name> के साथ परीक्षण परिणाम देखेंयोगदान दिशानिर्देश पढ़ने के लिए, यहाँ क्लिक करें
यह रिपॉजिटरी Apache License 2.0 के अंतर्गत उपलब्ध है।