El segundo artículo se basa en los resultados del desempeño de nuestro equipo en OFFZONE-2018. Esta vez, considere una charla con MainTrack "Windows DPAPI" Sekretiki "o DPAPI para pentesters".
Atencion ¡Muchas hayas!
Al realizar campañas de RedTeam, quiero dar menos razones para la reacción de BlueTeam, pero puede haber muchas. Por ejemplo, ejecutar mimikatz para obtener contraseñas o certificados de usuario. Incluso si pudiéramos "otmazyvat" de Kaspersky, BlueTeam tiene la capacidad de rastrear usando herramientas especializadas como Sysmon, Microsoft ATA, etc. Al mismo tiempo, me gustaría obtener la máxima información de una máquina de usuario comprometida. En el curso de las campañas llevadas a cabo repetidamente por RedTeam para contrarrestar equipos reales de BlueTeam, llegamos a la conclusión de que es necesario evitar acciones que puedan servir como indicadores de compromiso del sistema. Para lograr este objetivo es posible mediante el uso de mecanismos legales y acciones proporcionadas por el sistema operativo para el usuario.
Una de esas herramientas legales es el mecanismo DPAPI (API de protección de datos de Windows), que es utilizado por el sistema operativo y varias aplicaciones para cifrar datos confidenciales del usuario (principalmente contraseñas, claves criptográficas, etc.). Para el usuario final y sus aplicaciones, DPAPI parece extremadamente simple : Solo hay 2 funciones: "cifrar datos" y "descifrar datos". En este artículo me gustaría considerar cómo tal mecanismo es útil para los pentesters durante las campañas de RedTeam.
¿Qué es DPAPI? Solo brevemente y en ruso
Desde 2000, todos los sistemas operativos Windows han comenzado a usar el motor DPAPI para mantener seguros los datos del usuario.
Si omitimos toda la criptografía que examinamos en el informe, para descifrar los datos cifrados a través de DPAPI, necesitamos: una clave maestra, SID de usuario, hash de contraseña de usuario y el blob DPAPI (datos DPAPI cifrados).
En general, el proceso se ve así:

Dentro de nuestro "sombrero criptográfico" hay muchos mecanismos criptográficos diferentes que no consideraremos en este artículo, para no sobrecargar al lector. Solo notamos que la parte principal de DPAPI es la llamada Masterkey (clave maestra). En términos simples, la clave maestra es de 64 bytes de datos aleatorios cifrados con la clave previa, que se genera a partir de la contraseña del usuario y su SID.

Los parámetros adicionales también participan en la generación previa a la clave: el número de iteraciones (IterN), sal y HMAC, que pueden variar de un caso a otro. Los valores de estos parámetros se almacenan junto con la clave maestra en un archivo.
Por lo tanto, conociendo la contraseña del usuario, su SID y leyendo los parámetros de generación del archivo de clave maestra (HMAC, Salt, InterN), podemos generar una clave previa y descifrar la clave maestra, es decir. obtenga los 64 bytes muy aleatorios que usaremos para descifrar los blobs DPAPI.
¿Qué pasa si cambio mi contraseña?
Por lo general, las contraseñas de los usuarios cambian a intervalos regulares. ¿Qué sucede si el usuario cambia la contraseña? ¿A dónde fue el anterior? De hecho, para descifrar la clave maestra, debe conocer la contraseña del usuario, y volver a cifrar todas las claves maestras del usuario cada vez es un placer demasiado costoso. En este caso, todo está pensado en Windows.
Hay un archivo especial (CREDHIST), cuya tarea es almacenar todas las contraseñas de usuario anteriores. También se cifra con la contraseña actual del usuario y se almacena en la pila. Si el sistema de repente no descifra la clave maestra, entonces procede de la siguiente manera: usando la contraseña actual, descifra el primer registro en CREDHIST. La contraseña está tratando de descifrar la clave maestra nuevamente, y así sucesivamente hasta que se agoten las contraseñas en la cadena o se descifre la clave maestra.
Un poco sobre las claves privadas de un controlador de dominio
Como habrás adivinado, DPAPI se aplica a todos los usuarios, incluidos los usuarios de dominio. Para poder restablecer la contraseña a un usuario que la ha olvidado con éxito después de una fiesta el viernes por la noche, necesita una clave de repuesto que se guardará en un lugar seguro. Según Microsoft, un lugar tan confiable es un controlador de dominio.
La esencia del mecanismo para descifrar la clave maestra después de restablecer la contraseña del usuario es la siguiente: se crea un par de claves RSA, privadas y públicas, en el controlador de dominio. La clave privada se almacena en el controlador de dominio en la base de datos NTDS y se llama BCKUPKEY_xxxx (consulte la figura a continuación), y la clave pública se distribuye a todos los sistemas de dominio y se utiliza para generar un duplicado de la clave maestra cuando se genera.
Después de crear una clave maestra en una máquina de dominio, también se crea su duplicado (o más bien, el material de la clave maestra es sus 64 bytes), que se almacena junto con la clave maestra principal en un archivo y se llama Clave de dominio. Si pierde la clave maestra principal, es decir Al restablecer la contraseña del usuario, el sistema envía un duplicado al controlador de dominio y le pide que la descifre. El controlador, habiendo autorizado al usuario, descifra el duplicado y lo devuelve al sistema, después de lo cual el material de la clave maestra ya está encriptado nuevamente con una nueva contraseña.

Al tener los privilegios apropiados en el dominio (generalmente administrador), puede obtener estas claves RSA privadas del controlador de dominio a través del mecanismo de replicación y usarlas para descifrar aún más las claves maestras creadas en las máquinas de dominio. Esto se puede hacer usando mimikatz o DSInternals. Puede leer más sobre esto en el wiki
mimikatz o en el blog
DSInternals .
¿Dónde se almacenan las claves maestras y qué son?
La clave maestra puede ser el usuario y el sistema, según los secretos que estén cifrados. La clave maestra de usuario se almacena en el perfil de usuario de la siguiente manera:
Users\%USER%\AppData\Roaming\Microsoft\Protect\%SID%\
Por si acaso, el sistema almacena todas las claves maestras utilizadas por el usuario. Después de todo, ella no sabe de antemano qué maestro necesitará descifrar algo con una clave. El GUID de la clave actual utilizada se almacena en el archivo Preferido.

Las claves maestras del sistema se almacenan de la siguiente manera:
windows\system32\Microsoft\Protect\S-1-5-18\
De manera similar con el usuario, se utiliza una clave maestra, cuyo nombre se puede encontrar en el archivo Preferido, donde se almacenan todas las claves que se han utilizado.

Bueno, ¿qué puede darle este DPAPI al Pentester?
Dado que DPAPI es un mecanismo legal y simple, varias aplicaciones intentan usarlo. Porque es conveniente y seguro. Por el momento, por supuesto.
Por ejemplo, DPAPI se usa para cifrar claves privadas de certificados de cliente y sistema, claves WIFI, Chrome (cookies, contraseñas), DropBox, Skype, RSA SecurID (una aplicación de software que genera claves únicas). Y esta no es una lista exhaustiva.
La tarea del pentester es descifrar los blobs necesarios y obtener contraseñas, cookies, etc.
Hay varias formas de hacer esto. De una forma u otra, todos se reducen a dos transcripciones: en línea y fuera de línea. El descifrado en línea es cuando en la máquina del usuario simplemente llamamos a las funciones del sistema para descifrar los datos y pasamos el blob DPAPI a la entrada, y el sistema hace todo por sí mismo: busca la clave maestra con la que se cifró el blob, lo descifra usando el SID del usuario y un hash de contraseña almacenado en la memoria LSASS.
La siguiente figura muestra un ejemplo de invocación de funciones DPAPI para cifrado y descifrado en powershell.

Primero, encriptamos nuestro secreto (en este caso, la palabra "Contraseña") llamando a la función [Security.Cryptography.ProtectedData] :: Protect (). Y hacemos esto dos veces, en el primer caso usando la clave maestra del usuario (parámetro CurrentUser), y en el segundo, la clave maestra del sistema (parámetro LocalMachine). Entonces podemos descifrar los blobs resultantes llamando a la función inversa - [Security.Cryptography.ProtectedData] :: UnProtect ().
Además, en este caso, el valor del parámetro CurrentUser o LocalMachine no importa, porque el sistema mismo encuentra una clave maestra adecuada para decodificar el blob y hace todo lo necesario. En ambos casos, obtenemos nuestro secreto inicial: la palabra "Contraseña" (su representación byte a bit).
Al descifrar en línea, es importante comprender en qué contexto está llamando a la función UnProtect (). Para que el descifrado tenga éxito, debe estar en una sesión de usuario o iniciar sesión en una nueva sesión. El problema es el hash de contraseña, que se almacena en la memoria LSASS. Si realiza una llamada fuera de la sesión del usuario (por ejemplo, inició sesión en el sistema a través de la red a través de psexec o meterpreter), entonces no necesita un hash de contraseña para descifrar la clave maestra. Él, por supuesto, está en la próxima sesión, pero LSASS no te lo dará, porque Esta es otra sesión, aunque fue creada bajo el mismo usuario. Para un descifrado en línea exitoso, debe migrar a cualquier proceso iniciado por el usuario que inició sesión a través de la GUI o iniciar sesión completamente en el sistema, por ejemplo, a través de RDP.
Una alternativa a powershell para el descifrado en línea de blobs DPAPI puede ser una llamada a mimiktaz :: blob con el parámetro / unprotect. En la entrada, se le da un archivo binario con un blob DPAPI, y en la salida obtenemos datos descifrados. Se describen más casos con mimikatz
en el blog HarmJ0y.
La bola blanca cayó. ¿Qué hacer con mi granja con vidyuhi?
Debido al hecho de que las claves maestras DPAPI están encriptadas en la contraseña del usuario, puede intentar el proceso inverso: fuerza bruta la contraseña del usuario con su clave maestra. Por ejemplo, recibimos una conexión inversa de nuestra macro o DDE desde el archivo docx enviado. Podemos tomar la clave maestra del usuario y restaurar la contraseña del usuario sin escalar los privilegios y los lanzamientos de mimikatz.
¿Puedo usar Hashcat o JohnTheRipper para la fuerza bruta de la contraseña? Pero antes de eso, debe obtener los parámetros para la fuerza bruta de la composición de John con el script apropiado:
./DPAPImk2john.py –S <sid> -mk <masterkey> -c <domain|local>
Entonces ya podemos enviar el resultado del script a nuestra granja con tarjetas de video y esperar que el usuario tenga una contraseña débil, porque la velocidad de fuerza bruta de la clave maestra es aproximadamente comparable a la velocidad de enumeración WPA2, es decir bastante despacio
Vale la pena señalar aquí que en el caso de que se genere una clave maestra en un dominio de Windows 10, se agregan otras 10.000 rondas del algoritmo PBKDF2 a la generación de la clave previa. Pero aún peor, ni Hashcat ni JohnTheRipper lo saben (al menos al momento de escribir esto), lo que significa que no podrán eliminar la contraseña de dicha clave maestra.
"Quitar todo lo que es malo y luego resolverlo ..."
Como notamos anteriormente, la ejecución de acciones sospechosas en la máquina del usuario puede provocar un interés adicional por parte del equipo de Blueteam, y esto, en consecuencia, está plagado del hecho de que todo RedTeam terminará allí. Un ejemplo es el lanzamiento de powershell en la computadora de un contador o secretario, seguido de una investigación del incidente. Para no causar sospechas innecesarias, es mejor usar métodos fuera de línea para decodificar blobs DPAPI. Para hacer esto, primero debe recoger todo lo que necesita de la máquina, a saber:
- Claves maestras de usuario
- Claves maestras del sistema
- Archivo CREDHIST (si no es una máquina de dominio);
- Contraseña de usuario (o su hash sha1 / ntlm);
- SID del usuario;
- DPAPI blobs que queremos descifrar.
Para el descifrado en modo fuera de línea, no podemos prescindir de herramientas especializadas. Dichas herramientas pueden ser:
- Mimikatz
- Impacket (a partir de la versión 18, tiene funcionalidad DPAPI);
- Dpapick framework.
Se trata del marco dpapick del que hablaremos con más detalle.
El marco de trabajo de python dpapick fue creado por el investigador Jean-Michel Pikode en 2014 y es una implementación de mecanismos DPAPI en las bibliotecas de cifrado de Python. El uso de python, así como la estructura del marco, permite que se adapte fácilmente a varios mecanismos DPAPI. En su versión original, dpapick no podía usar la clave de copia de seguridad del dominio para descifrar las claves maestras, y no había mecanismos para descifrar las claves maestras creadas en Windows 10 en modo máquina de dominio.
Después de corregir estas deficiencias y expandir la funcionalidad para descifrar los blobs DPAPI, dpapick se convirtió en una herramienta bastante buena para la decodificación fuera de línea de DPAPI. A continuación, como ejemplos, mostraremos las opciones para usar este marco para descifrar los datos de usuario cifrados a través de DPAPI.
Chrome: toma y descifra cookies y contraseñas
Las
%localappdata%\Google\Chrome\User Data\Default\Cookies
Chrome se almacenan en el archivo
%localappdata%\Google\Chrome\User Data\Default\Cookies
Los datos de inicio de sesión están en el archivo
%localappdata%\Google\Chrome\User Data\Default\Login Data
Ambos archivos son bases de datos sqlite3 en las que los datos confidenciales se almacenan como blobs DPAPI. Como parte de dpapick, hay un disector (analizador) listo para usar de estos datos (ejemplos / chrome.py). Para un descifrado exitoso, necesita especificar el directorio con las claves maestras, el sid del usuario, su contraseña o la ubicación de la clave privada del controlador de dominio, así como el archivo sqlite3 de Chrome (cookie o datos de inicio de sesión).
Descifrado sin conexión de la cookie de Chrome con contraseña de usuario
./chrome.py --cookie <cookiefile> --sid <SID> --password <..> --masterkey <masterkeydir>
Descifrado sin conexión de una cookie de Chrome utilizando un hash de la contraseña de un usuario
./chrome.py --cookie <cookiefile> --sid <SID> --hash <..> --masterkey <masterkeydir>
Descifrado sin conexión de contraseñas de Chrome con una clave privada de un controlador de dominio
./chrome.py --chrome <login file> --pkey <rsa-priv.pem> --masterkey <masterkeydir>
DPAPI para certificados de cliente
Los certificados de cliente se usan mucho donde: para generar OTP, EFS o autenticación en VPN, aplicaciones web, etc.
Los certificados de clave pública se almacenan en el perfil del usuario:
%APPDATA%\Microsoft\SystemCertificates\My\Certificates\
Y las claves privadas, con la ayuda de las cuales la firma se realiza realmente u otras operaciones criptográficas se cifran a través de DPAPI y también se encuentran en el perfil del usuario a lo largo de la ruta:
%APPDATA%\Roaming\Microsoft\Crypto\RSA\<SID>\
Para descifrar con éxito las claves de certificado privadas y luego recrear los archivos PFX, además de los archivos anteriores, también necesitamos las claves maestras del usuario, así como su SID y contraseña (o una clave RSA privada del controlador).
Usando Dpapick y la contraseña de usuario, desciframos esto:
./efs.py --certificates <cert dir> --rsakyes <RSA dir> --sid <..> --password <..> --masterkey <masterkeydir>

El parámetro opcional rsaout en la captura de pantalla le permite exportar adicionalmente claves RSA descifradas en formato PEM. El resultado de la secuencia de comandos es un archivo PFX recreado sin una contraseña, que ya puede importarse a usted mismo y usarse para el propósito previsto. Si en los directorios anteriores hay varios certificados y claves privadas, dpapick intentará descifrar cada uno de ellos y crear varios archivos pfx.
Se pueden realizar las mismas acciones utilizando una clave privada de dominio para descifrar la clave maestra especificando el parámetro apropiado:
./efs.py --certificates <cert dir> --rsakyes <RSA dir> --masterkey <masterkeydir> --pkey <domain bkp key>
Un poco más sobre los "chips" del dominio
Hablando sobre el dominio de Active Directory, vale la pena mencionar una característica tan maravillosa como Credentials Roaming, una función de dominio cuando las claves maestras, las contraseñas cifradas y los certificados "viajan" para el usuario en todo el dominio de Active Directory. No están vinculados a una máquina específica y "llegarán" a la computadora en la que el usuario del dominio inicia sesión.
Cuando esta "característica" está activada, todos los certificados que importa el usuario, así como todas sus claves privadas y contraseñas, vuelan a AD y se almacenan en los atributos de cuenta correspondientes: msPKIAccountCrdentailas y msPKIDPAPIMasterKeys.
Puede ver cómo se ve dentro de AD, por ejemplo, a través de 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 defecto, un usuario solo puede recibir atributos DPAPI para su cuenta. Pero con privilegios elevados, esto se puede hacer para cualquier cuenta, incluida una cuenta de computadora.
El roaming de credenciales es una tecnología muy conveniente no solo para administradores, sino también para pentesters. Después de acceder al controlador de dominio a través de ldap, puede fusionar todos los certificados de usuario, sus claves maestras y contraseñas cifradas a través de DPAPI (por ejemplo, contraseñas para conectarse a unidades de red).
Y pensamos por qué no agregar dicha funcionalidad a dpapick, y le enseñamos cómo extraer automáticamente certificados de un controlador de dominio a través de ldap, descifrarlos y generar archivos 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 ejecutar el script, es necesario especificar el controlador de dominio como un servidor ldap, los detalles de la conexión, el nombre de la cuenta para la que recibimos certificados y una contraseña para descifrar la clave maestra (o una clave de respaldo privada del controlador).
Dropbox Ido en 60 segundos ...
Dropbox es otro ejemplo del uso de DPAPI para almacenar secretos de usuario. Los tokens de autorización para Dropbox se almacenan en archivos:
c:\users\<username>\Appdata\Local\Dropbox\instance1\config.dbx c:\users\<username>\Appdata\Local\Dropbox\instance_db\instanse.dbx
Estas son bases de datos encriptadas sqlite3 que contienen datos para la conexión. Para el cifrado, se utiliza una clave simétrica, que a su vez se cifra mediante DPAPI y se almacena en el registro:
HKCU\SOFTWARE\Dropbox\ks
HKCU\SOFTWARE\Dropbox\ks1
Por lo tanto, el orden general del secuestro de Dropbox es el siguiente:
- tomamos dos archivos de base de datos de la computadora;
- obtenemos las claves del registro y las desciframos usando dpapick;
- usando DPAPI, encriptamos las claves recibidas en nuestra máquina y las colocamos en el registro;
- en nuestra máquina reemplazamos los archivos de la base de datos y ejecutamos Dropbox.
Debe tener en cuenta que se establecen permisos especiales para las ramas de registro anteriores. Solo pueden ser leídos por el usuario. Ni el administrador ni el sistema pueden leerlos. Por lo tanto, si accede al registro en nombre de otro usuario (incluso un administrador), primero debe establecer los permisos apropiados en las ramas de registro especificadas. Por ejemplo, entonces (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;
Las claves ks y ks1 contienen el encabezado (8 bytes) de la versión dbx antes del blob DPAPI y el blob md5 HMAC DPAPI (últimos 16 bytes). El blob DPAPI comienza con el noveno byte 0x01000000D0 ... Estos bytes deben copiarse en formato base64 a un archivo, que luego se descifra mediante dpapick:
./filegeneric.py --sid <..> --password <..> --masterkey <..> --base64file <..>
Luego, en su máquina, debe cifrar las claves recibidas en la última etapa con nuestra clave maestra y colocar el resultado en las ramas de registro apropiadas.
Para el cifrado, lo más conveniente es usar 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
En este caso, hdata es la clave que se recibió en la etapa de descifrado. dv0_entropy es la constante de entropía utilizada por DBOX en DPAPI. Para el blob resultante, debe asignar un encabezado de 8 bytes 0x00000000F6000000 al frente y HMACMD5 + 0x00 al reverso
Después de eso, puede escribir datos en las claves de registro apropiadas.
DPAPI y RSA SecurID
RSA SecurID es un programa cliente que se utiliza para generar una contraseña de un solo uso, desarrollado por RSA.
Es algo bastante popular para las grandes empresas y también utiliza DPAPI, solo que un poco más complicado. En este caso, los ingenieros de RSA decidieron confundirse y aplicaron esquemas DPAPI más complejos.
Los datos del token se almacenan en el archivo
%LOCALAPPDATA%\RSA\SecurIDStorage
, que es la base de datos sqlite3. Cada token cifrado contiene su EnTokenSid cifrado (parámetros para la inicialización inicial del algoritmo de generación de código). EnTokenSid se genera sobre la base de DBKey, SID del token y SID de usuario, y DBKey ya se genera mediante el descifrado DPAPI DBKeyEnc en la siguiente secuencia:
DBKeyEnc = DPAPI(CurrenUser, DPAPI(LocalSystem(DBKey))
Es decir Primero, la clave DB se cifra con la clave maestra del sistema, y luego el blob DPAPI resultante se vuelve a cifrar con la clave maestra del usuario.
También en la base de datos hay CryptoCheckSum de CheckSum:
CryptoCheckSum = blob DPAPI (CurrenUser)
Por lo tanto, para que el SecurIDStorage combinado funcione en su máquina, debe:
- Debido al hecho de que el SID del usuario está involucrado en la formación de EncTokenSid, es necesario establecer el SID del usuario actual en la máquina virtual en el mismo valor que el SID del usuario del que se toma la base de almacenamiento SecurIDS. La utilidad NewSid de SysInternals nos ayudará con esto;
- Descifre DBKeyEnc utilizando la clave maestra del usuario y la contraseña o la clave privada de dominio (en caso de que la máquina sea un dominio);
- Descifre el resultado del descifrado anterior utilizando la clave maestra del sistema y el valor del parámetro DPAPI_SYSTEM;
- Descifre CryptoCheckSum usando la clave maestra del usuario
- Cifre los valores DBKey y CheckSum recibidos en orden inverso ya en su máquina virtual;
- En algunas versiones de SecurID, también necesitará establecer el tamaño del disco duro de la máquina virtual en el mismo tamaño que el tamaño del disco duro de la máquina de origen, como el programa lo verifica al inicio.
Como se mencionó anteriormente, para descifrar DBKeyEnc, además de la clave maestra del usuario, también necesitaremos una clave maestra del sistema, así como el valor DPAPI_SYSTEM, con el que se descifran las claves maestras del sistema. DAPPI_SYSTEM es en realidad una preclave ya formada, que participa en la formación de claves maestras del sistema. Puede obtenerlo de la memoria LSASS (a través de mimikatz o analizando el volcado del proceso) o de las ramas de registro correspondientes (HKLM \ SYSTEM, HKLM \ SECURITY), volcarlas y analizar el mismo Impacket.
Entonces podemos usar el DPAPI_SYSTEM obtenido para descifrar los blobs necesarios usando dpapick (el analizador es examples / filegeneric.py), como se muestra en las siguientes capturas de pantalla:
1) Obtener DPAPI_SYSTEM a través de mimikatz sin conexión

2) Obtener DPAPI_SYSTEM a través de Impacket sin conexión

3) Descifrado DPAPIck con claves maestras de usuario y sistema

Hoja de trucos
Para que no olvide el lugar de datos específicos, los colocaremos en una sección separada:
Llaves maestras personalizadas %APPDATA%\Microsoft\Protect\<SID>\*
Claves maestras del sistema Windows\System32\Microsoft\Protect\*
DPAPI_SYSTEM LSASecrets – online SYSTEM, SECURITY (reg save …, system\backup, etc)
Certificados de usuario %APPDATA%\Microsoft\SystemCertificates\My\Certificates\ %APPDATA%\Microsoft\Crypto\RSA\<SID>\
Certificados del sistema HKLM:\SOFTWARE\Microsoft\SystemCertificates\MY\Certificates\* C:\Programdata\Microsoft\Crypto\RSA\MachineKeys\
Cromo %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
Poca conclusión
DPAPI es una cosa magnífica: lo principal es entender cómo se puede usar al realizar pentests y estudios de RedTeam.
En este artículo, observamos solo algunos ejemplos en los que se puede aplicar el descifrado DPAPI. De hecho, el alcance es mucho más amplio. Por ejemplo, no consideramos RDP (* .rdg), Icloud (archivo pList), Skype (*. Xml), claves para conectarse a Wi-Fi. En todas partes se aplica DPAPI y los analizadores correspondientes se implementan como parte del marco dpapick.
Una versión modificada de dpapick está disponible en nuestro
GitHub . Le instamos a utilizar esta herramienta para descifrar DPAPI y le agradeceremos el desarrollo posterior de dpapick.
Y se puede encontrar información interesante en nuestro canal en
telegramas . Contamos sobre IB a través de los ojos de RedTeam.
PD: ¡Gracias a los organizadores de OFFZONE-2018 por una conferencia genial!
PPS La segunda parte del artículo
aquí