Pentesting CI/CD Methodology
Last updated
Last updated
AWS हैकिंग सीखें और अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE) GCP हैकिंग सीखें और अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE)
VCS का मतलब है संस्करण नियंत्रण प्रणाली, यह प्रणाली डेवलपर्स को अपने स्रोत कोड का प्रबंधन करने की अनुमति देती है। सबसे सामान्य है git और आप आमतौर पर कंपनियों को निम्नलिखित प्लेटफार्मों में इसका उपयोग करते हुए पाएंगे:
Github
Gitlab
Bitbucket
Gitea
क्लाउड प्रदाता (वे अपने स्वयं के VCS प्लेटफार्मों की पेशकश करते हैं)
CI/CD पाइपलाइन्स डेवलपर्स को कोड के निष्पादन को स्वचालित करने की अनुमति देती हैं विभिन्न उद्देश्यों के लिए, जिसमें एप्लिकेशन का निर्माण, परीक्षण और तैनाती शामिल है। ये स्वचालित कार्यप्रवाह विशिष्ट क्रियाओं द्वारा प्रेरित होते हैं, जैसे कोड पुश, पुल अनुरोध, या अनुसूचित कार्य। ये विकास से उत्पादन तक की प्रक्रिया को सरल बनाने के लिए उपयोगी हैं।
हालांकि, इन प्रणालियों को कहीं निष्पादित करने की आवश्यकता होती है और आमतौर पर संवेदनशील जानकारी तक पहुँचने या कोड तैनात करने के लिए विशेषाधिकार प्राप्त क्रेडेंशियल्स के साथ।
हालांकि कुछ VCS प्लेटफार्मों को इस अनुभाग के लिए पाइपलाइन्स बनाने की अनुमति है, हम केवल स्रोत कोड के नियंत्रण पर संभावित हमलों का विश्लेषण करने जा रहे हैं।
आपकी परियोजना के स्रोत कोड वाले प्लेटफार्मों में संवेदनशील जानकारी होती है और लोगों को इस प्लेटफार्म के भीतर दिए गए अनुमतियों के साथ बहुत सावधान रहना चाहिए। ये कुछ सामान्य समस्याएँ हैं जो VCS प्लेटफार्मों में हो सकती हैं जिन्हें हमलावर दुरुपयोग कर सकता है:
लीक: यदि आपके कोड में कमिट्स में लीक हैं और हमलावर को रिपॉजिटरी तक पहुँच मिलती है (क्योंकि यह सार्वजनिक है या क्योंकि उसके पास पहुँच है), तो वह लीक का पता लगा सकता है।
पहुँच: यदि एक हमलावर VCS प्लेटफार्म के भीतर एक खाते तक पहुँच सकता है, तो वह अधिक दृश्यता और अनुमतियाँ प्राप्त कर सकता है।
पंजीकरण: कुछ प्लेटफार्म केवल बाहरी उपयोगकर्ताओं को एक खाता बनाने की अनुमति देंगे।
SSO: कुछ प्लेटफार्म उपयोगकर्ताओं को पंजीकरण करने की अनुमति नहीं देंगे, लेकिन किसी को भी एक मान्य SSO के साथ पहुँचने की अनुमति देंगे (इसलिए एक हमलावर अपने गिटहब खाते का उपयोग करके प्रवेश कर सकता है, उदाहरण के लिए)।
क्रेडेंशियल्स: उपयोगकर्ता नाम + पासवर्ड, व्यक्तिगत टोकन, ssh कुंजी, Oauth टोकन, कुकीज़... कई प्रकार के टोकन हैं जो एक उपयोगकर्ता किसी तरह से एक रिपॉजिटरी तक पहुँचने के लिए चुरा सकता है।
वेबहुक: VCS प्लेटफार्म वेबहुक उत्पन्न करने की अनुमति देते हैं। यदि वे अदृश्य रहस्यों के साथ संरक्षित नहीं हैं, तो एक हमलावर उनका दुरुपयोग कर सकता है।
यदि कोई रहस्य नहीं है, तो हमलावर तीसरे पक्ष के प्लेटफार्म के वेबहुक का दुरुपयोग कर सकता है।
यदि रहस्य URL में है, तो वही होता है और हमलावर के पास भी रहस्य होता है।
कोड समझौता: यदि एक दुर्भावनापूर्ण अभिनेता के पास रिपॉजिटरी पर कुछ प्रकार की लिखने की पहुँच है, तो वह दुर्भावनापूर्ण कोड को इंजेक्ट करने की कोशिश कर सकता है। सफल होने के लिए, उसे ब्रांच सुरक्षा को बायपास करने की आवश्यकता हो सकती है। ये क्रियाएँ विभिन्न लक्ष्यों के साथ की जा सकती हैं:
मुख्य शाखा को उत्पादन को समझौता करने के लिए समझौता करना।
मुख्य (या अन्य शाखाएँ) को डेवलपर्स की मशीनों को समझौता करने के लिए समझौता करना (क्योंकि वे आमतौर पर परीक्षण, टेराफॉर्म या अन्य चीजें अपनी मशीनों में रिपॉजिटरी के भीतर निष्पादित करते हैं)।
पाइपलाइन को समझौता करना (अगले अनुभाग की जाँच करें)
पाइपलाइन को परिभाषित करने का सबसे सामान्य तरीका है रिपॉजिटरी में होस्ट की गई CI कॉन्फ़िगरेशन फ़ाइल का उपयोग करना जिसे पाइपलाइन बनाती है। यह फ़ाइल निष्पादित कार्यों के क्रम, प्रवाह को प्रभावित करने वाली शर्तों, और निर्माण वातावरण सेटिंग्स का वर्णन करती है। ये फ़ाइलें आमतौर पर एक सुसंगत नाम और प्रारूप रखती हैं, उदाहरण के लिए — Jenkinsfile (Jenkins), .gitlab-ci.yml (GitLab), .circleci/config.yml (CircleCI), और .github/workflows के तहत स्थित GitHub Actions YAML फ़ाइलें। जब प्रेरित किया जाता है, तो पाइपलाइन कार्य चयनित स्रोत से कोड खींचता है (जैसे कमिट / शाखा), और CI कॉन्फ़िगरेशन फ़ाइल में निर्दिष्ट आदेशों को उस कोड के खिलाफ चलाता है।
इसलिए हमलावर का अंतिम लक्ष्य किसी तरह से उन कॉन्फ़िगरेशन फ़ाइलों या आदेशों को समझौता करना है जो वे निष्पादित करते हैं।
विषाक्त पाइपलाइन निष्पादन (PPE) पथ एक SCM रिपॉजिटरी में अनुमतियों का दुरुपयोग करता है ताकि एक CI पाइपलाइन को हेरफेर किया जा सके और हानिकारक आदेशों को निष्पादित किया जा सके। आवश्यक अनुमतियों वाले उपयोगकर्ता CI कॉन्फ़िगरेशन फ़ाइलों या अन्य फ़ाइलों को संशोधित कर सकते हैं जो पाइपलाइन कार्य द्वारा उपयोग की जाती हैं ताकि दुर्भावनापूर्ण आदेश शामिल किए जा सकें। यह "CI पाइपलाइन को विषाक्त" करता है, जिससे इन दुर्भावनापूर्ण आदेशों का निष्पादन होता है।
एक दुर्भावनापूर्ण अभिनेता को PPE हमले को सफलतापूर्वक करने के लिए सक्षम होना चाहिए:
VCS प्लेटफार्म पर लिखने की पहुँच हो, क्योंकि आमतौर पर पाइपलाइन्स तब प्रेरित होती हैं जब एक पुश या पुल अनुरोध किया जाता है। (पहुँच प्राप्त करने के तरीकों का सारांश देखने के लिए VCS पेंटेस्टिंग मेथोडोलॉजी की जाँच करें)।
ध्यान दें कि कभी-कभी एक बाहरी PR "लिखने की पहुँच" के रूप में गिना जाता है।
भले ही उसके पास लिखने की अनुमतियाँ हों, उसे यह सुनिश्चित करने की आवश्यकता है कि वह CI कॉन्फ़िगरेशन फ़ाइल या अन्य फ़ाइलों को संशोधित कर सके जिन पर कॉन्फ़िगरेशन निर्भर करता है।
इसके लिए, उसे ब्रांच सुरक्षा को बायपास करने में सक्षम होना पड़ सकता है।
PPE के 3 प्रकार हैं:
D-PPE: एक प्रत्यक्ष PPE हमला तब होता है जब अभिनेता CI कॉन्फ़िगरेशन फ़ाइल को संशोधित करता है जो निष्पादित होने वाली है।
I-DDE: एक अप्रत्यक्ष PPE हमला तब होता है जब अभिनेता संशोधित करता है एक फ़ाइल जिसे CI कॉन्फ़िगरेशन फ़ाइल जो निष्पादित होने वाली है निर्भर करती है (जैसे एक मेक फ़ाइल या एक टेराफॉर्म कॉन्फ़िगरेशन)।
सार्वजनिक PPE या 3PE: कुछ मामलों में पाइपलाइन्स को उपयोगकर्ताओं द्वारा प्रेरित किया जा सकता है जिनके पास रिपॉजिटरी में लिखने की पहुँच नहीं है (और जो शायद संगठन का हिस्सा भी नहीं हैं) क्योंकि वे PR भेज सकते हैं।
3PE कमांड इंजेक्शन: आमतौर पर, CI/CD पाइपलाइन्स पर्यावरण चर सेट करेंगी जिनमें PR के बारे में जानकारी होगी। यदि उस मान को एक हमलावर द्वारा नियंत्रित किया जा सकता है (जैसे PR का शीर्षक) और इसका उपयोग एक खतरनाक स्थान में किया जाता है (जैसे sh आदेशों को निष्पादित करना), तो एक हमलावर वहाँ आदेश इंजेक्ट कर सकता है।
पाइपलाइन को विषाक्त करने के 3 प्रकारों को जानने के बाद, आइए देखें कि एक हमलावर सफल शोषण के बाद क्या प्राप्त कर सकता है:
रहस्य: जैसा कि पहले उल्लेख किया गया था, पाइपलाइन्स को उनके कार्यों के लिए विशेषाधिकार की आवश्यकता होती है (कोड प्राप्त करना, इसे बनाना, इसे तैनात करना...) और ये विशेषाधिकार आमतौर पर रहस्यों में दिए जाते हैं। ये रहस्य आमतौर पर पर्यावरण चर या सिस्टम के भीतर फ़ाइलों के माध्यम से सुलभ होते हैं। इसलिए एक हमलावर हमेशा जितना संभव हो सके उतने रहस्यों को निकालने की कोशिश करेगा।
पाइपलाइन प्लेटफार्म के आधार पर, हमलावर को कॉन्फ़िगरेशन में रहस्यों को निर्दिष्ट करने की आवश्यकता हो सकती है। इसका मतलब है कि यदि हमलावर CI कॉन्फ़िगरेशन पाइपलाइन को संशोधित नहीं कर सकता (I-PPE उदाहरण के लिए), तो वह केवल उन रहस्यों को निकाल सकता है जो पाइपलाइन के पास हैं।
गणना: कोड कहीं निष्पादित होता है, जिस पर यह निष्पादित होता है, उसके आधार पर एक हमलावर आगे बढ़ने में सक्षम हो सकता है।
ऑन-प्रिमाइसेस: यदि पाइपलाइन्स ऑन-प्रिमाइसेस पर निष्पादित होती हैं, तो एक हमलावर एक आंतरिक नेटवर्क में अधिक संसाधनों तक पहुँच के साथ समाप्त हो सकता है।
क्लाउड: हमलावर क्लाउड में अन्य मशीनों तक पहुँच सकता है लेकिन वह IAM भूमिकाएँ/सेवा खातों के टोकन को भी निकाल सकता है ताकि क्लाउड के भीतर आगे पहुँच प्राप्त कर सके।
प्लेटफार्म मशीन: कभी-कभी कार्य पाइपलाइन्स प्लेटफार्म मशीनों के भीतर निष्पादित होते हैं, जो आमतौर पर एक क्लाउड के भीतर होते हैं जिसमें कोई और पहुँच नहीं होती।
इसे चुनें: कभी-कभी पाइपलाइन्स प्लेटफार्म में कई मशीनें कॉन्फ़िगर की गई होती हैं और यदि आप CI कॉन्फ़िगरेशन फ़ाइल को संशोधित कर सकते हैं, तो आप यह निर्दिष्ट कर सकते हैं कि आप दुर्भावनापूर्ण कोड कहाँ चलाना चाहते हैं। इस स्थिति में, एक हमलावर शायद प्रत्येक संभावित मशीन पर एक रिवर्स शेल चलाएगा ताकि इसे आगे शोषण करने की कोशिश की जा सके।
उत्पादन को समझौता करना: यदि आप पाइपलाइन के भीतर हैं और अंतिम संस्करण इससे बनाया और तैनात किया गया है, तो आप कोड को समझौता कर सकते हैं जो अंततः उत्पादन में चलने वाला है।
Chain-bench एक ओपन-सोर्स उपकरण है जो आपके सॉफ़्टवेयर आपूर्ति श्रृंखला स्टैक का सुरक्षा अनुपालन के लिए ऑडिट करता है जो एक नए CIS सॉफ़्टवेयर आपूर्ति श्रृंखला बेंचमार्क पर आधारित है। ऑडिटिंग पूरे SDLC प्रक्रिया पर केंद्रित है, जहाँ यह कोड समय से लेकर तैनाती समय तक के जोखिमों को उजागर कर सकता है।
Cider के अनुसार शीर्ष 10 CI/CD जोखिमों के बारे में इस दिलचस्प लेख की जाँच करें: https://www.cidersecurity.io/top-10-cicd-security-risks/
प्रत्येक प्लेटफार्म पर जिसे आप स्थानीय रूप से चला सकते हैं, आप इसे स्थानीय रूप से लॉन्च करने का तरीका पाएंगे ताकि आप इसे अपनी इच्छानुसार कॉन्फ़िगर कर सकें।
Gitea + Jenkins प्रयोगशाला: https://github.com/cider-security-research/cicd-goat
Checkov: Checkov बुनियादी ढांचे के लिए एक स्थैतिक कोड विश्लेषण उपकरण है।
AWS हैकिंग सीखें और अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE) GCP हैकिंग सीखें और अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE)