AWS - Lambda Enum
Last updated
Last updated
AWS हैकिंग सीखें और अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE) GCP हैकिंग सीखें और अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE)
Amazon Web Services (AWS) Lambda को एक कंप्यूट सेवा के रूप में वर्णित किया गया है जो कोड को निष्पादित करने की अनुमति देती है बिना सर्वर प्रावधान या प्रबंधन की आवश्यकता के। यह कोड निष्पादन के लिए आवश्यक संसाधन आवंटन को स्वतः संभालने की क्षमता से पहचानी जाती है, जो उच्च उपलब्धता, स्केलेबिलिटी और सुरक्षा जैसी सुविधाओं को सुनिश्चित करती है। Lambda का एक महत्वपूर्ण पहलू इसका मूल्य निर्धारण मॉडल है, जहां शुल्क केवल उपयोग किए गए कंप्यूट समय पर आधारित होते हैं, प्रारंभिक निवेश या दीर्घकालिक प्रतिबद्धताओं की आवश्यकता को समाप्त करते हैं।
एक लैम्ब्डा को कॉल करने के लिए इसे जितनी बार चाहें (Cloudwatch के साथ) कॉल करना संभव है, एक URL एंडपॉइंट को एक्सपोज करना और इसे कॉल करना, API गेटवे के माध्यम से कॉल करना या यहां तक कि S3 बकेट में डेटा में परिवर्तनों या DynamoDB तालिका में अपडेट के आधार पर कॉल करना।
एक लैम्ब्डा का कोड /var/task
में संग्रहीत होता है।
एक Lambda के पास कई संस्करण हो सकते हैं। और इसके पास एक से अधिक संस्करण हो सकते हैं जो उपनामों के माध्यम से एक्सपोज़ किए जाते हैं। उपनाम के अंदर एक्सपोज़ किए गए प्रत्येक संस्करण का वजन यह तय करेगा कि कौन सा उपनाम कॉल प्राप्त करता है (यह 90%-10% हो सकता है, उदाहरण के लिए)। यदि एक उपनाम का कोड कमजोर है, तो आप अनुरोध भेज सकते हैं जब तक कमजोर संस्करण को एक्सप्लॉइट प्राप्त नहीं होता।
Lambda संसाधन नीतियाँ अन्य सेवाओं/खातों को लैम्ब्डा को कॉल करने की अनुमति देने की अनुमति देती हैं। उदाहरण के लिए, यह नीति है जो किसी को भी URL के माध्यम से एक्सपोज़ किए गए लैम्ब्डा तक पहुँचने की अनुमति देती है:
या यह API गेटवे को इसे कॉल करने की अनुमति देने के लिए:
जब सैकड़ों समानांतर लैम्ब्डा अनुरोध होते हैं, यदि प्रत्येक को डेटाबेस से कनेक्ट और कनेक्शन बंद करने की आवश्यकता होती है, तो यह काम नहीं करेगा (लैम्ब्डा स्टेटलेस होते हैं, कनेक्शन को खुला नहीं रख सकते)। फिर, यदि आपके Lambda कार्य RDS Proxy के साथ इंटरैक्ट करते हैं तो आपके डेटाबेस इंस्टेंस के बजाय। यह समानांतर Lambda कार्यों द्वारा बनाए गए कई समवर्ती कनेक्शनों के लिए आवश्यक कनेक्शन पूलिंग को संभालता है। यह आपके Lambda अनुप्रयोगों को मौजूदा कनेक्शनों का पुन: उपयोग करने की अनुमति देता है, बजाय इसके कि हर कार्य कॉल के लिए नए कनेक्शन बनाए।
डेटा को संरक्षित करने और यहां तक कि साझा करने के लिए Lambdas EFS तक पहुँच सकते हैं और उन्हें माउंट कर सकते हैं, ताकि Lambda इसे पढ़ और लिख सके।
एक Lambda लेयर एक .zip फ़ाइल संग्रह है जो अतिरिक्त कोड या अन्य सामग्री को शामिल कर सकता है। एक लेयर में पुस्तकालय, एक कस्टम रनटाइम, डेटा, या कॉन्फ़िगरेशन फ़ाइलें हो सकती हैं।
आप प्रत्येक कार्य के लिए पांच लेयर तक शामिल कर सकते हैं। जब आप किसी कार्य में एक लेयर शामिल करते हैं, तो सामग्री को /opt
निर्देशिका में निष्पादन वातावरण में निकाला जाता है।
डिफ़ॉल्ट के रूप में, आप जो लेयर बनाते हैं वे आपके AWS खाते के लिए निजी होती हैं। आप एक लेयर को अन्य खातों के साथ साझा करने या लेयर को सार्वजनिक बनाने का विकल्प चुन सकते हैं। यदि आपके कार्य एक लेयर का उपभोग करते हैं जिसे एक अलग खाते ने प्रकाशित किया है, तो आपके कार्य लेयर संस्करण का उपयोग जारी रख सकते हैं जब इसे हटा दिया गया हो, या जब आपकी लेयर तक पहुँचने की अनुमति रद्द कर दी गई हो। हालाँकि, आप एक नई कार्य नहीं बना सकते या हटाए गए लेयर संस्करण का उपयोग करते हुए कार्यों को अपडेट नहीं कर सकते।
कंटेनर छवि के रूप में तैनात कार्य लेयर का उपयोग नहीं करते हैं। इसके बजाय, आप छवि बनाने के समय अपने पसंदीदा रनटाइम, पुस्तकालय और अन्य निर्भरताओं को कंटेनर छवि में पैकेज करते हैं।
Lambda एक्सटेंशन कार्यों को विभिन्न निगरानी, अवलोकन, सुरक्षा, और शासन उपकरणों के साथ एकीकृत करके बढ़ाते हैं। ये एक्सटेंशन, .zip संग्रह का उपयोग करके Lambda लेयर्स के माध्यम से जोड़े जाते हैं या कंटेनर छवि तैनाती में शामिल होते हैं, दो मोड में कार्य करते हैं: आंतरिक और बाहरी।
आंतरिक एक्सटेंशन रनटाइम प्रक्रिया के साथ विलीन होते हैं, इसके स्टार्टअप को भाषा-विशिष्ट पर्यावरण चर और रैपर स्क्रिप्ट का उपयोग करके संशोधित करते हैं। यह अनुकूलन विभिन्न रनटाइम्स पर लागू होता है, जिसमें Java Correto 8 और 11, Node.js 10 और 12, और .NET Core 3.1 शामिल हैं।
बाहरी एक्सटेंशन अलग प्रक्रियाओं के रूप में चलते हैं, Lambda कार्य के जीवन चक्र के साथ संचालन संरेखण बनाए रखते हैं। वे विभिन्न रनटाइम्स के साथ संगत होते हैं जैसे Node.js 10 और 12, Python 3.7 और 3.8, Ruby 2.5 और 2.7, Java Corretto 8 और 11, .NET Core 3.1, और कस्टम रनटाइम।
अब संभावित लैम्ब्डा फ़ंक्शंस को निष्पादित करने का समय है:
एक लैम्ब्डा फ़ंक्शन "Level6" उपलब्ध है। चलो पता करते हैं कि इसे कैसे कॉल किया जाए:
अब, जब आप नाम और आईडी जानते हैं, तो आप नाम प्राप्त कर सकते हैं:
और अंत में फ़ंक्शन को कॉल करें (ध्यान दें कि ID, Name और function-name URL में दिखाई देते हैं): https://s33ppypa75.execute-api.us-west-2.amazonaws.com/Prod/level6
URL:
https://<rest-api-id>.execute-api.<region>.amazonaws.com/<stageName>/<funcName>
एक लैम्ब्डा को ट्रिगर करने के लिए कई अन्य स्रोत हैं
अगली पृष्ठ में आप देख सकते हैं कि Lambda अनुमतियों का दुरुपयोग करके विशेषाधिकार कैसे बढ़ाएं:
AWS - Lambda PrivescAWS हैकिंग सीखें और अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE) GCP हैकिंग सीखें और अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE)