2375, 2376 Pentesting Docker
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Docker कंटेनराइजेशन उद्योग में अग्रणी प्लेटफार्म है, जो निरंतर नवाचार का नेतृत्व कर रहा है। यह पारंपरिक से लेकर भविष्यवादी अनुप्रयोगों के निर्माण और वितरण को सरल बनाता है, और विभिन्न वातावरणों में उनके सुरक्षित तैनाती की सुनिश्चितता करता है।
containerd: यह कंटेनरों के लिए एक मुख्य रनटाइम है, जो एक कंटेनर के जीवनचक्र के व्यापक प्रबंधन का कार्य करता है। इसमें छवि स्थानांतरण और भंडारण के साथ-साथ कंटेनरों के निष्पादन, निगरानी, और नेटवर्किंग का प्रबंधन शामिल है। containerd पर अधिक विस्तृत जानकारी दी गई है।
container-shim हेडलैस कंटेनरों के प्रबंधन में एक महत्वपूर्ण भूमिका निभाता है, जो कंटेनरों के आरंभ होने के बाद runc से सहजता से कार्यभार संभालता है।
runc: इसके हल्के और सार्वभौमिक कंटेनर रनटाइम क्षमताओं के लिए प्रसिद्ध, runc OCI मानक के साथ संरेखित है। इसे containerd द्वारा OCI दिशानिर्देशों के अनुसार कंटेनरों को शुरू और प्रबंधित करने के लिए उपयोग किया जाता है, जो मूल libcontainer से विकसित हुआ है।
grpc containerd और docker-engine के बीच संचार को सुविधाजनक बनाने के लिए आवश्यक है, जो कुशल इंटरैक्शन सुनिश्चित करता है।
OCI रनटाइम और छवियों के लिए OCI विनिर्देशों को बनाए रखने में महत्वपूर्ण है, जिसमें नवीनतम Docker संस्करण OCI छवि और रनटाइम मानकों के साथ अनुरूप हैं।
Containerd विशेष रूप से Docker और Kubernetes जैसे कंटेनर प्लेटफार्मों की आवश्यकताओं को पूरा करने के लिए विकसित किया गया था। इसका उद्देश्य विभिन्न ऑपरेटिंग सिस्टम, जैसे Linux, Windows, Solaris, और अधिक में कंटेनरों के निष्पादन को सरल बनाना है, ऑपरेटिंग सिस्टम-विशिष्ट कार्यक्षमता और सिस्टम कॉल को अमूर्त करके। Containerd का लक्ष्य केवल उन आवश्यक सुविधाओं को शामिल करना है जो इसके उपयोगकर्ताओं द्वारा आवश्यक हैं, अनावश्यक घटकों को छोड़ने का प्रयास करते हुए। हालाँकि, इस लक्ष्य को पूरी तरह से प्राप्त करना चुनौतीपूर्ण माना जाता है।
एक प्रमुख डिज़ाइन निर्णय यह है कि Containerd नेटवर्किंग को संभालता नहीं है। नेटवर्किंग को वितरित प्रणालियों में एक महत्वपूर्ण तत्व माना जाता है, जिसमें सॉफ़्टवेयर परिभाषित नेटवर्किंग (SDN) और सेवा खोज जैसी जटिलताएँ शामिल हैं जो एक प्लेटफ़ॉर्म से दूसरे प्लेटफ़ॉर्म में काफी भिन्न होती हैं। इसलिए, Containerd नेटवर्किंग पहलुओं को उन प्लेटफार्मों द्वारा प्रबंधित करने के लिए छोड़ देता है जिनका वह समर्थन करता है।
जबकि Docker कंटेनरों को चलाने के लिए Containerd का उपयोग करता है, यह ध्यान रखना महत्वपूर्ण है कि Containerd केवल Docker की कार्यक्षमताओं के एक उपसमुच्चय का समर्थन करता है। विशेष रूप से, Containerd में Docker में मौजूद नेटवर्क प्रबंधन क्षमताओं की कमी है और यह सीधे Docker स्वार्म बनाने का समर्थन नहीं करता है। यह भेद Containerd की एक कंटेनर रनटाइम वातावरण के रूप में केंद्रित भूमिका को उजागर करता है, जो इसके साथ एकीकृत प्लेटफार्मों को अधिक विशेषीकृत कार्यक्षमताएँ सौंपता है।
Podman एक ओपन-सोर्स कंटेनर इंजन है जो Open Container Initiative (OCI) मानकों का पालन करता है, जिसे Red Hat द्वारा विकसित और बनाए रखा गया है। यह daemonless architecture और rootless containers के समर्थन के साथ Docker से कई विशिष्ट विशेषताओं के साथ अलग है, जिससे उपयोगकर्ता बिना रूट विशेषाधिकार के कंटेनर चला सकते हैं।
Podman को Docker के API के साथ संगत बनाने के लिए डिज़ाइन किया गया है, जिससे Docker CLI कमांड का उपयोग करना संभव होता है। यह संगतता इसके पारिस्थितिकी तंत्र तक फैली हुई है, जिसमें Buildah जैसे उपकरण शामिल हैं जो कंटेनर छवियों को बनाने के लिए और Skopeo छवि संचालन जैसे पुश, पुल और निरीक्षण के लिए हैं। इन उपकरणों के बारे में अधिक जानकारी उनके GitHub पृष्ठ पर मिल सकती है।
मुख्य अंतर
Architecture: Docker के क्लाइंट-सरवर मॉडल के विपरीत जिसमें एक बैकग्राउंड डेमन होता है, Podman बिना डेमन के काम करता है। इस डिज़ाइन का अर्थ है कि कंटेनर उन विशेषाधिकारों के साथ चलते हैं जो उपयोगकर्ता ने शुरू किए हैं, जिससे रूट एक्सेस की आवश्यकता को समाप्त करके सुरक्षा बढ़ती है।
Systemd Integration: Podman systemd के साथ कंटेनरों का प्रबंधन करने के लिए एकीकृत होता है, जिससे systemd इकाइयों के माध्यम से कंटेनर प्रबंधन संभव होता है। यह Docker के उपयोग के विपरीत है, जो मुख्य रूप से Docker डेमन प्रक्रिया के प्रबंधन के लिए systemd का उपयोग करता है।
Rootless Containers: Podman की एक महत्वपूर्ण विशेषता यह है कि यह प्रारंभ करने वाले उपयोगकर्ता के विशेषाधिकारों के तहत कंटेनर चलाने की क्षमता रखता है। यह दृष्टिकोण कंटेनर उल्लंघनों से जुड़े जोखिमों को कम करता है, यह सुनिश्चित करते हुए कि हमलावर केवल समझौता किए गए उपयोगकर्ता के विशेषाधिकार प्राप्त करते हैं, न कि रूट एक्सेस।
Podman का दृष्टिकोण Docker के लिए एक सुरक्षित और लचीला विकल्प प्रदान करता है, जो उपयोगकर्ता विशेषाधिकार प्रबंधन और मौजूदा Docker कार्यप्रवाहों के साथ संगतता पर जोर देता है।
ध्यान दें कि चूंकि podman का लक्ष्य docker के समान API का समर्थन करना है, आप podman के साथ वही कमांड का उपयोग कर सकते हैं जो docker के साथ हैं जैसे:
Remote API डिफ़ॉल्ट रूप से 2375 पोर्ट पर चल रहा है जब इसे सक्षम किया जाता है। सेवा डिफ़ॉल्ट रूप से प्रमाणीकरण की आवश्यकता नहीं होगी, जिससे एक हमलावर को एक विशेषाधिकार प्राप्त डॉकर कंटेनर शुरू करने की अनुमति मिलती है। Remote API का उपयोग करके कोई भी होस्ट / (रूट निर्देशिका) को कंटेनर से जोड़ सकता है और होस्ट के वातावरण के फ़ाइलों को पढ़/लिख सकता है।
डिफ़ॉल्ट पोर्ट: 2375
ध्यान दें कि docker API को सूचीबद्ध करने के लिए आप docker
कमांड या curl
का उपयोग कर सकते हैं जैसे कि निम्नलिखित उदाहरण में:
यदि आप docker
कमांड के साथ दूरस्थ docker API से संपर्क कर सकते हैं तो आप किसी भी docker कमांड को निष्पादित कर सकते हैं ताकि सेवा के साथ बातचीत की जा सके।
आप export DOCKER_HOST="tcp://localhost:2375"
कर सकते हैं और -H
पैरामीटर का उपयोग करने से बच सकते हैं।
तेज़ विशेषाधिकार वृद्धि
Curl
कभी-कभी आप 2376 को TLS एंडपॉइंट के लिए सक्रिय देखेंगे। मैं इसे डॉकर क्लाइंट के साथ कनेक्ट करने में असमर्थ रहा हूँ लेकिन इसे कर्ल के साथ करना संभव है।
यदि आप इसके बारे में अधिक जानकारी चाहते हैं, तो अधिक जानकारी वहाँ उपलब्ध है जहाँ मैंने कमांड कॉपी किए: https://securityboulevard.com/2019/02/abusing-docker-api-socket/
In the following page you can find ways to escape from a docker container:
Docker Securityइसका दुरुपयोग करके, एक कंटेनर से बाहर निकलना संभव है, आप दूरस्थ मशीन में एक कमजोर कंटेनर चला सकते हैं, इससे बाहर निकल सकते हैं, और मशीन को समझौता कर सकते हैं:
यदि आप एक होस्ट के अंदर हैं जो डॉकर का उपयोग कर रहा है, तो आप विशेषाधिकार बढ़ाने के लिए इस जानकारी को पढ़ सकते हैं.
चेक करें env (पर्यावरण चर अनुभाग) रहस्यों के लिए और आप पा सकते हैं:
पासवर्ड।
आईपी।
पोर्ट।
पथ।
अन्य… .
यदि आप एक फ़ाइल निकालना चाहते हैं:
आप अपने वर्तमान docker स्थापना की जांच करने के लिए उपकरण https://github.com/docker/docker-bench-security का उपयोग कर सकते हैं।
./docker-bench-security.sh
आप अपने वर्तमान docker स्थापना की जांच करने के लिए उपकरण https://github.com/kost/dockscan का उपयोग कर सकते हैं।
dockscan -v unix:///var/run/docker.sock
आप उपकरण https://github.com/genuinetools/amicontained का उपयोग कर सकते हैं ताकि यह पता चले कि एक कंटेनर को विभिन्न सुरक्षा विकल्पों के साथ चलाने पर क्या विशेषाधिकार मिलेंगे। यह कुछ सुरक्षा विकल्पों का उपयोग करके एक कंटेनर चलाने के प्रभावों को जानने के लिए उपयोगी है:
docker run --rm -it r.j3ss.co/amicontained
docker run --rm -it --pid host r.j3ss.co/amicontained
docker run --rm -it --security-opt "apparmor=unconfined" r.j3ss.co/amicontained
आप https://github.com/quay/clair का docker image का उपयोग कर सकते हैं ताकि यह आपके अन्य docker images को स्कैन करे और कमजोरियों को खोजे।
docker run --rm -v /root/clair_config/:/config -p 6060-6061:6060-6061 -d clair -config="/config/config.yaml"
clair-scanner -c http://172.17.0.3:6060 --ip 172.17.0.1 ubuntu-image
आप उपकरण https://github.com/buddy-works/dockerfile-linter का उपयोग कर सकते हैं ताकि अपने Dockerfile की जांच करें और सभी प्रकार की गलत कॉन्फ़िगरेशन खोजें। प्रत्येक गलत कॉन्फ़िगरेशन को एक ID दी जाएगी, आप यहाँ https://github.com/buddy-works/dockerfile-linter/blob/master/Rules.md पर देख सकते हैं कि उन्हें कैसे ठीक करें।
dockerfilelinter -f Dockerfile
आप उपकरण https://github.com/replicatedhq/dockerfilelint का उपयोग कर सकते हैं ताकि अपने Dockerfile की जांच करें और सभी प्रकार की गलत कॉन्फ़िगरेशन खोजें।
dockerfilelint Dockerfile
आप उपकरण https://github.com/RedCoolBeans/dockerlint का उपयोग कर सकते हैं ताकि अपने Dockerfile की जांच करें और सभी प्रकार की गलत कॉन्फ़िगरेशन खोजें।
dockerlint Dockerfile
आप उपकरण https://github.com/hadolint/hadolint का उपयोग कर सकते हैं ताकि अपने Dockerfile की जांच करें और सभी प्रकार की गलत कॉन्फ़िगरेशन खोजें।
hadolint Dockerfile
आप उपकरण https://github.com/falcosecurity/falco का उपयोग कर सकते हैं ताकि चल रहे कंटेनरों में संदिग्ध व्यवहार का पता लगाएं।
निम्नलिखित खंड में ध्यान दें कि Falco एक कर्नेल मॉड्यूल संकलित करता है और इसे सम्मिलित करता है। इसके बाद, यह नियमों को लोड करता है और संदिग्ध गतिविधियों को लॉग करना शुरू करता है। इस मामले में, इसने 2 विशेषाधिकार प्राप्त कंटेनरों का पता लगाया, जिनमें से 1 संवेदनशील माउंट के साथ था, और कुछ सेकंड बाद इसने देखा कि एक शेल कंटेनरों में से एक के अंदर खोला गया था।
आप docker की निगरानी के लिए auditd का उपयोग कर सकते हैं।
AWS हैकिंग सीखें और अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE) GCP हैकिंग सीखें और अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE)