# Azure Pentesting

{{#include ../../banners/hacktricks-training.md}}

## Osnovne informacije

Naučite osnove Azure i Entra ID na sledećoj stranici:

{{#ref}}
az-basic-information/
{{#endref}}

## Azure Pentester/Red Team metodologija

Da biste auditovali AZURE okruženje, veoma je važno znati: koje **usluge se koriste**, šta je **izloženo**, ko ima **pristup** čemu, i kako su interne Azure usluge i **eksterne usluge** povezane.

Iz perspektive Red Teama, **prvi korak za kompromitovanje Azure okruženja** je da se uspe da se dobije neki **foothold**.

### Eksterna enumeracija i inicijalni pristup

Prvi korak je, naravno, da se enumerišu informacije o tenant-u koji napadate i pokušate da dobijete foothold.

Na osnovu imena domena moguće je znati **da li kompanija koristi Azure**, dobiti **tenant ID**, dobiti druge **validne domene** u istom tenant-u (ako ih ima više) i dobiti **relevantne informacije** kao što su da li je SSO omogućeno, konfiguracije mail-a, validne korisničke email adrese...

Proverite sledeću stranicu da biste naučili kako da izvršite **eksternu enumeraciju**:

{{#ref}}
az-unauthenticated-enum-and-initial-entry/
{{#endref}}

Sa ovim informacijama, najčešći načini da pokušate da dobijete foothold su:
- **OSINT**: Proverite za **leak-ove** na Github-u ili bilo kojoj drugoj otvorenoj platformi koja bi mogla sadržati **akreditive** ili zanimljive informacije.
- **Ponovna upotreba lozinki**, leak-ovi ili [password spraying](az-unauthenticated-enum-and-initial-entry/az-password-spraying.md)
- Kupovina akreditiva od zaposlenog
- [**Uobičajeni Phishing**](https://book.hacktricks.wiki/en/generic-methodologies-and-resources/phishing-methodology/index.html) (akreditivi ili Oauth aplikacija)
- [Phishing putem Device Code Authentication](az-unauthenticated-enum-and-initial-entry/az-device-code-authentication-phishing.md)
- 3rd party **provale**
- Ranljivosti u aplikacijama hostovanim na Azure-u
- [**Server Side Request Forgery**](https://book.hacktricks.wiki/en/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf.html) sa pristupom metadata endpoint-u
- **Preuzimanje poddomena** kao u [https://godiego.co/posts/STO-Azure/](https://godiego.co/posts/STO-Azure/)
- **Druge pogrešne konfiguracije Azure usluga**
- Ako je neki laptop programera kompromitovan ([WinPEAS i LinPEAS](https://github.com/peass-ng/PEASS-ng) mogu pronaći ove informacije):
- Unutar **`<HOME>/.Azure`**
- **`azureProfile.json`** sadrži informacije o prijavljenim korisnicima iz prošlosti
- **`clouds.config` sadrži** informacije o pretplatama
- **`service_principal_entries.json`** sadrži akreditive aplikacija (tenant id, klijente i tajnu). Samo na Linux-u i macOS-u
- **`msal_token_cache.json`** sadrži pristupne tokene i tokene za osvežavanje. Samo na Linux-u i macOS-u
- **`service_principal_entries.bin`** i msal_token_cache.bin se koriste na Windows-u i su enkriptovani sa DPAPI
- **`msal_http_cache.bin`** je keš HTTP zahteva
- Učitajte: `with open("msal_http_cache.bin", 'rb') as f: pickle.load(f)`
- **`AzureRmContext.json`** sadrži informacije o prethodnim prijavama koristeći Az PowerShell (ali ne i akreditive)
- Unutar **`C:\Users\<username>\AppData\Local\Microsoft\IdentityCache\*`** se nalaze nekoliko `.bin` fajlova sa **pristupnim tokenima**, ID tokenima i informacijama o nalogu enkriptovanim sa korisnikovim DPAPI.
- Moguće je pronaći više **pristupnih tokena** u `.tbres` fajlovima unutar **`C:\Users\<username>\AppData\Local\Microsoft\TokenBroken\Cache\`** koji sadrže base64 enkriptovane sa DPAPI pristupne tokene.
- Na Linux-u i macOS-u možete dobiti **pristupne tokene, tokene za osvežavanje i id tokene** iz Az PowerShell-a (ako se koristi) pokretanjem `pwsh -Command "Save-AzContext -Path /tmp/az-context.json"`
- Na Windows-u ovo samo generiše id tokene.
- Moguće je videti da li je Az PowerShell korišćen na Linux-u i macOS-u proverom da li `$HOME/.local/share/.IdentityService/` postoji (iako su sadržani fajlovi prazni i beskorisni)

Pronađite **druge pogrešne konfiguracije Azure usluga** koje mogu dovesti do foothold-a na sledećoj stranici:

{{#ref}}
az-unauthenticated-enum-and-initial-entry/
{{#endref}}

> [!NOTE]
> Zapamtite da je obično **najbučniji** deo enumeracije **prijava**, a ne sama enumeracija.

### Azure & Entra ID alati

Sledeći alati će biti veoma korisni za enumeraciju i Entra ID tenant-a i Azure okruženja polako (da izbegnete detekciju) ili automatski (da uštedite vreme):

{{#ref}}
az-enumeration-tools.md
{{#endref}}

### Obilaženje pristupnih politika

<figure><img src="../../images/image (268).png" alt=""><figcaption></figcaption></figure>

U slučajevima kada imate neke validne akreditive, ali ne možete da se prijavite, ovo su neke uobičajene zaštite koje bi mogle biti na snazi:

- **IP whitelisting** -- Morate kompromitovati validan IP
- **Geo restrikcije** -- Pronađite gde korisnik živi ili gde su kancelarije kompanije i dobijete IP iz istog grada (ili barem iz iste zemlje)
- **Pregledač** -- Možda je dozvoljen samo pregledač iz određenog OS-a (Windows, Linux, Mac, Android, iOS). Saznajte koji OS koristi žrtva/kompanija.
- Takođe možete pokušati da **kompromitujete akreditive Service Principal-a** jer su obično manje ograničeni i njihova prijava se manje proverava

Nakon obilaženja, možda ćete moći da se vratite na svoju inicijalnu postavku i i dalje ćete imati pristup.

Proverite:

{{#ref}}
az-privilege-escalation/az-entraid-privesc/az-conditional-access-policies-mfa-bypass.md
{{#endref}}

### Ko sam ja

> [!CAUTION]
> Naučite **kako da instalirate** az cli, AzureAD i Az PowerShell u [**Az - Entra ID**](az-services/az-azuread.md) sekciji.

Jedna od prvih stvari koje treba da znate je **ko ste vi** (u kojem okruženju se nalazite):

{{#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 Enumeracija & Privesc

Po defaultu, svaki korisnik bi trebao imati **dovoljno dozvola da enumeriše** stvari kao što su korisnici, grupe, uloge, servisni principi... (proverite [default AzureAD permissions](az-basic-information/index.html#default-user-permissions)).\
Ovde možete pronaći vodič:

{{#ref}}
az-services/az-azuread.md
{{#endref}}

Proverite **Post-Exploitation alate** da pronađete alate za eskalaciju privilegija u Entra ID kao što je **AzureHound:**

{{#ref}}
az-enumeration-tools.md#automated-post-exploitation-tools
{{#endref}}


### Azure Enumeracija

Kada znate ko ste, možete početi da enumerišete **Azure usluge kojima imate pristup**.

Trebalo bi da počnete da otkrivate **dozvole koje imate** nad resursima. Za to:

1. **Pronađite resurs kojem imate pristup**:

> [!TIP]
> Ovo ne zahteva nikakve posebne dozvole.

Az PowerShell komanda **`Get-AzResource`** vam omogućava da **saznate resurse koje vaš trenutni korisnik može da vidi**.

Pored toga, možete dobiti iste informacije u **web konzoli** odlaskom na [https://portal.azure.com/#view/HubsExtension/BrowseAll](https://portal.azure.com/#view/HubsExtension/BrowseAll) ili pretražujući "Svi resursi" ili izvršavajući:
```bash
az rest --method GET --url "https://management.azure.com/subscriptions/<subscription-id>/resources?api-version=2021-04-01"
```
2. **Pronađite dozvole koje imate nad resursima koje možete videti**:

> [!TIP]
> Ovo ne zahteva nikakve posebne dozvole.

Razgovarajući sa API **`https://management.azure.com/{resource_id}/providers/Microsoft.Authorization/permissions?api-version=2022-04-01`**, možete dobiti dozvole koje imate nad specificiranim resursom u **`resource_id`**.

Dakle, **proveravajući svaki od resursa kojima imate pristup**, možete dobiti dozvole koje imate nad njima.

> [!WARNING]
> Možete automatizovati ovu enumeraciju koristeći alat **[Find_My_Az_Management_Permissions](https://github.com/carlospolop/Find_My_Az_Management_Permissions)**.


<details>
<summary>Enumerišite dozvole sa **`Microsoft.Authorization/roleAssignments/read`**</summary>

> [!TIP]
> Imajte na umu da vam je potrebna dozvola **`Microsoft.Authorization/roleAssignments/read`** da biste izvršili ovu akciju.

- Sa dovoljno dozvola, uloga **`Get-AzRoleAssignment`** može se koristiti za **enumeraciju svih uloga** u pretplati ili dozvolu nad specifičnim resursom, označavajući ga kao:
```bash
Get-AzRoleAssignment -Scope /subscriptions/<subscription-id>/resourceGroups/Resource_Group_1/providers/Microsoft.RecoveryServices/vaults/vault-m3ww8ut4
```
Takođe je moguće dobiti ove informacije pokretanjem:
```bash
az rest --method GET --uri "https://management.azure.com/<Scope>/providers/Microsoft.Authorization/roleAssignments?api-version=2022-04-01" | jq ".value"
```
kao u:
```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=2022-04-01" | jq ".value"
```
- Druga opcija je da **dobijete uloge koje su vam dodeljene u azure**. Ovo takođe zahteva dozvolu **`Microsoft.Authorization/roleAssignments/read`**:
```bash
az role assignment list --assignee "<email>" --all --output table
```
Ili pokretanje sledećeg (Ako su rezultati prazni, to može biti zato što nemate dozvolu da ih dobijete):
```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>'
```
- **Pronađite granularne dozvole uloga koje su vam dodeljene**:

Zatim, da biste dobili granularne dozvole, možete pokrenuti **`(Get-AzRoleDefinition -Id "<RoleDefinitionId>").Actions`**.

Ili pozovite API direktno sa
```bash
az rest --method GET --uri "https://management.azure.com//subscriptions/<subscription-id>/providers/Microsoft.Authorization/roleDefinitions/<RoleDefinitionId>?api-version=2022-04-01" | jq ".properties"
```
</details>

U sledećem odeljku možete pronaći **informacije o najčešćim Azure uslugama i kako ih enumerisati**:

{{#ref}}
az-services/
{{#endref}}

### Eskalacija privilegija, post-eksploatacija i postojanost

Kada znate kako je Azure okruženje strukturirano i koje se usluge koriste, možete početi da tražite načine za **eskalaciju privilegija, lateralno kretanje, izvođenje drugih napada posle eksploatacije i održavanje postojanosti**.

U sledećem odeljku možete pronaći informacije o tome kako eskalirati privilegije u najčešćim Azure uslugama:

{{#ref}}
az-privilege-escalation/
{{#endref}}

U sledećem možete pronaći informacije o tome kako izvesti napade posle eksploatacije u najčešćim Azure uslugama:

{{#ref}}
az-post-exploitation/
{{#endref}}

U sledećem možete pronaći informacije o tome kako održati postojanost u najčešćim Azure uslugama:

{{#ref}}
az-persistence/
{{#endref}}

{{#include ../../banners/hacktricks-training.md}}
