GCP - Network Docker Escape

शून्य से नायक तक AWS हैकिंग सीखें htARTE (HackTricks AWS Red Team Expert)!

HackTricks का समर्थन करने के अन्य तरीके:

प्रारंभिक स्थिति

इस तकनीक के जहां भी वर्णन किया गया है, हमलावरों ने GCP द्वारा प्रबंधित एक डॉकर कंटेनर के अंदर रूट एक्सेस प्राप्त कर लिया था जिसमें होस्ट नेटवर्क तक पहुंच थी (और क्षमताएं CAP_NET_ADMIN और CAP_NET_RAW).

हमला

जब आप एक सामान्य Google Compute Engine इंस्टेंस पर नेटवर्क ट्रैफिक की जांच करते हैं, तो आप देखेंगे कि बहुत सारे सादे HTTP अनुरोध मेटाडेटा इंस्टेंस की ओर निर्देशित होते हैं 169.254.169.254 पर। ऐसे अनुरोध करने वाली एक सेवा खुले स्रोत Google Guest Agent है। अनुरोध का उदाहरण:

यह एजेंट मेटाडेटा में परिवर्तनों की निगरानी करता है। मेटाडेटा के अंदर एक फील्ड होती है जिसमें अधिकृत SSH पब्लिक कीज़ होती हैं। इसलिए, जब मेटाडेटा में एक नई पब्लिक SSH की दिखाई देती है, तो एजेंट उसे उपयोगकर्ता की .authorized_key फाइल में अधिकृत करेगा और यदि आवश्यक हो तो एक नया उपयोगकर्ता बनाएगा और उसे sudoers में जोड़ देगा।

Google Guest Agent द्वारा परिवर्तनों की निगरानी करने का तरीका एक कॉल के माध्यम से होता है जो सभी मेटाडेटा मानों को पुनरावृत्ति से प्राप्त करता है (GET /computeMetadata/v1/?recursive=true), यह संकेत देते हुए कि मेटाडेटा सर्वर को केवल तब प्रतिक्रिया भेजनी चाहिए जब पिछले प्राप्त किए गए मेटाडेटा मानों के संबंध में कोई परिवर्तन हो, जिसे उसके Etag द्वारा पहचाना जाता है (wait_for_change=true&last_etag=)।

इस अनुरोध में एक समय सीमा भी शामिल होती है (timeout_sec=), इसलिए यदि निर्दिष्ट समय के भीतर कोई परिवर्तन नहीं होता है, तो मेटाडेटा सर्वर अपरिवर्तित मानों के साथ प्रतिक्रिया देता है।

इससे IMDS को प्रतिक्रिया देने के लिए 60 सेकंड के बाद अगर उस अंतराल में कोई कॉन्फ़िगरेशन परिवर्तन नहीं हुआ था, जिससे आईएमडीएस से गेस्ट एजेंट को एक नकली कॉन्फ़िगरेशन प्रतिक्रिया इंजेक्ट करने का अवसर मिलता है।

इसलिए, यदि कोई हमलावर MitM हमला करने में सफल होता है, तो वह IMDS सर्वर से प्रतिक्रिया को स्पूफ कर सकता है, एक नई पब्लिक की डालकर जिससे एक नया उपयोगकर्ता होस्ट पर SSH के माध्यम से पहुंच सकता है।

एस्केप

ARP स्पूफिंग Google Compute Engine नेटवर्क पर काम नहीं करती है, हालांकि, Ezequiel ने इस संशोधित संस्करण को उत्पन्न किया rshijack **** जिसका उपयोग SSH उपयोगकर्ता को इंजेक्ट करने के लिए संचार में एक पैकेट इंजेक्ट करने के लिए किया जा सकता है।

इस संशोधित संस्करण का rshijack आपको कमांड-लाइन तर्कों के रूप में ACK और SEQ नंबर पास करने की अनुमति देता है, समय बचाता है और हमें असली Metadata प्रतिक्रिया आने से पहले एक प्रतिक्रिया को स्पूफ करने की अनुमति देता है। इसके अलावा, यह छोटी शेल स्क्रिप्ट **** जो एक विशेष रूप से तैयार किए गए पेलोड को वापस करेगी जो Google Guest Agent को उपयोगकर्ता wouter, को बनाने के लिए प्रेरित करेगी, हमारी अपनी पब्लिक की के साथ उसकी .authorized_keys फाइल में। यह स्क्रिप्ट ETag को एक पैरामीटर के रूप में प्राप्त करती है, क्योंकि एक ही ETag रखकर, Metadata सर्वर तुरंत Google Guest Agent को यह नहीं बताएगा कि अगली प्रतिक्रिया पर मेटाडेटा मान अलग थे, इसके बजाय timeout_sec में निर्दिष्ट सेकंडों की प्रतीक्षा करेगा। स्पूफिंग प्राप्त करने के लिए, आपको tcpdump के साथ Metadata सर्वर के लिए अनुरोधों को देखना चाहिए: tcpdump -S -i eth0 'host 169.254.169.254 and port 80' & एक लाइन की प्रतीक्षा करते हुए जो इस तरह दिखती थी:

<TIME> IP <LOCAL_IP>.<PORT> > 169.254.169.254.80: Flags [P.], seq <NUM>:<TARGET_ACK>, ack <TARGET_SEQ>, win <NUM>, length <NUM>: HTTP: GET /computeMetadata/v1/?timeout_sec=<SECONDS>&last_etag=<ETAG>&alt=json&recursive=True&wait_for_change=True HTTP/1.1

जब आपको वह मान मिले तो नकली मेटाडेटा डेटा सही ETAG के साथ rshijack को भेजें:

fakeData.sh <ETAG> | rshijack -q eth0 169.254.169.254:80 <LOCAL_IP>:<PORT> <TARGET_SEQ> <TARGET_ACK>; ssh -i id_rsa -o StrictHostKeyChecking=no wouter@localhost

और इससे एजेंट को उस पब्लिक की को अधिकृत करना चाहिए जो आपको SSH के माध्यम से निजी की के साथ जुड़ने की अनुमति देगा।

संदर्भ

Learn AWS hacking from zero to hero with htARTE (HackTricks AWS Red Team Expert)!

HackTricks का समर्थन करने के अन्य तरीके:

Last updated