GCP - Network Docker Escape

हैकट्रिक्स का समर्थन करें

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

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

हमला स्पष्टीकरण

एक Google Compute Engine इंस्टेंस पर, नेटवर्क ट्रैफिक की नियमित जांच से कई सादा HTTP अनुरोध 169.254.169.254 पर मेटाडेटा इंस्टेंस की ओर होते हैं। Google Guest Agent, एक ओपन-सोर्स सेवा, नियमित अंतरिक्ष के लिए ऐसे अनुरोध करता है।

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

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

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

एक हमलावर इसे एक मैन-इन-द-मिडिल (MitM) हमला करके उत्तर को फर्जी करने और नया सार्वजनिक कुंजी डालने के लिए इसका शोषण कर सकता है। यह होस्ट तक अनधिकृत SSH एक्सेस सक्षम कर सकता है।

एस्केप तकनीक

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

इस रूप में rshijack का यह संस्करण ACK और SEQ नंबर को कमांड-लाइन आर्ग्यूमेंट के रूप में दर्ज करने की अनुमति देता है, जिससे वास्तविक मेटाडेटा सर्वर प्रतिक्रिया से पहले उत्तर का शोषण करना सरल होता है। इसके अतिरिक्त, एक छोटी सी शैल स्क्रिप्ट का उपयोग किया जाता है जो एक विशेष रूप से तैयार किया गया पेलोड वापस करता है। यह पेलोड गूगल गेस्ट एजेंट को wouter उपयोगकर्ता बनाने के लिए .authorized_keys फ़ाइल में एक निर्दिष्ट सार्वजनिक कुंजी जोड़ने को ट्रिगर करता है।

स्क्रिप्ट एक ही ETag का उपयोग करता है ताकि मेटाडेटा सर्वर को तुरंत गूगल गेस्ट एजेंट को विभिन्न मेटाडेटा मानों की सूचना न देने के लिए, इससे प्रतिक्रिया में देरी होती है।

शोषण करने के लिए, निम्नलिखित चरण आवश्यक हैं:

  1. Metadata सर्वर के अनुरोधों का मॉनिटरिंग करें tcpdump का उपयोग करके:

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
  1. rshijack को सही ETAG के साथ नकली मेटाडेटा डेटा भेजें:

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 कनेक्शन सक्षम हो जाता है।

संदर्भ

हैकट्रिक्स का समर्थन करें

Last updated