Kubernetes Network Attacks
Introduction
Kubernetes में, यह देखा गया है कि एक डिफ़ॉल्ट व्यवहार सभी कंटेनरों के बीच कनेक्शन स्थापित करने की अनुमति देता है जो एक ही नोड पर स्थित हैं। यह नामस्थान भिन्नताओं की परवाह किए बिना लागू होता है। इस प्रकार की कनेक्टिविटी लेयर 2 (ईथरनेट) तक फैली हुई है। नतीजतन, यह कॉन्फ़िगरेशन प्रणाली को कमजोरियों के लिए संभावित रूप से उजागर करता है। विशेष रूप से, यह एक दुष्ट कंटेनर के लिए एक ARP स्पूफिंग हमले को अन्य कंटेनरों के खिलाफ निष्पादित करने की संभावना खोलता है जो उसी नोड पर स्थित हैं। ऐसे हमले के दौरान, दुष्ट कंटेनर धोखे से अन्य कंटेनरों के लिए निर्धारित नेटवर्क ट्रैफ़िक को इंटरसेप्ट या संशोधित कर सकता है।
ARP स्पूफिंग हमलों में हमलावर द्वारा स्थानीय क्षेत्र नेटवर्क पर गलत ARP (एड्रेस रिज़ॉल्यूशन प्रोटोकॉल) संदेश भेजना शामिल है। इसके परिणामस्वरूप हमलावर के MAC पते को नेटवर्क पर एक वैध कंप्यूटर या सर्वर के IP पते के साथ जोड़ा जाता है। ऐसे हमले के सफल निष्पादन के बाद, हमलावर डेटा को इंटरसेप्ट, संशोधित या यहां तक कि ट्रांजिट में रोक सकता है। यह हमला OSI मॉडल की लेयर 2 पर निष्पादित किया जाता है, यही कारण है कि Kubernetes में इस स्तर पर डिफ़ॉल्ट कनेक्टिविटी सुरक्षा चिंताओं को उठाती है।
परिदृश्य में 4 मशीनें बनाई जाने वाली हैं:
ubuntu-pe: नोड पर भागने और मेट्रिक्स की जांच करने के लिए विशेषाधिकार प्राप्त मशीन (हमले के लिए आवश्यक नहीं)
ubuntu-attack: दुष्ट कंटेनर डिफ़ॉल्ट नामस्थान में
ubuntu-victim: शिकार मशीन kube-system नामस्थान में
mysql: शिकार मशीन डिफ़ॉल्ट नामस्थान में
Basic Kubernetes Networking
यदि आप यहां प्रस्तुत नेटवर्किंग विषयों के बारे में अधिक विवरण चाहते हैं, तो संदर्भों पर जाएं।
ARP
सामान्यत: नोड के अंदर पॉड-से-पॉड नेटवर्किंग एक ब्रिज के माध्यम से उपलब्ध है जो सभी पॉड्स को जोड़ता है। इस ब्रिज को “cbr0” कहा जाता है। (कुछ नेटवर्क प्लगइन्स अपनी खुद की ब्रिज स्थापित करेंगे।) cbr0 ARP (एड्रेस रिज़ॉल्यूशन प्रोटोकॉल) समाधान को भी संभाल सकता है। जब एक इनकमिंग पैकेट cbr0 पर आता है, तो यह ARP का उपयोग करके गंतव्य MAC पते को हल कर सकता है।
यह तथ्य यह संकेत करता है कि, डिफ़ॉल्ट रूप से, एक ही नोड में चलने वाला हर पॉड किसी अन्य पॉड के साथ संवाद करने में सक्षम होगा (नेमस्पेस की परवाह किए बिना) एथरनेट स्तर (लेयर 2) पर।
इसलिए, एक ही नोड में पॉड्स के बीच ARP Spoofing हमले करना संभव है।
DNS
कुबेरनेट्स वातावरण में आप आमतौर पर 1 (या अधिक) DNS सेवाएं चलती हुई पाएंगे जो आमतौर पर kube-system नेमस्पेस में होती हैं:
पिछली जानकारी में आप कुछ दिलचस्प देख सकते हैं, सेवा का IP 10.96.0.10 है लेकिन सेवा चला रहे पोड का IP 172.17.0.2 है।
यदि आप किसी भी पोड के अंदर DNS पते की जांच करते हैं, तो आप कुछ ऐसा पाएंगे:
हालांकि, पॉड को उस पता तक पहुँचने का तरीका नहीं पता है क्योंकि इस मामले में पॉड रेंज 172.17.0.10/26 है।
इसलिए, पॉड DNS अनुरोधों को 10.96.0.10 के पते पर भेजेगा, जिसे cbr0 द्वारा 172.17.0.2 में अनुवादित किया जाएगा।
इसका मतलब है कि एक पॉड का DNS अनुरोध हमेशा ब्रिज की ओर जाएगा सेवा IP को अंत बिंदु IP में अनुवादित करने के लिए, भले ही DNS सर्वर पॉड के समान उपनेटवर्क में हो।
यह जानकर, और यह जानकर कि ARP हमले संभव हैं, एक पॉड एक नोड में उपनेटवर्क में प्रत्येक पॉड और ब्रिज के बीच ट्रैफ़िक को इंटरसेप्ट करने में सक्षम होगा और DNS सर्वर से DNS प्रतिक्रियाओं को संशोधित करेगा (DNS Spoofing).
इसके अलावा, यदि DNS सर्वर हमलावर के समान नोड में है, तो हमलावर क्लस्टर में किसी भी पॉड के सभी DNS अनुरोधों को (DNS सर्वर और ब्रिज के बीच) इंटरसेप्ट कर सकता है और प्रतिक्रियाओं को संशोधित कर सकता है।
समान नोड में पॉड्स में ARP Spoofing
हमारा लक्ष्य है कि कम से कम ubuntu-victim से mysql तक की संचार चोरी करें।
Scapy
ARPSpoof
DNS Spoofing
जैसा कि पहले ही उल्लेख किया गया है, यदि आप DNS सर्वर पॉड के उसी नोड में एक पॉड को समझौता करते हैं, तो आप MitM के साथ ARPSpoofing का उपयोग करके ब्रिज और DNS पॉड को संशोधित कर सकते हैं और सभी DNS प्रतिक्रियाओं को बदल सकते हैं।
आपके पास इसे परीक्षण करने के लिए एक बहुत अच्छा टूल और ट्यूटोरियल है https://github.com/danielsagi/kube-dnsspoof/
हमारे परिदृश्य में, हमलावर पॉड में टूल डाउनलोड करें और एक **फाइल नाम hosts
** बनाएं जिसमें आप जिन डोमेन को स्पूफ करना चाहते हैं, वे शामिल हों:
ubuntu-victim मशीन पर हमला करें:
यदि आप अपना खुद का DNS स्पूफिंग स्क्रिप्ट बनाने की कोशिश करते हैं, यदि आप बस DNS प्रतिक्रिया को संशोधित करते हैं तो यह काम नहीं करेगा, क्योंकि प्रतिक्रिया में src IP दुष्ट पॉड का IP पता होगा और इसे स्वीकृत नहीं किया जाएगा। आपको उस DNS का नया DNS पैकेट उत्पन्न करने की आवश्यकता है जहाँ पीड़ित DNS अनुरोध भेजता है (जो कुछ ऐसा है जैसे 172.16.0.2, न कि 10.96.0.10, यह K8s DNS सेवा IP है और न कि DNS सर्वर IP, इसके बारे में अधिक जानकारी परिचय में है)।
ट्रैफ़िक कैप्चर करना
उपकरण Mizu एक सरल लेकिन शक्तिशाली API ट्रैफ़िक व्यूअर है जो Kubernetes के लिए आपको सूक्ष्म सेवाओं के बीच सभी API संचार देखने में सक्षम बनाता है ताकि आप अपने डिबग और समस्या निवारण में मदद कर सकें। यह चयनित पॉड में एजेंट स्थापित करेगा और उनके ट्रैफ़िक की जानकारी एकत्र करेगा और आपको एक वेब सर्वर में दिखाएगा। हालाँकि, इसके लिए आपको उच्च K8s अनुमतियों की आवश्यकता होगी (और यह बहुत छिपा हुआ नहीं है)।
संदर्भ
Last updated