
Azure AD Password Checker
Dans un environnement Azure AD, il est possible de déterminer si un utilisateur a désactivé l'authentification multifacteur (MFA) sans nécessiter de privilèges spéciaux. Cela peut être accompli en analysant la date de création du compte et la date du dernier changement de mot de passe.
Si la date et l'heure de création d'un compte correspondent à la date et à l'heure de son dernier changement de mot de passe, cela peut indiquer qu'aucune interaction humaine n'a eu lieu depuis la création du compte et que l'utilisateur n'a pas pu activer l'authentification multifacteur (MFA) ni modifier son mot de passe. Et il existe d'autres « anomalies », comme une date de changement de mot de passe antérieure à la date de création. Cela suggère également que l'authentification multifacteur (MFA) n'a pas pu être activée car l'utilisateur n'existait pas encore !
Mise à jour du 16-10-2023 :
Mise à jour du 18-02-2024 :
Ces informations, conçues pour être utilisées aussi bien par les équipes rouges que par les équipes bleues, peuvent être utiles pour identifier les risques de sécurité potentiels.
Le fichier de base de données roadrecon ou le fichier JSON extrait à l'aide de l'option --code-javascript est nécessaire pour cet outil. L'outil Roadrecon est développé par dirkjanm et peut être téléchargé sur github https://github.com/dirkjanm/ROADtools ou pip install roadrecon.
Voir comment l'utiliser :
python3 azurepwchecker.py
usage: azurepwchecker.py [-h] [--roadrecon-dump] [--roadrecon-dump-mfa] [-d DB] [-m] [-l] [-ll] [-lll] [-la] [-lo]
[-ji JSON_INPUT] [-c]
Azure AD Password Checker - This is a parser for generated JSON file or the roadrecon database file designed for use by both red and blue teams.
Database can be created when using --code-javascript option to extract 'merged_users.json' file with be created to later input this file with --json-input argument.
And roadrecon generated roadrecon.db file can be used! roadrecon is developed by https://github.com/dirkjanm credits to him!
options:
-h, --help show this help message and exit
-d DB, --db DB Specify the path to the 'roadrecon.db' database file, default is this location
-m, --mfa-list User Accounts without MFA (No privileged user required)! This argument helps identify user
accounts that have not enabled Multi-Factor Authentication (MFA). If an account's creation
date and time match its last password change date and time, it may indicate that no human
interaction has occurred since the account was created, and the user has not been able to
enable MFA or change their password. And there are other 'anomalies' such as the password
change date being older than the creation date. This suggests also that Multi-Factor
Authentication (MFA) couldn't be enabled because the User wasn't created yet! :-]
-mo OUTFILE, --outfile OUTFILE
Output users with MFA anomalies to file
-l, --pw-month User accounts that had their passwords changed last month
-ll, --pw-year User accounts that had their passwords changed last year
-lll, --pw-older User accounts that haven't changed their passwords in a long time, oldest first
-la, --admin User accounts that are members of 'Admin' named groups, including 'Global Reader'
-lo, --out-of-hours User password change that occurred outside of office hours, specifically between 5:00 PM
(17:00) and 8:00 AM (08:00) on weekdays, as well as on Saturdays and Sundays
-ji JSON_INPUT, --json-input JSON_INPUT
Provide the JSON file imported from your web browser's console using JavaScript. For
'createdDateTime' and 'lastPasswordChange' details, ensure you download the JSON output using
the '--code-javascript' option.
-c, --code-javascript
Perform extraction even if 'azurepwchecker.py' or 'roadrecon' is unavailable. This script
enables extraction through the JavaScript console of a web browser. To proceed, ensure you
have a valid account to log in at https://portal.azure.com/#view/Microsoft_AAD_UsersAndTenants
/UserManagementMenuBlade/~/AllUsers or an active session on a computer. Copy and paste the
provided JavaScript code into the browser's console. Once the session is validated and you
have the necessary permissions, a JSON file named 'merged_users.json' will be generated. You
can then import it using the following command as example: 'azurepwchecker.py --json-input
merged_users.json -m'
-v, --version show program's version number and exit
run roadrecon first:
(Run the following command to install the tool "pip install roadrecon)"
--roadrecon-dump "roadrecon dump" command or do it with roadrecon
--roadrecon-dump-mfa "roadrecon dump --mfa" command (requires privileged access) or do it with roadrecon
azurepwchecker.py --code-javascript ou le fichier js dans le dossier :Suivez ces étapes pour récupérer une liste d'utilisateurs ainsi que leurs informations de compte à l'aide du script fourni.
Connectez-vous au portail Azure
Accédez à la gestion des utilisateurs
Ouvrez les outils de développement
F12 dans votre navigateur web pour ouvrir les outils de développement.Exécutez le script
Récupérez UsersList et UserInfo
Téléchargez les informations utilisateur fusionnées
merged_users.json sera généré si tout s'est bien passé.Exécutez avec Azure AD Password Checker
azurepwchecker.py --json-input merged_users.jsonVoir un exemple :
Voir l'introduction :
Mise à jour du 16-10-2023 :

Comment utiliser l'argument --code-javascript pour générer une liste d'utilisateurs sur le portail Azure, qui peut ensuite être importée à l'aide de la commande azurepwchecker.py --json-input merged_users.json :
Mise à jour du 13-02-2024 :
J'ai mis en ligne une version modifiée de GraphRunner de @dafthack, à qui revient le crédit. Dans cette version modifiée, j'ai ajouté une nouvelle fonctionnalité qui permet de lire les fichiers HAR directement depuis l'appareil de la « victime ». Cette nouvelle fonction permet de vérifier et d'examiner les jetons d'accès (Access Tokens) afin d'accéder à différentes autorisations ou étendues. De plus, si un jeton d'accès a expiré, cette version permet d'utiliser un jeton d'actualisation (Refresh Token) pour créer un nouveau jeton d'accès. Ce processus est sensible au facteur temps, mais il élimine le besoin de noms d'utilisateur et de mots de passe, si vous êtes déjà connecté à l'environnement Office365, car il ne nécessite que les jetons de session trouvés dans les fichiers HAR.
Veuillez comprendre que le code peut sembler un peu désorganisé. Mon expertise n'est pas principalement en JavaScript, donc mon objectif principal était d'ajouter de nouvelles fonctionnalités plutôt que d'organiser le code.
Téléchargez le(s) fichier(s) HAR en utilisant les outils de développement disponibles dans les navigateurs web. Pour la plupart des navigateurs, appuyez simplement sur F12 pour ouvrir les outils de développement, puis accédez à l'onglet « Réseau » (Network) pour enregistrer les fichiers HAR, après avoir actualisé la page web : vidéo
Téléversez votre(vos) fichier(s) HAR via l'interface fournie. Une fois téléversés, vous pouvez parcourir les différents jetons d'accès pour analyser les détails de session, y compris leurs étendues et plus encore. Les jetons affichés en rouge indiquent qu'ils ont expiré. GraphRunner prend également en charge l'utilisation de jetons d'actualisation (Refresh Tokens) pour générer de nouveaux jetons d'accès valides si nécessaire : vidéo
Fonctionnalités ajoutées pour permettre le téléchargement des données utilisateur complètes dans un fichier JSON, détecter les anomalies MFA dans les comptes et télécharger une liste de ces anomalies : vidéo