CircleCI Security
मूल जानकारी
CircleCI एक Continuos Integration प्लेटफॉर्म है जहाँ आप टेम्प्लेट्स परिभाषित कर सकते हैं जिसमें आप यह निर्दिष्ट करते हैं कि आप कुछ कोड के साथ क्या करना चाहते हैं और कब करना चाहते हैं। इस तरह आप अपनी रेपो मास्टर ब्रांच से सीधे ऑटोमेट टेस्टिंग या डिप्लॉयमेंट्स कर सकते हैं।
अनुमतियाँ
CircleCI github और bitbucket से संबंधित खाते की अनुमतियों को विरासत में प्राप्त करता है। मेरे परीक्षण में मैंने पाया कि जब तक आपके पास github में रेपो पर लिखने की अनुमतियां हैं, आप CircleCI में इसकी प्रोजेक्ट सेटिंग्स को प्रबंधित करने में सक्षम होंगे (नई ssh कुंजियाँ सेट करें, प्रोजेक्ट api कुंजियाँ प्राप्त करें, नई CircleCI कॉन्फ़िग के साथ नई शाखाएँ बनाएँ...).
हालांकि, आपको एक रेपो एडमिन होना चाहिए ताकि रेपो को CircleCI प्रोजेक्ट में परिवर्तित कर सकें।
Env Variables & Secrets
दस्तावेज़ों के अनुसार एक वर्कफ़्लो के अंदर वातावरण चर में मान लोड करने के विभिन्न तरीके हैं।
बिल्ट-इन env variables
CircleCI द्वारा चलाए गए हर कंटेनर में हमेशा दस्तावेज़ों में परिभाषित विशिष्ट env vars होंगे जैसे CIRCLE_PR_USERNAME
, CIRCLE_PROJECT_REPONAME
या CIRCLE_USERNAME
.
स्पष्ट पाठ
आप उन्हें एक कमांड के अंदर स्पष्ट पाठ में घोषित कर सकते हैं:
आप उन्हें run environment के अंदर स्पष्ट पाठ में घोषित कर सकते हैं:
आप उन्हें build-job environment के अंदर स्पष्ट पाठ में घोषित कर सकते हैं:
आप उन्हें स्पष्ट पाठ में कंटेनर के पर्यावरण के अंदर घोषित कर सकते हैं:
प्रोजेक्ट सीक्रेट्स
ये सीक्रेट्स हैं जो केवल प्रोजेक्ट द्वारा (किसी भी ब्रांच द्वारा) पहुँच योग्य होंगे। आप इन्हें https://app.circleci.com/settings/project/github/<org_name>/<repo_name>/environment-variables में घोषित देख सकते हैं।
"Import Variables" कार्यक्षमता अन्य प्रोजेक्ट्स से वेरिएबल्स को इस प्रोजेक्ट में आयात करने की अनुमति देती है।
कॉन्टेक्स्ट सीक्रेट्स
ये सीक्रेट्स संगठन व्यापी होते हैं। डिफ़ॉल्ट रूप से कोई भी रेपो यहाँ संग्रहीत किसी भी सीक्रेट को पहुँच सकता है:
हालांकि, ध्यान दें कि एक अलग समूह (All members के बजाय) को चुना जा सकता है ताकि केवल विशिष्ट लोगों को ही सीक्रेट्स तक पहुँच प्रदान की जा सके। यह वर्तमान में सीक्रेट्स की सुरक्षा को बढ़ाने के सर्वोत्तम तरीकों में से एक है, ताकि हर कोई उन तक पहुँच न सके बल्कि केवल कुछ लोग ही पहुँच सकें।
हमले
स्पष्ट पाठ सीक्रेट्स की खोज
यदि आपके पास VCS तक पहुँच है (जैसे github) तो प्रत्येक रेपो की .circleci/config.yml
फ़ाइल को प्रत्येक ब्रांच पर जांचें और संभावित स्पष्ट पाठ सीक्रेट्स की खोज करें जो वहाँ संग्रहीत हो सकते हैं।
सीक्रेट एन्व वेर्स & कॉन्टेक्स्ट एन्यूमेरेशन
कोड की जांच करके आप सभी सीक्रेट्स के नाम पा सकते हैं जो प्रत्येक .circleci/config.yml
फ़ाइल में इस्तेमाल किए जा रहे हैं। आप उन फ़ाइलों से कॉन्टेक्स्ट नाम भी प्राप्त कर सकते हैं या वेब कंसोल में उन्हें जांच सकते हैं: https://app.circleci.com/settings/organization/github/<org_name>/contexts।
प्रोजेक्ट सीक्रेट्स का एक्सफ़िल्ट्रेशन
प्रोजेक्ट और कॉन्टेक्स्ट सीक्रेट्स के सभी को एक्सफ़िल्ट्रेट करने के लिए आपको केवल पूरे github संगठन में किसी एक रेपो के लिए WRITE पहुँच की आवश्यकता है (और आपके खाते को कॉन्टेक्स्ट्स तक पहुँच होनी चाहिए लेकिन डिफ़ॉल्ट रूप से हर कोई हर कॉन्टेक्स्ट तक पहुँच सकता है)।
"Import Variables" कार्यक्षमता अन्य प्रोजेक्ट्स से वेरिएबल्स को इस प्रोजेक्ट में आयात करने की अनुमति देती है। इसलिए, एक हमलावर सभी रेपोज़ से सभी प्रोजेक्ट वेरिएबल्स को आयात कर सकता है और फिर उन सभी को एक साथ एक्सफ़िल्ट्रेट कर सकता है।
सभी प्रोजेक्ट सीक्रेट्स हमेशा जॉब्स के env में सेट होते हैं, इसलिए केवल env को कॉल करना और इसे base64 में अस्पष्ट करना workflows वेब लॉग कंसोल में सीक्रेट्स का एक्सफ़िल्ट्रेशन कर देगा:
यदि आपके पास वेब कंसोल तक पहुँच नहीं है परंतु आपके पास रेपो तक पहुँच है और आप जानते हैं कि CircleCI का उपयोग किया जा रहा है, तो आप बस एक वर्कफ़्लो बना सकते हैं जो प्रत्येक मिनट ट्रिगर किया जाता है और जो बाहरी पते पर सीक्रेट्स को एक्सफ़िल करता है:
कॉन्टेक्स्ट सीक्रेट्स की एक्सफिल्ट्रेशन
आपको कॉन्टेक्स्ट का नाम निर्दिष्ट करना होगा (इससे प्रोजेक्ट के सीक्रेट्स भी एक्सफिल्ट्रेट हो जाएंगे):
यदि आपके पास वेब कंसोल तक पहुँच नहीं है परंतु आपके पास रेपो तक पहुँच है और आप जानते हैं कि CircleCI का उपयोग किया जा रहा है, तो आप बस एक वर्कफ़्लो को संशोधित कर सकते हैं जो प्रत्येक मिनट ट्रिगर किया जाता है और जो बाहरी पते पर सीक्रेट्स को एक्सफ़िल करता है:
केवल एक नया .circleci/config.yml
रेपो में बनाना पर्याप्त नहीं है सर्कलसीआई बिल्ड को ट्रिगर करने के लिए। आपको सर्कलसीआई कंसोल में इसे प्रोजेक्ट के रूप में सक्षम करना होगा।
क्लाउड में भागना
CircleCI आपको विकल्प देता है कि आप अपने बिल्ड्स उनकी मशीनों में या अपनी मशीनों में चला सकते हैं। डिफ़ॉल्ट रूप से उनकी मशीनें GCP में स्थित होती हैं, और शुरुआत में आपको कुछ भी महत्वपूर्ण नहीं मिलेगा। हालांकि, अगर कोई पीड़ित अपनी मशीनों में कार्य चला रहा है (संभवतः, क्लाउड वातावरण में), आपको क्लाउड मेटाडेटा एंडपॉइंट पर दिलचस्प जानकारी मिल सकती है।
ध्यान दें कि पिछले उदाहरणों में सब कुछ एक डॉकर कंटेनर के अंदर लॉन्च किया गया था, लेकिन आप एक VM मशीन लॉन्च करने के लिए भी कह सकते हैं (जिसमें अलग क्लाउड अनुमतियां हो सकती हैं):
या फिर एक डॉकर कंटेनर जिसे दूरस्थ डॉकर सेवा तक पहुँच हो:
पर्सिस्टेंस
CircleCI में यूजर टोकन बनाना संभव है ताकि यूजर्स की एक्सेस के साथ API एंडपॉइंट्स तक पहुँचा जा सके।
https://app.circleci.com/settings/user/tokens
प्रोजेक्ट टोकन बनाना संभव है ताकि टोकन को दिए गए अनुमतियों के साथ प्रोजेक्ट तक पहुँचा जा सके।
https://app.circleci.com/settings/project/github/<org>/<repo>/api
प्रोजेक्ट्स में SSH कीज जोड़ना संभव है।
https://app.circleci.com/settings/project/github/<org>/<repo>/ssh
किसी अनपेक्षित प्रोजेक्ट में छिपी हुई शाखा में क्रॉन जॉब बनाना संभव है जो हर दिन सभी context env वेरिएबल्स को लीक कर रहा है।
या फिर किसी शाखा में बनाना / ज्ञात जॉब को संशोधित करना जो हर दिन सभी context और प्रोजेक्ट्स सीक्रेट्स को लीक करेगा।
यदि आप एक github मालिक हैं तो आप unverified orbs की अनुमति दे सकते हैं और एक जॉब में इसे बैकडोर के रूप में कॉन्फ़िगर कर सकते हैं।
आप किसी कार्य में कमांड इंजेक्शन भेद्यता पा सकते हैं और इसके मूल्य को संशोधित करके एक सीक्रेट के माध्यम से कमांड्स इंजेक्ट कर सकते हैं।
Last updated