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.
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
| Producto | Prefijo | Modo hashcat | Notas |
|---|---|---|---|
| KeePass 1/2 (sin archivo clave) | $keepass$*1*... / $keepass$*2*... | 13400 | Clave maestra AES o Twofish |
| KeePass 1/2 (con archivo clave) | $keepass$*... | 29700 | La base también requiere un archivo clave |
| 1Password, Agile Keychain (antes de 2015) | — | 6600 | PBKDF2-HMAC-SHA1, formato de bóveda antiguo |
| 1Password, Cloud Keychain | $cloudkeychain$ | 8200 | PBKDF2-HMAC-SHA512, formato basado en OPVault |
| Bitwarden | $bitwarden$2*... | 23400 | PBKDF2-HMAC-SHA256, número de iteraciones incluido en el hash |
| LastPass | hash:iteraciones:email | 6800 | PBKDF2-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.