Pentesting CI/CD Methodology
Reading time: 10 minutes
tip
AWS हैकिंग सीखें और अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE)
GCP हैकिंग सीखें और अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE)
Azure हैकिंग सीखें और अभ्यास करें:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks का समर्थन करें
- सदस्यता योजनाओं की जांच करें!
- हमारे 💬 Discord समूह या टेलीग्राम समूह में शामिल हों या हमें Twitter 🐦 @hacktricks_live** पर फॉलो करें।**
- हैकिंग ट्रिक्स साझा करें, PRs को HackTricks और HackTricks Cloud गिटहब रिपोजिटरी में सबमिट करके।
VCS
VCS का मतलब है Version Control System, यह सिस्टम डेवलपर्स को अपने स्रोत कोड का प्रबंधन करने की अनुमति देता है। सबसे सामान्य है git और आप आमतौर पर कंपनियों को निम्नलिखित प्लेटफार्मों में इसका उपयोग करते हुए पाएंगे:
- Github
- Gitlab
- Bitbucket
- Gitea
- Cloud providers (वे अपने स्वयं के VCS प्लेटफार्म प्रदान करते हैं)
CI/CD Pipelines
CI/CD पाइपलाइनों से डेवलपर्स को कोड के निष्पादन को स्वचालित करने की अनुमति मिलती है विभिन्न उद्देश्यों के लिए, जिसमें एप्लिकेशन का निर्माण, परीक्षण और तैनाती शामिल है। ये स्वचालित कार्यप्रवाह विशिष्ट क्रियाओं द्वारा प्रेरित होते हैं, जैसे कोड पुश, पुल अनुरोध, या अनुसूचित कार्य। ये विकास से उत्पादन तक की प्रक्रिया को सरल बनाने के लिए उपयोगी हैं।
हालांकि, इन सिस्टम को कहीं निष्पादित करने की आवश्यकता होती है और आमतौर पर संवेदनशील जानकारी तक पहुंचने या कोड तैनात करने के लिए विशेषाधिकार प्राप्त क्रेडेंशियल्स के साथ।
VCS Pentesting Methodology
note
भले ही कुछ VCS प्लेटफार्मों को इस अनुभाग के लिए पाइपलाइनों को बनाने की अनुमति हो, हम केवल स्रोत कोड के नियंत्रण पर संभावित हमलों का विश्लेषण करने जा रहे हैं।
आपकी परियोजना के स्रोत कोड वाले प्लेटफार्मों में संवेदनशील जानकारी होती है और लोगों को इस प्लेटफार्म के भीतर दिए गए अनुमतियों के साथ बहुत सावधान रहना चाहिए। ये कुछ सामान्य समस्याएं हैं जो VCS प्लेटफार्मों में हो सकती हैं जिनका हमलावर दुरुपयोग कर सकता है:
- Leaks: यदि आपके कोड में कमिट्स में लीक हैं और हमलावर को रिपॉजिटरी तक पहुंच प्राप्त है (क्योंकि यह सार्वजनिक है या क्योंकि उसके पास पहुंच है), तो वह लीक का पता लगा सकता है।
- Access: यदि एक हमलावर VCS प्लेटफार्म के भीतर एक खाते तक पहुंच प्राप्त कर सकता है, तो वह अधिक दृश्यता और अनुमतियाँ प्राप्त कर सकता है।
- Register: कुछ प्लेटफार्म केवल बाहरी उपयोगकर्ताओं को एक खाता बनाने की अनुमति देंगे।
- SSO: कुछ प्लेटफार्म उपयोगकर्ताओं को पंजीकरण करने की अनुमति नहीं देंगे, लेकिन किसी को भी एक मान्य SSO के साथ पहुंचने की अनुमति देंगे (इसलिए एक हमलावर अपने github खाते का उपयोग करके प्रवेश कर सकता है, उदाहरण के लिए)।
- Credentials: Username+Pwd, व्यक्तिगत टोकन, ssh कुंजी, Oauth टोकन, कुकीज़... उपयोगकर्ता कई प्रकार के टोकन चुरा सकते हैं ताकि किसी तरह एक रिपॉजिटरी तक पहुंच प्राप्त कर सकें।
- Webhooks: VCS प्लेटफार्म वेबहुक उत्पन्न करने की अनुमति देते हैं। यदि वे अदृश्य रहस्यों के साथ संरक्षित नहीं हैं, तो एक हमलावर उनका दुरुपयोग कर सकता है।
- यदि कोई रहस्य नहीं है, तो हमलावर तीसरे पक्ष के प्लेटफार्म के वेबहुक का दुरुपयोग कर सकता है
- यदि रहस्य URL में है, तो वही होता है और हमलावर के पास भी रहस्य होता है
- Code compromise: यदि एक दुर्भावनापूर्ण अभिनेता के पास रिपॉजिटरी पर कुछ प्रकार की लिखने की पहुंच है, तो वह दुर्भावनापूर्ण कोड को इंजेक्ट करने की कोशिश कर सकता है। सफल होने के लिए, उसे ब्रांच सुरक्षा को बायपास करने की आवश्यकता हो सकती है। ये क्रियाएँ विभिन्न लक्ष्यों के साथ की जा सकती हैं:
- मुख्य शाखा को उत्पादन को समझौता करने के लिए समझौता करना।
- मुख्य (या अन्य शाखाओं) को डेवलपर्स की मशीनों को समझौता करने के लिए समझौता करना (क्योंकि वे आमतौर पर परीक्षण, टेराफॉर्म या अन्य चीजें अपनी मशीनों में रिपॉजिटरी के भीतर निष्पादित करते हैं)।
- पाइपलाइन को समझौता करना (अगले अनुभाग की जांच करें)
Pipelines Pentesting Methodology
पाइपलाइन को परिभाषित करने का सबसे सामान्य तरीका है रिपॉजिटरी में होस्ट की गई CI कॉन्फ़िगरेशन फ़ाइल का उपयोग करना जिसे पाइपलाइन बनाती है। यह फ़ाइल निष्पादित कार्यों के क्रम, प्रवाह को प्रभावित करने वाली शर्तों, और निर्माण वातावरण सेटिंग्स का वर्णन करती है।
ये फ़ाइलें आमतौर पर एक सुसंगत नाम और प्रारूप रखती हैं, उदाहरण के लिए — Jenkinsfile (Jenkins), .gitlab-ci.yml (GitLab), .circleci/config.yml (CircleCI), और .github/workflows के तहत स्थित GitHub Actions YAML फ़ाइलें। जब प्रेरित किया जाता है, तो पाइपलाइन कार्य चयनित स्रोत से कोड खींचता है (जैसे कमिट / शाखा), और CI कॉन्फ़िगरेशन फ़ाइल में निर्दिष्ट आदेशों को उस कोड के खिलाफ चलाता है।
इसलिए हमलावर का अंतिम लक्ष्य किसी तरह उन कॉन्फ़िगरेशन फ़ाइलों को समझौता करना या वे जो आदेश निष्पादित करते हैं।
PPE - Poisoned Pipeline Execution
Poisoned Pipeline Execution (PPE) पथ एक SCM रिपॉजिटरी में अनुमतियों का दुरुपयोग करता है ताकि एक CI पाइपलाइन को हेरफेर किया जा सके और हानिकारक आदेशों को निष्पादित किया जा सके। आवश्यक अनुमतियों वाले उपयोगकर्ता CI कॉन्फ़िगरेशन फ़ाइलों या अन्य फ़ाइलों को संशोधित कर सकते हैं जो पाइपलाइन कार्य द्वारा उपयोग की जाती हैं ताकि दुर्भावनापूर्ण आदेश शामिल किए जा सकें। यह "CI पाइपलाइन को विषाक्त" करता है, जिससे इन दुर्भावनापूर्ण आदेशों का निष्पादन होता है।
एक दुर्भावनापूर्ण अभिनेता को PPE हमले को सफलतापूर्वक करने के लिए सक्षम होना चाहिए:
- VCS प्लेटफार्म पर लिखने की पहुंच हो, क्योंकि आमतौर पर पाइपलाइन तब प्रेरित होती है जब एक पुश या पुल अनुरोध किया जाता है। (पहुंच प्राप्त करने के तरीकों का सारांश देखने के लिए VCS पेंटेस्टिंग पद्धति की जांच करें)।
- ध्यान दें कि कभी-कभी एक बाहरी PR को "लिखने की पहुंच" के रूप में गिना जाता है।
- भले ही उसके पास लिखने की अनुमतियाँ हों, उसे यह सुनिश्चित करने की आवश्यकता है कि वह CI कॉन्फ़िगरेशन फ़ाइल या अन्य फ़ाइलों को संशोधित कर सकता है जिन पर कॉन्फ़िगरेशन निर्भर करता है।
- इसके लिए, उसे ब्रांच सुरक्षा को बायपास करने में सक्षम होना पड़ सकता है।
PPE के 3 प्रकार हैं:
- D-PPE: एक Direct PPE हमला तब होता है जब अभिनेता CI कॉन्फ़िगरेशन फ़ाइल को संशोधित करता है जिसे निष्पादित किया जाने वाला है।
- I-DDE: एक Indirect PPE हमला तब होता है जब अभिनेता संशोधित करता है एक फ़ाइल जिसे CI कॉन्फ़िगरेशन फ़ाइल निष्पादित होने पर निर्भर करती है (जैसे एक मेक फ़ाइल या एक टेराफॉर्म कॉन्फ़िगरेशन)।
- Public PPE या 3PE: कुछ मामलों में पाइपलाइनों को उन उपयोगकर्ताओं द्वारा प्रेरित किया जा सकता है जिनके पास रिपॉजिटरी में लिखने की पहुंच नहीं है (और जो शायद संगठन का हिस्सा भी नहीं हैं) क्योंकि वे एक PR भेज सकते हैं।
- 3PE Command Injection: आमतौर पर, CI/CD पाइपलाइनों पर्यावरण चर सेट करेंगी PR के बारे में जानकारी के साथ। यदि उस मान को एक हमलावर द्वारा नियंत्रित किया जा सकता है (जैसे PR का शीर्षक) और इसका उपयोग एक खतरनाक स्थान में किया जाता है (जैसे sh आदेशों को निष्पादित करना), तो एक हमलावर वहाँ आदेश इंजेक्ट कर सकता है।
Exploitation Benefits
पाइपलाइन को विषाक्त करने के 3 प्रकारों को जानने के बाद, चलिए देखते हैं कि एक हमलावर सफल शोषण के बाद क्या प्राप्त कर सकता है:
- Secrets: जैसा कि पहले उल्लेख किया गया था, पाइपलाइनों को उनके कार्यों के लिए विशेषाधिकार की आवश्यकता होती है (कोड प्राप्त करना, इसे बनाना, इसे तैनात करना...) और ये विशेषाधिकार आमतौर पर रहस्यों में दिए जाते हैं। ये रहस्य आमतौर पर env चर या सिस्टम के भीतर फ़ाइलों के माध्यम से सुलभ होते हैं। इसलिए एक हमलावर हमेशा जितना संभव हो सके उतने रहस्यों को निकालने की कोशिश करेगा।
- पाइपलाइन प्लेटफार्म के आधार पर हमलावर को कॉन्फ़िगरेशन में रहस्यों को निर्दिष्ट करने की आवश्यकता हो सकती है। इसका मतलब है कि यदि हमलावर CI कॉन्फ़िगरेशन पाइपलाइन को संशोधित नहीं कर सकता (I-PPE उदाहरण के लिए), तो वह केवल उन रहस्यों को निकाल सकता है जो पाइपलाइन के पास हैं।
- Computation: कोड कहीं निष्पादित होता है, जिस स्थान पर यह निष्पादित होता है उसके आधार पर एक हमलावर आगे बढ़ने में सक्षम हो सकता है।
- On-Premises: यदि पाइपलाइनों को ऑन-प्रिमाइसेस पर निष्पादित किया जाता है, तो एक हमलावर एक आंतरिक नेटवर्क में अधिक संसाधनों तक पहुंच प्राप्त कर सकता है।
- Cloud: हमलावर क्लाउड में अन्य मशीनों तक पहुंच प्राप्त कर सकता है लेकिन वह IAM भूमिकाओं/सेवा खातों के टोकन को भी निकाल सकता है ताकि क्लाउड के भीतर आगे की पहुंच प्राप्त की जा सके।
- Platforms machine: कभी-कभी कार्य पाइपलाइनों प्लेटफार्म मशीनों के भीतर निष्पादित होते हैं, जो आमतौर पर एक क्लाउड के भीतर होते हैं जिसमें कोई और पहुंच नहीं होती।
- Select it: कभी-कभी पाइपलाइनों प्लेटफार्म में कई मशीनें कॉन्फ़िगर की गई होती हैं और यदि आप CI कॉन्फ़िगरेशन फ़ाइल को संशोधित कर सकते हैं तो आप यह निर्दिष्ट कर सकते हैं कि आप दुर्भावनापूर्ण कोड कहाँ चलाना चाहते हैं। इस स्थिति में, एक हमलावर शायद प्रत्येक संभावित मशीन पर एक रिवर्स शेल चलाएगा ताकि इसे आगे बढ़ाने की कोशिश की जा सके।
- Compromise production: यदि आप पाइपलाइन के भीतर हैं और अंतिम संस्करण इससे बनाया और तैनात किया गया है, तो आप कोड को समझौता कर सकते हैं जो उत्पादन में चलने वाला है।
More relevant info
Tools & CIS Benchmark
- Chain-bench एक ओपन-सोर्स उपकरण है जो आपके सॉफ़्टवेयर आपूर्ति श्रृंखला स्टैक का सुरक्षा अनुपालन के लिए ऑडिट करता है जो एक नए CIS Software Supply Chain benchmark पर आधारित है। ऑडिटिंग पूरे SDLC प्रक्रिया पर केंद्रित है, जहां यह कोड समय से लेकर तैनाती समय तक के जोखिमों को उजागर कर सकता है।
Top 10 CI/CD Security Risk
Cider के अनुसार शीर्ष 10 CI/CD जोखिमों के बारे में इस दिलचस्प लेख की जांच करें: https://www.cidersecurity.io/top-10-cicd-security-risks/
Labs
- प्रत्येक प्लेटफार्म पर जिसे आप स्थानीय रूप से चला सकते हैं, आप इसे स्थानीय रूप से लॉन्च करने का तरीका पाएंगे ताकि आप इसे अपनी इच्छानुसार कॉन्फ़िगर कर सकें।
- Gitea + Jenkins lab: https://github.com/cider-security-research/cicd-goat
Automatic Tools
- Checkov: Checkov एक स्थैतिक कोड विश्लेषण उपकरण है जो इन्फ्रास्ट्रक्चर-एज़-कोड के लिए है।
References
tip
AWS हैकिंग सीखें और अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE)
GCP हैकिंग सीखें और अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE)
Azure हैकिंग सीखें और अभ्यास करें:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks का समर्थन करें
- सदस्यता योजनाओं की जांच करें!
- हमारे 💬 Discord समूह या टेलीग्राम समूह में शामिल हों या हमें Twitter 🐦 @hacktricks_live** पर फॉलो करें।**
- हैकिंग ट्रिक्स साझा करें, PRs को HackTricks और HackTricks Cloud गिटहब रिपोजिटरी में सबमिट करके।