Translated ['src/pentesting-cloud/aws-security/aws-services/aws-cognito-

This commit is contained in:
Translator
2025-01-26 14:51:43 +00:00
parent 82b560d00e
commit cb903c1ebe
3 changed files with 41 additions and 41 deletions

View File

@@ -7,7 +7,7 @@
Identity pools एक महत्वपूर्ण भूमिका निभाते हैं क्योंकि ये आपके उपयोगकर्ताओं को **अस्थायी क्रेडेंशियल्स** प्राप्त करने में सक्षम बनाते हैं। ये क्रेडेंशियल्स विभिन्न AWS सेवाओं, जैसे कि Amazon S3 और DynamoDB, तक पहुँचने के लिए आवश्यक हैं। Identity pools की एक उल्लेखनीय विशेषता यह है कि ये गुमनाम अतिथि उपयोगकर्ताओं और उपयोगकर्ता प्रमाणीकरण के लिए विभिन्न पहचान प्रदाताओं का समर्थन करते हैं। समर्थित पहचान प्रदाता में शामिल हैं:
- Amazon Cognito user pools
-ोशल साइन-इन विकल्प जैसे Facebook, Google, Login with Amazon, और Sign in with Apple
-ामाजिक साइन-इन विकल्प जैसे Facebook, Google, Login with Amazon, और Sign in with Apple
- OpenID Connect (OIDC) के साथ संगत प्रदाता
- SAML (Security Assertion Markup Language) पहचान प्रदाता
- Developer authenticated identities
@@ -35,33 +35,33 @@ print(response)
```
### Cognito Sync
Identity Pool सत्र उत्पन्न करने के लिए, आपको पहले **एक पहचान ID उत्पन्न करने की आवश्यकता है**। यह पहचान ID **उस उपयोगकर्ता के सत्र की पहचान है**। इन पहचानों में 20 तक डेटा सेट हो सकते हैं जो 1MB तक की कुंजी-मूल्य जोड़े को संग्रहीत कर सकते हैं।
Identity Pool सत्र उत्पन्न करने के लिए, आपको पहले **एक Identity ID उत्पन्न करने की आवश्यकता है**। यह Identity ID **उस उपयोगकर्ता के सत्र की पहचान है**। इन पहचानों में 20 तक डेटा सेट हो सकते हैं जो 1MB तक की कुंजी-मूल्य जोड़े को संग्रहीत कर सकते हैं।
यह **एक उपयोगकर्ता की जानकारी रखने के लिए उपयोगी है** (जो हमेशा उसी पहचान ID का उपयोग करेगा)।
यह **एक उपयोगकर्ता की जानकारी रखने के लिए उपयोगी है** (जो हमेशा उसी Identity ID का उपयोग करेगा)।
इसके अलावा, सेवा **cognito-sync** वह सेवा है जो **इस जानकारी का प्रबंधन और समन्वय करने की अनुमति देती है** (डेटा सेट में, धाराओं में जानकारी भेजना और SNS संदेश...)
इसके अलावा, सेवा **cognito-sync** वह सेवा है जो **इस जानकारी का प्रबंधन और समन्वय करने की अनुमति देती है** (डेटा सेट में, धाराओं में जानकारी भेजना और SNSs संदेश...).
### Tools for pentesting
- [Pacu](https://github.com/RhinoSecurityLabs/pacu), AWS शोषण ढांचा, अब "cognito\_\_enum" और "cognito\_\_attack" मॉड्यूल शामिल करता है जो एक खाते में सभी Cognito संपत्तियों की गणना को स्वचालित करता है और कमजोर कॉन्फ़िगरेशन, उपयोगकर्ता विशेषताएँ जो पहुच नियंत्रण के लिए उपयोग की जाती हैं, आदि को चिह्नित करता है, और उपयोगकर्ता निर्माण (MFA समर्थन सहित) और परिवर्तनीय कस्टम विशेषताओं, उपयोग योग्य पहचान पूल क्रेडेंशियल्स, id टोकन में ग्रहणीय भूमिकाओं के आधार पर विशेषाधिकार वृद्धि को भी स्वचालित करता है।
- [Pacu](https://github.com/RhinoSecurityLabs/pacu), AWS शोषण ढांचा, अब "cognito\_\_enum" और "cognito\_\_attack" मॉड्यूल शामिल करता है जो एक खाते में सभी Cognito संपत्तियों की गणना को स्वचालित करता है और कमजोर कॉन्फ़िगरेशन, उपयोगकर्ता विशेषताओं का उपयोग जो पहुच नियंत्रण के लिए हैं, आदि को चिह्नित करता है, और उपयोगकर्ता निर्माण (MFA समर्थन सहित) और परिवर्तनीय कस्टम विशेषताओं, उपयोग योग्य पहचान पूल क्रेडेंशियल्स, id टोकन में ग्रहणीय भूमिकाओं के आधार पर विशेषाधिकार वृद्धि को भी स्वचालित करता है।
मॉड्यूल के कार्यों का विवरण देखने के लिए [ब्लॉग पोस्ट](https://rhinosecuritylabs.com/aws/attacking-aws-cognito-with-pacu-p2) के भाग 2 को देखें। स्थापना निर्देशों के लिए मुख्य [Pacu](https://github.com/RhinoSecurityLabs/pacu) पृष्ठ देखें।
#### Usage
Sample cognito\_\_attack उपयोग उपयोगकर्ता निर्माण और दिए गए पहचान पूल और उपयोगकर्ता पूल क्लाइंट के खिलाफ सभी प्रिवेस्क वेक्टरों क प्रयास करने के लिए:
उपयोगकर्ता निर्माण और दिए गए पहचान पूल और उपयोगकर्ता पूल क्लाइंट के खिलाफ सभी प्रिवेस्क वेक्टरों क प्रयास के लिए नमूना cognito\_\_attack उपयोग:
```bash
Pacu (new:test) > run cognito__attack --username randomuser --email XX+sdfs2@gmail.com --identity_pools
us-east-2:a06XXXXX-c9XX-4aXX-9a33-9ceXXXXXXXXX --user_pool_clients
59f6tuhfXXXXXXXXXXXXXXXXXX@us-east-2_0aXXXXXXX
```
सैंपल cognito\_\_enum का उपयोग वर्तमान AWS खाते में दृश्य सभी उपयोगकर्ता पूल, उपयोगकर्ता पूल क्लाइंट, पहचान पूल, उपयोगकर्ता आदि को इकट्ठा करने के लिए:
सैंपल cognito\_\_enum का उपयोग सभी उपयोगकर्ता पूल, उपयोगकर्ता पूल क्लाइंट, पहचान पूल, उपयोगकर्ताओं आदि को इकट्ठा करने के लिए करें, जो वर्तमान AWS खाते में दृश्य हैं:
```bash
Pacu (new:test) > run cognito__enum
```
- [Cognito Scanner](https://github.com/padok-team/cognito-scanner) एक CLI टूल है जो पायथन में लिखा गया है और यह Cognito पर विभिन्न हमलों को लागू करता है, जिसमें अनचाही खाता निर्माण और पहचान पूल वृद्धि शामिल है।
#### स्थापना
#### Installation
```bash
$ pip install cognito-scanner
```
@@ -69,18 +69,18 @@ $ pip install cognito-scanner
```bash
$ cognito-scanner --help
```
अधिक जानकारी के लिए देखें https://github.com/padok-team/cognito-scanner
For more information check https://github.com/padok-team/cognito-scanner
## IAM भूमिकाओं तक पहुँच
### अनधिकृत
### बिना प्रमाणीकरण के
एक हमलावर को **AWS क्रेडेंशियल्स प्राप्त करने** के लिए एक Cognito ऐप में अनधिकृत उपयोगकर्ता के रूप में केवल **Identity Pool ID** जानने की आवश्यकता होती है, और यह **ID को वेब/मोबाइल** **ऐप्लिकेशन** में हार्डकोड किया जाना चाहिए ताकि इसका उपयोग किया जा सके। एक ID इस तरह दिखती है: `eu-west-1:098e5341-8364-038d-16de-1865e435da3b` (यह ब्रूटफोर्स करने योग्य नहीं है)।
एक हमलावर को **AWS क्रेडेंशियल्स** प्राप्त करने के लिए एक Cognito ऐप में बिना प्रमाणीकरण वाले उपयोगकर्ता के रूप में केवल **Identity Pool ID** जानने की आवश्यकता होती है, और यह **ID को वेब/मोबाइल** **ऐप्लिकेशन** में हार्डकोड किया जाना चाहिए ताकि इसका उपयोग किया जा सके। एक ID इस तरह दिखती है: `eu-west-1:098e5341-8364-038d-16de-1865e435da3b` (यह ब्रूटफोर्स करने योग्य नहीं है)।
> [!TIP]
> **IAM Cognito अनधिकृत भूमिका जो बनाई गई है उसे** डिफ़ॉल्ट रूप से `Cognito_<Identity Pool name>Unauth_Role` कहा जात है।
> **IAM Cognito बिना प्रमाणीकरण वाली भूमिका जो बनाई गई है** डिफ़ॉल्ट रूप से `Cognito_<Identity Pool name>Unauth_Role` कहात है।
यदि आप एक हार्डकोडेड Identity Pools ID पाते हैं और यह अनधिकृत उपयोगकर्ताओं की अनुमति देता है, तो आप AWS क्रेडेंशियल्स प्राप्त कर सकते हैं:
यदि आप एक हार्डकोडेड Identity Pools ID पाते हैं और यह बिना प्रमाणीकरण वाले उपयोगकर्ताओं की अनुमति देता है, तो आप AWS क्रेडेंशियल्स प्राप्त कर सकते हैं:
```python
import requests
@@ -106,19 +106,19 @@ r = requests.post(url, json=params, headers=headers)
print(r.json())
```
या आप निम्नलिखित **aws cli commands** का उपयोग कर सकते हैं:
या आप निम्नलिखित **aws cli कमांड** का उपयोग कर सकते हैं:
```bash
aws cognito-identity get-id --identity-pool-id <identity_pool_id> --no-sign
aws cognito-identity get-credentials-for-identity --identity-id <identity_id> --no-sign
```
> [!WARNING]
> ध्यान दें कि डिफ़ॉल्ट रूप से एक अनधिकृत cognito **उपयोगकर्ता को कोई अनुमति नहीं हो सकती, भले ही इसे एक नीति के माध्यम से सौंपा गया हो**। निम्नलिखित अनुभाग की जांच करें।
> ध्यान दें कि डिफ़ॉल्ट रूप से एक अनधिकृत cognito **उपयोगकर्ता को कोई अनुमति नहीं मिल सकती, भले ही इसे एक नीति के माध्यम से सौंपा गया हो**। निम्नलिखित अनुभाग की जांच करें।
### Enhanced vs Basic Authentication flow
पिछले अनुभाग ने **डिफ़ॉल्ट संवर्धित प्रमाणीकरण प्रवाह** का पालन किया। यह प्रवाह IAM भूमिका सत्र के लिए एक **प्रतिबंधात्मक** [**सत्र नीति**](../../aws-basic-information/#session-policies) सेट करता है। यह नीति केवल सत्र को [**इस सूची से सेवाओं का उपयोग करने**](https://docs.aws.amazon.com/cognito/latest/developerguide/iam-roles.html#access-policies-scope-down-services) की अनुमति देगी (भले ही भूमिका को अन्य सेवाओं तक पहुंच हो)।
पिछले अनुभाग ने **डिफ़ॉल्ट संवर्धित प्रमाणीकरण प्रवाह** का पालन किया। यह प्रवाह IAM भूमिका सत्र के लिए एक **प्रतिबंधात्मक** [**सत्र नीति**](../../aws-basic-information/index.html#session-policies) सेट करता है। यह नीति केवल सत्र को [**इस सूची से सेवाओं का उपयोग करने**](https://docs.aws.amazon.com/cognito/latest/developerguide/iam-roles.html#access-policies-scope-down-services) की अनुमति देगी (भले ही भूमिका को अन्य सेवाओं तक पहुंच हो)।
हालांकि, इसे बायपास करने का एक तरीका है, यदि **पहचान पूल में "बेसिक (क्लासिक) प्रवाह" सक्षम है**, तो उपयोगकर्ता उस प्रवाह का उपयोग करके एक सत्र प्राप्त कर सकेगा जिसमें **वह प्रतिबंधात्मक सत्र नीति नहीं होगी**
हालांकि, इसे बायपास करने का एक तरीका है, यदि **पहचान पूल में "बेसिक (क्लासिक) फ्लो" सक्षम है**, तो उपयोगकर्ता उस प्रवाह का उपयोग करके एक सत्र प्राप्त कर सकेगा जिसमें **वह प्रतिबंधात्मक सत्र नीति नहीं होगी**
```bash
# Get auth ID
aws cognito-identity get-id --identity-pool-id <identity_pool_id> --no-sign
@@ -135,7 +135,7 @@ aws sts assume-role-with-web-identity --role-arn "arn:aws:iam::<acc_id>:role/<ro
> `An error occurred (InvalidParameterException) when calling the GetOpenIdToken operation: Basic (classic) flow is not enabled, please use enhanced flow.`
IAM क्रेडेंशियल्स का एक सेट होने पर आपको [यह जांचना चाहिए कि आपके पास कौन सा एक्सेस है](../../#whoami) और [अधिकार बढ़ाने की कोशिश करें](../../aws-privilege-escalation/).
IAM क्रेडेंशियल्स का एक सेट होने पर आपको [यह जांचना चाहिए कि आपके पास कौन सा एक्सेस है](../../index.html#whoami) और [अधिकार बढ़ाने की कोशिश करें](../../aws-privilege-escalation/index.html).
### प्रमाणित
@@ -149,27 +149,27 @@ IAM क्रेडेंशियल्स का एक सेट होने
> [!TIP]
> **IAM Cognito प्रमाणित भूमिका जो बनाई गई है** उसे डिफ़ॉल्ट रूप से `Cognito_<Identity Pool name>Auth_Role` कहा जाता है।
वैसे भी, **निम्नलिखित उदाहरण** अपेक्षा करता है कि आपने पहले ही **Cognito User Pool** में लॉग इन किया है जिसका उपयोग पहचान पूल तक पहुँचने के लिए किया गया है (यह न भूलें कि अन्य प्रकार के पहचान प्रदाता भी कॉन्फ़िगर कि जा सकत है)।
वैसे भी, **निम्नलिखित उदाहरण** यह अपेक्षाकृत करता है कि आपने पहले ही **Cognito User Pool** में लॉग इन किया है जिसका उपयोग पहचान पूल तक पहुँचने के लिए किया गया है (यह न भूलें कि अन्य प्रकार के पहचान प्रदाताओं को भी कॉन्फ़िगर किया जा सकत है)।
<pre class="language-bash"><code class="lang-bash">aws cognito-identity get-id \
--identity-pool-id &#x3C;identity_pool_id> \
--logins cognito-idp.&#x3C;region>.amazonaws.com/&#x3C;YOUR_USER_POOL_ID>=&#x3C;ID_TOKEN>
--identity-pool-id <identity_pool_id> \
--logins cognito-idp.<region>.amazonaws.com/<YOUR_USER_POOL_ID>=<ID_TOKEN>
# पिछले कमांड प्रतिक्रिया से identity_id प्राप्त करें
aws cognito-identity get-credentials-for-identity \
--identity-id &#x3C;identity_id> \
--logins cognito-idp.&#x3C;region>.amazonaws.com/&#x3C;YOUR_USER_POOL_ID>=&#x3C;ID_TOKEN>
--identity-id <identity_id> \
--logins cognito-idp.<region>.amazonaws.com/<YOUR_USER_POOL_ID>=<ID_TOKEN>
# IdToken में आप देख सकते हैं कि उपयोगकर्ता को User Pool Groups के कारण कौन सी भूमिकाएँ प्राप्त है
# IdToken में आप उन भूमिकाओं को पा सकते हैं जिनका उपयोगकर्ता को User Pool Groups के कारण एक्सेस है
# विशिष्ट भूमिका के लिए क्रेडेंशियल्स प्राप्त करने के लिए --custom-role-arn का उपयोग करें
aws cognito-identity get-credentials-for-identity \
--identity-id &#x3C;identity_id> \
<strong> --custom-role-arn &#x3C;role_arn> \
</strong> --logins cognito-idp.&#x3C;region>.amazonaws.com/&#x3C;YOUR_USER_POOL_ID>=&#x3C;ID_TOKEN>
--identity-id <identity_id> \
<strong> --custom-role-arn <role_arn> \
</strong> --logins cognito-idp.<region>.amazonaws.com/<YOUR_USER_POOL_ID>=<ID_TOKEN>
</code></pre>
> [!WARNING]
> यह संभव है कि **पहचान प्रदाता के आधार पर विभिन्न IAM भूमिकाएँ कॉन्फ़िगर की जाएं** जिनमें उपयोगकर्ता लॉग इन हो रहा है या यहां तक कि **उपयोगकर्ता** (क्लेम का उपयोग करके) के आधार पर। इसलिए, यदि आपके पास एक ही या विभिन्न प्रदाताओं के माध्यम से विभिन्न उपयोगकर्ताओं तक पहुँच है, तो **लॉग इन करना और उनके सभी IAM भूमिकाओं तक पहुँच प्राप्त करना** **लायक हो सकता है**।
> यह संभव है कि **पहचान प्रदाता के आधार पर विभिन्न IAM भूमिकाएँ कॉन्फ़िगर की जाएं** जिस पर उपयोगकर्ता लॉग इन कर रहा है या यहां तक कि **उपयोगकर्ता** (क्लेम का उपयोग करके) के आधार पर। इसलिए, यदि आपके पास एक ही या विभिन्न प्रदाताओं के माध्यम से विभिन्न उपयोगकर्ताओं तक पहुँच है, तो सभी के IAM भूमिकाओं तक पहुँचने के लिए लॉग इन करना **लायक हो सकता है**।
{{#include ../../../../banners/hacktricks-training.md}}