2375, 2376 Pentesting Docker
Docker Basics
क्या है
Docker containerization उद्योग में प्रमुख प्लेटफॉर्म है, निरंतर नवाचार का मुख्यांकन करता है। यह अनुप्रयोगों की आसान रूप से निर्माण और वितरण को सुनिश्चित करता है, जो पारंपरिक से भविष्यवाणी तक फैलते हैं, और उनकी सुरक्षित डिप्लॉयमेंट को विभिन्न परिवेशों में सुनिश्चित करता है।
मूल docker वास्तुकला
containerd: यह एक मुख्य रनटाइम है जो containers की जीवनचक्र की व्यापक प्रबंधन का कार्य करता है। इसमें छवि स्थानांतरण और भंडारण का संबंधित काम शामिल है, साथ ही containers की क्रियान्वयन, मॉनिटरिंग, और नेटवर्किंग का परिचालन करता है। containerd पर अधिक विस्तृत अनुभव हैं।
container-shim containers के हेडलेस containers के संचालन में एक महत्वपूर्ण भूमिका निभाता है, जो containers को प्रारंभिक करने के बाद runc से स्वाभाविक रूप से संभाल लेता है।
runc: इसकी हल्के और सार्वभौमिक container runtime क्षमताओं के लिए प्रशंसित runc, OCI मानक के साथ संरेखित है। यह containerd द्वारा containers की आरंभ करने और प्रबंधन करने के लिए OCI दिशानिर्देशों के अनुसार उपयोग किया जाता है, जो मूल libcontainer से विकसित है।
grpc containerd और docker-engine के बीच संचार को सुनिश्चित करने के लिए आवश्यक है, कुशल बातचीत सुनिश्चित करता है।
OCI रनटाइम और छवियों के लिए OCI निर्देशिकाएं बनाए रखने में महत्वपूर्ण है, नवीनतम Docker संस्करण OCI छवि और रनटाइम मानकों के साथ संगत हैं।
मूल कमांड्स
Containerd
Containerd को विशेष रूप से Docker और Kubernetes जैसे कंटेनर प्लेटफॉर्म की आवश्यकताओं को पूरा करने के लिए विकसित किया गया था। यह विभिन्न ऑपरेटिंग सिस्टमों पर कंटेनर्स का निष्पादन सरल बनाने का उद्देश्य रखता है, जैसे Linux, Windows, Solaris, और अन्य, ऑपरेटिंग सिस्टम-विशिष्ट कार्यक्षमता और सिस्टम कॉल को अबस्ट्रैक्ट करके। Containerd का लक्ष्य उसके उपयोगकर्ताओं द्वारा आवश्यक मौलिक विशेषताओं को ही शामिल करना है, अनावश्यक घटकों को छोड़ने का प्रयास करता है। हालांकि, इस लक्ष्य को पूरी तरह से हासिल करना चुनौतीपूर्ण माना जाता है।
एक मुख्य डिज़ाइन निर्णय यह है कि Containerd नेटवर्किंग का संभालन नहीं करता। नेटवर्किंग को वितरित सिस्टमों में एक महत्वपूर्ण तत्व माना जाता है, जिसमें सॉफ्टवेयर परिभाषित नेटवर्किंग (SDN) और सेवा खोज जैसी जटिलताएं शामिल हैं जो एक प्लेटफॉर्म से दूसरे पर भिन्न होती हैं। इसलिए, Containerd नेटवर्किंग सिद्धांतों को उन प्लेटफॉर्मों के द्वारा प्रबंधित करने के लिए छोड़ देता है जिन्हें यह समर्थन करता है।
जबकि Docker Containerd का उपयोग कंटेनर्स चलाने के लिए करता है, इस बात का महत्व है कि Containerd केवल Docker की कुछ विशेषताओं का समर्थन करता है। विशेष रूप से, Containerd में नेटवर्क प्रबंधन की क्षमताएं नहीं हैं जो Docker में मौजूद हैं और यह सीधे Docker swarms का निर्माण समर्थन नहीं करता है। यह विभाजन Containerd की ध्यान केंद्रित भूमिका को एक कंटेनर रनटाइम वातावरण के रूप में प्रकट करता है, ज्यादा विशेषीकृत क्षमताओं को उन प्लेटफॉर्मों को सौंपता है जिसके साथ यह एकीकृत होता है।
Podman
Podman एक ओपन-सोर्स कंटेनर इंजन है जो ओपन कंटेनर इनिशिएटिव (OCI) मानकों का पालन करता है, जिसे रेड हैट द्वारा विकसित और बनाया गया है। यह Docker से कई विशेष विशेषताओं के साथ अलग है, विशेष रूप से इसकी डेमनलेस आर्किटेक्चर और रूटलेस कंटेनर्स का समर्थन, जो उपयोगकर्ताओं को रूट प्रिविलेज के बिना कंटेनर चलाने की सुविधा प्रदान करता है।
Podman को Docker के API के साथ संगत बनाने के लिए डिज़ाइन किया गया है, जिससे Docker CLI कमांडों का उपयोग किया जा सकता है। यह संगतता इसके एकोसिस्टम को भी फैलाती है, जिसमें Buildah जैसे उपकरण शामिल हैं जो कंटेनर इमेजेस बनाने के लिए हैं और Skopeo जैसे उपकरण जो पुश, पुल और इंस्पेक्ट जैसे छवि कार्यों के लिए हैं। इन उपकरणों पर अधिक विवरण उनके GitHub पेज पर उपलब्ध हैं।
मुख्य अंतर
आर्किटेक्चर: Docker के क्लाइंट-सर्वर मॉडल के विपरीत, Podman बिना डेमन के काम करता है। यह डिज़ाइन यह मतलब है कि कंटेनर उन प्रिविलेजेज के साथ चलते हैं जिन्होंने उन्हें शुरू किया है, जिससे सुरक्षा को बढ़ावा मिलता है और रूट एक्सेस की आवश्यकता को खत्म करके।
सिस्टमड इंटीग्रेशन: Podman systemd के साथ एकीकृत है ताकि कंटेनरों का प्रबंधन किया जा सके, जिससे systemd यूनिट के माध्यम से कंटेनर प्रबंधन किया जा सके। यह Docker के उपयोग के लिए systemd का प्रधानता से उपयोग करने के विपरीत है।
रूटलेस कंटेनर्स: Podman की एक महत्वपूर्ण विशेषता यह है कि इसकी क्षमता है कि प्रारंभ करने वाले उपयोगकर्ता की प्रिविलेजेज के तहत कंटेनर चलाने की। यह दृष्टिकोण कंटेनर उल्लंघन से जुड़ी जोखिमों को कम करने के लिए है जिससे हमलावर केवल प्रभावित उपयोगकर्ता की प्रिविलेजेज प्राप्त करते हैं, न कि रूट एक्सेस।
Podman का दृष्टिकोण एक सुरक्षित और लचीला विकल्प प्रदान करता है, जिसमें उपयोगकर्ता प्रिविलेज प्रबंधन और मौजूदा Docker वर्कफ़्लो के साथ संगति को जोर दिया गया है।
ध्यान दें कि podman का उद्देश्य डॉकर के समान API का समर्थन करना है, आप podman के साथ डॉकर के समान कमांड जैसे का उपयोग कर सकते हैं:
मूल जानकारी
दूरस्थ API डिफ़ॉल्ट रूप से 2375 पोर्ट पर चल रहा है जब सक्षम होता है। सेवा डिफ़ॉल्ट रूप से प्रमाणीकरण की आवश्यकता नहीं होगी, जिससे एक हमलावर को एक विशेषाधिकारी डॉकर कंटेनर शुरू करने की अनुमति मिलती है। दूरस्थ API का उपयोग करके कोई भी मेज़बान / (रूट निर्देशिका) को कंटेनर से जोड़ सकता है और मेज़बान के वातावरण की फ़ाइलें पढ़ / लिख सकता है।
डिफ़ॉल्ट पोर्ट: 2375
जांच
मैन्युअल
ध्यान दें कि डॉकर API की जांच के लिए आप docker
कमांड या curl
का उपयोग कर सकते हैं जैसे निम्नलिखित उदाहरण में:
यदि आप docker
कमांड के साथ रिमोट डॉकर API से संपर्क स्थापित कर सकते हैं तो आप सेवा के साथ रुचि दिखाने के लिए पिछले कमांड को क्रियान्वित कर सकते हैं।
आप export DOCKER_HOST="tcp://localhost:2375"
कर सकते हैं और docker कमांड के साथ -H
पैरामीटर का उपयोग बचा सकते हैं।
त्वरित विशेषाधिकार उन्नति
कर्ल
कभी-कभी आप TLS एंडपॉइंट के लिए 2376 देखेंगे। मैं डॉकर क्लाइंट के साथ इससे कनेक्ट नहीं हो पा रहा हूँ लेकिन इसे कर्ल के साथ करना संभव है।
यदि आप इसके बारे में अधिक जानकारी चाहते हैं, तो वहाँ अधिक जानकारी उपलब्ध है जहाँ से मैंने कमांड कॉपी की है: https://securityboulevard.com/2019/02/abusing-docker-api-socket/
स्वचालित
Compromising
निम्नलिखित पृष्ठ में आपको एक डॉकर कंटेनर से बाहर निकलने के तरीके मिल सकते हैं:
pageDocker Securityइसका दुरुपयोग करके एक कंटेनर से बाहर निकलना संभव है, आप दूरस्थ मशीन में एक कमजोर कंटेनर चला सकते हैं, उससे बाहर निकल सकते हैं, और मशीन को कमजोर कर सकते हैं:
विशेषाधिकार उन्नयन
यदि आप एक होस्ट के अंदर हैं जो डॉकर का उपयोग कर रहा है, तो आप विशेषाधिकार उन्नयन करने के लिए इस जानकारी को पढ़ सकते हैं.
चल रहे Docker containers में रहस्यों का खोज
गुप्तियों के लिए env (पर्यावरण चर खंड) की जाँच करें और आपको निम्नलिखित मिल सकता है:
पासवर्ड।
आईपी's।
पोर्ट्स।
पथ्स।
अन्य...।
अगर आप एक फ़ाइल निकालना चाहते हैं:
अपने Docker को सुरक्षित बनाएं
Docker स्थापना और उपयोग को सुरक्षित बनाएं
आप https://github.com/docker/docker-bench-security टूल का उपयोग कर सकते हैं अपनी वर्तमान docker स्थापना की जांच करने के लिए।
./docker-bench-security.sh
आप https://github.com/kost/dockscan टूल का उपयोग कर सकते हैं अपनी वर्तमान docker स्थापना की जांच करने के लिए।
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
Docker इमेज को सुरक्षित बनाएं
आप https://github.com/quay/clair का डॉकर इमेज उपयोग कर सकते हैं ताकि यह आपकी अन्य डॉकर इमेजों की जांच करे और सुरक्षा गड़बड़ियों को खोजे।
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
Docker फ़ाइल को सुरक्षित बनाएं
आप https://github.com/buddy-works/dockerfile-linter टूल का उपयोग कर सकते हैं अपनी Docker फ़ाइल की जांच करने के लिए और सभी प्रकार की गलतियों को खोजने के लिए। हर गलती को एक आईडी दिया जाएगा, आप यहाँ https://github.com/buddy-works/dockerfile-linter/blob/master/Rules.md प्रत्येक को कैसे ठीक करें इसे जान सकते हैं।
dockerfilelinter -f Dockerfile
आप https://github.com/replicatedhq/dockerfilelint टूल का उपयोग कर सकते हैं अपनी Docker फ़ाइल की जांच करने के लिए और सभी प्रकार की गलतियों को खोजने के लिए।
dockerfilelint Dockerfile
आप https://github.com/RedCoolBeans/dockerlint टूल का उपयोग कर सकते हैं अपनी Docker फ़ाइल की जांच करने के लिए और सभी प्रकार की गलतियों को खोजने के लिए।
dockerlint Dockerfile
आप https://github.com/hadolint/hadolint टूल का उपयोग कर सकते हैं अपनी Docker फ़ाइल की जांच करने के लिए और सभी प्रकार की गलतियों को खोजने के लिए।
hadolint Dockerfile
संदेहपूर्ण गतिविधि को लॉग करना
आप https://github.com/falcosecurity/falco टूल का उपयोग कर सकते हैं चल रहे कंटेनरों में संदेहपूर्ण व्यवहार का पता लगाने के लिए।
नीचे दिए गए चंक में ध्यान दें कैसे Falco एक कर्नेल मॉड्यूल को कंपाइल करता है और इसे डालता है। इसके बाद, यह नियमों को लोड करता है और संदेहपूर्ण गतिविधियों को लॉग करना शुरू करता है। इस मामले में यह 2 प्रिविलेज्ड कंटेनर शुरू हो गए हैं, जिनमें से एक में एक संवेदनशील माउंट है, और कुछ सेकंड के बाद यह डिटेक्ट करता है कि कैसे एक शैल एक कंटेनर के अंदर खोला गया था।
मॉनिटरिंग डॉकर
आप ऑडिटीडी का उपयोग डॉकर को मॉनिटर करने के लिए कर सकते हैं।
संदर्भ
Last updated