PID Namespace

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

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

मौलिक जानकारी

PID (प्रक्रिया आईडेंटिफायर) नेमस्पेस एक विशेषता है जो लिनक्स कर्नेल में प्रक्रिया विलयन प्रदान करती है जिससे एक समूह की प्रक्रियाएं अन्य नेमस्पेस में के प्रक्रियाओं से अलग एक अपने विशिष्ट पीआईडी सेट रख सकती हैं। यह विशेष रूप से कंटेनरीकरण में उपयोगी है, जहां प्रक्रिया विलयन सुरक्षा और संसाधन प्रबंधन के लिए आवश्यक है।

जब एक नया PID नेमस्पेस बनाया जाता है, तो उस नेमस्पेस में पहली प्रक्रिया को पीआईडी 1 के रूप में सौंपा जाता है। यह प्रक्रिया नए नेमस्पेस का "इनिट" प्रक्रिया बन जाती है और नए नेमस्पेस के अंदर अन्य प्रक्रियाओं का प्रबंधन करने के लिए जिम्मेदार होती है। नेमस्पेस के अंदर बनाई गई प्रत्येक उस्तरा प्रक्रिया उस नेमस्पेस के अंदर एक विशिष्ट पीआईडी रखेगी, और ये पीआईडी अन्य नेमस्पेस में के पीआईडी से अलग होंगे।

एक PID नेमस्पेस के अंदर की दृष्टि से, वह केवल उस नेमस्पेस में अन्य प्रक्रियाएं देख सकती है। यह अन्य नेमस्पेस में प्रक्रियाओं को जानकार नहीं है, और वे पारंपरिक प्रक्रिया प्रबंधन उपकरणों (जैसे kill, wait, आदि) का उपयोग करके उनके साथ संवाद करने में सक्षम नहीं है। यह एक स्तर की अलगाव प्रदान करता है जो एक दूसरे में हस्तक्षेप करने से प्रक्रियाओं को रोकने में मदद करता है।

कैसे काम करता है:

  1. जब एक नई प्रक्रिया बनाई जाती है (जैसे clone() सिस्टम कॉल का उपयोग करके), तो प्रक्रिया को एक नए या मौजूदा PID नेमस्पेस में सौंपा जा सकता है। यदि एक नया नेमस्पेस बनाया जाता है, तो प्रक्रिया उस नेमस्पेस का "इनिट" प्रक्रिया बन जाती है

  2. कर्नेल एक मैपिंग बनाए रखता है नए नेमस्पेस में के पीआईडी और मूल नेमस्पेस में के संबंधित पीआईडी के बीच। यह मैपिंग कर्नेल को जरूरत पड़ने पर पीआईडी का अनुवाद करने में मदद करता है, जैसे कि जब प्रक्रियाओं के बीच सिग्नल भेजा जाता है जो विभिन्न नेमस्पेस में होते हैं।

  3. PID नेमस्पेस के अंदर की प्रक्रियाएं केवल उस नेमस्पेस में की अन्य प्रक्रियाओं को देख सकती हैं और उनके साथ संवाद कर सकती हैं। वे अन्य नेमस्पेस में प्रक्रियाओं को जानकर नहीं हैं, और उनके पीआईडी उनके नेमस्पेस के अंदर अद्वितीय हैं।

  4. जब एक PID नेमस्पेस नष्ट होता है (जैसे कि नेमस्पेस का "इनिट" प्रक्रिया बाहर निकल जाती है), तो उस नेमस्पेस के अंदर सभी प्रक्रियाएं समाप्त हो जाती हैं। यह सुनिश्चित करता है कि नेमस्पेस के साथ संबंधित सभी संसाधनों को ठीक से साफ किया जाता है।

लैब:

विभिन्न नेमस्पेस बनाएं

CLI

sudo unshare -pf --mount-proc /bin/bash
त्रुटि: bash: fork: मेमोरी का आवंटन नहीं किया जा सकता

जब unshare को -f विकल्प के बिना चलाया जाता है, तो लिनक्स नए PID (प्रक्रिया आईडी) नेमस्पेस को कैसे हैंडल करता है के कारण एक त्रुटि का सामना किया जाता है। मुख्य विवरण और समाधान नीचे दिए गए हैं:

  1. समस्या का स्पष्टीकरण:

  • लिनक्स कर्नेल एक प्रक्रिया को unshare सिस्टम कॉल का उपयोग करके नए नेमस्पेस बनाने की अनुमति देता है। हालांकि, नया PID नेमस्पेस बनाने की प्रक्रिया (जिसे "अनशेयर" प्रक्रिया कहा जाता है) नए नेमस्पेस में प्रवेश नहीं करती; केवल इसके बच्चे प्रक्रियाएँ करती हैं।

  • %unshare -p /bin/bash% चलाने से /bin/bash को unshare के साथ ही प्रक्रिया में शुरू किया जाता है। इसका परिणामस्वरूप, /bin/bash और इसके बच्चे प्रक्रियाएँ मूल PID नेमस्पेस में होती हैं।

  • नए नेमस्पेस में /bin/bash की पहली बच्ची प्रक्रिया PID 1 बन जाती है। जब यह प्रक्रिया बाहर निकलती है, तो यदि कोई अन्य प्रक्रियाएँ नहीं हैं, तो यह नेमस्पेस की सफाई को ट्रिगर करती है, क्योंकि PID 1 के पास अनाथ प्रक्रियाओं को अपनाने की विशेष भूमिका होती है। इसके बाद लिनक्स कर्नेल उस नेमस्पेस में PID आवंटन को अक्षम कर देगा।

  1. परिणाम:

  • नए नेमस्पेस में PID 1 का बाहर निकलना PIDNS_HASH_ADDING ध्वज की सफाई का कारण बनता है। इससे alloc_pid फ़ंक्शन एक नई प्रक्रिया बनाते समय नया PID आवंटित करने में विफल हो जाता है, "मेमोरी का आवंटन नहीं किया जा सकता" त्रुटि उत्पन्न होती है।

  1. समाधान:

  • समस्या को -f विकल्प के साथ unshare का उपयोग करके हल किया जा सकता है। यह विकल्प unshare को नए PID नेमस्पेस बनाने के बाद एक नई प्रक्रिया फोर्क करता है।

  • %unshare -fp /bin/bash% चलाने से सुनिश्चित होता है कि unshare कमांड खुद नए नेमस्पेस में PID 1 बन जाता है। इस नए नेमस्पेस में /bin/bash और इसके बच्चे प्रक्रियाएँ सुरक्षित रूप से समाहित होती हैं, जिससे PID 1 का पहले से बाहर निकलने और सामान्य PID आवंटन की अनुमति होती है।

unshare को -f ध्वज के साथ चलाने से नया PID नेमस्पेस सही ढंग से बनाए रखा जा सकता है, जिससे /bin/bash और इसके उप-प्रक्रियाएँ मेमोरी आवंटन त्रुटि का सामना न करें।

नए इंस्टेंस को माउंट करके /proc फ़ाइल सिस्टम का उपयोग करके, आप सुनिश्चित करते हैं कि नया माउंट नेमस्पेस के पास उस नेमस्पेस के लिए विशिष्ट प्रक्रिया सूचना का सटीक और अलग दृश्य हो।

डॉकर

docker run -ti --name ubuntu1 -v /usr:/ubuntu1 ubuntu bash

जांचें कि आपकी प्रक्रिया किस नेमस्पेस में है

ls -l /proc/self/ns/pid
lrwxrwxrwx 1 root root 0 Apr  3 18:45 /proc/self/ns/pid -> 'pid:[4026532412]'

सभी PID नेमस्पेस खोजें

sudo find /proc -maxdepth 3 -type l -name pid -exec readlink {} \; 2>/dev/null | sort -u

ध्यान दें कि मूल (डिफ़ॉल्ट) PID नेमस्पेस से रूट उपयोगकर्ता सभी प्रक्रियाएँ देख सकता है, यहाँ तक कि नए PID नेमस्पेस में भी, इसलिए हम सभी PID नेमस्पेस देख सकते हैं.

एक PID नेमस्पेस के अंदर जाएं

nsenter -t TARGET_PID --pid /bin/bash

जब आप डिफ़ॉल्ट नेमस्पेस से PID नेमस्पेस के अंदर जाते हैं, तो आपको फिर भी सभी प्रक्रियाएँ दिखाई देंगी। और उस PID एनएस से प्रक्रिया नए PID एनएस पर नया बैश देख पाएगी।

इसके अलावा, आप केवल रूट होने पर दूसरे प्रक्रिया PID नेमस्पेस में प्रवेश कर सकते हैं। और आप उस नेमस्पेस में प्रवेश नहीं कर सकते जिसके लिए एक डिस्क्रिप्टर पॉइंट कर रहा हो (जैसे /proc/self/ns/pid)

संदर्भ

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

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

Last updated