
Clavo en el ataúd JKS - Descifrando contraseñas de entradas de clave privada en un archivo JKS
El Java Key Store (JKS) es la forma que tiene Java de almacenar una o varias claves criptográficas privadas y públicas para criptografía asimétrica en un archivo. Si bien existen varios formatos de almacén de claves, Java y Android todavía usan por defecto el formato de archivo JKS. JKS es uno de los formatos de archivo para los almacenes de claves de Java, pero JKS se usa de manera confusa como acrónimo de la API general de almacenes de claves de Java. Este proyecto incluye información sobre los mecanismos de seguridad del formato de archivo JKS y cómo se puede descifrar la protección por contraseña de la clave privada. Debido al diseño inusual de JKS, la implementación desarrollada puede ignorar la contraseña del almacén de claves y descifrar directamente la contraseña de la clave privada. Debido a que ignora la contraseña del almacén de claves, esta implementación puede atacar cualquier configuración de JKS, lo que no es el caso de la mayoría de otras herramientas. Al explotar una debilidad del esquema de cifrado basado en contraseña para la clave privada en JKS, las contraseñas se pueden descifrar de manera muy eficiente. Hasta ahora, no había ninguna herramienta pública disponible que explotara esta debilidad. Esta técnica se implementó en hashcat para amplificar la eficiencia del algoritmo con velocidades de descifrado más altas en GPUs.
Para obtener la parte teórica, consulte el artículo de POC||GTFO '15:12 Clavo en el ataúd de Java Key Store' en el número 0x15 incluido en este repositorio (pocorgtfo15.pdf) o disponible en varios espejos como este hermoso: https://unpack.debug.su/pocorgtfo/
Antes de que preguntes: JCEKS o BKS o cualquier otro formato de almacén de claves no es compatible (aún).
La respuesta es construir tu propio hardware de descifrado para ello ;) . Pero seamos un poco más prácticos, entonces la respuesta es usar tu GPU:``` : _____________ : v3.6.0 ____________ _\ |_ /___ \ |____ _ / ______ | _ | __ \ / _ | /_ __ |/ | | | \ ___ / | | \ / \ | | || |__/ / /| |/: | |_:-aTZ!/_/ |: /__:
Todo lo que necesitas hacer es ejecutar el siguiente comando:```
java -jar JksPrivkPrepare.jar your_JKS_file.jks > hash.txt
Si tu hash.txt termina vacío, significa que no hay ninguna clave privada en el archivo JKS o que especificaste un archivo que no es JKS.
Luego, pasa el archivo hash.txt a hashcat (versión 3.6.0 y superior, pero si quieres estar seguro y también asegurarte de poder descifrar contraseñas muy largas, usa al menos la versión 4 de hashcat!), por ejemplo así:``` $ ./hashcat -m 15500 -a 3 -1 '?u|' -w 3 hash.txt ?1?1?1?1?1?1?1?1?1 hashcat (v3.6.0) starting...
Hashes: 1 digests; 1 unique digests, 1 unique salts Bitmaps: 16 bits, 65536 entries, 0x0000ffff mask, 262144 bytes, 5/13 rotates
Applicable optimizers:
Watchdog: Temperature abort trigger set to 90c Watchdog: Temperature retain trigger set to 75c
$jksprivk$D1BC102EF5FE5F1A7ED6A63431767DD4E1569670...8test:POC||GTFO
Session..........: hashcat Status...........: Cracked Hash.Type........: JKS Java Key Store Private Keys (SHA1) Hash.Target......: $jksprivk$D1BC102EF5FE5F1A7ED6A63431767DD4E1569670...8test Time.Started.....: Tue May 30 17:41:58 2017 (8 mins, 25 secs) Time.Estimated...: Tue May 30 17:50:23 2017 (0 secs) Guess.Mask.......: ?1?1?1?1?1?1?1?1?1 [9] Guess.Charset....: -1 ?u|, -2 Undefined, -3 Undefined, -4 Undefined Guess.Queue......: 1/1 (100.00%) Speed.Dev.#1.....: 7946.6 MH/s (39.48ms) Recovered........: 1/1 (100.00%) Digests, 1/1 (100.00%) Salts Progress.........: 4014116700160/7625597484987 (52.64%) Rejected.........: 0/4014116700160 (0.00%) Restore.Point....: 5505024000/10460353203 (52.63%) Candidates.#1....: NNVGFSRFO -> Z|ZFVDUFO HWMon.Dev.#1.....: Temp: 75c Fan: 89% Util:100% Core:1936MHz Mem:4513MHz Bus:1
Started: Tue May 30 17:41:56 2017 Stopped: Tue May 30 17:50:24 2017
Así que de este repositorio básicamente solo necesitas el archivo JksPrivkPrepare.jar para ejecutar una sesión de cracking.
# Del formato de John The Ripper al formato de hashcat