
Гвоздь в крышку гроба JKS - Взлом паролей записей закрытых ключей в файле JKS
Java Key Store (JKS) — это способ хранения одного или нескольких криптографических закрытых и открытых ключей для асимметричной криптографии в файле, принятый в Java. Хотя существуют различные форматы хранилищ ключей, Java и Android по-прежнему по умолчанию используют формат JKS. JKS — один из форматов файлов для хранилищ ключей Java, но также JKS по сбивающей с толку причине используется как аббревиатура для общего API хранилищ ключей Java. Этот проект включает информацию о механизмах безопасности формата файлов JKS и о том, как можно взломать защиту паролем закрытого ключа. Благодаря необычной конструкции JKS разработанная реализация может игнорировать пароль хранилища ключей и напрямую взламывать пароль закрытого ключа. Поскольку она игнорирует пароль хранилища ключей, эта реализация может атаковать любую конфигурацию JKS, что не характерно для большинства других инструментов. Используя уязвимость схемы шифрования на основе пароля (Password Based Encryption) для закрытого ключа в JKS, пароли можно взламывать очень эффективно. До сих пор не было публично доступного инструмента, использующего эту уязвимость. Этот метод был реализован в hashcat для повышения эффективности алгоритма с более высокими скоростями взлома на GPU.
Чтобы ознакомиться с теоретической частью, обратитесь к статье POC||GTFO "15:12 Nail in the Java Key Store Coffin" в выпуске 0x15, включённом в этот репозиторий (pocorgtfo15.pdf) или доступной на различных зеркалах, например, на этом красивом: https://unpack.debug.su/pocorgtfo/
Прежде чем спросите: JCEKS, BKS и любые другие форматы хранилищ ключей не поддерживаются (пока что).
Ответ: соберите своё собственное оборудование для взлома ;) . Но будем немного практичнее, поэтому ответ — используйте свой GPU:``` : _____________ : v3.6.0 ____________ _\ |_ /___ \ |____ _ / ______ | _ | __ \ / _ | /_ __ |/ | | | \ ___ / | | \ / \ | | || |__/ / /| |/: | |_:-aTZ!/_/ |: /__:
Всё, что вам нужно сделать, это выполнить следующую команду:```
java -jar JksPrivkPrepare.jar your_JKS_file.jks > hash.txt
Если ваш hash.txt оказывается пустым, это означает, что либо в файле JKS нет закрытого ключа, либо вы указали не файл JKS.
Затем передайте файл hash.txt в hashcat (версия 3.6.0 и выше, но если вы хотите быть в безопасности и также быть уверены, что сможете взламывать очень длинные пароли, используйте хотя бы версию 4 hashcat!), например, так:``` $ ./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
Итак, из этого репозитория вам, по сути, нужен только JksPrivkPrepare.jar для запуска сессии взлома.
# От формата John The Ripper к формату hashcat