2375, 2376 Pentesting Docker
Docker Basics
What is
Docker कंटेनराइजेशन उद्योग में अग्रणी प्लेटफॉर्म है, जो निरंतर नवाचार का नेतृत्व करता है। यह पारंपरिक से लेकर भविष्यवादी अनुप्रयोगों के निर्माण और वितरण को सरल बनाता है, और विभिन्न वातावरणों में उनके सुरक्षित तैनाती की सुनिश्चितता करता है।
Basic docker architecture
containerd: यह कंटेनरों के लिए एक मुख्य रनटाइम है, जो एक कंटेनर के जीवनचक्र का व्यापक प्रबंधन करता है। इसमें छवि स्थानांतरण और भंडारण के साथ-साथ कंटेनरों के निष्पादन, निगरानी, और नेटवर्किंग का प्रबंधन शामिल है। कंटेनरड पर अधिक विस्तृत जानकारी आगे खोजी गई है।
container-shim हेडलैस कंटेनरों के प्रबंधन में एक महत्वपूर्ण भूमिका निभाता है, जो कंटेनरों के प्रारंभ होने के बाद runc से सहजता से कार्यभार संभालता है।
runc: इसके हल्के और सार्वभौमिक कंटेनर रनटाइम क्षमताओं के लिए प्रसिद्ध, runc OCI मानक के साथ संरेखित है। इसका उपयोग कंटेनरड द्वारा कंटेनरों को प्रारंभ और प्रबंधित करने के लिए OCI दिशानिर्देशों के अनुसार किया जाता है, जो मूल libcontainer से विकसित हुआ है।
grpc containerd और docker-engine के बीच संचार को सुविधाजनक बनाने के लिए आवश्यक है, जो कुशल इंटरैक्शन सुनिश्चित करता है।
OCI रनटाइम और छवियों के लिए OCI विनिर्देशों को बनाए रखने में महत्वपूर्ण है, नवीनतम Docker संस्करण OCI छवि और रनटाइम मानकों के साथ अनुरूप हैं।
Basic commands
Containerd
Containerd विशेष रूप से Docker और Kubernetes जैसे कंटेनर प्लेटफार्मों की आवश्यकताओं को पूरा करने के लिए विकसित किया गया था। इसका उद्देश्य विभिन्न ऑपरेटिंग सिस्टम, जैसे Linux, Windows, Solaris, और अधिक में कंटेनरों के निष्पादन को सरल बनाना है, ऑपरेटिंग सिस्टम-विशिष्ट कार्यक्षमता और सिस्टम कॉल को अमूर्त करके। Containerd का लक्ष्य केवल उन आवश्यक सुविधाओं को शामिल करना है जो इसके उपयोगकर्ताओं द्वारा आवश्यक हैं, अनावश्यक घटकों को छोड़ने का प्रयास करते हुए। हालाँकि, इस लक्ष्य को पूरी तरह से प्राप्त करना चुनौतीपूर्ण माना जाता है।
एक प्रमुख डिज़ाइन निर्णय यह है कि Containerd नेटवर्किंग को संभालता नहीं है। नेटवर्किंग को वितरित प्रणालियों में एक महत्वपूर्ण तत्व माना जाता है, जिसमें सॉफ़्टवेयर परिभाषित नेटवर्किंग (SDN) और सेवा खोज जैसी जटिलताएँ शामिल हैं जो एक प्लेटफ़ॉर्म से दूसरे प्लेटफ़ॉर्म में काफी भिन्न होती हैं। इसलिए, Containerd नेटवर्किंग पहलुओं को उन प्लेटफार्मों द्वारा प्रबंधित करने के लिए छोड़ देता है जिनका वह समर्थन करता है।
जबकि Docker कंटेनरों को चलाने के लिए Containerd का उपयोग करता है, यह ध्यान रखना महत्वपूर्ण है कि Containerd केवल Docker की कार्यक्षमताओं के एक उपसमुच्चय का समर्थन करता है। विशेष रूप से, Containerd में Docker में मौजूद नेटवर्क प्रबंधन क्षमताओं की कमी है और यह सीधे Docker स्वार्म बनाने का समर्थन नहीं करता है। यह भेद Containerd की एक कंटेनर रनटाइम वातावरण के रूप में केंद्रित भूमिका को उजागर करता है, जो इसके साथ एकीकृत प्लेटफार्मों को अधिक विशेषीकृत कार्यक्षमताएँ सौंपता है।
Podman
Podman एक ओपन-सोर्स कंटेनर इंजन है जो Open Container Initiative (OCI) मानकों का पालन करता है, जिसे Red Hat द्वारा विकसित और बनाए रखा गया है। यह daemonless architecture और rootless containers के समर्थन के साथ Docker से कई विशिष्ट विशेषताओं के साथ अलग है, जिससे उपयोगकर्ता बिना रूट विशेषाधिकार के कंटेनर चला सकते हैं।
Podman को Docker के API के साथ संगत बनाने के लिए डिज़ाइन किया गया है, जिससे Docker CLI कमांड का उपयोग करना संभव हो जाता है। यह संगतता इसके पारिस्थितिकी तंत्र तक फैली हुई है, जिसमें Buildah जैसे उपकरण शामिल हैं जो कंटेनर छवियों को बनाने के लिए और Skopeo छवि संचालन जैसे पुश, पुल और निरीक्षण के लिए हैं। इन उपकरणों के बारे में अधिक जानकारी उनके GitHub पृष्ठ पर मिल सकती है।
मुख्य अंतर
आर्किटेक्चर: Docker के क्लाइंट-सर्वर मॉडल के विपरीत जिसमें एक बैकग्राउंड डेमन होता है, Podman बिना डेमन के काम करता है। इस डिज़ाइन का अर्थ है कि कंटेनर उन विशेषाधिकारों के साथ चलते हैं जो उपयोगकर्ता ने शुरू किए हैं, जिससे रूट एक्सेस की आवश्यकता को समाप्त करके सुरक्षा बढ़ती है।
Systemd एकीकरण: Podman कंटेनरों को प्रबंधित करने के लिए systemd के साथ एकीकृत होता है, जिससे systemd इकाइयों के माध्यम से कंटेनर प्रबंधन संभव होता है। यह Docker के उपयोग के विपरीत है, जो मुख्य रूप से Docker डेमन प्रक्रिया को प्रबंधित करने के लिए systemd का उपयोग करता है।
Rootless Containers: Podman की एक महत्वपूर्ण विशेषता यह है कि यह प्रारंभ करने वाले उपयोगकर्ता के विशेषाधिकारों के तहत कंटेनर चलाने की क्षमता रखता है। यह दृष्टिकोण कंटेनर उल्लंघनों से जुड़े जोखिमों को कम करता है, यह सुनिश्चित करते हुए कि हमलावर केवल समझौता किए गए उपयोगकर्ता के विशेषाधिकार प्राप्त करते हैं, न कि रूट एक्सेस।
Podman का दृष्टिकोण Docker के लिए एक सुरक्षित और लचीला विकल्प प्रदान करता है, जो उपयोगकर्ता विशेषाधिकार प्रबंधन और मौजूदा Docker कार्यप्रवाहों के साथ संगतता पर जोर देता है।
ध्यान दें कि चूंकि podman का लक्ष्य docker के समान API का समर्थन करना है, आप podman के साथ वही कमांड का उपयोग कर सकते हैं जो docker के साथ हैं जैसे:
मूल जानकारी
Remote API डिफ़ॉल्ट रूप से 2375 पोर्ट पर चल रहा है जब इसे सक्षम किया जाता है। सेवा डिफ़ॉल्ट रूप से प्रमाणीकरण की आवश्यकता नहीं होगी, जिससे एक हमलावर को एक विशेषाधिकार प्राप्त docker कंटेनर शुरू करने की अनुमति मिलती है। Remote API का उपयोग करके कोई भी होस्ट / (रूट निर्देशिका) को कंटेनर से जोड़ सकता है और होस्ट के वातावरण की फ़ाइलों को पढ़/लिख सकता है।
डिफ़ॉल्ट पोर्ट: 2375
Enumeration
Manual
ध्यान दें कि docker API को सूचीबद्ध करने के लिए आप docker
कमांड या curl
का उपयोग कर सकते हैं जैसे कि निम्नलिखित उदाहरण में:
यदि आप docker
कमांड के साथ रिमोट डॉकर API से संपर्क कर सकते हैं तो आप सेवा के साथ बातचीत करने के लिए किसी भी डॉकर कमांड का उपयोग कर सकते हैं।
आप export DOCKER_HOST="tcp://localhost:2375"
कर सकते हैं और -H
पैरामीटर का उपयोग करने से बच सकते हैं।
तेज़ विशेषाधिकार वृद्धि
Curl
कभी-कभी आप TLS एंडपॉइंट के लिए 2376 को सक्रिय देखेंगे। मैं इसे डॉकर क्लाइंट के साथ कनेक्ट करने में असमर्थ रहा हूँ लेकिन इसे कर्ल के साथ करना संभव है।
यदि आप इसके बारे में अधिक जानकारी चाहते हैं, तो अधिक जानकारी वहाँ उपलब्ध है जहाँ मैंने कमांड कॉपी किए: https://securityboulevard.com/2019/02/abusing-docker-api-socket/
स्वचालित
Compromising
In the following page you can find ways to escape from a docker container:
Docker Securityइसका दुरुपयोग करके, एक कंटेनर से बाहर निकलना संभव है, आप दूरस्थ मशीन में एक कमजोर कंटेनर चला सकते हैं, इससे बाहर निकल सकते हैं, और मशीन को समझौता कर सकते हैं:
विशेषाधिकार वृद्धि
यदि आप एक होस्ट के अंदर हैं जो डॉकर का उपयोग कर रहा है, तो आप विशेषाधिकार बढ़ाने के लिए इस जानकारी को पढ़ सकते हैं.
चल रहे Docker कंटेनरों में रहस्यों की खोज करना
चेक करें env (पर्यावरण चर अनुभाग) रहस्यों के लिए और आप पा सकते हैं:
पासवर्ड।
आईपी।
पोर्ट।
पथ।
अन्य… .
यदि आप एक फ़ाइल निकालना चाहते हैं:
Securing your Docker
Securing Docker installation and usage
आप अपने वर्तमान 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
Securing Docker Images
आप 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
Securing Dockerfiles
आप उपकरण 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
Logging Suspicious activity
आप उपकरण https://github.com/falcosecurity/falco का उपयोग कर सकते हैं चल रहे कंटेनरों में संदिग्ध व्यवहार का पता लगाने के लिए।
निम्नलिखित खंड में ध्यान दें कि Falco एक कर्नेल मॉड्यूल संकलित करता है और इसे सम्मिलित करता है। इसके बाद, यह नियमों को लोड करता है और संदिग्ध गतिविधियों को लॉग करना शुरू करता है। इस मामले में, इसने 2 विशेषाधिकार प्राप्त कंटेनरों का पता लगाया, जिनमें से 1 संवेदनशील माउंट के साथ था, और कुछ सेकंड बाद इसने देखा कि एक शेल एक कंटेनर के अंदर खोला गया था।
Docker की निगरानी
आप docker की निगरानी के लिए auditd का उपयोग कर सकते हैं।
संदर्भ
Last updated