
Der letzte Nagel im Sarg der JKS - Knacken von Passwörtern privater Schlüsseleinträge in einer JKS-Datei
Der Java Key Store (JKS) ist die Java-Methode, um einen oder mehrere kryptografische private und öffentliche Schlüssel für asymmetrische Kryptografie in einer Datei zu speichern. Obwohl es verschiedene Keystore-Formate gibt, verwenden Java und Android standardmäßig immer noch das JKS-Dateiformat. JKS ist eines der Dateiformate für Java-Keystores, aber JKS wird verwirrenderweise auch als Akronym für die allgemeine Java-Keystore-API verwendet. Dieses Projekt enthält Informationen zu den Sicherheitsmechanismen des JKS-Dateiformats und darüber, wie der Passwortschutz des privaten Schlüssels geknackt werden kann. Aufgrund des ungewöhnlichen Designs von JKS kann die entwickelte Implementierung das Keystore-Passwort ignorieren und direkt das Passwort des privaten Schlüssels knacken. Da es das Keystore-Passwort ignoriert, kann diese Implementierung jede JKS-Konfiguration angreifen, was bei den meisten anderen Tools nicht der Fall ist. Durch Ausnutzung einer Schwäche des passwortbasierten Verschlüsselungsverfahrens für den privaten Schlüssel in JKS können Passwörter sehr effizient geknackt werden. Bisher war kein öffentliches Tool verfügbar, das diese Schwäche ausnutzt. Diese Technik wurde in hashcat implementiert, um die Effizienz des Algorithmus mit höheren Knackgeschwindigkeiten auf GPUs zu verstärken.
Für den theoretischen Teil verweisen wir auf den POC||GTFO-Artikel "15:12 Nail in the Java Key Store Coffin" in Ausgabe 0x15, der in diesem Repository enthalten ist (pocorgtfo15.pdf) oder auf verschiedenen Spiegelservern wie diesem schönen verfügbar ist: https://unpack.debug.su/pocorgtfo/
Bevor Sie fragen: JCEKS, BKS oder andere Keystore-Formate werden (noch) nicht unterstützt.
Die Antwort lautet: Bauen Sie Ihre eigene Knack-Hardware dafür ;). Aber seien wir etwas praktischer: Die Antwort lautet, Ihre GPU zu verwenden:``` : _____________ : v3.6.0 ____________ _\ |_ /___ \ |____ _ / ______ | _ | __ \ / _ | /_ __ |/ | | | \ ___ / | | \ / \ | | || |__/ / /| |/: | |_:-aTZ!/_/ |: /__:
Alles, was Sie tun müssen, ist den folgenden Befehl auszuführen:```
java -jar JksPrivkPrepare.jar your_JKS_file.jks > hash.txt
Wenn Ihre hash.txt am Ende leer ist, gibt es entweder keinen privaten Schlüssel in der JKS-Datei oder Sie haben eine Nicht-JKS-Datei angegeben.
Geben Sie dann die hash.txt-Datei an hashcat weiter (Version 3.6.0 und höher, aber um auf der sicheren Seite zu sein und auch sicherzustellen, dass Sie sehr lange Passwörter knacken können, verwenden Sie bitte mindestens Version 4 von hashcat!), zum Beispiel so:``` $ ./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
So aus diesem Repository benötigt man im Grunde nur die JksPrivkPrepare.jar, um eine Cracking-Sitzung durchzuführen.
# Vom John The Ripper Format zum hashcat Format