Kubernetes को हैक करके Secret resource में स्टोर किए गए पासवर्ड खोजने का तरीका
(insight.infograb.net)- इस सामग्री का उद्देश्य Kubernetes security के महत्व के प्रति जागरूक करना है
- Secret कहाँ स्टोर होता है
- जब उपयोगकर्ता
kubectlकमांड के जरिए resource declare करता है, तो Kubernetes इस resource को परिभाषित करने वाली manifest file बनाकरetcdमें स्टोर करता है - जब उपयोगकर्ता Secret resource declare करता है, तो Secret भी
etcdमें स्टोर होता है - जब उपयोगकर्ता ऐसा pod बनाता है जो Secret को volume या environment variable के रूप में पढ़ता है, तो Secret उस pod में भी स्टोर होता है
- जहाँ Secret स्टोर होता है उस
etcdऔर जिस pod में secret इस्तेमाल हो रहा है, दोनों को हैक कर लिया जाए तो Secret में स्टोर किया गया पासवर्ड पता किया जा सकता है
- जब उपयोगकर्ता
- पहले से तैयारी
kubeadmसे cluster बनाना- प्रैक्टिस के लिए पहले से तीन resources बनाए गए: Secret
credit-card, podapp1, podapp2
etcdहैक करनाetcd: Kubernetes cluster की state स्टोर करने वाला key-value data store. Kubernetes में declare की गई सारी जानकारी यहाँ स्टोर होती है. Secret भीetcdको query करके देखा जा सकता है- 1.1
etcdctlसे पासवर्ड खोजनाkube-apiservermanifest देखकरetcdserver का certificate authority, public key, private key हासिल करनाetcdको आसानी से operate करने वालेetcdctlकमांड के जरिए पासवर्ड खोजना
- 1.2
etcdDB को सीधे access करके निकालना- जिस process पर
etcdचल रहा है उसे ढूँढकर, उस process के सभी data को खंगालते हुए पासवर्ड खोजनाps aux | grep etcd-etcdPID प्राप्त करनाll /proc/<pid>/fdदेखने परdbलिखा हुआ link file दिखाई देती हैcat /proc/<pid>/fd/<db> | grep -A10 -B10 credit-cardकमांड के जरिए पहले से बनाया गया पासवर्ड खोजना
- जिस process पर
- pod हैक करना
kubectl execके जरिए निकालना- अगर Kubernetes को query करने की उचित permission हो, तो
kubectlकमांड के जरिए पासवर्ड निकाला जा सकता है
- अगर Kubernetes को query करने की उचित permission हो, तो
- container में सीधे access करके निकालना
- अगर worker node पर Docker कमांड्स स्वतंत्र रूप से चलाए जा सकते हों, तो पासवर्ड निकाला जा सकता है
- जिस worker node पर pod
app1schedule हुआ है, वहाँ container ढूँढकर container में registered environment variables की सूची निकाली जा सकती हैcrictl pods-app1का Pod ID खोजनाcrictl ps- Pod ID के अनुरूप container खोजनाcrictl inspect <container id> | grep -A16 env- उस container की detailed जाँच करके environment variables निकालना
- Secret तक access permission वाले ServiceAccount से निकालना
- अगर pod के ServiceAccount को Secret तक access permission है, तो pod के अंदर API call करके पासवर्ड पता किया जा सकता है
- ऊपर बताए गए हैकिंग तरीकों को रोकने के उपाय
- 'least privilege principle' के अनुसार अनावश्यक permissions वाले service account न बनाना
- social engineering जैसी धमकियों के लिए users के credentials उजागर न हों, इसका ध्यान रखना
EncryptionConfigurationresource के जरिएetcdencryption
अभी कोई टिप्पणी नहीं है.