Docker Security
Trickest का उपयोग करें और दुनिया के सबसे उन्नत समुदाय उपकरणों द्वारा संचालित वर्कफ़्लो को आसानी से निर्माण और स्वचालित करें। आज ही पहुंचें:
मूल डॉकर इंजन सुरक्षा
डॉकर इंजन ने लिनक्स कर्नेल के नेमस्पेस और सीग्रुप्स का उपयोग करके कंटेनरों को अलग करने के लिए उपयोग किया है, जो एक मूल सुरक्षा स्तर प्रदान करता है। क्षमताएँ छोड़ना, सेकॉम्प, और SELinux/AppArmor के माध्यम से अतिरिक्त सुरक्षा प्रदान की जाती है, जो कंटेनर अलगाव को बढ़ाता है। एक ऑथ प्लगइन उपयोगकर्ता क्रियाओं को और अधिक प्रतिबंधित कर सकता है।
डॉकर इंजन तक सुरक्षित पहुंच
डॉकर इंजन को या तो स्थानीय रूप से यूनिक्स सॉकेट के माध्यम से या HTTP का उपयोग करके दूरस्थ रूप से पहुंचा जा सकता है। दूरस्थ पहुंच के लिए, गोपनीयता, अखंडता, और प्रमाणीकरण सुनिश्चित करने के लिए HTTPS और TLS का उपयोग करना महत्वपूर्ण है।
डॉकर इंजन, डिफ़ॉल्ट रूप से, unix:///var/run/docker.sock
पर यूनिक्स सॉकेट पर सुनता है। उबुंटू सिस्टम पर, डॉकर की स्टार्टअप विकल्प /etc/default/docker
में परिभाषित होते हैं। डॉकर API और क्लाइंट के लिए दूरस्थ पहुंच सक्षम करने के लिए, निम्नलिखित सेटिंग्स जोड़कर डॉकर डेमन को एक HTTP सॉकेट पर व्यक्त करें:
हालांकि, Docker डेमन को HTTP के माध्यम से अनावश्यक रूप से उजागर करना सुरक्षा संबंधी चिंताओं के कारण सिफारिश नहीं है। HTTPS का उपयोग करके कनेक्शन को सुरक्षित बनाना उत्तम है। कनेक्शन को सुरक्षित बनाने के दो मुख्य दृष्टिकोण हैं:
क्लाइंट सर्वर की पहचान सत्यापित करता है।
क्लाइंट और सर्वर एक-दूसरे की पहचान साझा करते हैं।
प्रमाणपत्रों का उपयोग सर्वर की पहचान सत्यापित करने के लिए किया जाता है। दोनों विधियों के विस्तृत उदाहरणों के लिए, इस गाइड का संदर्भ दें।
कंटेनर इमेज की सुरक्षा
कंटेनर इमेज को निजी या सार्वजनिक रिपॉजिटरी में संग्रहीत किया जा सकता है। Docker कंटेनर इमेजों के लिए कई संग्रहण विकल्प प्रदान करता है:
Docker Hub: Docker से एक सार्वजनिक रजिस्ट्री सेवा।
Docker Registry: एक ओपन-सोर्स परियोजना जो उपयोगकर्ताओं को अपनी रजिस्ट्री होस्ट करने की अनुमति देती है।
Docker Trusted Registry: Docker का व्यावसायिक रजिस्ट्री प्रस्ताव, जिसमें भूमिका-आधारित उपयोगकर्ता प्रमाणीकरण और LDAP निर्देशिका सेवाओं के साथ समाकरण शामिल है।
इमेज स्कैनिंग
कंटेनर में सुरक्षा दोष हो सकते हैं या तो मूल इमेज के कारण हो सकते हैं या मूल इमेज पर स्थापित सॉफ्टवेयर के कारण हो सकते हैं। Docker एक परियोजना पर काम कर रहा है जिसे नौटिलस कहा जाता है जो कंटेनरों की सुरक्षा स्कैन करता है और सुरक्षा दोषों की सूची बनाता है। नौटिलस यह काम करता है जिससे प्रत्येक कंटेनर इमेज परत को सुरक्षा दोषों की रिपोजिटरी के साथ तुलना करके सुरक्षा खोजे।
अधिक जानकारी के लिए यह पढ़ें.
docker scan
docker scan
कमांड आपको विदित Docker इमेजों को स्कैन करने की अनुमति देता है उपयोगकर्ता नाम या आईडी का उपयोग करके। उदाहरण के लिए, hello-world इमेज को स्कैन करने के लिए निम्नलिखित कमांड चलाएं:
Docker छवि साइनिंग
Docker छवि साइनिंग छवियों में उपयोग की गई सुरक्षा और अखंडता सुनिश्चित करती है। यहाँ एक संक्षिप्त स्पष्टीकरण है:
Docker सामग्री विश्वास को सक्रिय करने के लिए,
export DOCKER_CONTENT_TRUST=1
सेट करें। यह सुविधा Docker संस्करण 1.10 और उसके बाद के लिए डिफ़ॉल्ट रूप से बंद है।इस सुविधा को सक्षम करने के साथ, केवल साइन की गई छवियाँ डाउनलोड की जा सकती हैं। प्रारंभिक छवि पुश करने के लिए मूल और टैगिंग कुंजियों के लिए पासफ्रेज सेट करने की आवश्यकता होती है, जिसमें Docker भी उन्नत सुरक्षा के लिए Yubikey का समर्थन करता है। अधिक विवरण यहाँ मिल सकते हैं।
सामग्री विश्वास सक्षम करने के साथ असाइन की गई छवि को डाउनलोड करने का प्रयास करने पर "नो ट्रस्ट डेटा फॉर लेटेस्ट" त्रुटि आती है।
पहले के बाद छवि पुश करने के लिए, Docker छवि को साइन करने के लिए रिपॉजिटरी कुंजी का पासफ्रेज पूछता है।
अपनी निजी कुंजियों का बैकअप करने के लिए, निम्नलिखित कमांड का उपयोग करें:
Docker होस्ट बदलने पर, संचालन बनाए रखने के लिए मूल और रिपॉजिटरी कुंजी को स्थानांतरित करना आवश्यक है।
Trickest का उपयोग करें और आसानी से विश्व के सबसे उन्नत समुदाय उपकरणों द्वारा संचालित कार्यप्रवाह निर्मित करें। आज ही पहुंचें:
कंटेनर सुरक्षा सुविधाएं
नेमस्पेस
नेमस्पेस लिनक्स कर्नेल की एक विशेषता है जो कर्नेल संसाधनों को विभाजित करती है ताकि एक सेट की प्रक्रियाएँ एक सेट के संसाधनों को देखें जबकि एक अलग सेट की प्रक्रियाएँ एक भिन्न सेट के संसाधनों को देखें। यह सुविधा एक सेट के संसाधनों और प्रक्रियाओं के लिए एक ही नेमस्पेस होने के रूप में काम करती है, लेकिन वे नेमस्पेस विभिन्न संसाधनों को संदर्भित करते हैं। संसाधन एकाधिक स्थानों में मौजूद हो सकते हैं।
डॉकर निम्नलिखित लिनक्स कर्नेल नेमस्पेस का उपयोग करता है ताकि कंटेनर विलयन को प्राप्त कर सके:
pid नेमस्पेस
माउंट नेमस्पेस
नेटवर्क नेमस्पेस
ipc नेमस्पेस
UTS नेमस्पेस
नेमस्पेस के बारे में अधिक जानकारी के लिए निम्नलिखित पृष्ठ की जाँच करें:
pageNamespacescgroups
लिनक्स कर्नेल सुविधा cgroups प्रक्रियाओं के एक सेट के बीच संसाधनों जैसे cpu, मेमोरी, आईओ, नेटवर्क बैंडविड्थ को सीमित करने की क्षमता प्रदान करती है। डॉकर cgroup सुविधा का उपयोग करने देता है जिससे विशिष्ट कंटेनर के लिए संसाधन नियंत्रण संभव हो। निम्नलिखित एक कंटेनर उपयोगकर्ता स्थान मेमोरी को 500m तक सीमित करने के साथ बनाया गया है, कर्नेल मेमोरी को 50m तक सीमित करने के साथ, cpu शेयर को 512, blkioweight को 400 करने की अनुमति देता है। सीपीयू शेयर एक अनुपात है जो कंटेनर के सीपीयू उपयोग को नियंत्रित करता है। इसका डिफ़ॉल्ट मूल्य 1024 है और 0 और 1024 के बीच रेंज है। यदि तीन कंटेनर्स का सीपीयू शेयर 1024 है, तो हर कंटेनर सीपीयू संसाधन संघर्ष की स्थिति में 33% तक का सीपीयू ले सकता है। ब्ल्किओ-वेट एक अनुपात है जो कंटेनर के आईओ को नियंत्रित करता है। इसका डिफ़ॉल्ट मूल्य 500 है और 10 और 1000 के बीच रेंज है।
किसी कंटेनर का cgroup प्राप्त करने के लिए आप निम्नलिखित कर सकते हैं:
अधिक जानकारी के लिए जाँचें:
pageCGroupsक्षमताएँ
क्षमताएँ मूल उपयोगकर्ता के लिए जो क्षमताएँ अनुमत हो सकती हैं, उन पर अधिक नियंत्रण प्रदान करती हैं। Docker लिनक्स कर्नेल क्षमता सुविधा का उपयोग करता है एक कंटेनर के भीतर किए जा सकने वाले ऑपरेशनों को सीमित करने के लिए अनिर्दिष्ट उपयोगकर्ता के प्रकार के बावजूद।
जब एक डॉकर कंटेनर चलाया जाता है, प्रक्रिया उसे इसोलेशन से बाहर निकलने के लिए प्रयोग कर सकती थी ऐसी संवेदनशील क्षमताएँ छोड़ देती है। यह सुनिश्चित करने का प्रयास करता है कि प्रक्रिया संवेदनशील कार्रवाई करने और बचने के लिए सक्षम न हो:
pageLinux CapabilitiesDocker में Seccomp
यह एक सुरक्षा सुविधा है जो Docker को कंटेनर के भीतर उपयोग किए जा सकने वाले सिसकॉल्स को सीमित करने की अनुमति देती है:
pageSeccompDocker में AppArmor
AppArmor एक कर्नेल एन्हांसमेंट है जो कंटेनर को संकीर्ण संसाधनों के सीमित सेट में बाधित करने के लिए प्रोग्राम प्रोफाइल के साथ विवश करता है।:
pageAppArmorDocker में SELinux
लेबलिंग सिस्टम: SELinux प्रत्येक प्रक्रिया और फ़ाइल साधन को एक अद्वितीय लेबल सौंपता है।
नीति प्रवर्तन: यह सुनिश्चित करता है कि क्या क्रियाएँ एक प्रक्रिया लेबल सिस्टम को सिस्टम के अन्य लेबलों पर कर सकती हैं।
कंटेनर प्रक्रिया लेबल: जब कंटेनर इंजन कंटेनर प्रक्रियाएँ प्रारंभ करते हैं, तो उन्हें सामान्यत: एक सीमित SELinux लेबल दिया जाता है, सामान्यत:
container_t
।कंटेनर के भीतर फ़ाइल लेबलिंग: कंटेनर के भीतर फ़ाइलों को सामान्यत:
container_file_t
लेबल दिया जाता है।नीति नियम: SELinux नीति मुख्य रूप से सुनिश्चित करती है कि
container_t
लेबल वाली प्रक्रियाएँ केवलcontainer_file_t
लेबल वाली फ़ाइलों के साथ ही प्रवास (पढ़ना, लिखना, क्रियान्वयन) कर सकती हैं।
यह तंत्र सुनिश्चित करता है कि यदि कंटेनर के भीतर कोई प्रक्रिया प्रभावित होती है, तो वह केवल उसी लेबल वाले वस्तुओं के साथ ही प्रवास करने में सीमित होती है, ऐसी संभावनाओं से होने वाले क्षति को सीमित करते हैं।
pageSELinuxAuthZ & AuthN
Docker में, एक अधिकृति प्लगइन सुरक्षा में महत्वपूर्ण भूमिका निभाता है जिसे यह निर्धारित करने में मदद मिलती है कि Docker डेमन को अनुमति देने या रोकने के लिए अनुरोध करें। यह निर्णय दो मुख्य संदर्भों की जांच करके लिया जाता है:
प्रमाणीकरण संदर्भ: इसमें उपयोगकर्ता के बारे में विस्तृत जानकारी शामिल है, जैसे कि वे कौन हैं और वे अपने आप को कैसे प्रमाणित कर रहे हैं।
कमांड संदर्भ: यह अनुरोध से संबंधित सभी महत्वपूर्ण डेटा को शामिल करता है।
ये संदर्भ सुनिश्चित करते हैं कि केवल प्रमाणित उपयोगकर्ताओं के से लिए सत्यापित अनुरोध प्रसंस्कृत किए जाते हैं, जिससे Docker कार्रवाई की सुरक्षा में सुधार होता है।
pageAuthZ& AuthN - Docker Access Authorization Pluginकंटेनर से DoS
यदि आप सही ढंग से कंटेनर के उपयोग करने वाले संसाधनों की सीमा नहीं लगाते हैं, तो एक प्रभावित कंटेनर मेजबान को DoS कर सकता है जहाँ वह चल रहा है।
CPU DoS
बैंडविड्थ डीओएस
दिलचस्प Docker फ्लैग
--privileged फ्लैग
निम्नलिखित पृष्ठ पर आप सीख सकते हैं कि --privileged
फ्लैग का क्या मतलब है:
--security-opt
no-new-privileges
यदि आप एक कंटेनर चला रहे हैं जहां एक हमलावर को कम विशेषाधिकार वाले उपयोगकर्ता के रूप में पहुंचने में सफलता मिल जाती है। यदि आपके पास एक गलत रूप से कॉन्फ़िगर किया गया suid बाइनरी है, तो हमलावर इसका दुरुपयोग कर सकता है और कंटेनर के अंदर विशेषाधिकारों को उन्नत कर सकता है। जिससे उसे इससे बाहर निकलने की अनुमति हो सकती है।
no-new-privileges
विकल्प सक्षम करके कंटेनर को चलाना इस प्रकार की विशेषाधिकारों की उन्नति को रोकेगा।
अन्य
अधिक --security-opt
विकल्पों के लिए जांच करें: https://docs.docker.com/engine/reference/run/#security-configuration
अन्य सुरक्षा मामले
रहस्यों का प्रबंधन: सर्वोत्तम अभ्यास
डॉकर इमेज में सीधे रहस्यों को समामिल करने या पर्यावरण चरणों का उपयोग करने से बचना महत्वपूर्ण है, क्योंकि ये विधियाँ आपकी संवेदनशील जानकारी को docker inspect
या exec
जैसे कमांड के माध्यम से कंटेनर तक पहुंचने वाले किसी भी व्यक्ति को उजागर करती है।
डॉकर वॉल्यूम्स एक अधिक सुरक्षित विकल्प है, जिसे संवेदनशील जानकारी तक पहुंचने के लिए सिफारिश की जाती है। ये एक अस्थायी फ़ाइल सिस्टम के रूप में उपयोग किए जा सकते हैं, docker inspect
और लॉगिंग के साथ जुड़ी खतरों को कम करते हैं। हालांकि, रूट उपयोगकर्ताओं और उन लोगों को जो कंटेनर में exec
एक्सेस हैं, वे अभी भी रहस्यों तक पहुंच सकते हैं।
डॉकर सीक्रेट्स संवेदनशील जानकारी का संभालन करने के लिए एक और अधिक सुरक्षित विधि प्रदान करते हैं। इमेज निर्माण चरण के दौरान रहस्यों की आवश्यकता होने पर, BuildKit एक कुशल समाधान प्रस्तुत करता है जिसमें बिल्ड-टाइम सीक्रेट्स का समर्थन है, जिससे बिल्ड की गति बढ़ती है और अतिरिक्त सुविधाएँ प्रदान की जाती हैं।
BuildKit का उपयोग करने के लिए, इसे तीन तरीकों से सक्रिय किया जा सकता है:
एक पर्यावरण चरण के माध्यम से:
export DOCKER_BUILDKIT=1
कमांडों को उपसर्ग देकर:
DOCKER_BUILDKIT=1 docker build .
डॉकर कॉन्फ़िगरेशन में इसे डिफ़ॉल्ट रूप से सक्षम करने के द्वारा:
{ "features": { "buildkit": true } }
, इसके बाद एक डॉकर पुनरारंभ।
BuildKit बिल्ड-टाइम सीक्रेट्स का उपयोग करने की अनुमति देता है जिससे ये रहस्य इमेज निर्माण कैश या अंतिम इमेज में शामिल नहीं होते हैं, एक कमांड का उपयोग करके:
एक चल रहे कंटेनर में आवश्यक रहने वाले रहस्यों के लिए, Docker Compose और Kubernetes मजबूत समाधान प्रदान करते हैं। Docker Compose एक secrets
कुंजी का उपयोग सेवा परिभाषा में गोपनीय फ़ाइलों को निर्दिष्ट करने के लिए करता है, जैसा कि docker-compose.yml
उदाहरण में दिखाया गया है:
यह कॉन्फ़िगरेशन Docker Compose के साथ सेवाएं शुरू करते समय रहस्यों का उपयोग की अनुमति देता है।
कुबरनेट्स परिवेशों में, रहस्यों का प्राकृतिक रूप से समर्थन किया जाता है और Helm-Secrets जैसे उपकरणों के साथ और अधिक प्रबंधित किया जा सकता है। कुबरनेट्स का भूमिका आधारित पहुंच नियंत्रण (RBAC) रहस्य प्रबंधन सुरक्षा को बढ़ाता है, जैसे Docker Enterprise के समान।
gVisor
gVisor एक एप्लिकेशन कर्नेल है, जो गो में लिखा गया है, जो लिनक्स सिस्टम सर्फेस का एक बड़ा हिस्सा कार्यान्वित करता है। इसमें एक Open Container Initiative (OCI) रनटाइम शामिल है जिसे runsc
कहा जाता है जो एप्लिकेशन और होस्ट कर्नेल के बीच एक अलगाव सीमा प्रदान करता है। runsc
रनटाइम Docker और Kubernetes के साथ एकीकृत होता है, जिससे सैंडबॉक्स कंटेनर्स चलाना सरल हो जाता है।
Kata Containers
Kata Containers एक ओपन सोर्स समुदाय है जो एक सुरक्षित कंटेनर रनटाइम बनाने के लिए काम कर रहा है जिसमें हल्के वर्चुअल मशीन्स का उपयोग करके कंटेनर्स जैसा अनुभव और प्रदर्शन करते हैं, लेकिन हार्डवेयर वर्चुअलाइजेशन प्रौद्योगिकी का उपयोग करके मजबूत कार्यभार अलगाव प्रदान करते हैं।
सारांश युक्तियाँ
--privileged
फ्लैग का उपयोग न करें और न किसी कंटेनर के अंदर डॉकर सॉकेट माउंट करें। डॉकर सॉकेट कंटेनर्स को उत्पन्न करने की अनुमति देता है, इसलिए यह होस्ट के पूर्ण नियंत्रण को लेने का एक आसान तरीका है, उदाहरण के लिए,--privileged
फ्लैग के साथ एक और कंटेनर चलाने के द्वारा।कंटेनर के अंदर रूट के रूप में न चलाएं। एक अलग उपयोगकर्ता का उपयोग करें और उपयोगकर्ता नेमस्पेस** का उपयोग करें।** कंटेनर में रूट होस्ट के समान है जब तक उपयोगकर्ता नेमस्पेस के साथ पुनर्विमापित नहीं किया जाता है। यह केवल, मुख्य रूप से, लिनक्स नेमस्पेस, क्षमताएँ, और सीग्रुप्स द्वारा हल्के से प्रतिबंधित है।
सभी क्षमताएँ छोड़ें (
--cap-drop=all
) और केवल वही जो आवश्यक है उन्हें सक्षम करें (--cap-add=...
)। अधिकांश कार्यभारों को कोई भी क्षमताएँ नहीं चाहिए और उन्हें जोड़ने से हमले के दायरे को बढ़ाता है।“no-new-privileges” सुरक्षा विकल्प का उपयोग करें जिससे प्रक्रियाएं अधिक विशेषाधिकार प्राप्त न करें, उदाहरण के लिए suid बाइनरी के माध्यम से।
कंटेनर के लिए उपलब्ध संसाधनों की सीमा निर्धारित करें। संसाधन सीमाएँ मशीन को डीनाइल ऑफ सर्विस हमलों से सुरक्षित रख सकती हैं।
सेक्कॉम्प AppArmor (या SELinux) प्रोफाइल को संक्षेपित करने के लिए सेक्यूरिटी ऑप्शन का उपयोग करें जो कंटेनर के लिए उपलब्ध क्रियाएँ और सिसकॉल्स को न्यूनतम आवश्यक करता है।
आधिकारिक डॉकर छवियाँ](https://docs.docker.com/docker-hub/official_images/) का उपयोग करें और हस्ताक्षर की आवश्यकता हो। या उन पर आधारित अपनी छवियाँ बनाएं। बैकडोर्ड छवियों को विरासत में न लें। इसके अलावा, रूट कुंजी, पासफ्रेज को सुरक्षित स्थान पर स्टोर करें। डॉकर के पास UCP के साथ कुंजियों का प्रबंधन करने की योजनाएं हैं।
नियमित रूप से अपनी छवियाँ पुनः निर्माण करें ताकि होस्ट और छवियों में सुरक्षा सुधार लागू हो सके।
अपने रहस्यों का बुद्धिमानी से प्रबंधन करें ताकि हमलावर को उन तक पहुंचना कठिन हो।
यदि आप डॉकर डेमन को उजागर करते हैं तो HTTPS का उपयोग करें जिसमें क्लाइंट और सर्वर प्रमाणीकरण शामिल है।
अपने Dockerfile में ADD की बजाय COPY का उपयोग करें। ADD स्वचालित रूप से ज़िप फ़ाइलों को निकालता है और यूआरएल से फ़ाइलें कॉपी कर सकता है। COPY के पास ये क्षमताएँ नहीं हैं। जितना संभव हो, ADD का उपयोग न करें ताकि आप दूरस्थ यूआरएल और ज़िप फ़ाइलों के माध्यम से हमलों के लिए संक्रमित न हों।
प्रत्येक माइक्रो सेवा के लिए अलग कंटेनर्स रखें
कंटेनर अंदर ssh न डालें, “docker exec” का उपयोग कंटेनर में ssh करने के लिए किया जा सकता है।
छोटे कंटेनर छवियाँ रखें
यदि आप अपनी कंपनी का विज्ञापन HackTricks में देखना चाहते हैं या HackTricks को PDF में डाउनलोड करना चाहते हैं तो सब्सक्रिप्शन प्लान्स देखें!
आधिकारिक PEASS & HackTricks स्वैग प्राप्त करें
The PEASS Family की खोज करें, हमारा विशेष NFTs संग्रह
शामिल हों 💬 डिस्कॉर्ड ग्रुप या टेलीग्राम ग्रुप या हमें ट्विटर पर फॉलो करें 🐦 @carlospolopm.
अपने हैकिंग ट्रिक्स साझा करें, HackTricks को PRs जमा करके HackTricks और HackTricks Cloud github repos में।
Last updated