Además de nuestro último
artículo sobre decodificación de blobs DPAPI, hablaremos sobre dos casos más que tuvimos que enfrentar. Se tratará de contraseñas guardadas en MS IE11 y navegadores Edge.
La estrategia sigue siendo la misma: descifraremos todo sin conexión. Para hacer esto, debe recoger los archivos necesarios.
Dependiendo del sistema operativo (Windows 7 o superior), las contraseñas guardadas deben buscarse en dos lugares:
En el caso de Windows 7, esta es una rama de registro
HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\IntelliForms\Storage2
Para Windows 8 y superior, almacenamiento de Windows Vault.
También debe tenerse en cuenta que en Windows 7, las contraseñas de autorización básica http también se almacenan en Windows Vault, por lo que recogerlas no hace daño en ningún caso.
Bueno, de acuerdo con la vieja tradición, todo esto, por supuesto, está encriptado a través de mecanismos DPAPI.
Ahora considere el algoritmo de descifrado con más detalle.
Windows 7 + IE11 (Edge)
Como se mencionó anteriormente, las contraseñas se almacenan en el registro del usuario actual y son blobs DPAPI cifrados con la clave maestra del usuario.
Pero hay una diferencia importante: la entropía se usa al cifrar la contraseña. La entropía es la URL en la que se ingresa una contraseña en el formato
("https://url"+"\x00").lower().encode("utf-16-le")
.
Para descifrar una contraseña, ¡necesita conocer la URL completa! De lo contrario nada.
Pero para que el propio IE sepa cómo descifrar la contraseña, esta URL se codifica y almacena en el registro como un nombre clave con DPAPI-blob.
Considere un pequeño ejemplo. Para el sitio
https://rdot.org/forum/
contraseña guardada se verá así:
A88E21329B5372B856CE238B79D1F28D8EA1FD359D REG_BINARY 01000000D08C9DDF0115D1118C7A00C......BC310C51EE0F9B05D
donde
A88 ... es una URL hash
https://rdot.org/forum/
01000000D08C ... - Blob DPAPI que contiene nombre de usuario y contraseña
El algoritmo de hash de URL es sencillo. Se puede encontrar más información sobre él en los desarrollos de
Vault7 basados en la CIA.
En python, se ve así:
import hashlib url = "https://rdot.org/Forum/".lower() + "\x00" url_utf_16_le = url.encode("utf-16-le") sha1obj = hashlib.sha1(url_utf_16_le) urldigest = sha1obj.digest() checksum = 0 len(urldigest) for abyte in urldigest: checksum = (checksum + (ord(abyte))) & 0xFF hash = sha1obj.hexdigest().upper() cksum = "%02X" % checksum reg_value_name = "%s%s" % (hash, cksum) print reg_value_name
También se puede encontrar una lista de las últimas 50 URL ingresadas en el registro:
HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\typedurls
Volvamos al ejemplo. Supongamos que necesitamos encontrar la contraseña guardada en
https://rdot.org/forum/
en el registro.
Sustituyendo el valor de la URL en el script de conversión, obtenemos el valor
A88E21329B5372B856CE238B79D1F28D8EA1FD359D
La clave con este nombre debemos encontrarla en el registro.
req query "HKEY_USERS\<SID>\Software\Microsoft\Internet Explorer\IntelliForms\Storage2"
Si se encuentra dicha clave, debe copiarse en el archivo como valores hexadecimales (es decir, interpretar el valor de la clave como blob hexadecimal) y descifrarse como blob DPAPI utilizando entropía:
("https://rdot.org/forum/".lower() + "\x00").encode("utf-16-le")
("https://rdot.org/forum/".lower() + "\x00").encode("utf-16-le")
Para el descifrado, puede usar dpapick, haciendo los cambios apropiados para tener en cuenta la entropía en el descifrado.
En el archivo examples / filegeneric.py, la llamada a la función
probe.try_decrypt_with_password(options.password, mkp, options.sid)
reemplazar con
probe.try_decrypt_with_password(options.password, mkp, options.sid, entropy=("https://rdot.org/forum/".lower() + "\x00").encode("utf-16-le"))
y después de eso llama a dpapick como siempre:
./filegeneric.py --sid <SID> --masterkey <mk dir> --password <..> --inputfile <dpapi blob from registry>
Si la clave maestra se descifra correctamente, la salida recibirá el nombre de usuario y la contraseña guardados (después de una cierta cantidad de datos binarios del servicio).
Windows 8.1 y superior
En caso de guardar contraseñas en Win8 y versiones posteriores, las contraseñas de los formularios http, así como la autorización básica http, se almacenan en Windows Vault. Y lo que es bueno: junto con la contraseña, también se guarda la URL completa del sitio al que se acerca.
Vault está encriptado en dos etapas: primero, el bloque de datos completo está encriptado por AES, y la clave simétrica para el desencriptado es encriptada por DPAPI y guardada en un archivo. El algoritmo completo de cifrado-descifrado se describe en el artículo de los chicos de
Zena Forensics .
También desarrollaron descifradores especiales para Windows Vault basados en dpapick (dpapilab). Puede tomarlos en ZF git o descargar un tenedor de nuestro
github .
El almacenamiento del almacén se encuentra en el perfil del usuario:
C:\Users\<user>\AppData\Local\Microsoft\Vault\<GUID>\
Dentro del archivo .vpol hay un blob DPAPI cifrado con una clave de usuario y que almacena una clave AES para descifrar .vcrd
Para descifrar Vault, debes ejecutar:
./vaultdec.py --masterkey <mk dir> --sid <SID> --password <pass> <VAULT DIR>
En lugar de una contraseña, puede usar una clave de dominio, como se muestra en el
artículo anterior . También debe tenerse en cuenta que si la política de Credencial de itinerancia se incluye en la máquina en el dominio, los datos de Windows Vault se almacenarán en ldap. Puede leer sobre esto en nuestro primer artículo sobre DPAPI.
Una pequeña adición: para que el script funcione correctamente, lo más probable es que necesites instalar los viejos enlaces de Python:
apt install python-construct.legacy
Hoja de trucos
Para descifrar las contraseñas IE, Edge, así como las contraseñas almacenadas en Windows, debe elegir:
Directorio de la bóveda c:\Users\<user>\AppData\Local\Microsoft\Vault\<GUID>\
catálogo con llaves maestras c:\Users\<user>\AppData\roaming\microsoft\Protect\<SID>\
contenido de la clave de registro HKEY_USERS\<SID>\Software\Microsoft\Internet Explorer\IntelliForms\Storage2 HKEY_USERS>\<SID>\Software\Microsoft\Internet Explorer\typedurls
Además, debe conocer la contraseña de usuario o la clave de copia de seguridad de dominio dpapi para descifrar sin contraseña.