Skip to content

Descifrar bóvedas de gestores de contraseñas: KeePass, 1Password, Bitwarden, LastPass

Extrae el hash de la clave maestra de una bóveda KeePass, 1Password, Bitwarden o LastPass con el script *2john correcto, asócialo a su modo hashcat y descífralo sin desperdiciar una semana de GPU.

Publicado el 4 min de lectura

Una bóveda de gestor de contraseñas se diseña sobre una sola premisa: la contraseña maestra es lo único que separa a un atacante de todo lo que hay dentro. Por eso KeePass, 1Password, Bitwarden y LastPass hacen pasar la contraseña maestra por un paso de derivación de clave deliberadamente lento antes de desbloquear nada — y por eso descifrar una de ellas, cuando tienes acceso legítimo al archivo, se parece mucho más a atacar bcrypt que a atacar MD5 en bruto.

Extrae primero el hash

Ninguno de estos formatos de bóveda se entrega a hashcat tal cual. Cada uno tiene un extractor dedicado de John the Ripper que saca del archivo de la bóveda los parámetros de derivación de clave y un valor de verificación:

keepass2john vault.kdbx > keepass.hash
python3 1password2john.py vault.opvault > 1password.hash
python3 bitwarden2john.py data.json > bitwarden.hash
python3 lastpass2john.py export.json > lastpass.hash

Cada extractor imprime una sola línea que empieza con un prefijo propio del formato — $keepass$, $cloudkeychain$, $bitwarden$, o un simple hash:iteraciones:email para LastPass. Ese prefijo es el paso de identificación, igual que detectar un prefijo $zip2$ o $RAR3$ indica qué hash de archivo tienes delante. hashcat acepta la línea extraída directamente.

Elegir el modo

ProductoPrefijoModo hashcatNotas
KeePass 1/2 (sin archivo clave)$keepass$*1*... / $keepass$*2*...13400Clave maestra AES o Twofish
KeePass 1/2 (con archivo clave)$keepass$*...29700La base también requiere un archivo clave
1Password, Agile Keychain (antes de 2015)—6600PBKDF2-HMAC-SHA1, formato de bóveda antiguo
1Password, Cloud Keychain$cloudkeychain$8200PBKDF2-HMAC-SHA512, formato basado en OPVault
Bitwarden$bitwarden$2*...23400PBKDF2-HMAC-SHA256, número de iteraciones incluido en el hash
LastPasshash:iteraciones:email6800PBKDF2-HMAC-SHA256, el email forma parte de la sal

Elegir mal el modo hace que hashcat rechace la línea directamente con un error de longitud o de número de tokens, o que ejecute en silencio el algoritmo equivocado sin encontrar nunca coincidencia. En caso de duda, el prefijo de la línea extraída es la referencia real, no la extensión del archivo.

1Password tiene tres generaciones, no una

Aquí es donde la mayoría se atasca. 1Password cambió dos veces su formato de bóveda subyacente: Agile Keychain (modo 6600, obsoleto desde 2015), Cloud Keychain / OPVault (modo 8200, PBKDF2-HMAC-SHA512), y la aplicación actual 1Password 8, que hashcat admite por separado como modo 31800. Ejecutar 1password2john.py sobre la exportación equivocada, o sobre una bóveda de 1Password 8 esperando un hash tipo OPVault, produce una línea que hashcat no podrá interpretar. Comprueba qué versión de la aplicación generó la exportación antes de elegir el modo.

La particularidad de Argon2 en KeePass

Desde la versión 2.35, KeePass permite elegir Argon2 en lugar de la transformación AES clásica como KDF de la clave maestra. El modo 13400 se diseñó en torno a la transformación AES/Twofish; si keepass2john indica un KDF basado en Argon2 entre los parámetros que extrae, revisa la salida --example-hashes de tu versión de hashcat antes de asumir que el modo 13400 funcionará — el soporte para las variantes de KDF más nuevas de KeePass ha ido históricamente por detrás del caso AES.

Por qué rockyou solo no basta

Cada formato de esta tabla ejecuta deliberadamente decenas o cientos de miles de rondas PBKDF2 (o el equivalente de KeePass) por intento. Es el mismo objetivo de diseño que el factor de coste de bcrypt: convertir la ventaja de miles de millones de intentos por segundo de una GPU en, como mucho, unos pocos miles de intentos por segundo. Bitwarden incluso incrusta su número de iteraciones directamente en el hash extraído, así que puedes leer exactamente cuánto cuesta cada intento antes de empezar.

hashcat -m 23400 -a 0 bitwarden.hash dirigida.txt -r rules/best64.rule

A ese ritmo, lanzar una lista de palabras genérica con reglas contra una contraseña maestra fuerte es trabajo de varias semanas. Lleva en su lugar una lista corta y de alta probabilidad — contraseñas reutilizadas procedentes de filtraciones ligadas al objetivo, patrones de nombres/fechas/mascotas, variaciones sobre lo que ya sepas de esa persona — la misma disciplina de selección que se describe en listas de palabras y reglas que de verdad funcionan.

Qué deberían hacer realmente los defensores

Usa una contraseña maestra larga y única — la longitud importa mucho más que la complejidad frente a un KDF tipo PBKDF2, porque el número de iteraciones ya neutraliza la velocidad bruta de adivinación. Activa el desbloqueo con dos factores donde la aplicación lo permita (la Secret Key de 1Password, el 2FA de Bitwarden), ya que añade un dato que un atacante no puede derivar solo del archivo de la bóveda. Y si administras las bóvedas de un equipo, mantén los archivos exportados y las copias de seguridad fuera del alcance de cualquier equipo comprometido o recurso compartido en la nube — el paso de derivación de clave solo necesita ejecutarse una vez que el atacante ya tiene el archivo.

Artículos relacionados

Extrae un hash crackeable de una cabecera LUKS o de un volumen BitLocker, elige el modo hashcat correcto y lanza el ataque.
Extrae el hash de un archivo ZIP, RAR o 7-Zip protegido con zip2john / rar2john / 7z2john, elige el modo hashcat correcto y crackéalo sin adivinar.
Extrae el hash de un id_rsa o id_ed25519 cifrado con ssh2john, elige el modo hashcat correcto para claves PEM clásicas y descubre cuándo solo John the Ripper puede atacar una clave OpenSSH moderna.