
JKSの棺桶の釘 - JKSファイル内の秘密鍵エントリのパスワードをクラックする
Java Key Store (JKS) は、非対称暗号化のための1つまたは複数の暗号化秘密鍵と公開鍵をファイルに保存するJavaの方法です。さまざまなキーストア形式がありますが、JavaおよびAndroidは依然としてJKSファイル形式をデフォルトとしています。JKSはJavaキーストアのファイル形式の1つですが、混乱を招くことにJKSは一般的なJavaキーストアAPIの頭字語としても使用されています。このプロジェクトには、JKSファイル形式のセキュリティメカニズムと、秘密鍵のパスワード保護をどのようにクラックするかに関する情報が含まれています。JKSの特異な設計により、開発された実装はキーストアパスワードを無視して秘密鍵のパスワードを直接クラックすることができます。キーストアパスワードを無視するため、この実装は他のほとんどのツールでは不可能な、あらゆるJKS構成を攻撃できます。JKSの秘密鍵に対するパスワードベースの暗号化方式の弱点を悪用することで、パスワードを非常に効率的にクラックできます。これまで、この弱点を悪用する公開ツールは存在しませんでした。この手法はhashcatに実装され、GPU上でのクラック速度を向上させることでアルゴリズムの効率を増幅しています。
理論的な部分については、このリポジトリに含まれている(pocorgtfo15.pdf)またはこちらの美しいミラー(https://unpack.debug.su/pocorgtfo/)などの様々なミラーで入手可能なPOC||GTFOの記事「15:12 Nail in the Java Key Store Coffin」(issue 0x15)を参照してください。
質問の前に: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 以上。ただし、安全を期して、非常に長いパスワードをクラックできるようにするには、少なくとも hashcat のバージョン 4 を使用してください!)に渡します。例:``` $ ./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 の形式へ