
Implant de filtre de mot de passe DLL avec capacités d'exfiltration
DLLPasswordFilterImplant est une DLL personnalisée de filtre de mots de passe qui permet la capture des identifiants d'un utilisateur. Chaque événement de changement de mot de passe sur un domaine déclenchera la DLL enregistrée afin d'exfiltrer le nom d'utilisateur et la nouvelle valeur du mot de passe avant qu'elle ne soit effectivement modifiée dans l'Active Directory (AD).
Pour plus d'informations sur les filtres de mots de passe, consultez la documentation Microsoft.
Créez la DLL pour l'architecture cible. Compilez en 32 bits pour un système 32 bits et en 64 bits pour un système 64 bits.
Copiez la DLL dans le répertoire d'installation de Windows. (Dossier par défaut : \Windows\System32)
Enregistrez le filtre de mot de passe en mettant à jour la clé de registre suivante :
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa
Si la sous-clé Notification Packages existe, ajoutez le nom de la DLL (« DLLPasswordFilterImplant » si vous ne l'avez pas renommée) aux données de valeur existantes. N'écrasez pas les valeurs existantes.
Si la sous-clé n'existe pas, créez-la et ajoutez le nom de la DLL (« DLLPasswordFilterImplant » si vous ne l'avez pas renommée) aux données de valeur.
REMARQUE : N'incluez pas l'extension .dll lors de l'ajout du nom de la DLL dans la sous-clé Notification Packages.
Configurez la clé publique à utiliser pour le chiffrement des identifiants.
KEY=key.pem
# Generate an RSA key and dump its public key. Keep the private key around for decryption
openssl genrsa -out $KEY 2048
# Prepare the Windows registry key entry.
echo 'Windows Registry Editor Version 5.00' > addKey.reg
echo >> addKey.reg
echo '[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa]' >> addKey.reg
# If python2 does not exist, use `python` instead.
echo "Key=hex:$(openssl rsa -in $KEY -pubout | sed -E '/^\-/d' | base64 -d | python2 -c 'import sys; print(",".join(["{:02x}".format(ord(b)) for b in sys.stdin.read()]))')" >> addKey.reg
Vous pouvez ensuite exécuter le fichier addKey.reg pour ajouter la clé publique brute au registre.
Notez que l'utilisation du chiffrement asymétrique augmente considérablement la taille des données à exfiltrer en raison du remplissage des messages. Des améliorations possibles pourraient réduire cette surcharge de données.
Redémarrez le système Source
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa
Les données chiffrées sont rembourrées avec OAEP et peuvent être déchiffrées comme suit :
# Convert the stitched hex string to raw bytes.
xxd -r -p exfiltrated.hex > raw.bin
# Decrypt using the private key.
openssl rsautl -decrypt -oaep -inkey $KEY -in raw.bin -out decrypted.txt
Pour supprimer complètement le filtre de mot de passe d'un système :
Désenregistrez le filtre de mot de passe en mettant à jour la clé de registre suivante :
HKEY_LOCAL_MACHINE SYSTEM\CurrentControlSet\Control\Lsa
Dans la sous-clé Notification Packages, supprimez le nom de la DLL des données de valeur existantes. Ne supprimez pas les autres valeurs existantes.
Redémarrez le système
Dans le répertoire d'installation de Windows (Dossier par défaut : \Windows\System32), trouvez la DLL du filtre de mot de passe (« DLLPasswordFilterImplant.DLL » si vous ne l'avez pas renommée) et supprimez le fichier.
Un simple serveur DNS pour recevoir les données exfiltrées est fourni dans scripts/.
Exécutez pip install -r scripts/requirement.txt, de préférence dans un environnement virtuel,
puis fournissez-lui une clé privée encodée en PEM et un fichier de sortie optionnel (par défaut creds.txt) où écrire les identifiants.
Actuellement, le serveur DNS ne gère pas les changements de mot de passe simultanés et sert uniquement de preuve de concept. Les contributions ajoutant de la robustesse au serveur sont les bienvenues.
Fonctionne sur :
Le filtre de mot de passe a été testé exclusivement sur les systèmes listés ci-dessus.
Voici quelques outils qui peuvent vous aider à déboguer la DLL (si nécessaire) :