
POC della recente vulnerabilità di brute-forcing delle password di Azure Active Directory di SecureWorks
POC della recente vulnerabilità di brute force sulle password di Azure Active Directory scoperta da SecureWorks
Questo codice è una proof-of-concept della recentemente rivelata vulnerabilità di brute force sulle password di Azure Active Directory annunciata da Secureworks (ecco l'articolo di Ars Technica pubblicato circa un giorno prima della pubblicazione ufficiale, ma sostanzialmente identico).
In teoria, questo approccio consentirebbe di eseguire attacchi di brute force o password spraying contro uno o più account AAD senza causare il blocco dell'account o generare dati di log, rendendo di fatto invisibile l'attacco.
L'uso di base è semplice:
.\aad-sso-enum-brute-spray.ps1 USERNAME PASSWORD
Chiamando il codice in questo modo si otterrà il risultato per il nome utente e la password specificati.
Sfruttando foreach, puoi facilmente usarlo per il password spraying:
foreach($line in Get-Content .\all-m365-users.txt) {.\aad-sso-enum-brute-spray.ps1 $line Passw0rd! |Out-File -FilePath .\spray-results.txt -Append }
Nota che con questo metodo dovrai convertire il file risultante da UTF-16 a UTF-8 se vuoi lavorarci in Linux:
iconv -f UTF16 -t UTF-8 spray-results.txt >new-spray-results.txt
Se ti interessa solo l'enumerazione, esegui semplicemente il comando come sopra per il password spraying. Qualsiasi valore di ritorno "bad password", o qualsiasi valore diverso da "no user", significherebbe che hai trovato un nome utente valido.
Un ritorno "True" per un nome utente significa che la password fornita è valida.
Un ritorno "locked" può significare che l'account è bloccato, oppure che Smart Lockout ti sta temporaneamente impedendo di interagire con l'account.
Per sfruttare il codice per il brute force, basta iterare sul campo password invece che sul campo nome utente:
foreach($line in Get-Content .\passwords.txt) {.\aad-sso-enum-brute-spray.ps1 [email protected] $line |Out-File -FilePath .\brute-results.txt -Append }
Se scopri una o più coppie nome utente/password valide, puoi modificare questo codice per ottenere il DesktopSSOToken restituito. Il DesktopSSOToken può poi essere scambiato con un OAuth2 Access Token usando questo metodo.
L'OAuth2 Access Token può quindi essere usato con vari endpoint API di Azure, M365 e O365.
Potresti però essere bloccato dall'MFA a questo punto. La scelta migliore qui sarebbe sfruttare accessi non MFA, come Outlook Web Access o ActiveSync. MFASweep di Dafthack è utile in questo caso.
La funzionalità Smart Lockout di Microsoft inizierà a dichiarare falsamente che gli account sono bloccati se colpisci l'endpoint API troppo rapidamente dallo stesso indirizzo IP. Per aggirare il problema, consiglio vivamente di usare fireprox di ustayready. Basta cambiare la variabile $url così:
$url="https://xxxxxxx.execute-api.us-east-1.amazonaws.com/fireprox/"+$requestid
Questo però non aggirerà Smart Lockout se stai tentando di forzare la password di un account specifico.
Quasi tutto il codice è stato preso in prestito dall'eccellente progetto AADInternals del Dr. Nestori Syynimaa](https://raw.githubusercontent.com/Gerenios/AADInternals/eade775c6cd4f8ed16bd77602e1ea12a02fe265e/KillChain_utils.ps1).