Docker Security

जानें AWS हैकिंग को शून्य से हीरो तक htARTE (HackTricks AWS Red Team Expert) के साथ!

HackTricks का समर्थन करने के अन्य तरीके:

Trickest का उपयोग करें और दुनिया के सबसे उन्नत समुदाय उपकरणों द्वारा संचालित वर्कफ़्लो को आसानी से निर्माण और स्वचालित करें। आज ही पहुंचें:

मूल डॉकर इंजन सुरक्षा

डॉकर इंजन ने लिनक्स कर्नेल के नेमस्पेस और सीग्रुप्स का उपयोग करके कंटेनरों को अलग करने के लिए उपयोग किया है, जो एक मूल सुरक्षा स्तर प्रदान करता है। क्षमताएँ छोड़ना, सेकॉम्प, और SELinux/AppArmor के माध्यम से अतिरिक्त सुरक्षा प्रदान की जाती है, जो कंटेनर अलगाव को बढ़ाता है। एक ऑथ प्लगइन उपयोगकर्ता क्रियाओं को और अधिक प्रतिबंधित कर सकता है।

डॉकर इंजन तक सुरक्षित पहुंच

डॉकर इंजन को या तो स्थानीय रूप से यूनिक्स सॉकेट के माध्यम से या HTTP का उपयोग करके दूरस्थ रूप से पहुंचा जा सकता है। दूरस्थ पहुंच के लिए, गोपनीयता, अखंडता, और प्रमाणीकरण सुनिश्चित करने के लिए HTTPS और TLS का उपयोग करना महत्वपूर्ण है।

डॉकर इंजन, डिफ़ॉल्ट रूप से, unix:///var/run/docker.sock पर यूनिक्स सॉकेट पर सुनता है। उबुंटू सिस्टम पर, डॉकर की स्टार्टअप विकल्प /etc/default/docker में परिभाषित होते हैं। डॉकर API और क्लाइंट के लिए दूरस्थ पहुंच सक्षम करने के लिए, निम्नलिखित सेटिंग्स जोड़कर डॉकर डेमन को एक HTTP सॉकेट पर व्यक्त करें:

DOCKER_OPTS="-D -H unix:///var/run/docker.sock -H tcp://192.168.56.101:2376"
sudo service docker restart

हालांकि, Docker डेमन को HTTP के माध्यम से अनावश्यक रूप से उजागर करना सुरक्षा संबंधी चिंताओं के कारण सिफारिश नहीं है। HTTPS का उपयोग करके कनेक्शन को सुरक्षित बनाना उत्तम है। कनेक्शन को सुरक्षित बनाने के दो मुख्य दृष्टिकोण हैं:

  1. क्लाइंट सर्वर की पहचान सत्यापित करता है।

  2. क्लाइंट और सर्वर एक-दूसरे की पहचान साझा करते हैं।

प्रमाणपत्रों का उपयोग सर्वर की पहचान सत्यापित करने के लिए किया जाता है। दोनों विधियों के विस्तृत उदाहरणों के लिए, इस गाइड का संदर्भ दें।

कंटेनर इमेज की सुरक्षा

कंटेनर इमेज को निजी या सार्वजनिक रिपॉजिटरी में संग्रहीत किया जा सकता है। Docker कंटेनर इमेजों के लिए कई संग्रहण विकल्प प्रदान करता है:

  • Docker Hub: Docker से एक सार्वजनिक रजिस्ट्री सेवा।

  • Docker Registry: एक ओपन-सोर्स परियोजना जो उपयोगकर्ताओं को अपनी रजिस्ट्री होस्ट करने की अनुमति देती है।

  • Docker Trusted Registry: Docker का व्यावसायिक रजिस्ट्री प्रस्ताव, जिसमें भूमिका-आधारित उपयोगकर्ता प्रमाणीकरण और LDAP निर्देशिका सेवाओं के साथ समाकरण शामिल है।

इमेज स्कैनिंग

कंटेनर में सुरक्षा दोष हो सकते हैं या तो मूल इमेज के कारण हो सकते हैं या मूल इमेज पर स्थापित सॉफ्टवेयर के कारण हो सकते हैं। Docker एक परियोजना पर काम कर रहा है जिसे नौटिलस कहा जाता है जो कंटेनरों की सुरक्षा स्कैन करता है और सुरक्षा दोषों की सूची बनाता है। नौटिलस यह काम करता है जिससे प्रत्येक कंटेनर इमेज परत को सुरक्षा दोषों की रिपोजिटरी के साथ तुलना करके सुरक्षा खोजे।

अधिक जानकारी के लिए यह पढ़ें.

  • docker scan

docker scan कमांड आपको विदित Docker इमेजों को स्कैन करने की अनुमति देता है उपयोगकर्ता नाम या आईडी का उपयोग करके। उदाहरण के लिए, hello-world इमेज को स्कैन करने के लिए निम्नलिखित कमांड चलाएं:

docker scan hello-world

Testing hello-world...

Organization:      docker-desktop-test
Package manager:   linux
Project name:      docker-image|hello-world
Docker image:      hello-world
Licenses:          enabled

 Tested 0 dependencies for known issues, no vulnerable paths found.

Note that we do not currently have vulnerability data for your image.
trivy -q -f json <container_name>:<tag>
snyk container test <image> --json-file-output=<output file> --severity-threshold=high
clair-scanner -w example-alpine.yaml --ip YOUR_LOCAL_IP alpine:3.5

Docker छवि साइनिंग

Docker छवि साइनिंग छवियों में उपयोग की गई सुरक्षा और अखंडता सुनिश्चित करती है। यहाँ एक संक्षिप्त स्पष्टीकरण है:

  • Docker सामग्री विश्वास छवि साइनिंग प्रबंधित करने के लिए नोटरी परियोजना का उपयोग करता है, जो अपडेट फ्रेमवर्क (TUF) पर आधारित है। अधिक जानकारी के लिए, Notary और TUF देखें।

  • Docker सामग्री विश्वास को सक्रिय करने के लिए, export DOCKER_CONTENT_TRUST=1 सेट करें। यह सुविधा Docker संस्करण 1.10 और उसके बाद के लिए डिफ़ॉल्ट रूप से बंद है।

  • इस सुविधा को सक्षम करने के साथ, केवल साइन की गई छवियाँ डाउनलोड की जा सकती हैं। प्रारंभिक छवि पुश करने के लिए मूल और टैगिंग कुंजियों के लिए पासफ्रेज सेट करने की आवश्यकता होती है, जिसमें Docker भी उन्नत सुरक्षा के लिए Yubikey का समर्थन करता है। अधिक विवरण यहाँ मिल सकते हैं।

  • सामग्री विश्वास सक्षम करने के साथ असाइन की गई छवि को डाउनलोड करने का प्रयास करने पर "नो ट्रस्ट डेटा फॉर लेटेस्ट" त्रुटि आती है।

  • पहले के बाद छवि पुश करने के लिए, Docker छवि को साइन करने के लिए रिपॉजिटरी कुंजी का पासफ्रेज पूछता है।

अपनी निजी कुंजियों का बैकअप करने के लिए, निम्नलिखित कमांड का उपयोग करें:

tar -zcvf private_keys_backup.tar.gz ~/.docker/trust/private

Docker होस्ट बदलने पर, संचालन बनाए रखने के लिए मूल और रिपॉजिटरी कुंजी को स्थानांतरित करना आवश्यक है।


Trickest का उपयोग करें और आसानी से विश्व के सबसे उन्नत समुदाय उपकरणों द्वारा संचालित कार्यप्रवाह निर्मित करें। आज ही पहुंचें:

कंटेनर सुरक्षा सुविधाएं

कंटेनर सुरक्षा सुविधाओं का सारांश

मुख्य प्रक्रिया विभाजन सुविधाएं

कंटेनरीकृत वातावरणों में परियोजनाओं और उनकी प्रक्रियाओं को अलग रखना सुरक्षा और संसाधन प्रबंधन के लिए महत्वपूर्ण है। यहां मुख्य अवधारणाओं का एक सरलीकृत व्याख्यान है:

नेमस्पेस

  • उद्देश्य: प्रक्रियाओं, नेटवर्क, और फ़ाइल सिस्टम जैसे संसाधनों का अलगाव सुनिश्चित करना। विशेष रूप से Docker में, नेमस्पेस एक कंटेनर की प्रक्रियाओं को मेज़बान और अन्य कंटेनरों से अलग रखते हैं।

  • unshare का उपयोग: नए नेमस्पेस बनाने के लिए unshare कमांड (या अंतर्निहित सिसकॉल) का उपयोग किया जाता है, जो अलगाव की एक अतिरिक्त परत प्रदान करता है। हालांकि, Kubernetes इसे मूल रूप से नहीं ब्लॉक करता है, Docker करता है।

  • सीमा: नए नेमस्पेस बनाने से किसी प्रक्रिया को मेज़बान की डिफ़ॉल्ट नेमस्पेस पर वापस नहीं ले जाने देता है। मेज़बान नेमस्पेस में प्रवेश के लिए, आम तौर पर, nsenter का उपयोग करके मेज़बान के /proc निर्देशिका तक पहुंच की आवश्यकता होती है।

नियंत्रण समूह (CGroups)

  • कार्य: प्रक्रियाओं के बीच संसाधन आवंटित करने के लिए प्राथमिक रूप से उपयोग किया जाता है।

  • सुरक्षा पहलू: CGroups स्वयं अलगाव सुरक्षा प्रदान नहीं करते हैं, केवल release_agent सुविधा, जो अगर गलती से कॉन्फ़िगर की जाए, अनधिकृत पहुंच के लिए उत्पादित की जा सकती है।

क्षमता छोड़ें

  • महत्व: प्रक्रिया विभाजन के लिए एक महत्वपूर्ण सुरक्षा सुविधा है।

  • कार्यक्षमता: यह किसी रूट प्रक्रिया को कुछ विशेष क्षमताओं को छोड़कर करने की सीमा लगाता है। यदि कोई प्रक्रिया रूट विशेषाधिकारों के साथ चलती है, तो आवश्यक क्षमताओं की कमी के कारण यह उन्हें विशेषाधिकारित क्रियाएँ करने से रोकता है, क्योंकि सिसकॉल अनुमतियों की कमी के कारण विफल हो जाएंगे।

ये हैं प्रक्रिया जो अन्य क्षमताएँ छोड़ देती हैं:

Current: 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

यह डॉकर में डिफ़ॉल्ट रूप से सक्यूर है। यह प्रक्रिया को कॉल करने की सिसकॉल्स को और भी सीमित करने में मदद करता है। डिफ़ॉल्ट डॉकर Seccomp प्रोफ़ाइल यहाँ मिल सकता है: https://github.com/moby/moby/blob/master/profiles/seccomp/default.json

AppArmor

डॉकर में एक टेम्पलेट है जिसे आप सक्षम कर सकते हैं: https://github.com/moby/moby/tree/master/profiles/apparmor

यह योग्यताओं, सिसकॉल्स, फ़ाइलों और फ़ोल्डर्स तक पहुंच को कम करने की अनुमति देगा...

नेमस्पेस

नेमस्पेस लिनक्स कर्नेल की एक विशेषता है जो कर्नेल संसाधनों को विभाजित करती है ताकि एक सेट की प्रक्रियाएँ एक सेट के संसाधनों को देखें जबकि एक अलग सेट की प्रक्रियाएँ एक भिन्न सेट के संसाधनों को देखें। यह सुविधा एक सेट के संसाधनों और प्रक्रियाओं के लिए एक ही नेमस्पेस होने के रूप में काम करती है, लेकिन वे नेमस्पेस विभिन्न संसाधनों को संदर्भित करते हैं। संसाधन एकाधिक स्थानों में मौजूद हो सकते हैं।

डॉकर निम्नलिखित लिनक्स कर्नेल नेमस्पेस का उपयोग करता है ताकि कंटेनर विलयन को प्राप्त कर सके:

  • pid नेमस्पेस

  • माउंट नेमस्पेस

  • नेटवर्क नेमस्पेस

  • ipc नेमस्पेस

  • UTS नेमस्पेस

नेमस्पेस के बारे में अधिक जानकारी के लिए निम्नलिखित पृष्ठ की जाँच करें:

pageNamespaces

cgroups

लिनक्स कर्नेल सुविधा cgroups प्रक्रियाओं के एक सेट के बीच संसाधनों जैसे cpu, मेमोरी, आईओ, नेटवर्क बैंडविड्थ को सीमित करने की क्षमता प्रदान करती है। डॉकर cgroup सुविधा का उपयोग करने देता है जिससे विशिष्ट कंटेनर के लिए संसाधन नियंत्रण संभव हो। निम्नलिखित एक कंटेनर उपयोगकर्ता स्थान मेमोरी को 500m तक सीमित करने के साथ बनाया गया है, कर्नेल मेमोरी को 50m तक सीमित करने के साथ, cpu शेयर को 512, blkioweight को 400 करने की अनुमति देता है। सीपीयू शेयर एक अनुपात है जो कंटेनर के सीपीयू उपयोग को नियंत्रित करता है। इसका डिफ़ॉल्ट मूल्य 1024 है और 0 और 1024 के बीच रेंज है। यदि तीन कंटेनर्स का सीपीयू शेयर 1024 है, तो हर कंटेनर सीपीयू संसाधन संघर्ष की स्थिति में 33% तक का सीपीयू ले सकता है। ब्ल्किओ-वेट एक अनुपात है जो कंटेनर के आईओ को नियंत्रित करता है। इसका डिफ़ॉल्ट मूल्य 500 है और 10 और 1000 के बीच रेंज है।

docker run -it -m 500M --kernel-memory 50M --cpu-shares 512 --blkio-weight 400 --name ubuntu1 ubuntu bash

किसी कंटेनर का cgroup प्राप्त करने के लिए आप निम्नलिखित कर सकते हैं:

docker run -dt --rm denial sleep 1234 #Run a large sleep inside a Debian container
ps -ef | grep 1234 #Get info about the sleep process
ls -l /proc/<PID>/ns #Get the Group and the namespaces (some may be uniq to the hosts and some may be shred with it)

अधिक जानकारी के लिए जाँचें:

pageCGroups

क्षमताएँ

क्षमताएँ मूल उपयोगकर्ता के लिए जो क्षमताएँ अनुमत हो सकती हैं, उन पर अधिक नियंत्रण प्रदान करती हैं। Docker लिनक्स कर्नेल क्षमता सुविधा का उपयोग करता है एक कंटेनर के भीतर किए जा सकने वाले ऑपरेशनों को सीमित करने के लिए अनिर्दिष्ट उपयोगकर्ता के प्रकार के बावजूद।

जब एक डॉकर कंटेनर चलाया जाता है, प्रक्रिया उसे इसोलेशन से बाहर निकलने के लिए प्रयोग कर सकती थी ऐसी संवेदनशील क्षमताएँ छोड़ देती है। यह सुनिश्चित करने का प्रयास करता है कि प्रक्रिया संवेदनशील कार्रवाई करने और बचने के लिए सक्षम न हो:

pageLinux Capabilities

Docker में Seccomp

यह एक सुरक्षा सुविधा है जो Docker को कंटेनर के भीतर उपयोग किए जा सकने वाले सिसकॉल्स को सीमित करने की अनुमति देती है:

pageSeccomp

Docker में AppArmor

AppArmor एक कर्नेल एन्हांसमेंट है जो कंटेनर को संकीर्ण संसाधनों के सीमित सेट में बाधित करने के लिए प्रोग्राम प्रोफाइल के साथ विवश करता है।:

pageAppArmor

Docker में SELinux

  • लेबलिंग सिस्टम: SELinux प्रत्येक प्रक्रिया और फ़ाइल साधन को एक अद्वितीय लेबल सौंपता है।

  • नीति प्रवर्तन: यह सुनिश्चित करता है कि क्या क्रियाएँ एक प्रक्रिया लेबल सिस्टम को सिस्टम के अन्य लेबलों पर कर सकती हैं।

  • कंटेनर प्रक्रिया लेबल: जब कंटेनर इंजन कंटेनर प्रक्रियाएँ प्रारंभ करते हैं, तो उन्हें सामान्यत: एक सीमित SELinux लेबल दिया जाता है, सामान्यत: container_t

  • कंटेनर के भीतर फ़ाइल लेबलिंग: कंटेनर के भीतर फ़ाइलों को सामान्यत: container_file_t लेबल दिया जाता है।

  • नीति नियम: SELinux नीति मुख्य रूप से सुनिश्चित करती है कि container_t लेबल वाली प्रक्रियाएँ केवल container_file_t लेबल वाली फ़ाइलों के साथ ही प्रवास (पढ़ना, लिखना, क्रियान्वयन) कर सकती हैं।

यह तंत्र सुनिश्चित करता है कि यदि कंटेनर के भीतर कोई प्रक्रिया प्रभावित होती है, तो वह केवल उसी लेबल वाले वस्तुओं के साथ ही प्रवास करने में सीमित होती है, ऐसी संभावनाओं से होने वाले क्षति को सीमित करते हैं।

pageSELinux

AuthZ & AuthN

Docker में, एक अधिकृति प्लगइन सुरक्षा में महत्वपूर्ण भूमिका निभाता है जिसे यह निर्धारित करने में मदद मिलती है कि Docker डेमन को अनुमति देने या रोकने के लिए अनुरोध करें। यह निर्णय दो मुख्य संदर्भों की जांच करके लिया जाता है:

  • प्रमाणीकरण संदर्भ: इसमें उपयोगकर्ता के बारे में विस्तृत जानकारी शामिल है, जैसे कि वे कौन हैं और वे अपने आप को कैसे प्रमाणित कर रहे हैं।

  • कमांड संदर्भ: यह अनुरोध से संबंधित सभी महत्वपूर्ण डेटा को शामिल करता है।

ये संदर्भ सुनिश्चित करते हैं कि केवल प्रमाणित उपयोगकर्ताओं के से लिए सत्यापित अनुरोध प्रसंस्कृत किए जाते हैं, जिससे Docker कार्रवाई की सुरक्षा में सुधार होता है।

pageAuthZ& AuthN - Docker Access Authorization Plugin

कंटेनर से DoS

यदि आप सही ढंग से कंटेनर के उपयोग करने वाले संसाधनों की सीमा नहीं लगाते हैं, तो एक प्रभावित कंटेनर मेजबान को DoS कर सकता है जहाँ वह चल रहा है।

  • CPU DoS

# stress-ng
sudo apt-get install -y stress-ng && stress-ng --vm 1 --vm-bytes 1G --verify -t 5m

# While loop
docker run -d --name malicious-container -c 512 busybox sh -c 'while true; do :; done'
  • बैंडविड्थ डीओएस

nc -lvp 4444 >/dev/null & while true; do cat /dev/urandom | nc <target IP> 4444; done

दिलचस्प Docker फ्लैग

--privileged फ्लैग

निम्नलिखित पृष्ठ पर आप सीख सकते हैं कि --privileged फ्लैग का क्या मतलब है:

pageDocker --privileged

--security-opt

no-new-privileges

यदि आप एक कंटेनर चला रहे हैं जहां एक हमलावर को कम विशेषाधिकार वाले उपयोगकर्ता के रूप में पहुंचने में सफलता मिल जाती है। यदि आपके पास एक गलत रूप से कॉन्फ़िगर किया गया suid बाइनरी है, तो हमलावर इसका दुरुपयोग कर सकता है और कंटेनर के अंदर विशेषाधिकारों को उन्नत कर सकता है। जिससे उसे इससे बाहर निकलने की अनुमति हो सकती है।

no-new-privileges विकल्प सक्षम करके कंटेनर को चलाना इस प्रकार की विशेषाधिकारों की उन्नति को रोकेगा

docker run -it --security-opt=no-new-privileges:true nonewpriv

अन्य

#You can manually add/drop capabilities with
--cap-add
--cap-drop

# You can manually disable seccomp in docker with
--security-opt seccomp=unconfined

# You can manually disable seccomp in docker with
--security-opt apparmor=unconfined

# You can manually disable selinux in docker with
--security-opt label:disable

अधिक --security-opt विकल्पों के लिए जांच करें: https://docs.docker.com/engine/reference/run/#security-configuration

अन्य सुरक्षा मामले

रहस्यों का प्रबंधन: सर्वोत्तम अभ्यास

डॉकर इमेज में सीधे रहस्यों को समामिल करने या पर्यावरण चरणों का उपयोग करने से बचना महत्वपूर्ण है, क्योंकि ये विधियाँ आपकी संवेदनशील जानकारी को docker inspect या exec जैसे कमांड के माध्यम से कंटेनर तक पहुंचने वाले किसी भी व्यक्ति को उजागर करती है।

डॉकर वॉल्यूम्स एक अधिक सुरक्षित विकल्प है, जिसे संवेदनशील जानकारी तक पहुंचने के लिए सिफारिश की जाती है। ये एक अस्थायी फ़ाइल सिस्टम के रूप में उपयोग किए जा सकते हैं, docker inspect और लॉगिंग के साथ जुड़ी खतरों को कम करते हैं। हालांकि, रूट उपयोगकर्ताओं और उन लोगों को जो कंटेनर में exec एक्सेस हैं, वे अभी भी रहस्यों तक पहुंच सकते हैं।

डॉकर सीक्रेट्स संवेदनशील जानकारी का संभालन करने के लिए एक और अधिक सुरक्षित विधि प्रदान करते हैं। इमेज निर्माण चरण के दौरान रहस्यों की आवश्यकता होने पर, BuildKit एक कुशल समाधान प्रस्तुत करता है जिसमें बिल्ड-टाइम सीक्रेट्स का समर्थन है, जिससे बिल्ड की गति बढ़ती है और अतिरिक्त सुविधाएँ प्रदान की जाती हैं।

BuildKit का उपयोग करने के लिए, इसे तीन तरीकों से सक्रिय किया जा सकता है:

  1. एक पर्यावरण चरण के माध्यम से: export DOCKER_BUILDKIT=1

  2. कमांडों को उपसर्ग देकर: DOCKER_BUILDKIT=1 docker build .

  3. डॉकर कॉन्फ़िगरेशन में इसे डिफ़ॉल्ट रूप से सक्षम करने के द्वारा: { "features": { "buildkit": true } }, इसके बाद एक डॉकर पुनरारंभ।

BuildKit बिल्ड-टाइम सीक्रेट्स का उपयोग करने की अनुमति देता है जिससे ये रहस्य इमेज निर्माण कैश या अंतिम इमेज में शामिल नहीं होते हैं, एक कमांड का उपयोग करके:

docker build --secret my_key=my_value ,src=path/to/my_secret_file .

एक चल रहे कंटेनर में आवश्यक रहने वाले रहस्यों के लिए, Docker Compose और Kubernetes मजबूत समाधान प्रदान करते हैं। Docker Compose एक secrets कुंजी का उपयोग सेवा परिभाषा में गोपनीय फ़ाइलों को निर्दिष्ट करने के लिए करता है, जैसा कि docker-compose.yml उदाहरण में दिखाया गया है:

version: "3.7"
services:
my_service:
image: centos:7
entrypoint: "cat /run/secrets/my_secret"
secrets:
- my_secret
secrets:
my_secret:
file: ./my_secret_file.txt

यह कॉन्फ़िगरेशन 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 में डाउनलोड करना चाहते हैं तो सब्सक्रिप्शन प्लान्स देखें!

  • The PEASS Family की खोज करें, हमारा विशेष NFTs संग्रह

  • शामिल हों 💬 डिस्कॉर्ड ग्रुप या टेलीग्राम ग्रुप या हमें ट्विटर पर फॉलो करें 🐦 @carlospolopm.

  • अपने हैकिंग ट्रिक्स साझा करें, HackTricks को PRs जमा करके HackTricks और HackTricks Cloud github repos में।

Last updated