O segundo artigo, com base nos resultados do desempenho de nossa equipe no OFFZONE-2018. Desta vez, considere uma conversa com o MainTrack “Windows DPAPI“ Sekretiki ”ou DPAPI para pentesters”.
Atenção! Muitas faias!
Ao conduzir campanhas da RedTeam, quero apresentar menos razões para a reação da BlueTeam, mas pode haver muitas. Por exemplo, executando o mimikatz para obter senhas ou certificados do usuário. Mesmo se pudéssemos "otmazyvat" ele da Kaspersky, o BlueTeam tem a capacidade de rastrear usando ferramentas especializadas, como Sysmon, Microsoft ATA, etc. Ao mesmo tempo, gostaria de obter o máximo de informações de uma máquina de usuário comprometida. No decorrer de campanhas conduzidas repetidamente pela RedTeam para combater equipes reais da BlueTeam, chegamos à conclusão de que é necessário evitar ações que possam servir como indicadores de comprometimento do sistema. Para atingir esse objetivo, é possível através do uso de mecanismos e ações legais fornecidas pelo sistema operacional ao usuário.
Uma dessas ferramentas legais é o mecanismo DPAPI (Windows Data Protection API), usado pelo sistema operacional e por vários aplicativos para criptografar dados confidenciais do usuário (principalmente senhas, chaves criptográficas, etc.) Para o usuário final e seus aplicativos, o DPAPI parece extremamente simples : Existem apenas 2 funções - “criptografar dados” e “descriptografar dados”. Neste artigo, gostaria de considerar como esse mecanismo é útil para os clientes durante campanhas da RedTeam.
O que é DPAPI? Apenas brevemente e em russo
Desde 2000, todos os sistemas operacionais Windows começaram a usar o mecanismo DPAPI para manter os dados do usuário em segurança.
Se pularmos toda a criptografia examinada no relatório, para descriptografar os dados criptografados via DPAPI, precisaremos de: uma chave mestra, SID do usuário, hash da senha do usuário e o próprio blob DPAPI (dados DPAPI criptografados).
Em geral, o processo é assim:

Dentro do nosso "chapéu criptográfico", existem muitos mecanismos criptográficos diferentes que não consideraremos neste artigo, para não sobrecarregar o leitor. Observamos apenas que a parte principal do DPAPI é a chamada Masterkey (chave mestra). Em termos simples, a chave mestra é de 64 bytes de dados aleatórios criptografados usando a pré-chave, que é gerada a partir da senha do usuário e seu SID.

Parâmetros adicionais também participam da geração de pré-chave: o número de iterações (IterN), salt e HMAC, que podem variar de caso para caso. Os valores desses parâmetros são armazenados junto com a chave mestra em um arquivo.
Assim, sabendo a senha do usuário, seu SID e lendo os parâmetros de geração no arquivo de chave mestra (HMAC, Salt, InterN), podemos gerar uma pré-chave e descriptografar a chave mestra, ou seja, obtenha os 64 bytes muito aleatórios que usaremos para descriptografar os blobs DPAPI.
E se eu mudar minha senha?
Geralmente, as senhas dos usuários são alteradas em intervalos regulares. O que acontece se o usuário alterar a senha? Para onde foi a anterior? De fato, para descriptografar a chave mestra, você precisa saber a senha do usuário e criptografar todas as chaves mestras do usuário toda vez que é um prazer muito caro. Nesse caso, tudo é pensado no Windows.
Há um arquivo especial (CREDHIST), cuja tarefa é armazenar todas as senhas de usuário anteriores. Também é criptografada com a senha atual do usuário e armazenada na pilha. Se o sistema falhar repentinamente em descriptografar a chave mestra, procederá da seguinte maneira: usando a senha atual, descriptografará o primeiro registro em CREDHIST. A senha está tentando descriptografar a chave mestre novamente, e assim por diante até que as senhas na cadeia se esgotem ou a chave mestre seja descriptografada.
Um pouco sobre as chaves privadas de um controlador de domínio
Como você deve ter adivinhado, o DPAPI é aplicado a todos os usuários, incluindo usuários do domínio. Para poder redefinir a senha para um usuário que a esqueceu após uma festa de sexta à noite, você precisa de uma chave reserva que será armazenada em um local seguro. Segundo a Microsoft, um local tão confiável é um controlador de domínio.
A essência do mecanismo para descriptografar a chave mestra após redefinir a senha do usuário é a seguinte: um par de chaves RSA - privadas e públicas - é criado no controlador de domínio. A chave privada é armazenada no controlador de domínio no banco de dados NTDS e é chamada BCKUPKEY_xxxx (veja a figura abaixo), e a chave pública é distribuída a todos os sistemas de domínio e é usada para gerar uma duplicata da chave mestra quando é gerada.
Depois de criar uma chave mestra em uma máquina de domínio, sua duplicata também é criada (ou melhor, o material da chave mestra é seus 64 bytes), que é armazenado junto com a chave mestra principal em um arquivo e é chamado de Chave do Domínio. Se você perder a chave mestra principal, ou seja, ao redefinir a senha do usuário, o sistema envia uma duplicata para o controlador de domínio e solicita sua descriptografia. O controlador, depois de autorizado o usuário, descriptografa a duplicata e a devolve ao sistema, após o qual o material da chave mestra já é criptografado com uma nova senha.

Tendo os privilégios apropriados no domínio (na maioria das vezes, administrador), você pode obter essas chaves RSA privadas do controlador de domínio através do mecanismo de replicação e usá-las para descriptografar mais as chaves mestras criadas nas máquinas de domínio. Isso pode ser feito usando mimikatz ou DSInternals. Você pode ler mais sobre isso no wiki
mimikatz ou
no blog
DSInternals .
Onde estão armazenadas as chaves mestras e quais são elas?
A chave mestra pode ser usuário e sistema, dependendo de cujos segredos são criptografados. A chave mestra do usuário é armazenada no perfil do usuário da seguinte maneira:
Users\%USER%\AppData\Roaming\Microsoft\Protect\%SID%\
Por precaução, o sistema armazena todas as chaves mestras já utilizadas pelo usuário. Afinal, ela não sabe de antemão qual mestre precisará descriptografar algo com uma chave. O GUID da chave atual usada é armazenado no arquivo Preferred.

As chaves mestras do sistema são armazenadas da seguinte maneira:
windows\system32\Microsoft\Protect\S-1-5-18\
Da mesma forma com o usuário - uma chave mestra é usada, cujo nome pode ser encontrado no arquivo Preferred, onde todas as chaves que já foram usadas são armazenadas.

Bem, o que esse DPAPI pode dar ao Pentester?
Como o DPAPI é um mecanismo legal e simples, vários aplicativos tentam usá-lo. Porque é conveniente e seguro. Por enquanto, é claro.
Por exemplo, o DPAPI é usado para criptografar chaves privadas de certificados de cliente e de sistema, chaves WIFI, Chrome (cookies, senhas), DropBox, Skype, RSA SecurID (um aplicativo de software que gera chaves únicas). E esta não é de forma alguma uma lista exaustiva.
A tarefa do pentester é descriptografar os blobs necessários e obter senhas, cookies etc.
Existem várias maneiras de fazer isso. De um jeito ou de outro, todos se resumem a duas transcrições - online e offline. A descriptografia online é quando, na máquina do usuário, simplesmente chamamos as funções do sistema para descriptografar os dados e passamos o blob DPAPI para a entrada, e o sistema faz tudo sozinho - ele procura a chave mestra com a qual o blob foi criptografado, descriptografando-o usando o SID do usuário e um hash de senha armazenado na memória LSASS.
A figura abaixo mostra um exemplo de chamada de funções DPAPI para criptografia e descriptografia no PowerShell.

Primeiro, criptografamos nosso segredo (neste caso, a palavra "Senha") chamando a função [Security.Cryptography.ProtectedData] :: Protect (). E fazemos isso duas vezes - no primeiro caso, usando a chave mestra do usuário (parâmetro CurrentUser) e, no segundo - a chave mestra do sistema (parâmetro LocalMachine). Em seguida, podemos descriptografar os blobs resultantes chamando a função inversa - [Security.Cryptography.ProtectedData] :: UnProtect ().
Além disso, nesse caso, o valor do parâmetro CurrentUser ou LocalMachine não importa, porque o próprio sistema encontra uma chave mestra adequada para decodificar o blob e faz todo o necessário. Nos dois casos, obtemos nosso segredo inicial - a palavra “Senha” (sua representação byte-a-bit).
Ao descriptografar online, é importante entender em que contexto você está chamando a função UnProtect (). Para que a descriptografia seja bem-sucedida, você deve estar em uma sessão do usuário ou fazer login em uma nova sessão. O problema é o hash da senha, que é armazenado na memória LSASS. Se você fizer uma chamada fora da sessão do usuário (por exemplo, efetuou login no sistema através da rede via psexec ou meterpreter), não precisará, portanto, de um hash de senha para descriptografar a chave mestra. Ele, é claro, está na próxima sessão, mas o LSASS não dará a você, porque essa é outra sessão, embora tenha sido criada com o mesmo usuário. Para obter descriptografia online bem-sucedida, você deve migrar para qualquer processo iniciado pelo usuário conectado via GUI ou efetuar login completo no sistema, por exemplo, via RDP.
Uma alternativa ao powershell para descriptografia online de blobs DPAPI pode ser uma chamada para mimiktaz :: blob com o parâmetro / desprotect. Na entrada, ele recebe um arquivo binário com um blob DPAPI e, na saída, obtemos dados descriptografados. Mais casos usando o mimikatz são descritos
no blog HarmJ0y.
A bola branca caiu. O que fazer com minha fazenda com vidyuhi?
Devido ao fato de que as chaves mestras DPAPI são criptografadas na senha do usuário, você pode tentar o processo inverso - forçar brutalmente a senha do usuário por sua chave mestra. Por exemplo, recebemos uma conexão reversa de nossa macro ou DDE do arquivo docx enviado. Podemos pegar a chave mestra do usuário e restaurar a senha do usuário sem nenhuma escalação de privilégios e lançamentos de mimikatz.
Posso usar o Hashcat ou JohnTheRipper para bruteforce de senha? Mas antes disso, você precisa obter os parâmetros para força bruta da composição de John com o script apropriado:
./DPAPImk2john.py –S <sid> -mk <masterkey> -c <domain|local>
Então já podemos enviar o resultado do script para o nosso farm com placas de vídeo e esperar que o usuário tenha uma senha fraca, porque a velocidade da força bruta da chave mestra é aproximadamente comparável à velocidade da enumeração WPA2, ou seja, bem devagar.
Vale a pena notar aqui que, no caso em que uma chave mestra é gerada em um domínio Windows 10, outras 10.000 rodadas do algoritmo PBKDF2 são adicionadas à geração de pré-chave. Pior ainda, nem o Hashcat nem o JohnTheRipper sabem disso (pelo menos no momento da redação deste artigo), o que significa que eles não poderão remover a senha dessa chave mestra.
"Tirar tudo o que é ruim e depois descobrir ..."
Como observamos anteriormente, a execução de ações suspeitas na máquina do usuário pode provocar um interesse adicional da equipe do Blueteam, e isso, portanto, está repleto de fato de que todo o RedTeam terminará aí. Um exemplo é o lançamento do PowerShell no computador de um contador ou secretário, seguido de uma investigação do incidente. Para não causar suspeitas desnecessárias, é melhor usar métodos offline para decodificar blobs DPAPI. Para fazer isso, você deve primeiro pegar tudo o que precisa da máquina, a saber:
- Chaves mestras do usuário
- Chaves mestras do sistema
- Arquivo CREDHIST (se não for uma máquina de domínio);
- Senha do usuário (ou seu hash sha1 / ntlm);
- SID do usuário;
- Blocos DPAPI que queremos descriptografar.
Para descriptografia no modo offline, não podemos prescindir de ferramentas especializadas. Essas ferramentas podem ser:
- Mimikatz;
- Impacket (a partir da 18ª versão, possui funcionalidade DPAPI);
- Estrutura Dpapick.
É sobre o framework dpapick sobre o qual falaremos mais detalhadamente.
A própria estrutura python dpapick foi criada pelo pesquisador Jean-Michel Pikode em 2014 e é uma implementação de mecanismos DPAPI nas bibliotecas de criptografia Python. O uso de python, assim como a estrutura da estrutura, permite que ela seja facilmente adaptada a vários mecanismos DPAPI. Na versão original, o dpapick não conseguiu usar a chave de backup do domínio para descriptografar as chaves mestras e não possuía mecanismos para descriptografar as chaves mestras criadas no Windows 10 no modo de máquina de domínio.
Após corrigir essas deficiências e expandir a funcionalidade para descriptografar os blobs DPAPI, o dpapick se transformou em uma ferramenta muito boa para decodificar offline o DPAPI. Abaixo, como exemplos, mostraremos as opções para usar essa estrutura para descriptografar os dados do usuário criptografados por meio da DPAPI.
Chrome - pegue e descriptografe cookies e senhas
Os
%localappdata%\Google\Chrome\User Data\Default\Cookies
Chrome são armazenados no arquivo
%localappdata%\Google\Chrome\User Data\Default\Cookies
Os dados de login estão no arquivo
%localappdata%\Google\Chrome\User Data\Default\Login Data
Ambos os arquivos são bancos de dados sqlite3 nos quais dados confidenciais são armazenados como blobs DPAPI. Como parte do dpapick, há um dissector (analisador) pronto para esses dados (examples / chrome.py). Para uma descriptografia bem-sucedida, ele precisa especificar o diretório com chaves mestras, o sid do usuário, sua senha ou o local da chave privada do controlador de domínio, bem como o arquivo sqlite3 do Chrome (dados de cookie ou login).
Descriptografia offline do cookie do Chrome com senha de usuário
./chrome.py --cookie <cookiefile> --sid <SID> --password <..> --masterkey <masterkeydir>
Descriptografia offline de um cookie do Chrome usando um hash da senha de um usuário
./chrome.py --cookie <cookiefile> --sid <SID> --hash <..> --masterkey <masterkeydir>
Descriptografia offline de senhas do Chrome usando uma chave privada de um controlador de domínio
./chrome.py --chrome <login file> --pkey <rsa-priv.pem> --masterkey <masterkeydir>
DPAPI para certificados de cliente
Os certificados de cliente são usados muito onde - para gerar OTP, EFS ou autenticação em VPN, aplicativos da Web, etc.
Os certificados de chave pública são armazenados no perfil do usuário:
%APPDATA%\Microsoft\SystemCertificates\My\Certificates\
E chaves privadas, com a ajuda da qual a assinatura é realmente executada ou outras operações criptográficas são criptografadas via DPAPI e também estão localizadas no perfil do usuário no caminho:
%APPDATA%\Roaming\Microsoft\Crypto\RSA\<SID>\
Para descriptografar com êxito as chaves privadas do certificado e recriar os arquivos PFX, além dos arquivos acima, também precisamos das chaves mestras do usuário, bem como do seu SID e senha (ou uma chave RSA privada do controlador).
Usando o Dpapick e a senha do usuário, descriptografamos isso:
./efs.py --certificates <cert dir> --rsakyes <RSA dir> --sid <..> --password <..> --masterkey <masterkeydir>

O parâmetro rsaout opcional na captura de tela permite exportar adicionalmente chaves RSA descriptografadas no formato PEM. O resultado do script é um arquivo PFX recriado sem senha, que já pode ser importado para você e usado para a finalidade a que se destina. Se nos diretórios acima houver vários certificados e chaves privadas, o dpapick tentará descriptografar cada um deles e criar vários arquivos pfx.
As mesmas ações podem ser executadas usando uma chave privada de domínio para descriptografar a chave mestra, especificando o parâmetro apropriado:
./efs.py --certificates <cert dir> --rsakyes <RSA dir> --masterkey <masterkeydir> --pkey <domain bkp key>
Um pouco mais sobre os "chips" do domínio
Falando sobre o domínio do Active Directory, vale a pena mencionar um recurso maravilhoso como Credentials Roaming - uma função de domínio quando chaves mestras, senhas criptografadas e certificados “viajam” para o usuário em todo o domínio do Active Directory. Eles não estão vinculados a uma máquina específica e "chegarão" ao computador em que o usuário do domínio efetua login.
Quando esse "recurso" é ativado, todos os certificados importados pelo usuário, bem como todas as suas chaves e senhas privadas, são direcionados para o AD e são armazenados nos atributos de conta correspondentes: msPKIAccountCrdentailas e msPKIDPAPIMasterKeys.
Você pode ver como fica dentro do AD, por exemplo, através do ldapsearch:
ldapsearch -x -h dc1.lab.local -D “user1@lab.local" -s sub "samAccountname=user1" ldapsearch -x -h dc1.lab.local -D "admin@lab.local" -s sub "samAccountname=anyuser"

Por padrão, um usuário pode receber apenas atributos DPAPI para sua conta. Mas com privilégios elevados, isso pode ser feito para qualquer conta, incluindo uma conta de computador.
O Roaming de credenciais é uma tecnologia muito conveniente, não apenas para administradores, mas também para clientes externos. Após acessar o controlador de domínio via ldap, você pode mesclar todos os certificados de usuário, suas chaves mestras e senhas criptografadas pela DPAPI (por exemplo, senhas para conectar-se a unidades de rede).
E por que não adicionar essa funcionalidade ao dpapick, pensamos - e o ensinamos a extrair automaticamente certificados de um controlador de domínio através do ldap, descriptografá-los e gerar arquivos pfx.
./efs.py –ldap-server <..> --ldap-connect admin:Passw0rd@lab.local --ldap-user user1 --password Password1 ./efs.py –ldap-server <..> --ldap-connect admin:Passw0rd@lab.local --ldap-user user1 --pkey <rsa-priv.pem>

Para executar o script, é necessário especificar o controlador de domínio como um servidor LDAP, os detalhes de conexão com ele, o nome da conta para a qual recebemos certificados e uma senha para descriptografar a chave mestra (ou uma chave de backup privada do controlador).
Dropbox Foi em 60 segundos ...
O Dropbox é outro exemplo de uso da DPAPI para armazenar segredos de usuários. Os tokens de autorização para o dropbox são armazenados em arquivos:
c:\users\<username>\Appdata\Local\Dropbox\instance1\config.dbx c:\users\<username>\Appdata\Local\Dropbox\instance_db\instanse.dbx
Esses são bancos de dados sqlite3 criptografados que contêm dados para conexão. Para criptografia, é usada uma chave simétrica, que por sua vez é criptografada via DPAPI e armazenada no registro:
HKCU\SOFTWARE\Dropbox\ks
HKCU\SOFTWARE\Dropbox\ks1
Portanto, a ordem geral do seqüestro de caixas de depósito é a seguinte:
- pegamos dois arquivos de banco de dados do computador;
- nós obtemos as chaves do registro e as descriptografamos usando o dpapick;
- usando DPAPI, criptografamos as chaves recebidas em nossa máquina e as colocamos no registro;
- em nossa máquina, substituímos os arquivos do banco de dados e executamos o Dropbox.
Você deve estar ciente de que permissões especiais estão definidas para os ramos do registro acima. Eles só podem ser lidos pelo usuário. Nem o administrador nem o sistema podem lê-los. Portanto, se você acessar o registro em nome de outro usuário (mesmo um administrador), primeiro defina as permissões apropriadas nas ramificações do registro especificadas. Por exemplo, então (PowerShell):
$Sid="S-1-5-21-3463664321-2923530833-3546627382-1000"; $key=[Microsoft.Win32.Registry]::USERS.OpenSubKey("$sid\SOFTWARE\Dropbox\ks",[Microsoft.Win32.RegistryKeyPermissionCheck]::ReadWriteSubTree,[System.Security.AccessControl.RegistryRights]::ChangePermissions); $acl = $key.GetAccessControl(); $rule = New-Object System.Security.AccessControl.RegistryAccessRule ("administrator","FullControl","Allow"); $acl.SetAccessRule($rule); $key.SetAccessControl($acl); $key_path = "REGISTRY::HKEY_USERS\$Sid\SOFTWARE\Dropbox\ks"; (Get-ItemProperty -Path $key_path -Name Client).Client;
As chaves ks e ks1 contêm o cabeçalho (8 bytes) da versão dbx antes do blob DPAPI e o blob md5 HMAC DPAPI (últimos 16 bytes). O próprio blob DPAPI começa com o nono byte 0x01000000D0 ... Esses bytes devem ser copiados no formato base64 para um arquivo, que é descriptografado via dpapick:
./filegeneric.py --sid <..> --password <..> --masterkey <..> --base64file <..>
Em sua máquina, você precisa criptografar as chaves recebidas no último estágio com nossa chave mestra e colocar o resultado nas ramificações de registro apropriadas.
Para criptografia, é mais conveniente usar o PowerShell:
$hdata="4efebbdf394d4003317fc5c357beac4b"; [Byte[]] $dv0_entropy = 0xd1,0x14,0xa5,0x52,0x12,0x65,0x5f,0x74,0xbd,0x77,0x2e,0x37,0xe6,0x4a,0xee,0x9b; $data = ($hdata -split "(?<=\G\w{2})(?=\w{2})" | %{ [Convert]::ToByte( $_, 16 ) }); Add-Type -AssemblyName System.Security; $dk1 = [system.security.cryptography.protecteddata]::Protect($data,$dv0_entropy,[System.Security.Cryptography.DataProtectionScope]::CurrentUser); $pr=([System.BitConverter]::ToString($dk1));$pr $OBJ_hmac = New-Object System.Security.Cryptography.HMACMD5 $hmac = $OBJ_hmac.ComputeHash($dk1) $pr=([System.BitConverter]::ToString($hmac));$pr
Nesse caso, hdata é a chave que foi recebida no estágio de descriptografia. dv0_entropy é a constante de entropia usada pelo DBOX no DPAPI. Para o blob resultante, você precisa atribuir um cabeçalho de 8 bytes 0x00000000F6000000 na frente e um HMACMD5 + 0x00 na parte traseira
Depois disso, você pode gravar dados nas chaves do Registro apropriadas.
DPAPI e RSA SecurID
O RSA SecurID é um programa cliente usado para gerar uma senha descartável, desenvolvida pela RSA.
É algo bastante popular para grandes empresas e também usa DPAPI, apenas um pouco mais complicado. Nesse caso, os engenheiros da RSA decidiram se confundir e aplicaram esquemas DPAPI mais complexos.
Os dados do token são armazenados no arquivo
%LOCALAPPDATA%\RSA\SecurIDStorage
, que é o banco de dados sqlite3. Cada token criptografado contém seu EnTokenSid criptografado (parâmetros para a inicialização do algoritmo de geração de código). EnTokenSid é gerado com base em DBKey, SID do token e usuário SID, e DBKey já é gerado pela descriptografia DPAPI DBKeyEnc na seguinte sequência:
DBKeyEnc = DPAPI(CurrenUser, DPAPI(LocalSystem(DBKey))
I.e. Primeiro, a chave do banco de dados é criptografada com a chave mestra do sistema e, em seguida, o blob DPAPI resultante é novamente criptografado com a chave mestra do usuário.
Também no banco de dados há CryptoCheckSum do CheckSum:
CryptoCheckSum = blob DPAPI (CurrenUser)
Portanto, para que o SecurIDStorage mesclado funcione em sua máquina, você deve:
- Devido ao fato de o SID do usuário estar envolvido na formação do EncTokenSid, é necessário definir o SID do usuário atual na máquina virtual com o mesmo valor que o SID do usuário do qual a base do SecurIDStorage é obtida. O utilitário NewSid da SysInternals nos ajudará com isso;
- Descriptografar DBKeyEnc usando a chave mestra do usuário e a senha ou a chave privada do domínio (caso a máquina seja um domínio);
- Descriptografe o resultado da descriptografia anterior usando a chave mestra do sistema e o valor do parâmetro DPAPI_SYSTEM;
- Descriptografar CryptoCheckSum usando a chave mestra do usuário
- Criptografe os valores DBKey e CheckSum recebidos em ordem inversa já em sua máquina virtual;
- Em algumas versões do SecurID, você também precisará definir o tamanho do HDD da máquina virtual para o mesmo tamanho que o tamanho do HDD da máquina de origem, como o programa verifica na inicialização.
Como mencionado acima, para descriptografar DBKeyEnc, além da chave mestra do usuário, também precisamos de uma chave mestra do sistema, além do valor DPAPI_SYSTEM, com o qual as chaves mestras do sistema são descriptografadas. DAPPI_SYSTEM é na verdade uma pré-chave já formada, participando da formação das chaves mestras do sistema. Você pode obtê-lo da memória LSASS (via mimikatz ou analisando o despejo de processo) ou dos ramos de registro correspondentes (HKLM \ SYSTEM, HKLM \ SECURITY), despejando-os e analisando o mesmo Impacket.
Em seguida, podemos usar o DPAPI_SYSTEM obtido para descriptografar os blobs necessários usando o dpapick (o analisador é examples / filegeneric.py), conforme mostrado nas seguintes capturas de tela:
1) Obtendo DPAPI_SYSTEM via mimikatz offline

2) Obtendo DPAPI_SYSTEM via Impacket offline

3) Descriptografia DPAPIck com chaves mestras do usuário e do sistema

Folha de dicas
Para que você não esqueça o local dos dados específicos - nós os colocaremos em uma seção separada:
Chaves mestras personalizadas %APPDATA%\Microsoft\Protect\<SID>\*
Chaves mestras do sistema Windows\System32\Microsoft\Protect\*
DPAPI_SYSTEM LSASecrets – online SYSTEM, SECURITY (reg save …, system\backup, etc)
Certificados de usuário %APPDATA%\Microsoft\SystemCertificates\My\Certificates\ %APPDATA%\Microsoft\Crypto\RSA\<SID>\
Certificados do sistema HKLM:\SOFTWARE\Microsoft\SystemCertificates\MY\Certificates\* C:\Programdata\Microsoft\Crypto\RSA\MachineKeys\
Chrome %localappdata%\Google\Chrome\User Data\Default\Cookies %localappdata%\Google\Chrome\User Data\Default\Login Data
Dropbox HKCU\SOFTWARE\Dropbox\ks HKCU\SOFTWARE\Dropbox\ks1 %APPDATA%\Local\Dropbox\instance1\config.dbx %APPDATA%\Local\Dropbox\instance_db\instanse.dbx
Rsa securid %LOCALAPPDATA%\RSA\SecurIDStorage
Pouca conclusão
O DPAPI é uma coisa maravilhosa - o principal é entender como ele pode ser usado na realização de estudos de pentests e RedTeam.
Neste artigo, vimos apenas alguns exemplos em que a descriptografia DPAPI pode ser aplicada. De fato, o escopo é muito mais amplo. Por exemplo, não consideramos chaves RDP (* .rdg), Icloud (arquivo pList), Skype (* .Xml), para conexão ao Wi-Fi. Em todos os lugares, a DPAPI é aplicada e os analisadores correspondentes são implementados como parte da estrutura dpapick.
Uma versão modificada do dpapick está disponível no nosso
GitHub . Pedimos que você use essa ferramenta para descriptografar a DPAPI e seremos gratos pelo desenvolvimento adicional do dpapick.
E algumas informações interessantes podem ser encontradas em nosso canal em
telegramas . Falamos sobre o IB através dos olhos do RedTeam.
PS Agradecemos aos organizadores do OFFZONE-2018 por uma conferência divertida!
PPS A segunda parte do artigo
aqui