Cognito User Pools
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
एक उपयोगकर्ता पूल Amazon Cognito में एक उपयोगकर्ता निर्देशिका है। एक उपयोगकर्ता पूल के साथ, आपके उपयोगकर्ता Amazon Cognito के माध्यम से आपके वेब या मोबाइल ऐप में साइन इन कर सकते हैं, या एक तृतीय-पक्ष पहचान प्रदाता (IdP) के माध्यम से संघनित कर सकते हैं। चाहे आपके उपयोगकर्ता सीधे साइन इन करें या एक तृतीय पक्ष के माध्यम से, उपयोगकर्ता पूल के सभी सदस्य एक निर्देशिका प्रोफ़ाइल रखते हैं जिसे आप एक SDK के माध्यम से एक्सेस कर सकते हैं।
उपयोगकर्ता पूल प्रदान करते हैं:
साइन-अप और साइन-इन सेवाएँ।
उपयोगकर्ताओं को साइन इन करने के लिए एक अंतर्निहित, अनुकूलन योग्य वेब UI।
फेसबुक, गूगल, अमेज़न के साथ लॉगिन, और एप्पल के साथ साइन इन, और आपके उपयोगकर्ता पूल से SAML और OIDC पहचान प्रदाताओं के माध्यम से सामाजिक साइन-इन।
उपयोगकर्ता निर्देशिका प्रबंधन और उपयोगकर्ता प्रोफाइल।
सुरक्षा सुविधाएँ जैसे बहु-कारक प्रमाणीकरण (MFA), समझौता किए गए क्रेडेंशियल्स के लिए जांच, खाता अधिग्रहण सुरक्षा, और फोन और ईमेल सत्यापन।
AWS Lambda ट्रिगर्स के माध्यम से अनुकूलित वर्कफ़्लो और उपयोगकर्ता माइग्रेशन।
एप्लिकेशन का स्रोत कोड आमतौर पर उपयोगकर्ता पूल ID और क्लाइंट एप्लिकेशन ID (और कभी-कभी एप्लिकेशन सीक्रेट?) भी शामिल करेगा, जो एक उपयोगकर्ता को Cognito उपयोगकर्ता पूल में लॉगिन करने के लिए आवश्यक हैं।
पंजीकरण: डिफ़ॉल्ट रूप से एक उपयोगकर्ता स्वयं को पंजीकृत कर सकता है, इसलिए वह अपने लिए एक उपयोगकर्ता बना सकता है।
उपयोगकर्ता गणना: पंजीकरण कार्यक्षमता का उपयोग उन उपयोगकर्ता नामों को खोजने के लिए किया जा सकता है जो पहले से मौजूद हैं। यह जानकारी ब्रूट-फोर्स हमले के लिए उपयोगी हो सकती है।
लॉगिन ब्रूट-फोर्स: प्रमाणीकरण अनुभाग में आपके पास सभी विधियाँ हैं जिनका उपयोग एक उपयोगकर्ता को लॉगिन करने के लिए करना है, आप उन्हें वैध क्रेडेंशियल्स खोजने के लिए ब्रूट-फोर्स करने का प्रयास कर सकते हैं।
Pacu, अब cognito__enum
और cognito__attack
मॉड्यूल शामिल करता है जो एक खाते में सभी Cognito संपत्तियों की गणना को स्वचालित करता है और कमजोर कॉन्फ़िगरेशन, उपयोगकर्ता विशेषताओं का उपयोग जो पहुँच नियंत्रण के लिए हैं, आदि को चिह्नित करता है, और उपयोगकर्ता निर्माण (MFA समर्थन सहित) और संशोधित अनुकूलन योग्य विशेषताओं, उपयोग योग्य पहचान पूल क्रेडेंशियल्स, आईडी टोकन में असुमेबल भूमिकाओं के आधार पर विशेषाधिकार वृद्धि को भी स्वचालित करता है।
मॉड्यूल के कार्यों का विवरण ब्लॉग पोस्ट के भाग 2 में देखें। स्थापना निर्देशों के लिए मुख्य Pacu पृष्ठ देखें।
Cognito Scanner एक CLI टूल है जो पायथन में लिखा गया है और यह Cognito पर विभिन्न हमलों को लागू करता है, जिसमें अनचाही खाता निर्माण और खाता ओरेकल शामिल हैं। अधिक जानकारी के लिए इस लिंक की जांच करें।
CognitoAttributeEnum: यह स्क्रिप्ट उपयोगकर्ताओं के लिए मान्य विशेषताओं को सूचीबद्ध करने की अनुमति देती है।
User Pools डिफ़ॉल्ट द्वारा नए उपयोगकर्ताओं को पंजीकरण करने की अनुमति देता है।
आपको एक त्रुटि मिल सकती है जो आपको बताती है कि आपको उपयोगकर्ता के बारे में अधिक विवरण प्रदान करने की आवश्यकता है:
आप आवश्यक विवरण एक JSON के साथ प्रदान कर सकते हैं जैसे:
आप इस कार्यक्षमता का उपयोग मौजूदा उपयोगकर्ताओं की गणना करने के लिए भी कर सकते हैं। जब उस नाम के साथ एक उपयोगकर्ता पहले से मौजूद होता है, तो यह त्रुटि संदेश है:
पिछले कमांड में ध्यान दें कि कस्टम विशेषताएँ "custom:" से शुरू होती हैं। यह भी जानें कि पंजीकरण करते समय आप उपयोगकर्ता के लिए नई कस्टम विशेषताएँ नहीं बना सकते। आप केवल डिफ़ॉल्ट विशेषताओं (भले ही वे आवश्यक न हों) और निर्धारित कस्टम विशेषताओं को मान दे सकते हैं।
या बस यह परीक्षण करने के लिए कि क्या एक क्लाइंट आईडी मौजूद है। यदि क्लाइंट-आईडी मौजूद नहीं है तो यह त्रुटि है:
आप इस त्रुटि को पाएंगे और आप उपयोगकर्ताओं को पंजीकृत या सूचीबद्ध नहीं कर पाएंगे:
Cognito एक नए उपयोगकर्ता की पुष्टि करने के लिए उसके ईमेल या फोन नंबर की पुष्टि करने की अनुमति देता है। इसलिए, जब एक उपयोगकर्ता बनाया जाता है, तो आमतौर पर आपको कम से कम उपयोगकर्ता नाम और पासवर्ड और ईमेल और/या फोन नंबर की आवश्यकता होगी। बस एक जिस पर आपका नियंत्रण हो सेट करें ताकि आप अपने नए बनाए गए उपयोगकर्ता खाते की पुष्टि करने के लिए कोड प्राप्त कर सकें जैसे:
यहां तक कि ऐसा लगता है कि आप वही ईमेल और फोन नंबर का उपयोग कर सकते हैं, जब आपको बनाए गए उपयोगकर्ता को सत्यापित करने की आवश्यकता होती है, तो Cognito समान जानकारी का उपयोग करने के बारे में शिकायत करेगा और आपको खाता सत्यापित करने नहीं देगा।
डिफ़ॉल्ट रूप से, एक उपयोगकर्ता अपने गुणों के मान को संशोधित कर सकता है कुछ इस तरह:
आपको कस्टम विशेषताओं का उपयोग करते हुए मिल सकता है (जैसे isAdmin
), क्योंकि डिफ़ॉल्ट रूप से आप अपनी विशेषताओं के मान बदल सकते हैं, आप अधिकार बढ़ाने के लिए मान स्वयं बदल सकते हैं!
आप इसका उपयोग किसी उपयोगकर्ता का ईमेल और फोन नंबर संशोधित करने के लिए कर सकते हैं, लेकिन फिर, भले ही खाता सत्यापित रहे, उन विशेषताओं को असत्यापित स्थिति में सेट किया गया है (आपको उन्हें फिर से सत्यापित करना होगा)।
आप ईमेल या फोन नंबर के साथ लॉगिन नहीं कर पाएंगे जब तक कि आप उन्हें सत्यापित नहीं करते, लेकिन आप उपयोगकर्ता नाम के साथ लॉगिन करने में सक्षम होंगे।
ध्यान दें कि भले ही ईमेल संशोधित किया गया हो और सत्यापित न हो, यह email
क्षेत्र के अंदर ID Token में दिखाई देगा और email_verified
फ़ील्ड false होगी, लेकिन यदि ऐप यह नहीं देख रहा है तो आप अन्य उपयोगकर्ताओं का अनुकरण कर सकते हैं।
इसके अलावा, ध्यान दें कि आप नाम विशेषता को संशोधित करके name
फ़ील्ड के अंदर कुछ भी डाल सकते हैं। यदि कोई ऐप किसी कारण से email
(या किसी अन्य विशेषता) के बजाय उस फ़ील्ड की जांच कर रहा है, तो आप अन्य उपयोगकर्ताओं का अनुकरण करने में सक्षम हो सकते हैं।
खैर, यदि किसी कारण से आपने अपना ईमेल, उदाहरण के लिए, एक नए ईमेल में बदल दिया है जिसे आप एक्सेस कर सकते हैं, तो आप उस ईमेल पते पर प्राप्त कोड के साथ ईमेल की पुष्टि कर सकते हैं:
फोन_नंबर
का उपयोग करें ईमेल
के बजाय नए फोन नंबर को बदलने/सत्यापित करने के लिए।
व्यवस्थापक इस विकल्प को सक्षम कर सकता है कि उपयोगकर्ता द्वारा पसंद किया गया उपयोगकर्ता नाम से लॉगिन करें। ध्यान दें कि आप इस मान को किसी भी उपयोगकर्ता नाम या पसंदीदा_उपयोगकर्ता नाम में नहीं बदल पाएंगे जो पहले से किसी अन्य उपयोगकर्ता की नकल करने के लिए उपयोग किया जा रहा है।
यह संभव है कि केवल उपयोगकर्ता नाम (या ईमेल या फोन स्वीकार किया जाता है) को जानकर पासवर्ड को पुनर्प्राप्त किया जा सके और वहां एक कोड भेजा जाएगा:
सर्वर की प्रतिक्रिया हमेशा सकारात्मक होगी, जैसे कि यदि उपयोगकर्ता नाम मौजूद है। आप इस विधि का उपयोग उपयोगकर्ताओं की गणना करने के लिए नहीं कर सकते
With the code you can change the password with:
पासवर्ड बदलने के लिए आपको पिछला पासवर्ड जानना होगा:
एक उपयोगकर्ता पूल प्रमाणित करने के लिए विभिन्न तरीकों का समर्थन करता है। यदि आपके पास उपयोगकर्ता नाम और पासवर्ड है, तो लॉगिन के लिए भी विभिन्न विधियाँ समर्थित हैं। इसके अलावा, जब एक उपयोगकर्ता पूल में प्रमाणित होता है, तो 3 प्रकार के टोकन दिए जाते हैं: ID टोकन, एक्सेस टोकन और रीफ्रेश टोकन।
ID Token: इसमें प्रमाणित उपयोगकर्ता की पहचान के बारे में दावे होते हैं, जैसे name
, email
, और phone_number
। ID टोकन का उपयोग आपके संसाधन सर्वरों या सर्वर अनुप्रयोगों में उपयोगकर्ताओं को प्रमाणित करने के लिए भी किया जा सकता है। यदि आप इसे बाहरी अनुप्रयोगों में उपयोग करते हैं, तो आपको ID टोकन के अंदर किसी भी दावे पर भरोसा करने से पहले हस्ताक्षर की सत्यापन करनी चाहिए।
ID टोकन वह टोकन है जो उपयोगकर्ता के गुणों के मान को शामिल करता है, यहां तक कि कस्टम वाले भी।
Access Token: इसमें प्रमाणित उपयोगकर्ता के बारे में दावे, उपयोगकर्ता के समूहों की सूची, और स्कोप की सूची होती है। एक्सेस टोकन का उद्देश्य उपयोगकर्ता पूल में उपयोगकर्ता के संदर्भ में API संचालन को अधिकृत करना है। उदाहरण के लिए, आप एक्सेस टोकन का उपयोग करके अपने उपयोगकर्ता को उपयोगकर्ता गुणों को जोड़ने, बदलने या हटाने की अनुमति दे सकते हैं।
Refresh Token: रीफ्रेश टोकनों के साथ आप उपयोगकर्ता के लिए नए ID टोकन और एक्सेस टोकन प्राप्त कर सकते हैं जब तक कि रीफ्रेश टोकन अमान्य न हो जाए। डिफ़ॉल्ट रूप से, रीफ्रेश टोकन 30 दिन बाद समाप्त हो जाता है जब आपका अनुप्रयोग उपयोगकर्ता आपके उपयोगकर्ता पूल में साइन इन करता है। जब आप अपने उपयोगकर्ता पूल के लिए एक अनुप्रयोग बनाते हैं, तो आप अनुप्रयोग के रीफ्रेश टोकन की समाप्ति को 60 मिनट से 10 वर्षों के बीच किसी भी मान पर सेट कर सकते हैं।
यह सर्वर साइड प्रमाणीकरण प्रवाह है:
सर्वर-साइड ऐप AdminInitiateAuth
API ऑपरेशन को कॉल करता है ( InitiateAuth
के बजाय)। इस ऑपरेशन के लिए AWS क्रेडेंशियल्स की आवश्यकता होती है जिनमें cognito-idp:AdminInitiateAuth
और cognito-idp:AdminRespondToAuthChallenge
की अनुमति शामिल होती है। यह ऑपरेशन आवश्यक प्रमाणीकरण पैरामीटर लौटाता है।
जब सर्वर-साइड ऐप के पास प्रमाणन पैरामीटर होते हैं, तो यह AdminRespondToAuthChallenge
API ऑपरेशन को कॉल करता है। AdminRespondToAuthChallenge
API ऑपरेशन केवल तभी सफल होता है जब आप AWS क्रेडेंशियल्स प्रदान करते हैं।
यह विधि डिफ़ॉल्ट रूप से सक्षम नहीं है।
लॉगिन करने के लिए आपको जानना आवश्यक है:
उपयोगकर्ता पूल आईडी
क्लाइंट आईडी
उपयोगकर्ता नाम
पासवर्ड
क्लाइंट सीक्रेट (केवल यदि ऐप को एक सीक्रेट का उपयोग करने के लिए कॉन्फ़िगर किया गया है)
इस विधि के साथ लॉगिन करने में सक्षम होने के लिए, उस अनुप्रयोग को ALLOW_ADMIN_USER_PASSWORD_AUTH
के साथ लॉगिन करने की अनुमति देनी चाहिए।
इसके अलावा, इस क्रिया को करने के लिए आपको cognito-idp:AdminInitiateAuth
और cognito-idp:AdminRespondToAuthChallenge
की अनुमति के साथ क्रेडेंशियल्स की आवश्यकता है।