Docker Breakout / Privilege Escalation
Trickest का उपयोग करें और ऑटोमेट वर्कफ़्लो को आसानी से बनाएं जो दुनिया के सबसे उन्नत समुदाय उपकरणों द्वारा संचालित है। आज ही पहुंचें:
स्वचालित गणना और भागना
linpeas: यह कंटेनरों की गणना भी कर सकता है
CDK: यह उपकरण कंटेनर की गणना करने के लिए बहुत उपयोगी है और स्वचालित भागने की कोशिश कर सकता है
amicontained: कंटेनर में होने वाली प्रिविलेजेज प्राप्त करने के लिए उपयोगी उपकरण ताकि इससे भागने के तरीके ढूंढ़ सकें
deepce: कंटेनर से गणना और भागने के लिए उपकरण
grype: छवि में स्थापित सॉफ्टवेयर में शामिल CVEs प्राप्त करें
माउंट किया गया डॉकर सॉकेट भागना
यदि किसी प्रकार से आपको लगता है कि डॉकर सॉकेट को डॉकर कंटेनर के अंदर माउंट किया गया है, तो आप इससे भाग सकेंगे। यह आम तौर पर उन डॉकर कंटेनरों में होता है जो किसी कारणवश डॉकर डेमन से कनेक्ट होने की आवश्यकता होती है ताकि कार्रवाई कर सकें।
इस मामले में आप सामान्य डॉकर कमांड्स का उपयोग कर सकते हैं डॉकर डीमन के साथ संचार के लिए:
यदि डॉकर सॉकेट एक अप्रत्याशित स्थान में है तो आप इसके साथ अभी भी docker
कमांड का उपयोग करके इससे संवाद कर सकते हैं पैरामीटर के साथ -H unix:///path/to/docker.sock
डॉकर डेमन एक पोर्ट में भी हो सकता है (डिफ़ॉल्ट रूप से 2375, 2376) या सिस्टमडी-आधारित सिस्टमों पर, डॉकर डेमन के साथ संचार Systemd सॉकेट fd://
के माध्यम से हो सकता है।
इसके अतिरिक्त, अन्य उच्च स्तरीय रनटाइम के सॉकेट की रनटाइम सुनिश्चित करें:
dockershim:
unix:///var/run/dockershim.sock
containerd:
unix:///run/containerd/containerd.sock
cri-o:
unix:///var/run/crio/crio.sock
frakti:
unix:///var/run/frakti.sock
rktlet:
unix:///var/run/rktlet.sock
...
क्षमताएँ दुरुपयोग भागना
आपको कंटेनर की क्षमताओं की जांच करनी चाहिए, यदि इसमें निम्नलिखित में से कोई है, तो आप इससे बच निकल सकते हैं: CAP_SYS_ADMIN
, CAP_SYS_PTRACE
, CAP_SYS_MODULE
, DAC_READ_SEARCH
, DAC_OVERRIDE, CAP_SYS_RAWIO
, CAP_SYSLOG
, CAP_NET_RAW
, CAP_NET_ADMIN
आप पहले से उल्लिखित स्वचालित उपकरणों या का उपयोग करके वर्तमान में कंटेनर क्षमताएँ जांच सकते हैं:
विशेषाधिकारित कंटेनर से बाहर निकलें
एक विशेषाधिकारित कंटेनर --privileged
फ्लैग के साथ बनाया जा सकता है या विशेष रक्षाओं को अक्षम करके:
--cap-add=ALL
--security-opt apparmor=unconfined
--security-opt seccomp=unconfined
--security-opt label:disable
--pid=host
--userns=host
--uts=host
--cgroupns=host
/dev
को माउंट करें
--privileged
फ्लैग कंटेनर सुरक्षा को काफी कम कर देता है, असीमित डिवाइस एक्सेस और कई सुरक्षा उपायों को छलकरने की सुविधा प्रदान करता है। विस्तृत विश्लेषण के लिए, --privileged
के पूर्ण प्रभाव पर दस्तावेज़ीकरण पर जाएं।
विशेषाधिकार
केवल विशेषाधिकार ध्वज के साथ आप होस्ट की डिस्क तक पहुंचने की कोशिश कर सकते हैं या रिलीज़_एजेंट या अन्य भागों का दुरुपयोग करके बच निकलने की कोशिश कर सकते हैं।
निम्नलिखित उमारों का परीक्षण करें जो एक कंटेनर में कार्यान्वित किया जा सकता है:
डिस्क माउंट करना - Poc1
अच्छी तरह से कॉन्फ़िगर किए गए डॉकर कंटेनर fdisk -l जैसे कमांड को नहीं अनुमति देंगे। हालांकि, जब --privileged
या --device=/dev/sda1
फ्लैग के साथ गलत ढंग से कॉन्फ़िगर किए गए डॉकर कमांड किए जाते हैं, तो मेज़बान ड्राइव देखने के लिए विशेषाधिकार प्राप्त करना संभव है।
तो मेज़बान मशीन पर कब्ज़ा करने के लिए, यह सरल है:
और देखो! अब आप मेज़बान के फ़ाइल सिस्टम तक पहुँच सकते हैं क्योंकि यह /mnt/hola
फ़ोल्डर में माउंट किया गया है।
डिस्क माउंट करना - Poc2
कंटेनर के भीतर, एक हमलावर निम्नलिखित मेज़बान ओएस तक पहुँचने का प्रयास कर सकता है जिसे क्लस्टर द्वारा बनाए गए एक लिखने योग्य hostPath वॉल्यूम से निर्मित किया गया है। नीचे कुछ सामान्य चीजें हैं जिन्हें आप कंटेनर के भीतर जांच सकते हैं ताकि आप इस हमलावर वेक्टर का उपयोग कर सकें:
विशेषाधिकार भाग अस्तित्व में release_agent का दुरुपयोग (cve-2022-0492) - PoC1
विशेषाधिकार भागना बनाए गए release_agent का दुरुपयोग (cve-2022-0492) - PoC2
तकनीक की व्याख्या खोजें:
pageDocker release_agent cgroups escapeविशेषाधिकार भागना release_agent का दुरुपयोग करते हुए बिना जाने कि संबंधित पथ - PoC3
पिछले उत्पीड़नों में मेज़बान फ़ाइल सिस्टम में कंटेनर का पूर्ण पथ खुलासा किया गया है। हालांकि, यह हमेशा स्थिति नहीं होती है। उन स्थितियों में जहाँ आप मेज़बान में कंटेनर का पूर्ण पथ नहीं जानते हैं, आप इस तकनीक का उपयोग कर सकते हैं:
pagerelease_agent exploit - Relative Paths to PIDsकिसी विशेषाधिकारित कंटेनर के भीतर PoC को क्रियान्वित करने से उत्पन्न होने वाला आउटपुट निम्नलिखित होना चाहिए:
विशेषाधिकारिक भाग गंभीर माउंट का दुरुपयोग
कई फ़ाइलें हो सकती हैं जो माउंट की गई हों जो मेजबान के तहत की जानकारी देती हैं। इनमें से कुछ ऐसी भी हो सकती हैं जो कुछ होने पर मेजबान द्वारा कुछ क्रियान्वित करने की संकेत देती हैं (जिससे हमलावर को कंटेनर से बाहर निकलने की अनुमति मिल सकती है)। इन फ़ाइलों का दुरुपयोग यह संभव बना सकता है कि:
release_agent (पहले से ही शामिल किया गया है)
हालांकि, आप इस पृष्ठ में अन्य संवेदनशील फ़ाइलें भी जांचने के लिए खोज सकते हैं:
pageSensitive Mountsमनमानी माउंट
कई अवसरों में आपको यह मिलेगा कि कंटेनर में मेजबान से कुछ वॉल्यूम माउंट किया गया है। यदि यह वॉल्यूम सही ढंग से कॉन्फ़िगर नहीं किया गया है तो आप संवेदनशील डेटा तक पहुंचने/संशोधित करने की सक्षम हो सकते हैं: रहस्य पढ़ें, एसएसएच अधिकृत_कुंजियाँ बदलें...
2 शैल्स और होस्ट माउंट के साथ विशेषाधिकार उन्नयन
यदि आपके पास कंटेनर के अंदर रूट के रूप में पहुंच है जिसमें होस्ट से कुछ फोल्डर माउंट किया गया है और आपने गैर विशेषाधिकृत उपयोगकर्ता के रूप में होस्ट पर बचने के रूप में बच गए हैं और माउंट किए गए फोल्डर पर पढ़ने का अधिकार है। आप कंटेनर के अंदर माउंट किए गए फोल्डर में एक बैश suid फ़ाइल बना सकते हैं और होस्ट से इसे निषेध करने के लिए इसे निषेध कर सकते हैं।
2 शैल्स के साथ विशेषाधिकार उन्नति
यदि आपके पास एक कंटेनर के अंदर रूट के रूप में पहुंच है और आपने गैर-विशेषाधिकृत उपयोगकर्ता के रूप में होस्ट में भागीदारी की है, तो आप दोनों शैलों का दुरुपयोग करके होस्ट के अंदर विशेषाधिकार उन्नति कर सकते हैं यदि आपके पास कंटेनर के अंदर MKNOD क्षमता है (यह डिफ़ॉल्ट रूप से है) जैसा कि इस पोस्ट में स्पष्ट किया गया है। इस प्रकार की क्षमता के साथ, कंटेनर के अंदर रूट उपयोगकर्ता को ब्लॉक उपकरण फ़ाइलें बनाने की अनुमति होती है। उपकरण फ़ाइलें विशेष फ़ाइलें हैं जो अंदरूनी हार्डवेयर और कर्नेल मॉड्यूल तक पहुंचने के लिए उपयोग की जाती हैं। उदाहरण के लिए, /dev/sda ब्लॉक उपकरण फ़ाइल सिस्टम डिस्क पर रॉ डेटा पढ़ने की पहुंच देती है।
डॉकर कंटेनर किसी भी ब्लॉक उपकरण के दुरुपयोग के खिलाफ सुरक्षित रखने के लिए एक cgroup नीति को लागू करके ब्लॉक उपकरण पढ़ने/लिखने के कार्रवाई को रोकता है। फिर भी, यदि कंटेनर के अंदर एक ब्लॉक उपकरण बनाया जाता है, तो यह कंटेनर के बाहर /proc/PID/root/ निर्देशिका के माध्यम से पहुंचने योग्य हो जाता है। इस पहुंच के लिए प्रक्रिया मालिक को एक समान होना चाहिए जो कंटेनर के अंदर और बाहर दोनों है।
इस लेखन से शोषण उदाहरण:
hostPID
यदि आप मेज़बान के प्रक्रियाओं तक पहुंच सकते हैं तो आप उन प्रक्रियाओं में संग्रहित कई संवेदनशील जानकारी तक पहुंच सकते हैं। टेस्ट लैब चलाएँ:
उदाहरण के लिए, आप ps auxn
जैसी कुछ चीजों का उपयोग करके प्रक्रियाओं की सूची बना सकेंगे और कमांड में संवेदनशील विवरणों की खोज कर सकेंगे।
फिर, जैसे ही आप /proc/ में मेजबान की प्रत्येक प्रक्रिया तक पहुंच सकते हैं, आप उनके env गुप्त रहस्य चुरा सकते हैं चला रहे हैं:
आप भी अन्य प्रक्रियाओं के फ़ाइल डिस्क्रिप्टर का उपयोग कर सकते हैं और उनकी खुली फ़ाइलें पढ़ सकते हैं:
आप भी प्रक्रियाओं को मार सकते हैं और डीओएस का कारण बना सकते हैं।
यदि आपके पास किसी कंटेनर के बाहर की प्रक्रिया पर विशेषाधिकारिता है, तो आप nsenter --target <pid> --all
या nsenter --target <pid> --mount --net --pid --cgroup
जैसी कुछ चला सकते हैं ताकि आप उस प्रक्रिया के साथ समान ns प्रतिबंधों (आशा है कोई नहीं) वाला शैल चला सकें।
hostNetwork
यदि एक कंटेनर को डॉकर होस्ट नेटवर्किंग ड्राइवर (--network=host
) के साथ कॉन्फ़िगर किया गया था, तो उस कंटेनर का नेटवर्क स्टैक डॉकर होस्ट से अलग नहीं है (कंटेनर होस्ट के नेटवर्किंग नेमस्पेस को साझा करता है), और कंटेनर को अपना आईपी-पता नहीं मिलता। अन्य शब्दों में, कंटेनर सभी सेवाएं सीधे होस्ट के आईपी पर बाइंड करता है। इसके अतिरिक्त, कंटेनर होस्ट द्वारा भेजे और प्राप्त कर रहा सभी नेटवर्क ट्रैफ़िक को अंतर्ग्रहण कर सकता है जो साझा इंटरफेस tcpdump -i eth0
पर।
उदाहरण के रूप में, आप इसका उपयोग करके होस्ट और मेटाडेटा इंस्टेंस के बीच ट्रैफ़िक को स्निफ़ और स्पूफ़ कर सकते हैं।
जैसे निम्नलिखित उदाहरणों में:
आपको यहां होस्ट या तो अंदर के लोकलहोस्ट पर बाइंड नेटवर्क सेवाओं तक पहुंचने की अनुमति मिलेगी या फिर नोड की मेटाडेटा अनुमतियों तक पहुंचने की अनुमति मिलेगी (जो एक कंटेनर को पहुंचने की अनुमति से भिन्न हो सकती है)।
hostIPC
hostIPC=true
के साथ, आप मेज़बान के इंटर-प्रोसेस कम्यूनिकेशन (IPC) संसाधनों तक पहुंच प्राप्त करते हैं, जैसे कि साझा स्मृति /dev/shm
में। इससे यह संभव हो जाता है कि वही IPC संसाधन अन्य मेज़बान या पॉड प्रक्रियाओं द्वारा उपयोग किया जा रहा हो। ipcs
का उपयोग करके इन IPC तंत्रों की अध्ययन करें।
/dev/shm की जांच - इस साझा स्मृति स्थान में किसी भी फ़ाइल के लिए देखें:
ls -la /dev/shm
मौजूदा IPC सुविधाएँ जांचें - आप यह देखने के लिए कि क्या कोई IPC सुविधाएँ
/usr/bin/ipcs
के साथ उपयोग किया जा रहे हैं। इसे जांचें:ipcs -a
क्षमताएँ पुनः प्राप्त करें
यदि सिस्कॉल unshare
प्रतिबंधित नहीं है तो आप निम्नलिखित चला कर सभी क्षमताएँ पुनः प्राप्त कर सकते हैं:
उपयोगकर्ता नेमस्पेस द्वारा सिम्लिंक का दुरुपयोग
पोस्ट https://labs.withsecure.com/blog/abusing-the-access-to-mount-namespaces-through-procpidroot/ में समझाई गई दूसरी तकनीक दिखाती है कि आप यूजर नेमस्पेस के साथ बाइंड माउंट का दुरुपयोग कैसे कर सकते हैं, ताकि मेजबान के अंदर फ़ाइलों पर प्रभाव डाल सकें (उस विशिष्ट मामले में, फ़ाइलें हटा सकते हैं)।
Trickest का उपयोग करें और आसानी से वर्कफ़्लो को बनाएं और स्वचालित करें जो दुनिया के सबसे उन्नत समुदाय उपकरणों द्वारा संचालित होता है। आज ही पहुंच प्राप्त करें:
CVEs
Runc शातिर (CVE-2019-5736)
यदि आप docker exec
को रूट के रूप में निष्पादित कर सकते हैं (संभावित रूप से sudo के साथ), तो आप CVE-2019-5736 का दुरुपयोग करके निकल सकते हैं (यहां शातिर यहां है)। यह तकनीक मूल रूप से मेज़बान से मेज़बान के /bin/sh बाइनरी को अधिलेखित करेगी, ताकि कोई भी docker exec को ट्रिगर कर सके।
पेलोड को अनुसार बदलें और go build main.go
के साथ main.go को बनाएं। परिणामी बाइनरी को डॉकर कंटेनर में निष्पादित करने के लिए रखा जाना चाहिए।
निष्पादन के दौरान, जैसे ही यह [+] Overwritten /bin/sh successfully
प्रदर्शित करता है, आपको मेज़बान मशीन से निम्नलिखित को निष्पादित करना होगा:
docker exec -it <container-name> /bin/sh
यह पेलोड को ट्रिगर करेगा जो मुख्य.go फ़ाइल में मौजूद है।
अधिक जानकारी के लिए: https://blog.dragonsector.pl/2019/02/cve-2019-5736-escape-from-docker-and.html
कंटेनर को अनुरूप हो सकते हैं, आपके पास अन्य CVEs हैं, आप https://0xn3va.gitbook.io/cheat-sheets/container/escaping/cve-list में सूची पा सकते हैं।
डॉकर कस्टम एस्केप
डॉकर एस्केप सरफेस
नेमस्पेस: प्रक्रिया को नेमस्पेस के माध्यम से पूरी तरह से अलग किया जाना चाहिए, ताकि हम नेमस्पेस के कारण अन्य प्रोसेसों के साथ इंटरैक्ट करने से बच सकें (डिफ़ॉल्ट रूप से IPCs, यूनिक्स सॉकेट्स, नेटवर्क सेवाएं, डी-बस, अन्य प्रोसेस के /proc के माध्यम से संवाद करने में सक्षम नहीं हो सकते)।
रूट उपयोगकर्ता: डिफ़ॉल्ट रूप से प्रक्रिया चलाने वाला उपयोगकर्ता रूट उपयोगकर्ता है (हालांकि इसकी विशेषाधिकारिता सीमित है)।
क्षमताएँ: डॉकर निम्नलिखित क्षमताएँ छोड़ता है:
cap_chown,cap_dac_override,cap_fowner,cap_fsetid,cap_kill,cap_setgid,cap_setuid,cap_setpcap,cap_net_bind_service,cap_net_raw,cap_sys_chroot,cap_mknod,cap_audit_write,cap_setfcap=ep
सिसकॉल्स: ये हैं वह सिसकॉल्स जिन्हें रूट उपयोगकर्ता कॉल नहीं कर सकेगा (क्षमताओं की कमी + Seccomp के कारण)। बचे हुए सिसकॉल्स का प्रयोग भागने के लिए किया जा सकता है।
{% टैब शीर्षक="arm64 सिसकॉल्स" %}
उदाहरण: डॉकर ब्रेकआउट और प्रिविलेज इस्केलेशन
यह उदाहरण एक डॉकर कंटेनर के भीतर से बाहर निकलने और रूट एक्सेस प्राप्त करने के लिए एक स्थिर तरीका दिखाता है। यह उदाहरण एक सी प्रोग्राम है जो डॉकर कंटेनर के भीतर से बाहर निकलने के लिए कुछ सिस्टम कॉल का उपयोग करता ह२। इसे एक डॉकर कंटेनर के भीतर चलाने के लिए एक डॉकर इमेज के रूप में बनाया जा सकता है।
यह उदाहरण केवल शैक्षिक उद्देश्यों के लिए है और किसी भी अनधिकृत गतिविधि का समर्थन नहीं करता।
Container Breakout through Usermode helper Template
If you are in userspace (no kernel exploit involved) the way to find new escapes mainly involve the following actions (these templates usually require a container in privileged mode):
Find the path of the containers filesystem inside the host
You can do this via mount, or via brute-force PIDs as explained in the second release_agent exploit
Find some functionality where you can indicate the path of a script to be executed by a host process (helper) if something happens
You should be able to execute the trigger from inside the host
You need to know where the containers files are located inside the host to indicate a script you write inside the host
Have enough capabilities and disabled protections to be able to abuse that functionality
You might need to mount things o perform special privileged actions you cannot do in a default docker container
References
Use Trickest to easily build and automate workflows powered by the world's most advanced community tools. Get Access Today:
Last updated