
POC de la récente vulnérabilité de brute-force de mots de passe d'Azure Active Directory de SecureWorks
POC de la vulnérabilité de force brute sur les mots de passe Azure Active Directory récemment révélée par SecureWorks
Ce code est une preuve de concept de la vulnérabilité de force brute sur les mots de passe Azure Active Directory récemment révélée, annoncée par Secureworks (voici l'article d'Ars Technica publié environ un jour avant la publication officielle, mais quasiment identique).
En théorie, cette approche permettrait d'effectuer des attaques par force brute ou par pulvérisation de mots de passe contre un ou plusieurs comptes AAD sans provoquer de verrouillage de compte ni générer de données de journal, rendant ainsi l'attaque invisible.
L'utilisation de base est simple :
.\aad-sso-enum-brute-spray.ps1 USERNAME PASSWORD
Appeler le code de cette manière vous permet d'obtenir le résultat pour le nom d'utilisateur et le mot de passe spécifiés.
En tirant parti de foreach, vous pouvez facilement l'utiliser pour la pulvérisation de mots de passe :
foreach($line in Get-Content .\all-m365-users.txt) {.\aad-sso-enum-brute-spray.ps1 $line Passw0rd! |Out-File -FilePath .\spray-results.txt -Append }
Notez que l'utilisation de cette méthode vous obligera à convertir le fichier résultant de UTF-16 vers UTF-8 si vous souhaitez l'utiliser sous Linux :
iconv -f UTF16 -t UTF-8 spray-results.txt >new-spray-results.txt
Si vous n'êtes intéressé que par l'énumération, exécutez simplement la commande comme ci-dessus pour la pulvérisation de mots de passe. Toute valeur de retour « bad password », ou toute valeur autre que « no user », signifierait que vous avez trouvé un nom d'utilisateur valide.
Un retour « True » pour un nom d'utilisateur signifie que le mot de passe fourni est valide.
Un retour « locked » peut signifier que le compte est verrouillé, ou que Smart Lockout vous empêche temporairement d'interagir avec le compte.
Pour utiliser le code pour de la force brute, il suffit d'itérer sur le champ du mot de passe au lieu du champ du nom d'utilisateur :
foreach($line in Get-Content .\passwords.txt) {.\aad-sso-enum-brute-spray.ps1 [email protected] $line |Out-File -FilePath .\brute-results.txt -Append }
Si vous découvrez une ou plusieurs paires nom d'utilisateur/mot de passe valides, vous pouvez modifier ce code pour obtenir le DesktopSSOToken qui est renvoyé. Le DesktopSSOToken peut ensuite être échangé contre un jeton d'accès OAuth2 en utilisant cette méthode.
Le jeton d'accès OAuth2 peut ensuite être utilisé avec divers points de terminaison d'API Azure, M365 et O365.
Vous pouvez toutefois être bloqué par la MFA à ce stade. Votre meilleure option serait alors d'utiliser un accès non lié à la MFA, comme Outlook Web Access ou ActiveSync. MFASweep de Dafthack est utile ici.
La fonctionnalité Smart Lockout de Microsoft commencera à prétendre à tort que des comptes sont verrouillés si vous atteignez le point de terminaison d'API trop rapidement depuis la même adresse IP. Pour contourner ce problème, je recommande fortement d'utiliser fireprox de ustayready afin d'éviter ce problème. Il suffit de modifier la variable $url ainsi :
$url="https://xxxxxxx.execute-api.us-east-1.amazonaws.com/fireprox/"+$requestid
Cela ne contournera toutefois pas Smart Lockout si vous tentez de forcer par force brute le mot de passe d'un compte spécifique.
Quasiment tout le code de ce projet a été emprunté à l'excellent projet AADInternals du Dr Nestori Syynimaa](https://raw.githubusercontent.com/Gerenios/AADInternals/eade775c6cd4f8ed16bd77602e1ea12a02fe265e/KillChain_utils.ps1).