GCP - Network Docker Escape

Tip

AWS हैकिंग सीखें और अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE)
GCP हैकिंग सीखें और अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE) Azure हैकिंग सीखें और अभ्यास करें: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks का समर्थन करें

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

इन दोनों राइटअप्स में जहाँ यह तकनीक बताई गयी है, हमलावरों ने GCP द्वारा प्रबंधित एक Docker container के अंदर root पहुँच हासिल कर ली थी, जिसको host नेटवर्क तक पहुँच थी (और capabilities CAP_NET_ADMIN और CAP_NET_RAW)।

आक्रमण की व्याख्या

एक Google Compute Engine instance पर नेटवर्क ट्रैफ़िक की सामान्य जाँच में कई बार 169.254.169.254 पर मौजूद metadata instance को भेजे जा रहे कई plain HTTP requests दिखाई देते हैं। Google Guest Agent, एक open-source सर्विस, अक्सर ऐसे अनुरोध भेजता है।

यह agent metadata में होने वाले बदलावों की निगरानी करने के लिए डिज़ाइन किया गया है। विशेष रूप से, metadata में SSH public keys के लिए एक फ़ील्ड शामिल होता है। जब metadata में एक नया public SSH key जोड़ा जाता है, तो agent इसे स्वचालित रूप से .authorized_key फाइल में authorize कर देता है। ज़रूरत पड़ने पर यह नया user बना भी सकता है और उन्हें sudoers में जोड़ सकता है।

agent परिवर्तनों की निगरानी इस तरह करता है कि वह सभी metadata मानों को recursive रूप से प्राप्त करने के लिए एक अनुरोध भेजता है (GET /computeMetadata/v1/?recursive=true)। यह अनुरोध इस तरीके से बनाया गया है कि metadata सर्वर केवल तभी प्रतिक्रिया भेजे जब पिछली retrieval के बाद metadata में कोई बदलाव हुआ हो, जिसे एक Etag द्वारा पहचाना जाता है (wait_for_change=true&last_etag=)। इसके अलावा, एक timeout पैरामीटर (timeout_sec=) भी शामिल है। यदि निर्दिष्ट timeout के भीतर कोई बदलाव नहीं होता है, तो सर्वर बिना बदले मानों के साथ उत्तर देता है।

इस प्रक्रिया से IMDS (Instance Metadata Service) को यह अनुमति मिलती है कि यदि कोई configuration परिवर्तन नहीं हुआ हो तो वह 60 seconds के बाद प्रतिक्रिया दे सके, जो guest agent के लिए एक संभावित समय खिड़की पैदा करता है जिसमें एक नकली configuration response इंजेक्ट किया जा सकता है।

एक हमलावर इसका फायदा उठाकर एक Man-in-the-Middle (MitM) attack करके IMDS सर्वर से आने वाली प्रतिक्रिया को spoof कर सकता है और एक नया public key डाल सकता है। इससे host पर अनधिकृत SSH पहुँच संभव हो सकती है।

एस्केप तकनीक

हालाँकि Google Compute Engine नेटवर्क पर ARP spoofing अप्रभावी है, rshijack के संशोधित संस्करण का उपयोग communication में packet injection के लिए किया जा सकता है ताकि SSH user इंजेक्ट किया जा सके। यह संस्करण ACK और SEQ नंबरों को command-line आर्ग्यूमेंट के रूप में लेने की अनुमति देता है, जिससे असली Metadata सर्वर की प्रतिक्रिया से पहले spoofed response भेजना संभव होता है। इसके अतिरिक्त, एक छोटा Shell script उपयोग किया जाता है जो एक विशेष रूप से तैयार payload लौटाता है। यह payload Google Guest Agent को .authorized_keys फाइल में एक निर्दिष्ट public key के साथ उपयोगकर्ता wouter बनाने के लिए ट्रिगर करता है।

स्क्रिप्ट वही ETag उपयोग करती है ताकि Metadata सर्वर तुरंत Google Guest Agent को अलग metadata मानों के बारे में सूचित न कर सके, इस प्रकार प्रतिक्रिया में देरी की जा सके।

spoofing को निष्पादित करने के लिए, निम्नलिखित कदम आवश्यक हैं:

  1. Monitor requests to the Metadata server using tcpdump:
tcpdump के साथ metadata सर्वर अनुरोधों की निगरानी करें ```bash tcpdump -S -i eth0 'host 169.254.169.254 and port 80' & ```

इस तरह की किसी पंक्ति की तलाश करें:

tcpdump आउटपुट पंक्ति का उदाहरण ```