CircleCI Security
मौलिक जानकारी
सर्कलसीआई एक सतत एकीकरण प्लेटफॉर्म है जहाँ आप टेम्पलेट्स को परिभाषित कर सकते हैं जिससे आप इसे कुछ कोड के साथ क्या करना चाहते हैं और कब करना चाहते हैं वह दिखा सकते हैं। इस तरह आप टेस्टिंग को स्वचालित या डिप्लॉयमेंट को अपने रेपो मास्टर ब्रांच से सीधे कर सकते हैं।
अनुमतियाँ
सर्कलसीआई गिटहब और बिटबकेट से अनुमतियों को विरासत में लेता है जो खाता लॉग इन करता है। मेरे परीक्षण में मैंने यह जांचा कि जब तक आपके पास गिटहब में रेपो पर लेखन अनुमतियाँ हैं, तब आपको सर्कलसीआई में इसकी परियोजना सेटिंग्स को प्रबंधित करने की अनुमति होगी (नए एसएसएच कुंजियाँ सेट करना, परियोजना एपीआई कुंजियाँ प्राप्त करना, नए सर्कलसीआई कॉन्फ़िग के साथ नए ब्रांच बनाना...).
हालांकि, आपको एक रेपो व्यवस्थापक होना चाहिए ताकि आप रेपो को एक सर्कलसीआई परियोजना में परिवर्तित कर सकें।
एनवायरनमेंट वेरिएबल्स और रहस्य
दस्तावेज़ के अनुसार एक वर्कफ़्लो में मूल्यों को एनवायरनमेंट वेरिएबल्स में लोड करने के लिए विभिन्न तरीके हैं।
बिल्ट-इन एनवायरनमेंट वेरिएबल्स
सर्कलसीआई द्वारा चलाए गए प्रत्येक कंटेनर में हमेशा दस्तावेज़ में परिभाषित विशिष्ट एनवायरनमेंट वेरिएबल्स जैसे CIRCLE_PR_USERNAME
, CIRCLE_PROJECT_REPONAME
या CIRCLE_USERNAME
होंगे।
स्पष्ट पाठ
आप उन्हें स्पष्ट पाठ में एक कमांड के भीतर घोषित कर सकते हैं:
आप उन्हें रन वातावरण में स्पष्ट पाठ में घोषित कर सकते हैं:
आप उन्हें build-job environment के भीतर स्पष्ट पाठ में घोषित कर सकते हैं:
आप उन्हें एक कंटेनर के वातावरण में स्पष्ट पाठ में घोषित कर सकते हैं:
परियोजना रहस्य
ये रहस्य हैं जो केवल परियोजना (किसी भी शाखा द्वारा) द्वारा पहुंचे जा सकते हैं। आप इन्हें देख सकते हैं जो घोषित किए गए हैं https://app.circleci.com/settings/project/github/<org_name>/<repo_name>/environment-variables
"आयात चर" कार्यक्षमता यह संभव बनाती है कि इसमें अन्य परियोजनाओं से चरों को आयात किया जा सके।
संदर्भ रहस्य
ये रहस्य हैं जो संगठन व्यापी हैं। डिफ़ॉल्ट रूप से किसी भी रेपो को यहाँ संग्रहित किए गए किसी भी रहस्य तक पहुंच होगी:
हालांकि, ध्यान दें कि सभी सदस्यों की बजाय एक विभिन्न समूह (All members की बजाय) को चुना जा सकता है ताकि केवल विशिष्ट व्यक्तियों को रहस्यों तक पहुंचने की अनुमति दी जा सके। यह वर्तमान में रहस्यों की सुरक्षा बढ़ाने का एक अच्छा तरीका है, जिससे सभी को पहुंचने की अनुमति न दी जाए बल्कि कुछ लोगों को ही।
हमले
स्पष्ट पाठ रहस्य खोजें
यदि आपके पास वीसीएस तक पहुंच है (जैसे github) तो प्रत्येक रेपो की प्रत्येक शाखा के फ़ाइल .circleci/config.yml
की जाँच करें और वहाँ संभावित स्पष्ट पाठ रहस्य की खोज करें।
गुप्त चर और संदर्भ गणना
कोड की जाँच करके आप प्रत्येक .circleci/config.yml
फ़ाइल में उपयोग किए जा रहे सभी रहस्यों के नाम पा सकते हैं। आप उन फ़ाइलों से या उन्हें वेब कंसोल में जाँच करके संदर्भ नाम भी प्राप्त कर सकते हैं: https://app.circleci.com/settings/organization/github/<org_name>/contexts।
परियोजना रहस्य निकालना
सभी परियोजना और संदर्भ रहस्य को निकालने के लिए आपको केवल पूरे github संगठन में किसी भी एक रेपो में लिखने की अनुमति होनी चाहिए (और आपके खाते को संदर्भों तक पहुंच होनी चाहिए लेकिन डिफ़ॉल्ट रूप से हर कोई हर संदर्भ तक पहुंच सकता है।)
"आयात चर" कार्यक्षमता यह संभव बनाती है कि इसमें अन्य परियोजनाओं से चरों को आयात किया जा सके। इसलिए, एक हमलावर सभी परियोजना चरों को सभी रेपो से आयात कर सकता है और फिर उन सभी को एक साथ निकाल सकता है।
सभी परियोजना रहस्य हमेशा नौकरियों के env में सेट किए जाते हैं, इसलिए इन्हें एनवी बुलाना और उसे base64 में अविश्वसनीय बनाना रहस्यों को वर्कफ़्लो वेब लॉग कंसोल में निकालेगा:
यदि आपको वेब कंसोल तक पहुंचने का अधिकार नहीं है लेकिन आपके पास रेपो तक पहुंचने का अधिकार है और आपको पता है कि CircleCI का उपयोग हो रहा है, तो आप एक वर्कफ्लो बना सकते हैं जो हर मिनट ट्रिगर होता है और जो रहस्यों को एक बाह्य पते पर निकालता है:
संदर्भ रहस्यों को बाहर ले जाएं
आपको संदर्भ नाम निर्दिष्ट करना होगा (यह भी परियोजना के रहस्यों को बाहर ले जाएगा):
यदि आपको वेब कंसोल तक पहुंचने का अधिकार नहीं है लेकिन आपके पास रेपो तक पहुंचने का अधिकार है और आपको पता है कि CircleCI का उपयोग हो रहा है, तो आप बस एक वर्कफ्लो को संशोधित कर सकते हैं जो प्रति मिनट ट्रिगर होता है और जो रहस्यों को एक बाह्य पते पर निकालता है:
केवल एक नए .circleci/config.yml
फ़ाइल रिपो में बनाना सर्कलसीआई बिल्ड को ट्रिगर करने के लिए पर्याप्त नहीं है। आपको सर्कलसीआई कंसोल में एक परियोजना के रूप में इसे सक्षम करने की आवश्यकता है।
बादल को छोड़ें
CircleCI आपको उनकी मशीनों में या अपनी मशीनों में अपने बिल्ड चलाने का विकल्प देता है। डिफ़ॉल्ट रूप से उनकी मशीनें जीसीपी में स्थित हैं, और आप पहले कुछ भी संबंधित नहीं पा सकते। हालांकि, यदि कोई पीड़ित अपने कार्यों को अपनी मशीनों में चला रहा है (संभावना, एक बादल एनवायरनमें), तो आपको एक बादल मेटाडेटा एंडपॉइंट मिल सकता है जिसमें दिलचस्प जानकारी हो सकती है।
पिछले उदाहरणों में ध्यान दें कि सब कुछ एक डॉकर कंटेनर के अंदर लॉन्च किया गया था, लेकिन आप यह भी एक वीएम मशीन लॉन्च करने के लिए कह सकते हैं (जिसमें विभिन्न बादल अनुमतियाँ हो सकती हैं):
या फिर एक डॉकर कंटेनर जिसका रिमोट डॉकर सेवा तक पहुंच हो:
Persistence
संभव है कि सर्कलसीआई में उपयोगकर्ता टोकन बनाया जा सके ताकि उपयोगकर्ता एक्सेस के साथ 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
एक क्रॉन जॉब बनाना संभव है एक अप्रत्याशित प्रोजेक्ट में एक छिपी हुई शाखा में जो प्रतिदिन सभी संदर्भ एनवी वार्स लीक कर रही है।
या फिर एक शाखा में बनाना / एक ज्ञात जॉब को संशोधित करना जो प्रतिदिन सभी संदर्भ और प्रोजेक्ट सीक्रेट्स लीक करेगा।
अगर आप एक गिटहब मालिक हैं तो आप अनसत्यापित ऑर्ब्स की अनुमति दे सकते हैं और एक जॉब में एक बैकडोर के रूप में एक कॉन्फ़िगर कर सकते हैं।
आप किसी कार्य में कमांड इंजेक्शन वलनरेबिलिटी खोज सकते हैं और उसके मान में कमांड इंजेक्शन कर सकते हैं एक रहस्य के माध्यम से उसके मान को संशोधित करके
Last updated