
Audit hors ligne rapide des mots de passe Active Directory avec Python.
Audit hors ligne rapide des mots de passe Active Directory avec Python.
Lil Pwny est une application Python qui permet d'auditer hors ligne les hachages NTLM des mots de passe des utilisateurs, récupérés depuis Active Directory, en les comparant aux mots de passe compromis connus de Have I Been Pwned. Les résultats sont fournis au format JSON contenant le nom d'utilisateur, le hachage correspondant (pouvant être obscurci), et le nombre de fois que le mot de passe correspondant est apparu dans HIBP.
Plus d'informations sur Lil Pwny sont disponibles sur mon blog
Lil Pwny offre la fonctionnalité d'améliorer votre liste de mots de passe personnalisés en ajoutant des variantes couramment utilisées de vos mots de passe personnalisés. Celles-ci incluent :
P@ssw0rd)PASSWORD, Password)password!, !password)password123!, !passwordabc, passwordpassword)
password1950, password2034)Une liste de mots de passe personnalisés de 100 mots de passe en clair génère 49 848 660 variantes.
Lil Pwny recherche les utilisateurs qui utilisent des variantes de leur nom d'utilisateur comme mot de passe.
Il convertit le nom d'utilisateur dans les formats suivants :
Ceux-ci sont ensuite convertis en hachages NTLM et audités par rapport aux hachages AD.
Cette application a été développée pour tirer le meilleur parti du multiprocessing en Python, dans le but de fonctionner aussi rapidement que possible sur du matériel grand public.
Comme elle utilise le multiprocessing, plus vous avez de cœurs disponibles, plus Lil Pwny devrait être rapide. J'ai tout de même obtenu de très bons résultats avec un faible nombre de cœurs logiques :
Lil Pwny produit les résultats soit vers stdout :
soit au format JSON :
{"localtime": "2021-00-00 00:00:00,000", "level": "NOTIFY", "source": "Lil Pwny", "match_type": "hibp", "detection_data": {"username": "RICKON.STARK", "hash": "32ED87BDB5FDC5E9CBA88547376818D4", "matches_in_hibp": "24230577", "obfuscated": "True"}}
Vous pouvez rediriger la sortie JSON de Lil Pwny vers un fichier :
lil-pwny -ad ... > lil-pwny-results.json
Ce journal au format JSON peut être facilement ingéré dans un SIEM ou un autre outil d'analyse de logs, et peut être transmis à d'autres scripts ou plateformes pour des actions de résolution automatisées.
Installez via pip
pip install lil-pwny
Lil-pwny sera installé comme une commande globale, utilisez-le comme suit :
usage: lil-pwny [-h] -hibp HIBP [-v] [-c CUSTOM] [-custom-enhance CUSTOM_ENHANCE] -ad AD_HASHES [-d] [-output {file,stdout,json}] [-o] [--verbose]
Fast offline auditing of Active Directory passwords using Python
options:
-h, --help show this help message and exit
-hibp HIBP, --hibp HIBP
The .txt file containing HIBP NTLM hashes
-v, --version show program's version number and exit
-c CUSTOM, --custom CUSTOM
.txt file containing additional custom passwords to check for
-custom-enhance CUSTOM_ENHANCE, --custom-enhance CUSTOM_ENHANCE
generate an enhanced custom password list based on the provided custom password list. Must be used with -c/--custom flag. The enhanced list will stored in memory and not
written to disk. Provide the minimum length of the passwords you want. Default is 8
-ad AD_HASHES, --ad-hashes AD_HASHES
The .txt file containing NTLM hashes from AD users
-d, --duplicates Output a list of duplicate password users
-output {file,stdout,json}, --output {file,stdout,json}
Where to send results
-o, --obfuscate Obfuscate hashes from discovered matches by hashing with a random salt
--verbose Turn on verbose logging
Exemple :
lil-pwny -hibp ~/hibp_hashes.txt -ad ~/ad_user_hashes.txt -c ~/custom_passwords.txt -output stdout -do
Sur un contrôleur de domaine, utilisez ntdsutil pour générer un dump IFM de votre domaine AD. Exécutez les commandes suivantes dans une fenêtre PowerShell élevée :
ntdsutil
activate instance ntds
ifm
create full **chemin de sortie**
Pour récupérer les hachages NTLM des données IFM AD, le module PowerShell DSInternals est requis.
Une fois installé, utilisez la ruche SYSTEM dans les données IFM pour récupérer les hachages au format utilisateur:hachage et enregistrez-les dans le fichier ad_ntlm_hashes.txt
$bootKey = Get-BootKey -SystemHivePath '.\registry\SYSTEM'
Get-ADDBAccount -All -DBPath '.\Active Directory\ntds.dit' -BootKey $bootKey | Format-Custom -View HashcatNT | Out-File ad_ntlm_hashes.txt -Encoding ASCII
Le fichier peut être téléchargé depuis l'API HIBP en utilisant un utilitaire .net disponible ici
Le script PowerShell dans le dossier scripts peut être utilisé pour supprimer les comptes indésirables de la sortie IFM avant traitement. Ceux-ci incluent :