
NebulousAD automated credential auditing tool.
À partir du 14 avril, NuID n'hébergera plus l'API NebulousAD avec laquelle ce code communique. En tant que petite équipe de développeurs, nous avons constaté qu'il n'est pas réalisable de supporter, surveiller et développer activement à la fois le portail NebulousAD et notre Portail Développeur d'authentification.
Le code de vérification des mots de passe Active Directory par rapport à un ensemble d'identifiants compromis dans des fuites publiques continuera à vivre dans ce dépôt, et nous intégrerons tous les excellents retours que nous avons reçus via notre expérience avec NebAD pour fournir un service de liste noire de mots de passe fluide aux côtés de notre API d'authentification dans les mois à venir. Alors restez à l'écoute !
Nous apprécions votre implication et vos retours passés, et nous nous réjouissons de vous entendre à l'avenir. N'hésitez pas à nous contacter pour toute question concernant NebAD, NuID ou tout sujet lié à l'identité numérique.
À bientôt ! – l'équipe NuID
NebulousAD est un outil d'audit des mots de passe des utilisateurs Active Directory par rapport à une base de données de mots de passe compromis trouvés lors de fuites de données. L'outil a été créé pour aider les administrateurs système Windows à trouver et, éventuellement, à corriger l'utilisation de mots de passe compromis. Cette approche est recommandée par le NIST 800-63B et peut aider à se protéger contre les attaques par pulvérisation d'identifiants et par bourrage d'identifiants.
La base de données Nebulous contient actuellement plus de 2,5 milliards de hachages uniques de mots de passe compromis.
Par défaut, NebulousAD utilise le modèle de k-anonymat pour préserver la confidentialité et la sécurité des mots de passe vérifiés par rapport à l'API. Seuls les cinq premiers caractères d'un hachage SHA-2 sont envoyés à l'API. Vous pouvez en savoir plus sur le k-anonymat ici.
L'outil a été initialement publié à BSides Las Vegas 2019. Une vidéo de la présentation BSides est disponible ici.
Fonctionnalités à venir :
Téléchargez simplement la version précompilée (ne nécessite pas d'interpréteur Python) ou compilez à partir des sources :
Cet outil nécessite Python 2.7 (pour l'instant).
Exécutez git clone https://github.com/NuID/nebulousAD.git
Ensuite, installez avec python setup.py install
Puis initialisez votre clé. Vous pouvez obtenir votre clé en visitant : https://nebulous.nuid.io/#/register Une fois inscrit, cliquez sur le bouton pour générer votre clé API et copiez-la.
Vous pouvez maintenant les initialiser comme ceci : nebulousAD -init-key <api_key>
Vous pouvez maintenant exécuter l'outil. S'il ne trouve pas votre clé API, vous devrez peut-être redémarrer votre session de terminal. La clé API est stockée dans une variable d'environnement. Se déconnecter et se reconnecter fonctionne également.
Vous pouvez télécharger le fichier nebulousAD.exe pour une utilisation sans interpréteur ici. Vous pouvez également compiler l'outil vous-même à partir des sources :
pip install pyinstallergit clone https://github.com/NuID/nebulousAD.gitcd .\nebulousAD\nebulousADpyinstaller --onefile nebulousAD.pyPyinstaller affichera l'emplacement du binaire compilé :

Une commande exemple pour vider tous les hachages et les vérifier par rapport à l'API :
nebulousAD.exe -v -snap --check
NuID Credential Auditing tool.
optional arguments:
-h, --help show this help message and exit
-ntds NTDS NTDS.DIT file to parse
-system SYSTEM SYSTEM registry hive to parse
-csv CSV Output results to CSV file at this PATH.
-json JSON Output results to JSON file at this PATH
-init-key INIT_KEY Install your Nu_I.D. API key to the current users
PATH.
-c, --check Check against Nu_I.D. API for compromised
credentials.
-dk, --disable-k-anon
Disable k-anon hash searches against the API (speeds
up the audit).
-snap Use ntdsutil.exe to snapshot the system registry
hive and ntds.dit file to <systemDrive>:\Program
Files\NuID\
-shred When performing delete operations on files, use a 7
pass overwrite with sdelete.exe. Download here:
https://docs.microsoft.com/en-
us/sysinternals/downloads/sdelete
-no-backup Do not backup the existing snapshots, just overwrite
them instead.
-clean-old-snaps CLEAN_OLD_SNAPS
Clean backups older than N days.
display options:
-user-status Display whether or not the user is disabled
-pwd-last-set Shows pwdLastSet attribute for each account found
within the NTDS.DIT database.
-history Dump NTLM hash history of the users.
-v Enable verbose mode.
Désactive la fonction de vérification de hachage par k-anonymat. Cela permet d'accélérer le temps de recherche, mais entraîne l'envoi du hachage SHA-256(NTLM) complet à l'API. Nous ne journalisons ni ne stockons les hachages envoyés à l'API.
Le paramètre -snap va automatiquement prendre un instantané d'Active Directory (en utilisant ntdsutil.exe), et extraire le fichier ntds.dit ainsi que la ruche du registre SYSTEM, si vous avez les privilèges nécessaires.
Vous pouvez effectuer cette extraction manuellement en utilisant diverses méthodes ou l'outil ntdsutil.exe.
Si vous l'extrayez manuellement, vous pouvez pointer vers les fichiers avec -system chemin\vers\SYSTEM et -ntds chemin\vers\ntds.dit. Cela est utile si vous souhaitez auditer d'anciens instantanés.
Cela nécessite une clé API depuis https://nebulous.nuid.io/#/register. Une fois que vous l'avez et que vous l'avez installée avec -init-key, vous pouvez vérifier les hachages par rapport à l'API NuID.
Si vous avez spécifié -history, il vérifiera également l'historique des mots de passe de chaque compte pour voir si un mot de passe précédemment utilisé a été compromis.
Ajoute une sortie indiquant si le compte est Activé ou Désactivé dans Active Directory.
Ajoute une sortie indiquant la date de dernière modification du mot de passe du compte. Cela peut être utile pour détecter les violations de la politique de sécurité des comptes qui ne sont pas réinitialisés automatiquement comme défini dans la GPO, par exemple les comptes de service.
Auditez ou extrayez également l'historique des mots de passe stockés du compte.
Utilise un écrasement DoD à 7 passages lors du nettoyage des instantanés. Cela nécessite d'avoir sdelete.exe dans votre chemin. Vous pouvez l'obtenir ici : https://docs.microsoft.com/en-us/sysinternals/downloads/sdelete
Téléchargez-le et placez-le dans votre répertoire %SYSTEMDRIVE\Windows\System32\, ou configurez la variable d'environnement.
Utile pour nettoyer les sauvegardes lorsque vous planifiez l'exécution de cette application avec le Planificateur de tâches. La ruche SYSTEM et le fichier .dit peuvent être assez volumineux dans les grands domaines et prendre beaucoup d'espace disque.
Si vous utilisez le Planificateur de tâches pour un audit quotidien, vous pouvez utiliser cette option comme ceci : -clean-old-snaps 7 pour ne conserver qu'une semaine d'instantanés.
Si nous détectons un ancien instantané, nous le sauvegardons par défaut dans %SYSTEMDRIVE%\Program Files\NuID\snapshot-backups.
Cela est dû au fait que ntdsutil.exe nécessite un répertoire vide.
Si vous souhaitez désactiver cette sauvegarde et simplement écraser l'instantané actuel, utilisez cet argument.
Une API Web RESTful est fournie pour permettre aux utilisateurs d'utiliser le jeton API NuID, une fois généré, pour votre propre client personnalisé. Cette section décrit le fonctionnement correct de l'API Web, les requêtes valides, les types d'erreurs, etc.
La structure de base de chaque réponse sera identique. Sans exception, les réponses doivent contenir les trois champs suivants : success, data et error. La première chose à déterminer lors de la réception de la réponse est la valeur de success. Cela déterminera si vous devez continuer à traiter l'objet data ou gérer l'objet error. Les exemples suivants montrent des réponses génériques du serveur dans une situation de succès et d'échec :
{
success: True, // Indicates the request completed successfully
data: {
/* value depends on endpoint queried */
},
error: {} // Empty
}
{
success: False, // Indicates the request did not complete successfully
data: { }, // Empty
error: {
"ErrorName": "Helpful description of the error that occurred during the request"
}
}
Chaque erreur offre un aperçu de ce qui n'a pas fonctionné lors de la requête, permettant à l'utilisateur d'apporter les modifications nécessaires.
Pour l'instant, un seul hash_type est pris en charge. Ces valeurs (insensibles à la casse) peuvent être utilisées à la place de hash_type. La taille de la représentation hexadécimale de la chaîne hash_value est également fournie. Le hash_prefix ne peut pas dépasser cette taille :
| Hachage | Longueur |
|---|---|
| NTLMSHA2 | 64 |
L'en-tête HTTP suivant doit être fourni pour toutes les requêtes vers les points d'accès API, sinon une erreur sera renvoyée :
X-NUID-API-KEY: <Votre clé API NuID>
Chaque point d'accès commence par l'URL suivante :
https://nebulous.nuid.io
/api/search/kanon/<hash_type>/<hash_prefix>Méthode : GET
Description : Interroge la base de données de hachages en utilisant une version anonymisée d'un hachage. Le hachage complet peut être fourni, mais un hachage partiel peut également être utilisé sous la forme d'un préfixe d'au moins 5 caractères. Tous les hachages de la base de données Nebulous correspondant à ce préfixe seront renvoyés sans divulguer le hachage exact.
Réponse :
La réponse de l'URL suivante : https://nebulous.nuid.io/api/search/kanon/5f4dcc
{
"success": true,
"data": {
"matches": [
"5f4dcc3010a3b4ffd56ec97b33a0f837",
"5f4dcc3b5aa765d61d8327deb882cf99",
"5f4dcc3b5bef0f9cc4c0f96d758010b8"
]
},
"error": {}
}
/api/search/kanon/<hash_type>Méthode : POST Données POST :
{
"prefix": "<Préfixe du hachage>"
}
Description : Interroge la base de données de hachages en utilisant une version anonymisée d'un hachage. Le hachage complet peut être fourni, mais un hachage partiel peut également être utilisé sous la forme d'un préfixe d'au moins 5 caractères. Tous les hachages de la base de données Nebulous correspondant à ce préfixe seront renvoyés sans divulguer le hachage exact.
Réponse :
La réponse de l'URL suivante : https://nebulous.nuid.io/api/search/kanon avec les données {"prefix": "5f4dcc"}
{
"success": true,
"data": {
"matches": [
"5f4dcc3010a3b4ffd56ec97b33a0f837",
"5f4dcc3b5aa765d61d8327deb882cf99",
"5f4dcc3b5bef0f9cc4c0f96d758010b8"
]
},
"error": {}
}
Il semble y avoir un bug dans impacket qui empêche l'extraction correcte du nthash.
Évitez d'utiliser l'argument -history pour l'instant.
https://github.com/SecureAuthCorp/impacket/issues/395 https://github.com/SecureAuthCorp/impacket/issues/660
Contactez-nous à [email protected]
| Nom de l'erreur | Description | Code de statut |
|---|
ActionExpired | L'action que vous essayez d'invoquer a expiré et n'est plus valide | 401 |
ActionInvalid | L'action que vous essayez d'invoquer n'existe pas | 401 |
AuthFailure | Combinaison utilisateur/mot de passe invalide | 401 |
AuthMissingToken | Aucun jeton d'authentification n'a été fourni | 401 |
FieldMissing | Un ou plusieurs champs manquent dans la requête JSON | 422 |
HashInvalidLength | Le hachage fourni et la longueur attendue pour le type de hachage donné ne correspondent pas | 422 |
HashInvalidValue | Représentation hexadécimale attendue pour le hachage | 422 |
HashInvalidPrefix | Un préfixe doit avoir une longueur minimale de 5 caractères | 422 |
HashUnsupported | Le type de hachage fourni n'est pas pris en charge | 422 |
InvalidJWT | Le JWT fourni était invalide | 401 |
InvalidRequest | La requête fournie était mal formée ou il manquait un payload JSON | 422 |
KeyBadUser | La clé API fournie ne correspond pas à l'utilisateur attendu | 401 |
KeyDisabled | La clé API fournie est désactivée | 403 |
KeyInvalid | La clé API fournie est invalide | 401 |
KeyMissing | Aucune clé API n'a été fournie | 401 |
NotFound | Le point d'accès que vous essayez d'atteindre est invalide | 404 |
PasswordIncorrect | Le mot de passe actuel ne correspond pas | 401 |
UserDisabled | Le compte est actuellement désactivé | 401 |
UserKeyLimit | Vous avez atteint le nombre maximum de clés API | 403 |
UserNotActivated | Le compte utilisateur n'a pas encore été activé | 403 |
UserNotFound | Le compte utilisateur est introuvable | 401 |