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
- Kupovina akreditiva od zaposlenog
- Uobičajeni Phishing (akreditivi ili Oauth aplikacija)
- Phishing putem Device Code Authentication
- 3rd party provale
- Ranljivosti u aplikacijama hostovanim na Azure-u
- Server Side Request Forgery sa pristupom metadata endpoint-u
- Preuzimanje poddomena kao u https://godiego.co/posts/STO-Azure/
- Druge pogrešne konfiguracije Azure usluga
- Ako je neki laptop programera kompromitovan (WinPEAS i LinPEAS mogu pronaći ove informacije):
- Unutar
<HOME>/.Azure azureProfile.jsonsadrži informacije o prijavljenim korisnicima iz prošlosticlouds.configsadrži informacije o pretplatamaservice_principal_entries.jsonsadrži akreditive aplikacija (tenant id, klijente i tajnu). Samo na Linux-u i macOS-umsal_token_cache.jsonsadrži pristupne tokene i tokene za osvežavanje. Samo na Linux-u i macOS-uservice_principal_entries.bini msal_token_cache.bin se koriste na Windows-u i su enkriptovani sa DPAPImsal_http_cache.binje keš HTTP zahteva- Učitajte:
with open("msal_http_cache.bin", 'rb') as f: pickle.load(f) AzureRmContext.jsonsadrži informacije o prethodnim prijavama koristeći Az PowerShell (ali ne i akreditive)- Unutar
C:\Users\<username>\AppData\Local\Microsoft\IdentityCache\*se nalaze nekoliko.binfajlova sa pristupnim tokenima, ID tokenima i informacijama o nalogu enkriptovanim sa korisnikovim DPAPI. - Moguće je pronaći više pristupnih tokena u
.tbresfajlovima unutarC:\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

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 sekciji.
Jedna od prvih stvari koje treba da znate je ko ste vi (u kojem okruženju se nalazite):
{{#tabs }} {{#tab name="az cli" }}
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" }}
# 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" }}
#Get the current session
Get-MgContext
{{#endtab }}
{{#tab name="AzureAD" }}
#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).
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:
- 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 ili pretražujući "Svi resursi" ili izvršavajući:
az rest --method GET --url "https://management.azure.com/subscriptions/<subscription-id>/resources?api-version=2021-04-01"
- 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.
Enumerišite dozvole sa **`Microsoft.Authorization/roleAssignments/read`**
Tip
Imajte na umu da vam je potrebna dozvola
Microsoft.Authorization/roleAssignments/readda biste izvršili ovu akciju.
- Sa dovoljno dozvola, uloga
Get-AzRoleAssignmentmože se koristiti za enumeraciju svih uloga u pretplati ili dozvolu nad specifičnim resursom, označavajući ga kao:
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:
az rest --method GET --uri "https://management.azure.com/<Scope>/providers/Microsoft.Authorization/roleAssignments?api-version=2022-04-01" | jq ".value"
kao u:
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:
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):
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
az rest --method GET --uri "https://management.azure.com//subscriptions/<subscription-id>/providers/Microsoft.Authorization/roleDefinitions/<RoleDefinitionId>?api-version=2022-04-01" | jq ".properties"
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}}