# Az - Cloud Kerberos Trust

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

**Ovaj post je sažetak** [**https://dirkjanm.io/obtaining-domain-admin-from-azure-ad-via-cloud-kerberos-trust/**](https://dirkjanm.io/obtaining-domain-admin-from-azure-ad-via-cloud-kerberos-trust/) **koji se može proveriti za dodatne informacije o napadu. Ova tehnika je takođe komentarisana u** [**https://www.youtube.com/watch?v=AFay_58QubY**](https://www.youtube.com/watch?v=AFay_58QubY)**.**

## Pregled Kerberos Trust odnosa

**Cloud Kerberos Trust (Entra ID -> AD)** -- Ova funkcija (deo Windows Hello for Business) uspostavlja jednostrano poverenje gde on-prem AD **veruje Entra ID** da izdaje Kerberos karte za AD. Aktiviranje stvara **AzureADKerberos$** računar u AD (koji se pojavljuje kao Read-Only Domain Controller) i povezani **`krbtgt_AzureAD`** nalog (sekundarni KRBTGT). Entra ID drži ključeve za ove naloge i može izdavati "delimične" Kerberos TGT-ove za AD korisnike. AD domen kontroleri će poštovati ove karte, ali sa RODC-sličnim ograničenjima: prema zadatku, **grupe sa visokim privilegijama (Domain Admins, Enterprise Admins, itd.) su *odbijene***, dok su obični korisnici dozvoljeni. Ovo sprečava Entra ID da autentifikuje domen administratore putem poverenja pod normalnim uslovima. Međutim, kao što ćemo videti, napadač sa dovoljnim Entra ID privilegijama može zloupotrebiti ovaj dizajn poverenja.

## Prebacivanje sa Entra ID na On-Prem AD

**Scenario:** Ciljna organizacija ima **Cloud Kerberos Trust** omogućen za autentifikaciju bez lozinke. Napadač je stekao **Global Administrator** privilegije u Entra ID (Azure AD) ali još uvek **ne** kontroliše on-prem AD. Napadač takođe ima pristup mreži do Domain Controller-a (putem VPN-a ili Azure VM-a u hibridnoj mreži). Koristeći cloud poverenje, napadač može iskoristiti kontrolu Azure AD da dobije **Domain Admin** nivo pristupa u AD.

**Preduslovi:**

-   **Cloud Kerberos Trust** je konfigurisan u hibridnom okruženju (indikator: `AzureADKerberos$` RODC nalog postoji u AD).

-   Napadač ima **Global Admin (ili Hybrid Identity Admin)** prava u Entra ID tenant-u (ove uloge mogu koristiti AD Connect **synchronization API** za modifikaciju Azure AD korisnika).

-   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 da se imitira bez sukoba.

**Koraci napada:**

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 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 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 cloud lozinku, Azure AD i dalje uključuje TGT_AD u PRT odgovoru.

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
```
Ovaj skript (ili ekvivalenti Impacket-a) će kontaktirati Kontroler domena i preuzeti važeći TGT za ciljni AD nalog, uključujući NTLM hash naloga ako se koristi posebna Kerberos ekstenzija. Ekstenzija **`KERB-KEY-LIST-REQ`** se automatski uključuje da zatraži od DC-a da vrati NTLM hash ciljnog naloga u enkriptovanom odgovoru. Rezultat je keš kredencijala (`full_tgt.ccache`) za ciljni nalog *ili* povučeni NTLM hash lozinke.

5.  **Imitirati cilj i unaprediti se na administratora domena:** Sada napadač efikasno **kontroliše ciljni AD nalog**. Na primer, ako je cilj bio AD Connect **MSOL nalog**, ima prava replikacije na direktorijumu. Napadač može izvršiti **DCSync** napad koristeći kredencijale tog naloga ili Kerberos TGT da izvuče hash lozinki iz AD (uključujući domen KRBTGT nalog). Na primer:
```bash
# 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 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 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

- [Obtaining Domain Admin from Azure AD via Cloud Kerberos Trust](https://dirkjanm.io/obtaining-domain-admin-from-azure-ad-via-cloud-kerberos-trust/)



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