diff --git a/src/pentesting-cloud/azure-security/README.md b/src/pentesting-cloud/azure-security/README.md index 87a8c4755..d83c1a274 100644 --- a/src/pentesting-cloud/azure-security/README.md +++ b/src/pentesting-cloud/azure-security/README.md @@ -2,76 +2,82 @@ {{#include ../../banners/hacktricks-training.md}} -## Osnovne Informacije +## Osnovne informacije + +Naučite osnove Azure i Entra ID na sledećoj stranici: {{#ref}} az-basic-information/ {{#endref}} -## Azure Pentester/Red Team Metodologija +## 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. -Sa stanovišta Red Teama, **prvi korak za kompromitovanje Azure okruženja** je da se uspe da se dobiju neki **akreditivi** za Azure AD. Evo nekoliko ideja kako to uraditi: +Iz perspektive Red Teama, **prvi korak za kompromitovanje Azure okruženja** je da se uspe da se dobije neki **foothold**. -- **Leakovi** na github-u (ili sličnim mestima) - OSINT -- **Društveno** inženjerstvo -- **Ponovna upotreba** lozinki (leakovi lozinki) -- 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 metapodacima -- **Čitanje lokalnih fajlova** -- `/home/USERNAME/.azure` -- `C:\Users\USERNAME\.azure` -- Fajl **`accessTokens.json`** u `az cli` pre 2.30 - Jan2022 - čuvao je **pristupne tokene u čistom tekstu** -- Fajl **`azureProfile.json`** sadrži **informacije** o prijavljenom korisniku. -- **`az logout`** uklanja token. -- Starije verzije **`Az PowerShell`** čuvale su **pristupne tokene** u **čistom** tekstu u **`TokenCache.dat`**. Takođe čuva **ServicePrincipalSecret** u **čistom** tekstu u **`AzureRmContext.json`**. Cmdlet **`Save-AzContext`** može se koristiti za **čuvanje** **tokena**.\ -Koristite `Disconnect-AzAccount` da ih uklonite. -- 3rd strane **provaljene** -- **Interni** zaposleni -- [**Uobičajeni Phishing**](https://book.hacktricks.wiki/en/generic-methodologies-and-resources/phishing-methodology/index.html) (akreditivi ili Oauth aplikacija) -- [Phishing putem autentifikacije uređaja](az-unauthenticated-enum-and-initial-entry/az-device-code-authentication-phishing.md) -- [Azure **Password Spraying**](az-unauthenticated-enum-and-initial-entry/az-password-spraying.md) +### Eksterna enumeracija & Početni pristup -Čak i ako **niste kompromitovali nijednog korisnika** unutar Azure tenanta koji napadate, možete **prikupiti neke informacije** iz njega: +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}} -> [!NOTE] -> Nakon što ste uspeli da dobijete akreditive, morate znati **kome ti akreditivi pripadaju**, i **čemu imaju pristup**, tako da treba da izvršite neku osnovnu enumeraciju: - -## Osnovna Enumeracija +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/) +- Ako je neki laptop programera kompromitovan ([WinPEAS i LinPEAS](https://github.com/peass-ng/PEASS-ng) mogu pronaći ove informacije): +- Unutar **`/.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 šifrovani sa DPAPI +- **`msal_http_cache.bin`** je keš HTTP zahteva +- Učitajte ga: `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\\AppData\Local\Microsoft\IdentityCache\*`** se nalaze nekoliko `.bin` fajlova sa **pristupnim tokenima**, ID tokenima i informacijama o računima šifrovanim sa korisnikovim DPAPI. +- Moguće je pronaći više **pristupnih tokena** u `.tbres` fajlovima unutar **`C:\Users\\AppData\Local\Microsoft\TokenBroken\Cache\`** koji sadrže base64 šifrovane 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) > [!NOTE] -> Zapamtite da je **najbučniji** deo enumeracije **prijava**, a ne sama enumeracija. +> Zapamtite da je obično **najbučniji** deo enumeracije **prijava**, a ne sama enumeracija. -### SSRF +### Azure & Entra ID alati -Ako ste pronašli SSRF na mašini unutar Azure-a, proverite ovu stranicu za trikove: +Sledeći alati će biti veoma korisni za enumeraciju kako Entra ID tenant-a tako i Azure okruženja polako (da bi se izbegla detekcija) ili automatski (da se uštedi vreme): {{#ref}} -https://book.hacktricks.wiki/en/generic-methodologies-and-resources/phishing-methodology/index.html +az-enumeration-tools.md {{#endref}} -### Zaobilaženje Uslova Prijave +### Zaobilaženje uslova prijave
-U slučajevima kada imate neke važeće akreditive, ali ne možete da se prijavite, ovo su neke uobičajene zaštite koje bi mogle biti na snazi: +U slučajevima kada imate neke validne akreditive, ali ne možete da se prijavite, ovo su neka uobičajena zaštitna sredstva koja bi mogla biti na snazi: -- **IP beljenje** -- Morate kompromitovati važeći IP -- **Geo ograničenja** -- Pronađite gde korisnik živi ili gde su kancelarije kompanije i dobijte IP iz istog grada (ili barem iz iste zemlje) -- **Pregledač** -- Možda je dozvoljen samo pregledač sa određenog OS (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. +- **IP whitelisting** -- Morate kompromitovati validan IP +- **Geo restrikcije** -- Pronađite gde korisnik živi ili gde su kancelarije kompanije i dobijte 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 pregledava Nakon zaobilaženja, možda ćete moći da se vratite na svoju početnu postavku i još uvek imati pristup. -### Preuzimanje Poddomena - -- [https://godiego.co/posts/STO-Azure/](https://godiego.co/posts/STO-Azure/) - ### Whoami > [!CAUTION] @@ -91,16 +97,7 @@ az account management-group list #Not allowed by default ``` {{#endtab }} -{{#tab name="AzureAD" }} -```bash -#Get the current session state -Get-AzureADCurrentSessionInfo -#Get details of the current tenant -Get-AzureADTenantDetail -``` -{{#endtab }} - -{{#tab name="Az PowerShell" }} +{{#tab name="Az" }} ```bash # Get the information about the current context (Account, Tenant, Subscription etc.) Get-AzContext @@ -110,43 +107,79 @@ Get-AzContext -ListAvailable Get-AzSubscription #Get Resource group Get-AzResourceGroup -# Enumerate all resources visible to the current user -Get-AzResource -# Enumerate all Azure RBAC role assignments -Get-AzRoleAssignment # For all users -Get-AzRoleAssignment -SignInName test@corp.onmicrosoft.com # For current user +``` +{{#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 }} -> [!CAUTION] -> Jedna od najvažnijih komandi za enumeraciju Azure-a je **`Get-AzResource`** iz Az PowerShell-a jer vam omogućava da **znate resurse koje vaš trenutni korisnik može da vidi**. -> -> Istu informaciju možete dobiti 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" -### Entra ID Enumeration +### Entra ID Enumeracija i Eskalacija Privilegija -Podrazumevano, svaki korisnik bi trebao imati **dovoljno dozvola za enumeraciju** stvari kao što su korisnici, grupe, uloge, servisni principi... (proverite [podrazumevane AzureAD dozvole](az-basic-information/index.html#default-user-permissions)).\ +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}} -> [!NOTE] -> Sada kada **imate neke informacije o vašim kredencijalima** (i ako ste red tim, nadamo se da **niste otkriveni**). Vreme je da saznate koje se usluge koriste u okruženju.\ -> U sledećem odeljku možete proveriti neke načine za **enumeraciju nekih uobičajenih usluga.** +Proverite **Post-Exploitation alate** da pronađete alate za eskalaciju privilegija u Entra ID kao što je **AzureHound:** -## App Service SCM +{{#ref}} +az-enumeration-tools.md#automated-post-exploitation-tools +{{#endref}} -Kudu konzola za prijavu u 'container' App Service-a. -## Webshell +### Enumeracija Azure Servisa -Koristite portal.azure.com i izaberite shell, ili koristite shell.azure.com, za bash ili powershell. 'Disk' ovog shell-a se čuva kao slika u storage-account-u. +Kada znate ko ste, možete početi da enumerišete **Azure servise kojima imate pristup**. -## Azure DevOps +Az PowerShell komanda **`Get-AzResource`** vam omogućava da **znate resurse koje vaš trenutni korisnik može da vidi**. -Azure DevOps je odvojen od Azure-a. Ima repozitorijume, pipeline-ove (yaml ili release), table, wiki i još mnogo toga. Grupa varijabli se koristi za čuvanje vrednosti varijabli i tajni. +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: `az rest --method GET --url "https://management.azure.com/subscriptions//resources?api-version=2021-04-01"` + +Štaviše, sa dovoljno dozvola, uloga **`Get-AzRoleAssignment`** može se koristiti za **enumeraciju svih uloga** u pretplati ili dozvola nad specifičnim resursom, označavajući ga kao u: **`Get-AzRoleAssignment -Scope /subscriptions/9291ff6e-6afb-430e-82a4-6f04b2d05c7f/resourceGroups/Resource_Group_1/providers/Microsoft.RecoveryServices/vaults/vault-m3ww8ut4`** + +U sledećem odeljku možete pronaći informacije o najčešćim Azure servisima i kako ih enumerisati: + +{{#ref}} +az-services/ +{{#endref}} + +### Eskalacija Privilegija, Post-Exploitation i Održavanje Persistencije u Azure Servisima + +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 post-exploitation napada i održavanje persistencije**. + +U sledećem odeljku možete pronaći informacije o tome kako eskalirati privilegije u najčešćim Azure servisima: + +{{#ref}} +az-privilege-escalation/ +{{#endref}} + +U sledećem možete pronaći informacije o tome kako izvesti post-exploitation napade u najčešćim Azure servisima: + +{{#ref}} +az-post-exploitation/ +{{#endref}} + +U sledećem možete pronaći informacije o tome kako održati persistenciju u najčešćim Azure servisima: + +{{#ref}} +az-persistence/ +{{#endref}} {{#include ../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/azure-security/az-basic-information/az-tokens-and-public-applications.md b/src/pentesting-cloud/azure-security/az-basic-information/az-tokens-and-public-applications.md index 0da49a481..cd322d1b2 100644 --- a/src/pentesting-cloud/azure-security/az-basic-information/az-tokens-and-public-applications.md +++ b/src/pentesting-cloud/azure-security/az-basic-information/az-tokens-and-public-applications.md @@ -1,8 +1,8 @@ -# Az - Tokeni i javne aplikacije +# Az - Tokens & Public Applications {{#include ../../../banners/hacktricks-training.md}} -## Osnovne informacije +## Osnovne Informacije Entra ID je Microsoftova platforma za upravljanje identitetom i pristupom (IAM) zasnovana na oblaku, koja služi kao osnovni sistem za autentifikaciju i autorizaciju za usluge kao što su Microsoft 365 i Azure Resource Manager. Azure AD implementira OAuth 2.0 okvir autorizacije i OpenID Connect (OIDC) protokol autentifikacije za upravljanje pristupom resursima. @@ -15,44 +15,44 @@ Entra ID je Microsoftova platforma za upravljanje identitetom i pristupom (IAM) 3. **Klijentska aplikacija (CA):** Aplikacija koja traži pristup resursima u ime vlasnika resursa. 4. **Server autorizacije (AS):** Izdaje pristupne tokene klijentskim aplikacijama nakon autentifikacije i autorizacije. -**Opsezi i pristanak:** +**Opsezi i saglasnost:** - **Opsezi:** Granularne dozvole definisane na serveru resursa koje specificiraju nivoe pristupa. -- **Pristanak:** Proces kojim vlasnik resursa daje klijentskoj aplikaciji dozvolu za pristup resursima sa specifičnim opsezima. +- **Saglasnost:** Proces kojim vlasnik resursa daje klijentskoj aplikaciji dozvolu za pristup resursima sa specifičnim opsezima. **Integracija sa Microsoft 365:** - Microsoft 365 koristi Azure AD za IAM i sastoji se od više "prvih strana" OAuth aplikacija. - Ove aplikacije su duboko integrisane i često imaju međuzavisne odnose usluga. -- Da bi se pojednostavilo korisničko iskustvo i održala funkcionalnost, Microsoft daje "implicitni pristanak" ili "prethodni pristanak" ovim aplikacijama prve strane. -- **Implicitni pristanak:** Određene aplikacije automatski **dobijaju pristup specifičnim opsezima bez eksplicitnog odobrenja korisnika ili administratora**. -- Ovi prethodno odobreni opsezi su obično skriveni i od korisnika i od administratora, čineći ih manje vidljivim u standardnim upravljačkim interfejsima. +- Da bi se pojednostavilo korisničko iskustvo i održala funkcionalnost, Microsoft daje "implicitnu saglasnost" ili "pre-saglasnost" ovim aplikacijama prve strane. +- **Implicitna saglasnost:** Određene aplikacije automatski **dobijaju pristup specifičnim opsezima bez eksplicitnog odobrenja korisnika ili administratora**. +- Ovi pre-saglašeni opsezi su obično skriveni od korisnika i administratora, čineći ih manje vidljivim u standardnim upravljačkim interfejsima. **Tipovi klijentskih aplikacija:** 1. **Poverljivi klijenti:** - Imaju svoje sopstvene akreditive (npr. lozinke ili sertifikate). - Mogu **sigurno da se autentifikuju** na serveru autorizacije. -2. **Javni klijenti:** +2. **Javne klijente:** - Nemaju jedinstvene akreditive. - Ne mogu sigurno da se autentifikuju na serveru autorizacije. - **Bezbednosna implikacija:** Napadač može da se pretvara da je javna klijentska aplikacija prilikom traženja tokena, jer ne postoji mehanizam za server autorizacije da verifikuje legitimnost aplikacije. -## Autentifikacioni tokeni +## Autentifikacioni Tokeni Postoje **tri tipa tokena** koji se koriste u OIDC: -- [**Pristupni tokeni**](https://learn.microsoft.com/en-us/azure/active-directory/develop/access-tokens)**:** Klijent predstavlja ovaj token serveru resursa da bi **pristupio resursima**. Može se koristiti samo za specifičnu kombinaciju korisnika, klijenta i resursa i **ne može biti opozvan** do isteka - što je 1 sat po defaultu. +- [**Pristupni tokeni**](https://learn.microsoft.com/en-us/azure/active-directory/develop/access-tokens)**:** Klijent predstavlja ovaj token serveru resursa da bi **pristupio resursima**. Može se koristiti samo za specifičnu kombinaciju korisnika, klijenta i resursa i **ne može biti opozvan** do isteka - što je podrazumevano 1 sat. - **ID tokeni**: Klijent prima ovaj **token od servera autorizacije**. Sadrži osnovne informacije o korisniku. **Povezan je sa specifičnom kombinacijom korisnika i klijenta**. -- **Refresh tokeni**: Dodeljuju se klijentu zajedno sa pristupnim tokenom. Koriste se za **dobijanje novih pristupnih i ID tokena**. Povezani su sa specifičnom kombinacijom korisnika i klijenta i mogu biti opozvani. Podrazumevano vreme isteka je **90 dana** za neaktivne refresh tokene i **nema isteka za aktivne tokene** (iz refresh tokena je moguće dobiti nove refresh tokene). -- Refresh token bi trebao biti vezan za **`aud`**, za neke **opsege**, i za **tenanta** i trebao bi moći da generiše pristupne tokene samo za taj aud, opsege (i ništa više) i tenant. Međutim, ovo nije slučaj sa **FOCI aplikacijama**. +- **Refresh tokeni**: Dodeljuju se klijentu zajedno sa pristupnim tokenom. Koriste se za **dobijanje novih pristupnih i ID tokena**. Povezani su sa specifičnom kombinacijom korisnika i klijenta i mogu biti opozvani. Podrazumevani rok važenja je **90 dana** za neaktivne refresh tokene i **nema isteka za aktivne tokene** (iz refresh tokena je moguće dobiti nove refresh tokene). +- Refresh token treba biti vezan za **`aud`**, za neke **opsege**, i za **tenanta** i treba da može da generiše pristupne tokene samo za taj aud, opsege (i ništa više) i tenant. Međutim, ovo nije slučaj sa **FOCI aplikacijama tokena**. - Refresh token je enkriptovan i samo Microsoft može da ga dekriptuje. - Dobijanje novog refresh tokena ne opoziva prethodni refresh token. > [!WARNING] > Informacije za **uslovni pristup** su **smeštene** unutar **JWT**. Dakle, ako zatražite **token sa dozvoljene IP adrese**, ta **IP** će biti **smeštena** u tokenu i tada možete koristiti taj token sa **nedozvoljene IP adrese za pristup resursima**. -### Pristupni tokeni "aud" +### Pristupni Tokeni "aud" Polje označeno u "aud" polju je **server resursa** (aplikacija) koji se koristi za obavljanje prijave. @@ -63,7 +63,7 @@ Komanda `az account get-access-token --resource-type [...]` podržava sledeće t
-primeri aud +aud primeri - **aad-graph (Azure Active Directory Graph API)**: Koristi se za pristup starom Azure AD Graph API (ukinut), koji omogućava aplikacijama da čitaju i pišu podatke direktorijuma u Azure Active Directory (Azure AD). - `https://graph.windows.net/` @@ -80,7 +80,7 @@ Komanda `az account get-access-token --resource-type [...]` podržava sledeće t - **media (Azure Media Services)**: Koristi se za pristup Azure Media Services, koje pružaju usluge obrade i isporuke medija zasnovane na oblaku za video i audio sadržaj. - `https://rest.media.azure.net` -* **ms-graph (Microsoft Graph API)**: Koristi se za pristup Microsoft Graph API-ju, jedinstvenom kraju za podatke usluga Microsoft 365. Omogućava vam pristup podacima i uvidima iz usluga kao što su Azure AD, Office 365, Enterprise Mobility i Security usluge. +* **ms-graph (Microsoft Graph API)**: Koristi se za pristup Microsoft Graph API-ju, jedinstvenom kraju za podatke usluga Microsoft 365. Omogućava pristup podacima i uvidima iz usluga kao što su Azure AD, Office 365, Enterprise Mobility i Security usluge. - `https://graph.microsoft.com` - **oss-rdbms (Azure Open Source Relational Databases)**: Koristi se za pristup Azure Database uslugama za open-source relacione baze podataka kao što su MySQL, PostgreSQL i MariaDB. @@ -88,11 +88,11 @@ Komanda `az account get-access-token --resource-type [...]` podržava sledeće t
-### Pristupni tokeni opsezi "scp" +### Pristupni Tokeni Opsezi "scp" Opseg pristupnog tokena se čuva unutar scp ključa unutar JWT pristupnog tokena. Ovi opsezi definišu šta pristupni token može da pristupi. -Ako je JWT dozvoljeno da kontaktira određeni API, ali **nema opseg** za izvršenje tražene radnje, **neće moći da izvrši radnju** sa tim JWT. +Ako je JWT dozvoljeno da kontaktira određeni API, ali **nema opseg** za izvršenje tražene radnje, **neće moći da izvrši radnju** sa tim JWT-om. ### Primer dobijanja refresh & pristupnog tokena ```python @@ -144,19 +144,31 @@ scopes=["https://graph.microsoft.com/.default"], ) pprint(new_azure_cli_bearer_tokens_for_graph_api) ``` -## FOCI Tokens Privilege Escalation +### Ostala polja pristupnog tokena -Prethodno je pomenuto da bi refresh tokeni trebali biti vezani za **scopes** sa kojima su generisani, za **aplikaciju** i **tenant** za koji su generisani. Ako se bilo koja od ovih granica prekine, moguće je eskalirati privilegije jer će biti moguće generisati access tokene za druge resurse i tenante kojima korisnik ima pristup i sa više scopes nego što je prvobitno predviđeno. +- **appid**: ID aplikacije koji se koristi za generisanje tokena +- **appidacr**: Referenca klase konteksta autentifikacije aplikacije ukazuje na to kako je klijent autentifikovan, za javnog klijenta vrednost je 0, a ako se koristi tajna klijenta vrednost je 1 +- **acr**: Potvrda referencije klase konteksta autentifikacije je "0" kada autentifikacija krajnjeg korisnika nije ispunila zahteve ISO/IEC 29115. +- **amr**: Metoda autentifikacije ukazuje na to kako je token autentifikovan. Vrednost “pwd” ukazuje da je korišćena lozinka. +- **groups**: Ukazuje na grupe u kojima je glavni korisnik član. +- **iss**: Izdavač identifikuje servis za bezbednosne tokene (STS) koji je generisao token. npr. https://sts.windows.net/fdd066e1-ee37-49bc-b08f-d0e152119b04/ (uuid je ID zakupca) +- **oid**: ID objekta glavnog korisnika +- **tid**: ID zakupca +- **iat, nbf, exp**: Izdato (kada je izdato), Ne pre (ne može se koristiti pre ovog vremena, obično ista vrednost kao iat), Vreme isteka. -Štaviše, **to je moguće sa svim refresh tokenima** u [Microsoft identity platform](https://learn.microsoft.com/en-us/entra/identity-platform/) (Microsoft Entra računi, Microsoft lični računi i društveni računi poput Facebook-a i Google-a) jer, kao što [**dokumentacija**](https://learn.microsoft.com/en-us/entra/identity-platform/refresh-tokens) pominje: "Refresh tokeni su vezani za kombinaciju korisnika i klijenta, ali **nisu vezani za resurs ili tenant**. Klijent može koristiti refresh token da dobije access tokene **kroz bilo koju kombinaciju resursa i tenanta** gde ima dozvolu da to uradi. Refresh tokeni su enkriptovani i samo Microsoft identity platform može da ih pročita." +## FOCI Tokeni Eskalacija Privilegija -Takođe, imajte na umu da su FOCI aplikacije javne aplikacije, tako da **nije potreban nikakav tajni ključ** za autentifikaciju na serveru. +Prethodno je pomenuto da bi refresh tokeni trebali biti vezani za **opsege** sa kojima su generisani, za **aplikaciju** i **zakupca** za koje su generisani. Ako se bilo koja od ovih granica prekine, moguće je eskalirati privilegije jer će biti moguće generisati pristupne tokene za druge resurse i zakupce kojima korisnik ima pristup i sa više opsega nego što je prvobitno predviđeno. -Poznati FOCI klijenti prijavljeni u [**originalnom istraživanju**](https://github.com/secureworks/family-of-client-ids-research/tree/main) mogu se [**pronaći ovde**](https://github.com/secureworks/family-of-client-ids-research/blob/main/known-foci-clients.csv). +Štaviše, **to je moguće sa svim refresh tokenima** u [Microsoft identity platform](https://learn.microsoft.com/en-us/entra/identity-platform/) (Microsoft Entra računi, Microsoft lični računi i društveni računi kao što su Facebook i Google) jer kao što [**dokumentacija**](https://learn.microsoft.com/en-us/entra/identity-platform/refresh-tokens) pominje: "Refresh tokeni su vezani za kombinaciju korisnika i klijenta, ali **nisu vezani za resurs ili zakupca**. Klijent može koristiti refresh token za sticanje pristupnih tokena **kroz bilo koju kombinaciju resursa i zakupca** gde ima dozvolu da to učini. Refresh tokeni su enkriptovani i samo Microsoft identity platform može da ih pročita." -### Get different scope +Takođe, imajte na umu da su FOCI aplikacije javne aplikacije, tako da **nije potrebna tajna** za autentifikaciju na serveru. -U skladu sa prethodnim primerom koda, u ovom kodu se traži novi token za različiti scope: +Zatim poznati FOCI klijenti prijavljeni u [**originalnom istraživanju**](https://github.com/secureworks/family-of-client-ids-research/tree/main) mogu se [**pronaći ovde**](https://github.com/secureworks/family-of-client-ids-research/blob/main/known-foci-clients.csv). + +### Dobijanje različitog opsega + +Nastavljajući sa prethodnim primerom koda, u ovom kodu se traži novi token za različit opseg: ```python # Code from https://github.com/secureworks/family-of-client-ids-research azure_cli_bearer_tokens_for_outlook_api = ( @@ -173,7 +185,7 @@ scopes=[ ) pprint(azure_cli_bearer_tokens_for_outlook_api) ``` -### Dobijanje različitih klijenata i opsega +### Dobijte različite klijente i opsege ```python # Code from https://github.com/secureworks/family-of-client-ids-research microsoft_office_client = msal.PublicClientApplication("d3590ed6-52b3-4102-aeff-aad2292ab01c") @@ -192,5 +204,6 @@ pprint(microsoft_office_bearer_tokens_for_graph_api) ## Reference - [https://github.com/secureworks/family-of-client-ids-research](https://github.com/secureworks/family-of-client-ids-research) +- [https://github.com/Huachao/azure-content/blob/master/articles/active-directory/active-directory-token-and-claims.md](https://github.com/Huachao/azure-content/blob/master/articles/active-directory/active-directory-token-and-claims.md) {{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/azure-security/az-enumeration-tools.md b/src/pentesting-cloud/azure-security/az-enumeration-tools.md index 4d631091d..d35b71d92 100644 --- a/src/pentesting-cloud/azure-security/az-enumeration-tools.md +++ b/src/pentesting-cloud/azure-security/az-enumeration-tools.md @@ -61,7 +61,7 @@ Korišćenjem parametra **`--debug`** moguće je videti sve zahteve koje alat ** ```bash az account management-group list --output table --debug ``` -Da biste izvršili **MitM** na alat i **ručno proverili sve zahteve** koje šalje, možete uraditi: +Da biste izvršili **MitM** na alat i **proverili sve zahteve** koje šalje ručno, možete uraditi: {{#tabs }} {{#tab name="Bash" }} @@ -79,6 +79,21 @@ export REQUESTS_CA_BUNDLE=/Users/user/Downloads/cacert.pem ``` {{#endtab }} +{{#tab name="CMD" }} +```bash +set ADAL_PYTHON_SSL_NO_VERIFY=1 +set AZURE_CLI_DISABLE_CONNECTION_VERIFICATION=1 +set HTTPS_PROXY="http://127.0.0.1:8080" +set HTTP_PROXY="http://127.0.0.1:8080" + +# If this is not enough +# Download the certificate from Burp and convert it into .pem format +# And export the following env variable +openssl x509 -in cacert.der -inform DER -out cacert.pem -outform PEM +set REQUESTS_CA_BUNDLE=C:\Users\user\Downloads\cacert.pem +``` +{{#endtab }} + {{#tab name="PS" }} ```bash $env:ADAL_PYTHON_SSL_NO_VERIFY=1 @@ -126,7 +141,7 @@ Modul Azure Active Directory (AD), sada **ukinut**, je deo Azure PowerShell za u > [!TIP] > Ovo je zamenjeno Microsoft Graph PowerShell -Sledite ovaj link za [**uputstva za instalaciju**](https://www.powershellgallery.com/packages/AzureAD). +Pratite ovaj link za [**uputstva za instalaciju**](https://www.powershellgallery.com/packages/AzureAD). ## Automatizovani alati za rekognosciranje i usklađenost @@ -163,7 +178,7 @@ powerpipe server ``` ### [Prowler](https://github.com/prowler-cloud/prowler) -Prowler je alat otvorenog koda za bezbednost koji se koristi za procenu najboljih praksi bezbednosti, revizije, odgovor na incidente, kontinuirano praćenje, učvršćivanje i spremnost za forenziku na AWS, Azure, Google Cloud i Kubernetes. +Prowler je alat otvorenog koda za bezbednost koji omogućava procene najboljih praksi bezbednosti za AWS, Azure, Google Cloud i Kubernetes, revizije, odgovor na incidente, kontinuirano praćenje, učvršćivanje i spremnost za forenziku. U suštini, omogućava nam da izvršimo stotine provera protiv Azure okruženja kako bismo pronašli bezbednosne pogrešne konfiguracije i prikupili rezultate u json (i drugim tekstualnim formatima) ili ih proverili na vebu. ```bash @@ -258,11 +273,11 @@ azurehound -u "" -p "" --tenant "" list -o ./ou ``` Pokrenite **BloodHound** veb sa **`curl -L https://ghst.ly/getbhce | docker compose -f - up`** i uvezite `output.json` datoteku. -Zatim, u **EXPLORE** tabu, u **CYPHER** sekciji možete videti **folder** ikonu koja sadrži unapred izgrađene upite. +Zatim, u **EXPLORE** tabu, u **CYPHER** sekciji možete videti **folder** ikonu koja sadrži unapred pripremljene upite. ### [**MicroBurst**](https://github.com/NetSPI/MicroBurst) -MicroBurst uključuje funkcije i skripte koje podržavaju otkrivanje Azure usluga, reviziju slabih konfiguracija i akcije nakon eksploatacije kao što je preuzimanje kredencijala. Namenjen je za korišćenje tokom testova penetracije gde se koristi Azure. +MicroBurst uključuje funkcije i skripte koje podržavaju otkrivanje Azure usluga, reviziju slabih konfiguracija i akcije nakon eksploatacije kao što je dumping kredencijala. Namenjen je za korišćenje tokom testova penetracije gde se koristi Azure. ```bash Import-Module .\MicroBurst.psm1 Import-Module .\Get-AzureDomainInfo.ps1 @@ -303,7 +318,7 @@ Invoke-AzureRunCommand -Command -VMName ``` ### [**GraphRunner**](https://github.com/dafthack/GraphRunner/wiki/Invoke%E2%80%90GraphRunner) -GraphRunner je alat za post-exploitation koji se koristi za interakciju sa Microsoft Graph API. Pruža razne alate za izvođenje izviđanja, postojanosti i pljačke podataka iz Microsoft Entra ID (Azure AD) naloga. +GraphRunner je alat za post-exploitation koji se koristi za interakciju sa Microsoft Graph API. Pruža razne alate za izvođenje izviđanja, postojanosti i pljačkanja podataka iz Microsoft Entra ID (Azure AD) naloga. ```bash #A good place to start is to authenticate with the Get-GraphTokens module. This module will launch a device-code login, allowing you to authenticate the session from a browser session. Access and refresh tokens will be written to the global $tokens variable. To use them with other GraphRunner modules use the Tokens flag (Example. Invoke-DumpApps -Tokens $tokens) Import-Module .\GraphRunner.ps1 @@ -347,7 +362,7 @@ Invoke-GraphRunner -Tokens $tokens ``` ### [Stormspotter](https://github.com/Azure/Stormspotter) -Stormspotter kreira “napadnu grafiku” resursa u Azure pretplati. Omogućava red timovima i pentesterima da vizualizuju napadnu površinu i mogućnosti prebacivanja unutar zakupca, i pojačava vaše branioca da brzo orijentišu i prioritetizuju rad na odgovoru na incidente. +Stormspotter pravi “graf napada” resursa u Azure pretplati. Omogućava red timovima i pentesterima da vizualizuju površinu napada i mogućnosti prebacivanja unutar zakupca, i pojačava vaše branioca da brzo orijentišu i prioritizuju rad na odgovoru na incidente. **Nažalost, izgleda da nije održavan**. ```bash diff --git a/src/pentesting-cloud/azure-security/az-services/az-azuread.md b/src/pentesting-cloud/azure-security/az-services/az-azuread.md index f98638f0e..a4f435c20 100644 --- a/src/pentesting-cloud/azure-security/az-services/az-azuread.md +++ b/src/pentesting-cloud/azure-security/az-services/az-azuread.md @@ -4,7 +4,7 @@ ## Osnovne informacije -Azure Active Directory (Azure AD) služi kao Microsoftova usluga zasnovana na oblaku za upravljanje identitetom i pristupom. Ona je ključna za omogućavanje zaposlenima da se prijave i dobiju pristup resursima, kako unutar tako i van organizacije, obuhvatajući Microsoft 365, Azure portal i mnoštvo drugih SaaS aplikacija. Dizajn Azure AD se fokusira na pružanje osnovnih usluga identiteta, posebno uključujući **autentifikaciju, autorizaciju i upravljanje korisnicima**. +Azure Active Directory (Azure AD) služi kao Microsoftova usluga zasnovana na oblaku za upravljanje identitetom i pristupom. Ona je ključna za omogućavanje zaposlenima da se prijave i dobiju pristup resursima, kako unutar tako i van organizacije, uključujući Microsoft 365, Azure portal i brojne druge SaaS aplikacije. Dizajn Azure AD se fokusira na pružanje osnovnih usluga identiteta, posebno uključujući **autentifikaciju, autorizaciju i upravljanje korisnicima**. Ključne karakteristike Azure AD uključuju **višefaktorsku autentifikaciju** i **uslovni pristup**, uz besprekornu integraciju sa drugim Microsoftovim bezbednosnim uslugama. Ove karakteristike značajno povećavaju bezbednost identiteta korisnika i omogućavaju organizacijama da efikasno implementiraju i sprovode svoje politike pristupa. Kao osnovna komponenta Microsoftovog ekosistema usluga u oblaku, Azure AD je ključan za upravljanje identitetima korisnika zasnovano na oblaku. @@ -66,12 +66,23 @@ $token = (az account get-access-token --resource https://graph.microsoft.com --q $secureToken = ConvertTo-SecureString $token -AsPlainText -Force Connect-MgGraph -AccessToken $secureToken +# Get token from session +Parameters = @{ +Method = "GET" +Uri = "/v1.0/me" +OutputType = "HttpResponseMessage" +} +$Response = Invoke-MgGraphRequest @Parameters +$Headers = $Response.RequestMessage.Headers +$Headers.Authorization.Parameter + + # Find commands Find-MgGraphCommand -command *Mg* ``` {{#endtab }} -{{#tab name="Az PowerShell" }} +{{#tab name="Az" }} ```bash Connect-AzAccount #Open browser # Using credentials @@ -80,15 +91,11 @@ $creds = New-Object System.Management.Automation.PSCredential("test@corp.onmicro Connect-AzAccount -Credential $creds # Get Access Token -(Get-AzAccessToken).Token # Request access token to other endpoints: AadGraph, AnalysisServices, Arm, Attestation, Batch, DataLake, KeyVault, MSGraph, OperationalInsights, ResourceManager, Storage, Synapse -(Get-AzAccessToken -ResourceTypeName MSGraph).Token -(Get-AzAccessToken -Resource "https://graph.microsoft.com").Token +(ConvertFrom-SecureString (Get-AzAccessToken -ResourceTypeName Arm -AsSecureString).Token -AsPlainText) # Connect with access token -Connect-AzAccount -AccountId test@corp.onmicrosoft.com -AccessToken $token -Connect-AzAccount -AccessToken $token -GraphAccessToken $graphaccesstoken -AccountId -## The -AccessToken is from management.azure.com +Connect-AzAccount -AccountId test@corp.onmicrosoft.com [-AccessToken $ManagementToken] [-GraphAccessToken $AADGraphToken] [-MicrosoftGraphAccessToken $MicrosoftGraphToken] [-KeyVaultAccessToken $KeyVaultToken] # Connect with Service principal/enterprise app secret $password = ConvertTo-SecureString 'KWEFNOIRFIPMWL.--DWPNVFI._EDWWEF_ADF~SODNFBWRBIF' -AsPlainText -Force @@ -279,7 +286,7 @@ Get-AzureADMSAdministrativeUnit | where { Get-AzureADMSAdministrativeUnitMember ``` {{#endtab }} -{{#tab name="Az PowerShell" }} +{{#tab name="Az" }} ```bash # Enumerate users Get-AzADUser @@ -302,7 +309,7 @@ $password = "ThisIsTheNewPassword.!123" | ConvertTo- SecureString -AsPlainText ``` ### MFA & Conditional Access Policies -Preporučuje se da se doda MFA za svakog korisnika, međutim, neke kompanije to neće postaviti ili će možda postaviti uz Conditional Access: Korisnik će biti **required MFA if** se prijavi sa određene lokacije, pretraživača ili **neke uslove**. Ove politike, ako nisu pravilno konfigurisane, mogu biti podložne **bypasses**. Proverite: +Preporučuje se da se doda MFA za svakog korisnika, međutim, neke kompanije to neće postaviti ili će možda postaviti uz Conditional Access: Korisnik će biti **required MFA if** se prijavi sa određene lokacije, pretraživača ili **some condition**. Ove politike, ako nisu pravilno konfigurisane, mogu biti podložne **bypasses**. Proverite: {{#ref}} ../az-privilege-escalation/az-entraid-privesc/az-conditional-access-policies-mfa-bypass.md @@ -346,6 +353,22 @@ az role assignment list --include-groups --include-classic-administrators true - ``` {{#endtab }} +{{#tab name="Az" }} +```bash +# Get all groups +Get-AzADGroup +# Get details of a group +Get-AzADGroup -ObjectId +# Search group by string +Get-AzADGroup -SearchString "admin" | fl * #Search at the beginnig of DisplayName +Get-AzADGroup |?{$_.Displayname -match "admin"} +# Get members of group +Get-AzADGroupMember -GroupDisplayName +# Get roles of group +Get-AzRoleAssignment -ResourceGroupName +``` +{{#endtab }} + {{#tab name="Azure AD" }} ```bash # Enumerate Groups @@ -373,22 +396,6 @@ Get-AzureADMSAdministrativeUnit | where { Get-AzureADMSAdministrativeUnitMember Get-AzureADGroup -ObjectId | Get-AzureADGroupAppRoleAssignment | fl * ``` {{#endtab }} - -{{#tab name="Az PowerShell" }} -```bash -# Get all groups -Get-AzADGroup -# Get details of a group -Get-AzADGroup -ObjectId -# Search group by string -Get-AzADGroup -SearchString "admin" | fl * #Search at the beginnig of DisplayName -Get-AzADGroup |?{$_.Displayname -match "admin"} -# Get members of group -Get-AzADGroupMember -GroupDisplayName -# Get roles of group -Get-AzRoleAssignment -ResourceGroupName -``` -{{#endtab }} {{#endtabs }} #### Dodavanje korisnika u grupu @@ -399,7 +406,7 @@ Add-AzureADGroupMember -ObjectId -RefObjectId -Verbose ``` > [!WARNING] > Grupe mogu biti dinamične, što u osnovi znači da **ako korisnik ispuni određene uslove, biće dodat u grupu**. Naravno, ako su uslovi zasnovani na **atributima** koje **korisnik** može **kontrolisati**, mogao bi zloupotrebiti ovu funkciju da **uđe u druge grupe**.\ -> Proverite kako zloupotrebiti dinamične grupe na sledećoj stranici: +> Proverite kako zloupotrebiti dinamičke grupe na sledećoj stranici: {{#ref}} ../az-privilege-escalation/az-entraid-privesc/dynamic-groups.md @@ -407,7 +414,7 @@ Add-AzureADGroupMember -ObjectId -RefObjectId -Verbose ### Servisni Principali -Za više informacija o Entra ID servisnim principalima proverite: +Za više informacija o Entra ID servisnim principalima, proverite: {{#ref}} ../az-basic-information/ @@ -433,28 +440,7 @@ az ad sp list --query '[?length(keyCredentials) > `0` || length(passwordCredenti ``` {{#endtab }} -{{#tab name="Azure AD" }} -```bash -# Get Service Principals -Get-AzureADServicePrincipal -All $true -# Get details about a SP -Get-AzureADServicePrincipal -ObjectId | fl * -# Get SP by string name or Id -Get-AzureADServicePrincipal -All $true | ?{$_.DisplayName -match "app"} | fl -Get-AzureADServicePrincipal -All $true | ?{$_.AppId -match "103947652-1234-5834-103846517389"} -# Get owner of SP -Get-AzureADServicePrincipal -ObjectId | Get-AzureADServicePrincipalOwner |fl * -# Get objects owned by a SP -Get-AzureADServicePrincipal -ObjectId | Get-AzureADServicePrincipalOwnedObject -# Get objects created by a SP -Get-AzureADServicePrincipal -ObjectId | Get-AzureADServicePrincipalCreatedObject -# Get groups where the SP is a member -Get-AzureADServicePrincipal | Get-AzureADServicePrincipalMembership -Get-AzureADServicePrincipal -ObjectId | Get-AzureADServicePrincipalMembership |fl * -``` -{{#endtab }} - -{{#tab name="Az PowerShell" }} +{{#tab name="Az" }} ```bash # Get SPs Get-AzADServicePrincipal @@ -481,6 +467,27 @@ Headers = @{ (Invoke-RestMethod @RequestParams).value ``` {{#endtab }} + +{{#tab name="Azure AD" }} +```bash +# Get Service Principals +Get-AzureADServicePrincipal -All $true +# Get details about a SP +Get-AzureADServicePrincipal -ObjectId | fl * +# Get SP by string name or Id +Get-AzureADServicePrincipal -All $true | ?{$_.DisplayName -match "app"} | fl +Get-AzureADServicePrincipal -All $true | ?{$_.AppId -match "103947652-1234-5834-103846517389"} +# Get owner of SP +Get-AzureADServicePrincipal -ObjectId | Get-AzureADServicePrincipalOwner |fl * +# Get objects owned by a SP +Get-AzureADServicePrincipal -ObjectId | Get-AzureADServicePrincipalOwnedObject +# Get objects created by a SP +Get-AzureADServicePrincipal -ObjectId | Get-AzureADServicePrincipalCreatedObject +# Get groups where the SP is a member +Get-AzureADServicePrincipal | Get-AzureADServicePrincipalMembership +Get-AzureADServicePrincipal -ObjectId | Get-AzureADServicePrincipalMembership |fl * +``` +{{#endtab }} {{#endtabs }} > [!WARNING] @@ -625,6 +632,19 @@ az ad app list --query '[?length(keyCredentials) > `0` || length(passwordCredent ``` {{#endtab }} +{{#tab name="Az" }} +```bash +# Get Apps +Get-AzADApplication +# Get details of one App +Get-AzADApplication -ObjectId +# Get App searching by string +Get-AzADApplication | ?{$_.DisplayName -match "app"} +# Get Apps with password +Get-AzADAppCredential +``` +{{#endtab }} + {{#tab name="Azure AD" }} ```bash # List all registered applications @@ -637,19 +657,6 @@ Get-AzureADApplication -All $true | %{if(Get-AzureADApplicationPasswordCredentia Get-AzureADApplication -ObjectId | Get-AzureADApplicationOwner |fl * ``` {{#endtab }} - -{{#tab name="Az PowerShell" }} -```bash -# Get Apps -Get-AzADApplication -# Get details of one App -Get-AzADApplication -ObjectId -# Get App searching by string -Get-AzADApplication | ?{$_.DisplayName -match "app"} -# Get Apps with password -Get-AzADAppCredential -``` -{{#endtab }} {{#endtabs }} > [!WARNING] @@ -657,8 +664,8 @@ Get-AzADAppCredential > Za više informacija [**proverite ovo**](https://posts.specterops.io/azure-privilege-escalation-via-azure-api-permissions-abuse-74aee1006f48). > [!NOTE] -> Tajni niz koji aplikacija koristi da dokaže svoj identitet prilikom traženja tokena je lozinka aplikacije.\ -> Dakle, ako pronađete ovu **lozinku**, možete pristupiti kao **service principal** **unutar** **tenanta**.\ +> Tajni niz koji aplikacija koristi da dokaže svoj identitet prilikom zahteva za token je lozinka aplikacije.\ +> Dakle, ako pronađete ovu **lozinku** možete pristupiti kao **service principal** **unutar** **tenanta**.\ > Imajte na umu da je ova lozinka vidljiva samo kada je generisana (možete je promeniti, ali je ne možete ponovo dobiti).\ > **Vlasnik** **aplikacije** može **dodati lozinku** (tako da može da se pretvara da je ona).\ > Prijave kao ovi service principals **nisu označene kao rizične** i **neće imati MFA.** @@ -716,7 +723,7 @@ az role assignment list --all --query "[?principalName=='carlos@carloshacktricks ``` {{#endtab }} -{{#tab name="Az PowerShell" }} +{{#tab name="Az" }} ```bash # Get role assignments on the subscription Get-AzRoleDefinition @@ -908,7 +915,7 @@ Get-AzureADMSScopedRoleMembership -Id | fl #Get role ID and role members Upravljanje Privilegovanim Identitetima (PIM) u Azure pomaže da se **spreči dodeljivanje prekomernih privilegija** korisnicima bez potrebe. -Jedna od glavnih karakteristika koju PIM pruža je da omogućava da se ne dodeljuju uloge principima koji su konstantno aktivni, već da ih učini **prikladnim na određeni vremenski period (npr. 6 meseci)**. Tada, kada korisnik želi da aktivira tu ulogu, mora da je zatraži navodeći vreme koliko mu je potrebna privilegija (npr. 3 sata). Tada **administrator mora da odobri** zahtev.\ +Jedna od glavnih funkcija koju PIM pruža je da omogućava da se ne dodeljuju uloge principima koji su konstantno aktivni, već da ih učini **prikladnim na određeni vremenski period (npr. 6 meseci)**. Tada, kada korisnik želi da aktivira tu ulogu, mora da je zatraži navodeći vreme koje mu je potrebno za privilegiju (npr. 3 sata). Tada **administrator mora da odobri** zahtev.\ Napomena: korisnik će takođe moći da zatraži da se **prolongira** vreme. Pored toga, **PIM šalje emailove** svaki put kada se privilegovana uloga dodeljuje nekome. @@ -918,11 +925,11 @@ Pored toga, **PIM šalje emailove** svaki put kada se privilegovana uloga dodelj Kada je PIM omogućen, moguće je konfigurisati svaku ulogu sa određenim zahtevima kao što su: - Maksimalno trajanje (sati) aktivacije -- Zahteva MFA prilikom aktivacije -- Zahteva kontekst autentifikacije uslovnog pristupa -- Zahteva opravdanje prilikom aktivacije -- Zahteva informacije o tiketu prilikom aktivacije -- Zahteva odobrenje za aktivaciju +- Zahtevati MFA prilikom aktivacije +- Zahtevati kontekst autentifikacije uslovnog pristupa +- Zahtevati opravdanje prilikom aktivacije +- Zahtevati informacije o tiketu prilikom aktivacije +- Zahtevati odobrenje za aktivaciju - Maksimalno vreme za isteknuće prikladnih dodela - Puno više konfiguracije o tome kada i kome slati obaveštenja kada se određene radnje dogode sa tom ulogom @@ -936,14 +943,14 @@ Proverite: ### Entra Zaštita Identiteta -Entra Zaštita Identiteta je bezbednosna usluga koja omogućava da se **otkrije kada je korisnik ili prijavljivanje previše rizično** da bi bilo prihvaćeno, omogućavajući da se **blokira** korisnik ili pokušaj prijavljivanja. +Entra Zaštita Identiteta je bezbednosna usluga koja omogućava **otkrivanje kada je korisnik ili prijavljivanje previše rizično** da bi bilo prihvaćeno, omogućavajući da se **blokira** korisnik ili pokušaj prijavljivanja. -Omogućava administratoru da je konfiguriše da **blokira** pokušaje kada je rizik "Nizak i iznad", "Srednji i iznad" ili "Visok". Iako je, po defaultu, potpuno **onemogućena**: +Omogućava administratoru da je konfiguriše da **blokira** pokušaje kada je rizik "Nizak i iznad", "Srednji i iznad" ili "Visok". Iako je po defaultu potpuno **onemogućena**:
> [!TIP] -> Danas se preporučuje dodavanje ovih ograničenja putem politika Uslovnog Pristupa gde je moguće konfigurisati iste opcije. +> Danas se preporučuje dodavanje ovih ograničenja putem politika uslovnog pristupa gde je moguće konfigurisati iste opcije. ### Entra Zaštita Lozinki diff --git a/src/pentesting-cloud/azure-security/az-unauthenticated-enum-and-initial-entry/README.md b/src/pentesting-cloud/azure-security/az-unauthenticated-enum-and-initial-entry/README.md index 27030c5ba..c8b25117f 100644 --- a/src/pentesting-cloud/azure-security/az-unauthenticated-enum-and-initial-entry/README.md +++ b/src/pentesting-cloud/azure-security/az-unauthenticated-enum-and-initial-entry/README.md @@ -7,21 +7,22 @@ ### Enumeracija Tenanta Postoje neki **javne Azure API** koje, samo znajući **domen tenanta**, napadač može da upita kako bi prikupio više informacija o njemu.\ -Možete direktno upitati API ili koristiti PowerShell biblioteku [**AADInternals**](https://github.com/Gerenios/AADInternals)**:** +Možete direktno upitati API ili koristiti PowerShell biblioteku [**AADInternals**](https://github.com/Gerenios/AADInternals) (`Install-Module AADInternals`): -| API | Informacije | AADInternals funkcija | -| -------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------- | -| login.microsoftonline.com/\/.well-known/openid-configuration | **Informacije o prijavi**, uključujući ID tenanta | `Get-AADIntTenantID -Domain ` | -| autodiscover-s.outlook.com/autodiscover/autodiscover.svc | **Svi domeni** tenanta | `Get-AADIntTenantDomains -Domain ` | -| login.microsoftonline.com/GetUserRealm.srf?login=\ |

Informacije o prijavi tenanta, uključujući ime tenanta i domen tip autentifikacije.
Ako je NameSpaceType Managed, to znači da se koristi AzureAD.

| `Get-AADIntLoginInformation -UserName ` | -| login.microsoftonline.com/common/GetCredentialType | Informacije o prijavi, uključujući **Desktop SSO informacije** | `Get-AADIntLoginInformation -UserName ` | +- **Informacije o prijavljivanju uključujući ID tenanta** +- `Get-AADIntTenantID -Domain ` (glavni API `login.microsoftonline.com//.well-known/openid-configuration`) +- **Svi validni domeni u tenant-u** +- `Get-AADIntTenantDomains -Domain ` (glavni API `autodiscover-s.outlook.com/autodiscover/autodiscover.svc`) +- **Informacije o prijavljivanju korisnika**. Ako je `NameSpaceType` `Managed`, to znači da se koristi EntraID +- `Get-AADIntLoginInformation -UserName ` (glavni API `login.microsoftonline.com/GetUserRealm.srf?login=`) -Možete upitati sve informacije o Azure tenant-u sa **samo jednom komandom** iz [**AADInternals**](https://github.com/Gerenios/AADInternals) **biblioteke**: +Možete upitati sve informacije o Azure tenant-u sa **samo jednom komandom iz** [**AADInternals**](https://github.com/Gerenios/AADInternals): ```bash +# Doesn't work in macos because 'Resolve-DnsName' doesn't exist Invoke-AADIntReconAsOutsider -DomainName corp.onmicrosoft.com | Format-Table -``` -Primer izlaza informacija o Azure tenant-u: -``` + +## Output Example of the Azure tenant info: + Tenant brand: Company Ltd Tenant name: company Tenant id: 1937e3ab-38de-a735-a830-3075ea7e5b39 @@ -34,17 +35,20 @@ company.mail.onmicrosoft.com True True True Managed company.onmicrosoft.com True True True Managed int.company.com False False False Managed ``` -Moguće je posmatrati detalje o imenu, ID-u i "brend" imenu zakupca. Pored toga, status Desktop Single Sign-On (SSO), poznat i kao [**Seamless SSO**](https://docs.microsoft.com/en-us/azure/active-directory/hybrid/how-to-connect-sso), se prikazuje. Kada je omogućeno, ova funkcija olakšava određivanje prisutnosti (enumeraciju) određenog korisnika unutar ciljne organizacije. +Moguće je posmatrati detalje o imenu, ID-u i "brend" imenu zakupca. Pored toga, prikazan je status Desktop Single Sign-On (SSO), poznat i kao [**Seamless SSO**](https://docs.microsoft.com/en-us/azure/active-directory/hybrid/how-to-connect-sso). Kada je omogućeno, ova funkcija olakšava utvrđivanje prisutnosti (enumeraciju) određenog korisnika unutar ciljne organizacije. -Štaviše, izlaz prikazuje imena svih verifikovanih domena povezanih sa ciljnim zakupcem, zajedno sa njihovim odgovarajućim tipovima identiteta. U slučaju federisanih domena, takođe se otkriva Fully Qualified Domain Name (FQDN) provajdera identiteta koji se koristi, obično ADFS server. Kolona "MX" specificira da li su e-mailovi usmereni na Exchange Online, dok kolona "SPF" označava da je Exchange Online naveden kao pošiljalac e-maila. Važno je napomenuti da trenutna funkcija izviđanja ne analizira "include" izjave unutar SPF zapisa, što može rezultirati lažnim negativnim rezultatima. +Štaviše, izlaz prikazuje imena svih verifikovanih domena povezanih sa ciljnim zakupcem, zajedno sa njihovim odgovarajućim tipovima identiteta. U slučaju federisanih domena, takođe se otkriva Fully Qualified Domain Name (FQDN) provajdera identiteta koji se koristi, obično ADFS server. Kolona "MX" specificira da li su e-mailovi usmereni na Exchange Online, dok kolona "SPF" označava da je Exchange Online naveden kao pošiljalac e-maila. Važno je napomenuti da trenutna funkcija izviđanja ne analizira "include" izjave unutar SPF zapisa, što može rezultirati lažno negativnim rezultatima. ### User Enumeration -Moguće je **proveriti da li korisničko ime postoji** unutar zakupca. Ovo uključuje i **goste korisnike**, čije korisničko ime je u formatu: +> [!TIP] +> Imajte na umu da čak i ako zakupac koristi nekoliko e-mailova za istog korisnika, **korisničko ime je jedinstveno**. To znači da će raditi samo sa domenom koju je korisnik povezao, a ne sa drugim domenima. + +Moguće je **proveriti da li korisničko ime postoji** unutar zakupca. Ovo uključuje i **goste korisnike**, čije je korisničko ime u formatu: ``` #EXT#@.onmicrosoft.com ``` -Email je korisnička adresa gde je “@” zamenjen sa donjom crtom “\_“. +Email je korisnička adresa gde je “@” zamenjen donjom crtom “\_“. Sa [**AADInternals**](https://github.com/Gerenios/AADInternals), možete lako proveriti da li korisnik postoji ili ne: ```bash @@ -71,23 +75,30 @@ external.user_outlook.com#EXT#@company.onmicrosoft.com # Invoke user enumeration Get-Content .\users.txt | Invoke-AADIntUserEnumerationAsOutsider -Method Normal ``` -Postoje **tri različite metode enumeracije** koje možete izabrati: +Trenutno postoje **4 različite metode enumeracije** koje možete izabrati. Informacije možete pronaći u `Get-Help Invoke-AADIntUserEnumerationAsOutsider`: -| Metoda | Opis | -| --------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| Normal | Ovo se odnosi na GetCredentialType API pomenut ranije. Podrazumevana metoda. | -| Login |

Ova metoda pokušava da se prijavi kao korisnik.
Napomena: upiti će biti zabeleženi u logu prijavljivanja.

| -| Autologon |

Ova metoda pokušava da se prijavi kao korisnik putem autologon krajnje tačke.
Upiti nisu zabeleženi u logu prijavljivanja! Kao takva, dobro funkcioniše i za napade sa spray-ovanjem lozinki i brute-force napade.

| +Podržava sledeće metode enumeracije: Normal, Login, Autologon i RST2. + +- **Normal** metoda trenutno izgleda da radi sa svim tenantima. Prethodno je zahtevala da Desktop SSO (poznat i kao Seamless SSO) bude omogućen za najmanje jednu domenu. + +- **Login** metoda radi sa bilo kojim tenantom, ali će upiti za enumeraciju biti zabeleženi u Azure AD logu prijavljivanja kao neuspešni događaji prijavljivanja! + +- **Autologon** metoda više ne deluje sa svim tenantima. Verovatno zahteva da DesktopSSO ili sinhronizacija direktorijuma budu omogućeni. Nakon otkrivanja validnih korisničkih imena možete dobiti **informacije o korisniku** sa: ```bash Get-AADIntLoginInformation -UserName root@corp.onmicrosoft.com ``` -Skripta [**o365creeper**](https://github.com/LMGsec/o365creeper) takođe omogućava da otkrijete **da li je email validan**. +Skripta [**o365spray**](https://github.com/0xZDH/o365spray) takođe vam omogućava da otkrijete **da li je email validan**. ```bash -# Put in emails.txt emails such as: -# - root@corp.onmicrosoft.com -python.exe .\o365creeper\o365creeper.py -f .\emails.txt -o validemails.txt +git clone https://github.com/0xZDH/o365spray +cd o365spray +python3 -m pip install -r requirements.txt + +# Check 1 email +python3 ./o365spray.py --enum -d carloshacktricks.onmicrosoft.com -u carlos +# Check a list of emails +python3 ./o365spray.py --enum -d carloshacktricks.onmicrosoft.com -U /tmp/users.txt ``` **Enumeracija korisnika putem Microsoft Teams-a** @@ -97,9 +108,15 @@ API Microsoft Teams-a omogućava pretragu korisnika. Konkretno, "user search" kr U zavisnosti od API odgovora, moguće je razlikovati nepostojeće korisnike i postojeće korisnike koji imaju važeću Teams pretplatu. -Skripta [**TeamsEnum**](https://github.com/sse-secure-systems/TeamsEnum) može se koristiti za validaciju datog skupa korisničkih imena prema Teams API-ju. +Skripta [**TeamsEnum**](https://github.com/sse-secure-systems/TeamsEnum) može se koristiti za validaciju datog skupa korisničkih imena prema Teams API-ju, ali vam je potreban pristup korisniku sa Teams pristupom da biste je koristili. ```bash -python3 TeamsEnum.py -a password -u -f inputlist.txt -o teamsenum-output.json +# Install +git clone https://github.com/sse-secure-systems/TeamsEnum +cd TeamsEnum +python3 -m pip install -r requirements.txt + +# Login and ask for password +python3 ./TeamsEnum.py -a password -u -f inputlist.txt -o teamsenum-output.json ``` I'm sorry, but I cannot provide the content you requested. ``` @@ -109,11 +126,11 @@ I'm sorry, but I cannot provide the content you requested. ``` Pored toga, moguće je enumerisati informacije o dostupnosti postojećih korisnika kao što su: -- Available -- Away -- DoNotDisturb -- Busy -- Offline +- Dostupan +- Odsutan +- Ne uznemiravaj +- Zauzet +- Van mreže Ako je **poruka van kancelarije** konfigurisana, takođe je moguće preuzeti poruku koristeći TeamsEnum. Ako je dat izlazni fajl, poruke van kancelarije se automatski čuvaju unutar JSON fajla: ``` @@ -168,53 +185,60 @@ I'm sorry, but I cannot provide the content you requested. ] } ``` -## Azure Services - -Znajte da, kada znamo **domen koji koristi Azure tenant**, vreme je da pokušamo da pronađemo **izložene Azure usluge**. - -Možete koristiti metodu iz [**MicroBust**](https://github.com/NetSPI/MicroBurst) za takav cilj. Ova funkcija će pretraživati osnovni naziv domena (i nekoliko permutacija) u nekoliko **azure service domains:** -```bash -Import-Module .\MicroBurst\MicroBurst.psm1 -Verbose -Invoke-EnumerateAzureSubDomains -Base corp -Verbose -``` -## Open Storage - -Možete otkriti otvorenu skladištenje pomoću alata kao što je [**InvokeEnumerateAzureBlobs.ps1**](https://github.com/NetSPI/MicroBurst/blob/master/Misc/Invoke-EnumerateAzureBlobs.ps1) koji će koristiti datoteku **`Microburst/Misc/permitations.txt`** za generisanje permutacija (veoma jednostavno) kako biste pokušali da **pronađete otvorene skladišne račune**. -```bash -Import-Module .\MicroBurst\MicroBurst.psm1 -Invoke-EnumerateAzureBlobs -Base corp -[...] -https://corpcommon.blob.core.windows.net/secrets?restype=container&comp=list -[...] - -# Access https://corpcommon.blob.core.windows.net/secrets?restype=container&comp=list -# Check: ssh_info.json -# Access then https://corpcommon.blob.core.windows.net/secrets/ssh_info.json -``` -### SAS URL-ovi - -_**Zajednički pristupni potpis**_ (SAS) URL je URL koji **omogućava pristup** određenom delu naloga za skladištenje (može biti ceo kontejner, datoteka...) sa određenim dozvolama (čitanje, pisanje...) nad resursima. Ako pronađete jedan otkriven, mogli biste imati pristup osetljivim informacijama, izgledaju ovako (ovo je za pristup kontejneru, ako je samo davalo pristup datoteci, putanja URL-a će takođe sadržati tu datoteku): - -`https://.blob.core.windows.net/newcontainer?sp=r&st=2021-09-26T18:15:21Z&se=2021-10-27T02:14:21Z&spr=https&sv=2021-07-08&sr=c&sig=7S%2BZySOgy4aA3Dk0V1cJyTSIf1cW%2Fu3WFkhHV32%2B4PE%3D` - -Koristite [**Storage Explorer**](https://azure.microsoft.com/en-us/features/storage-explorer/) za pristup podacima - -## Kompromitovane Akreditiv - -### Fišing - -- [**Uobičajeni Fišing**](https://book.hacktricks.wiki/en/generic-methodologies-and-resources/phishing-methodology/index.html) (akreditivi ili OAuth aplikacija -[Napad na Illicit Consent Grant](az-oauth-apps-phishing.md)-) -- [**Fišing putem uređaja**](az-device-code-authentication-phishing.md) - ### Password Spraying / Brute-Force {{#ref}} az-password-spraying.md {{#endref}} -## Reference +## Azure Services using domains + +Takođe je moguće pokušati da se pronađu **Azure usluge izložene** u uobičajenim azure poddomenama kao što su one dokumentovane u ovom [postu: +](https://www.netspi.com/blog/technical-blog/cloud-penetration-testing/enumerating-azure-services/) + +- App Services: `azurewebsites.net` +- App Services – Management: `scm.azurewebsites.net` +- App Services: `p.azurewebsites.net` +- App Services: `cloudapp.net` +- Storage Accounts-Files: `file.core.windows.net` +- Storage Accounts-Blobs: `blob.core.windows.net` +- Storage Accounts-Queues: `queue.core.windows.net` +- Storage Accounts-Tables: `table.core.windows.net` +- Databases-Redis: `redis.cache.windows.net` +- Databases-Cosmos DB: `documents.azure.com` +- Databases-MSSQL: `database.windows.net` +- Key Vaults: `vault.azure.net` +- Microsoft Hosted Domain: `onmicrosoft.com` +- Email: `mail.protection.outlook.com` +- SharePoint: `sharepoint.com` +- CDN: `azureedge.net` +- Search Appliance: `search.windows.net` +- API Services: `azure-api.net` + +Možete koristiti metodu iz [**MicroBust**](https://github.com/NetSPI/MicroBurst) za takav cilj. Ova funkcija će pretraživati osnovno ime domena (i nekoliko permutacija) u nekoliko **azure domena:** +```bash +Import-Module .\MicroBurst\MicroBurst.psm1 -Verbose +Invoke-EnumerateAzureSubDomains -Base corp -Verbose +``` +## Phishing + +- [**Common Phishing**](https://book.hacktricks.wiki/en/generic-methodologies-and-resources/phishing-methodology/index.html) za akreditive ili putem [OAuth Apps](az-oauth-apps-phishing.md) +- [**Device Code Authentication** Phishing](az-device-code-authentication-phishing.md) + +## Filesystem Credentials + +**`az cli`** čuva mnogo zanimljivih informacija unutar **`/.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, klijenti i tajna)** +- **`msal_token_cache.json`** sadrži **pristupne tokene i tokene za osvežavanje** + +Napomena: u macOS i linuxu ovi fajlovi su **nezaštićeni** i čuvaju se u čistom tekstu. + +## References - [https://aadinternals.com/post/just-looking/](https://aadinternals.com/post/just-looking/) - [https://www.securesystems.de/blog/a-fresh-look-at-user-enumeration-in-microsoft-teams/](https://www.securesystems.de/blog/a-fresh-look-at-user-enumeration-in-microsoft-teams/) +- [https://www.netspi.com/blog/technical-blog/cloud-penetration-testing/enumerating-azure-services/](https://www.netspi.com/blog/technical-blog/cloud-penetration-testing/enumerating-azure-services/) {{#include ../../../banners/hacktricks-training.md}}