Files
hacktricks-cloud/src/pentesting-cloud/azure-security/README.md

233 lines
18 KiB
Markdown

# Azure Pentesting
{{#include ../../banners/hacktricks-training.md}}
## Basic Information
Azure और Entra ID के मूल बातें निम्नलिखित पृष्ठ पर जानें:
{{#ref}}
az-basic-information/
{{#endref}}
## Azure Pentester/Red Team Methodology
AZURE वातावरण का ऑडिट करने के लिए यह जानना बहुत महत्वपूर्ण है: कौन से **सेवाएँ उपयोग की जा रही हैं**, क्या **प्रदर्शित किया जा रहा है**, किसके पास **पहुँच** है, और आंतरिक Azure सेवाएँ और **बाहरी सेवाएँ** कैसे जुड़ी हुई हैं।
Red Team के दृष्टिकोण से, **Azure वातावरण को समझौता करने का पहला कदम** कुछ **foothold** प्राप्त करना है।
### External enum & Initial Access
पहला कदम निश्चित रूप से उस टेनेन्ट के बारे में जानकारी इकट्ठा करना है जिसे आप हमला कर रहे हैं और foothold प्राप्त करने की कोशिश करना है।
डोमेन नाम के आधार पर यह जानना संभव है **क्या कंपनी Azure का उपयोग कर रही है**, **टेनेन्ट ID** प्राप्त करें, उसी टेनेन्ट में अन्य **मान्य डोमेन** प्राप्त करें (यदि अधिक हैं) और **संबंधित जानकारी** प्राप्त करें जैसे कि SSO सक्षम है या नहीं, मेल कॉन्फ़िगरेशन, मान्य उपयोगकर्ता ईमेल...
**बाहरी एन्यूमरेशन** करने के लिए निम्नलिखित पृष्ठ देखें:
{{#ref}}
az-unauthenticated-enum-and-initial-entry/
{{#endref}}
इस जानकारी के साथ foothold प्राप्त करने के लिए सबसे सामान्य तरीके हैं:
- **OSINT**: GitHub या किसी अन्य ओपन-सोर्स प्लेटफॉर्म पर **leaks** की जांच करें जो **credentials** या दिलचस्प जानकारी रख सकता है।
- **Password** पुन: उपयोग, leaks या [password spraying](az-unauthenticated-enum-and-initial-entry/az-password-spraying.md)
- एक कर्मचारी से क्रेडेंशियल्स खरीदें
- [**Common Phishing**](https://book.hacktricks.wiki/en/generic-methodologies-and-resources/phishing-methodology/index.html) (क्रेडेंशियल्स या Oauth ऐप)
- [Device Code Authentication Phishing](az-unauthenticated-enum-and-initial-entry/az-device-code-authentication-phishing.md)
- 3rd पार्टी **breached**
- Azure-Hosted Applications में कमजोरियाँ
- [**Server Side Request Forgery**](https://book.hacktricks.wiki/en/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf.html) जिसमें मेटाडेटा एंडपॉइंट तक पहुँच है
- **Subdomain takeovers** जैसे [https://godiego.co/posts/STO-Azure/](https://godiego.co/posts/STO-Azure/)
- **अन्य Azure सेवाओं की गलत कॉन्फ़िगरेशन**
- यदि किसी डेवलपर का लैपटॉप समझौता किया गया है ([WinPEAS और LinPEAS](https://github.com/peass-ng/PEASS-ng) इस जानकारी को खोज सकते हैं):
- **`<HOME>/.Azure`** के अंदर
- **`azureProfile.json`** पिछले लॉगिन उपयोगकर्ताओं के बारे में जानकारी रखता है
- **`clouds.config contains`** सब्सक्रिप्शन के बारे में जानकारी रखता है
- **`service_principal_entries.json`** एप्लिकेशन क्रेडेंशियल्स (टेनेन्ट आईडी, क्लाइंट और सीक्रेट) रखता है। केवल Linux और macOS में
- **`msal_token_cache.json`** में एक्सेस टोकन और रिफ्रेश टोकन होते हैं। केवल Linux और macOS में
- **`service_principal_entries.bin`** और msal_token_cache.bin Windows में उपयोग होते हैं और DPAPI के साथ एन्क्रिप्टेड होते हैं
- **`msal_http_cache.bin`** HTTP अनुरोध का कैश है
- इसे लोड करें: `with open("msal_http_cache.bin", 'rb') as f: pickle.load(f)`
- **`AzureRmContext.json`** पिछले लॉगिन के बारे में जानकारी रखता है जो Az PowerShell का उपयोग करके किया गया था (लेकिन कोई क्रेडेंशियल नहीं)
- **`C:\Users\<username>\AppData\Local\Microsoft\IdentityCache\*`** के अंदर कई `.bin` फ़ाइलें हैं जिनमें **access tokens**, ID tokens और उपयोगकर्ता के DPAPI के साथ एन्क्रिप्टेड खाता जानकारी होती है।
- **`C:\Users\<username>\AppData\Local\Microsoft\TokenBroken\Cache\`** के अंदर `.tbres` फ़ाइलों में अधिक **access tokens** मिल सकते हैं, जो DPAPI के साथ एन्क्रिप्टेड बेस64 होते हैं।
- Linux और macOS में आप Az PowerShell (यदि उपयोग किया गया हो) से **access tokens, refresh tokens और id tokens** प्राप्त कर सकते हैं `pwsh -Command "Save-AzContext -Path /tmp/az-context.json"` चलाकर
- Windows में यह केवल ID टोकन उत्पन्न करता है।
- यह देखना संभव है कि क्या Az PowerShell का उपयोग Linux और macOS में किया गया था यह जांचकर कि `$HOME/.local/share/.IdentityService/` मौजूद है (हालांकि इसमें मौजूद फ़ाइलें खाली और बेकार हैं)
फुटहोल प्राप्त करने के लिए **अन्य Azure सेवाओं की गलत कॉन्फ़िगरेशन** खोजें निम्नलिखित पृष्ठ पर:
{{#ref}}
az-unauthenticated-enum-and-initial-entry/
{{#endref}}
> [!NOTE]
> याद रखें कि आमतौर पर एन्यूमरेशन का **सबसे शोर वाला** भाग **लॉगिन** होता है, न कि स्वयं एन्यूमरेशन।
### Azure & Entra ID tooling
निम्नलिखित उपकरण Entra ID टेनेन्ट और Azure वातावरण को धीरे-धीरे (पता लगाने से बचने के लिए) या स्वचालित रूप से (समय बचाने के लिए) एन्यूमरेट करने के लिए बहुत उपयोगी होंगे:
{{#ref}}
az-enumeration-tools.md
{{#endref}}
### Bypass Access Policies
<figure><img src="../../images/image (268).png" alt=""><figcaption></figcaption></figure>
उन मामलों में जहाँ आपके पास कुछ मान्य क्रेडेंशियल्स हैं लेकिन आप लॉगिन नहीं कर सकते, ये कुछ सामान्य सुरक्षा उपाय हैं जो लागू हो सकते हैं:
- **IP whitelisting** -- आपको एक मान्य IP से समझौता करना होगा
- **Geo restrictions** -- पता करें कि उपयोगकर्ता कहाँ रहता है या कंपनी के कार्यालय कहाँ हैं और उसी शहर (या कम से कम देश) से एक IP प्राप्त करें
- **Browser** -- शायद केवल कुछ OS (Windows, Linux, Mac, Android, iOS) से एक ब्राउज़र की अनुमति है। पता करें कि पीड़ित/कंपनी कौन सा OS उपयोग करती है।
- आप **Service Principal credentials** को भी समझौता करने की कोशिश कर सकते हैं क्योंकि ये आमतौर पर कम सीमित होते हैं और इसका लॉगिन कम समीक्षा किया जाता है
इसे बायपास करने के बाद, आप अपनी प्रारंभिक सेटअप पर वापस जाने में सक्षम हो सकते हैं और आपके पास अभी भी पहुँच होगी।
जांचें:
{{#ref}}
az-privilege-escalation/az-entraid-privesc/az-conditional-access-policies-mfa-bypass.md
{{#endref}}
### Whoami
> [!CAUTION]
> जानें **कैसे स्थापित करें** az cli, AzureAD और Az PowerShell [**Az - Entra ID**](az-services/az-azuread.md) अनुभाग में।
आपको जानने की आवश्यकता है कि आप **कौन हैं** (आप किस वातावरण में हैं):
{{#tabs }}
{{#tab name="az cli" }}
```bash
az account list
az account tenant list # Current tenant info
az account subscription list # Current subscription info
az ad signed-in-user show # Current signed-in user
az ad signed-in-user list-owned-objects # Get owned objects by current user
az account management-group list #Not allowed by default
```
{{#endtab }}
{{#tab name="Az" }}
```bash
# Get the information about the current context (Account, Tenant, Subscription etc.)
Get-AzContext
# List all available contexts
Get-AzContext -ListAvailable
# Enumerate subscriptions accessible by the current user
Get-AzSubscription
#Get Resource group
Get-AzResourceGroup
```
{{#endtab }}
{{#tab name="Mg" }}
```bash
#Get the current session
Get-MgContext
```
{{#endtab }}
{{#tab name="AzureAD" }}
```bash
#Get the current session state
Get-AzureADCurrentSessionInfo
#Get details of the current tenant
Get-AzureADTenantDetail
```
{{#endtab }}
{{#endtabs }}
### Entra ID Enumeration & Privesc
डिफ़ॉल्ट रूप से, किसी भी उपयोगकर्ता को **उपयोगकर्ताओं, समूहों, भूमिकाओं, सेवा प्रमुखों** जैसी चीजों को सूचीबद्ध करने के लिए **पर्याप्त अनुमतियाँ होनी चाहिए**... (चेक करें [default AzureAD permissions](az-basic-information/index.html#default-user-permissions)).\
यहाँ एक गाइड है:
{{#ref}}
az-services/az-azuread.md
{{#endref}}
**Post-Exploitation tools** की जाँच करें ताकि Entra ID में अनुमतियाँ बढ़ाने के लिए उपकरण मिल सकें जैसे **AzureHound:**
{{#ref}}
az-enumeration-tools.md#automated-post-exploitation-tools
{{#endref}}
### Azure Enumeration
एक बार जब आप जान लेते हैं कि आप कौन हैं, तो आप **Azure सेवाओं की सूची बनाना शुरू कर सकते हैं जिन तक आपकी पहुँच है**
आपको यह पता लगाना चाहिए कि आपके पास संसाधनों पर **क्या अनुमतियाँ हैं**। इसके लिए:
1. **उस संसाधन को खोजें जिसके लिए आपके पास कुछ पहुँच है**:
Az PoswerShell कमांड **`Get-AzResource`** आपको **जानकारी देता है कि आपके वर्तमान उपयोगकर्ता के पास किन संसाधनों पर दृश्यता है**
इसके अलावा, आप **वेब कंसोल** में वही जानकारी प्राप्त कर सकते हैं [https://portal.azure.com/#view/HubsExtension/BrowseAll](https://portal.azure.com/#view/HubsExtension/BrowseAll) पर जाकर या "All resources" खोजकर या निष्पादित करके:
```bash
az rest --method GET --url "https://management.azure.com/subscriptions/<subscription-id>/resources?api-version=2021-04-01"
```
2. **उन संसाधनों पर आपके पास जो अनुमतियाँ हैं, उन्हें खोजें जिन तक आपकी पहुँच है और आपके लिए निर्धारित भूमिकाएँ खोजें**:
ध्यान दें कि इस क्रिया को निष्पादित करने के लिए आपको अनुमति **`Microsoft.Authorization/roleAssignments/read`** की आवश्यकता है।
इसके अलावा, पर्याप्त अनुमतियों के साथ, भूमिका **`Get-AzRoleAssignment`** का उपयोग **सदस्यता में सभी भूमिकाओं को सूचीबद्ध करने** या एक विशिष्ट संसाधन पर अनुमति को इंगित करने के लिए किया जा सकता है जैसे:
```bash
Get-AzRoleAssignment -Scope /subscriptions/<subscription-id>/resourceGroups/Resource_Group_1/providers/Microsoft.RecoveryServices/vaults/vault-m3ww8ut4
```
यह जानकारी प्राप्त करना भी संभव है:
```bash
az rest --method GET --uri "https://management.azure.com/<Scope>/providers/Microsoft.Authorization/roleAssignments?api-version=2020-08-01-preview" | jq ".value"
```
जैसे कि:
```bash
az rest --method GET --uri "https://management.azure.com//subscriptions/<subscription-id>/resourceGroups/Resource_Group_1/providers/Microsoft.KeyVault/vaults/vault-m3ww8ut4/providers/Microsoft.Authorization/roleAssignments?api-version=2020-08-01-preview" | jq ".value"
```
एक और विकल्प है कि आप azure में आपके साथ जुड़े रोल प्राप्त करें:
```bash
az role assignment list --assignee "<email>" --all --output table
```
या निम्नलिखित चलाने पर (यदि परिणाम खाली हैं, तो इसका कारण यह हो सकता है कि आपके पास उन्हें प्राप्त करने की अनुमति नहीं है):
```bash
az rest --method GET --uri 'https://management.azure.com/subscriptions/<subscription-id>/providers/Microsoft.Authorization/roleAssignments?api-version=2022-04-01&$filter=principalId eq '<user-id>'
```
3. **आपसे जुड़े भूमिकाओं की सूक्ष्म अनुमतियों को खोजें**:
फिर, सूक्ष्म अनुमति प्राप्त करने के लिए आप **`(Get-AzRoleDefinition -Id "<RoleDefinitionId>").Actions`** चला सकते हैं।
या सीधे API को कॉल करें:
```bash
az rest --method GET --uri "https://management.azure.com//subscriptions/<subscription-id>/providers/Microsoft.Authorization/roleDefinitions/<RoleDefinitionId>?api-version=2020-08-01-preview" | jq ".properties"
```
इस अनुभाग में आप **सबसे सामान्य Azure सेवाओं के बारे में जानकारी और उन्हें कैसे सूचीबद्ध करें** पा सकते हैं:
{{#ref}}
az-services/
{{#endref}}
### विशेषाधिकार वृद्धि, पोस्ट-एक्सप्लॉइटेशन और स्थिरता
एक बार जब आप जान लेते हैं कि Azure वातावरण कैसे संरचित है और कौन सी सेवाएँ उपयोग की जा रही हैं, तो आप **विशेषाधिकार बढ़ाने, पार्श्व रूप से स्थानांतरित करने, अन्य पोस्ट-एक्सप्लॉइटेशन हमले करने और स्थिरता बनाए रखने** के तरीकों की तलाश शुरू कर सकते हैं।
इस अनुभाग में आप सबसे सामान्य Azure सेवाओं में विशेषाधिकार बढ़ाने के बारे में जानकारी पा सकते हैं:
{{#ref}}
az-privilege-escalation/
{{#endref}}
अगले में आप सबसे सामान्य Azure सेवाओं में पोस्ट-एक्सप्लॉइटेशन हमले करने के बारे में जानकारी पा सकते हैं:
{{#ref}}
az-post-exploitation/
{{#endref}}
अगले में आप सबसे सामान्य Azure सेवाओं में स्थिरता बनाए रखने के बारे में जानकारी पा सकते हैं:
{{#ref}}
az-persistence/
{{#endref}}
{{#include ../../banners/hacktricks-training.md}}