
JKS 관에 박는 못 - JKS 파일의 개인 키 항목 비밀번호 크래킹
Java Key Store(JKS)는 하나 이상의 비대칭 암호화용 암호화 개인키 및 공개키를 파일에 저장하는 Java 방식입니다. 다양한 키 저장소 형식이 있지만, Java와 Android는 여전히 JKS 파일 형식을 기본으로 사용합니다. JKS는 Java 키 저장소의 파일 형식 중 하나이지만, JKS는 혼란스럽게도 일반 Java 키 저장소 API의 약어로도 사용됩니다. 이 프로젝트는 JKS 파일 형식의 보안 메커니즘과 개인키의 비밀번호 보호를 크래킹하는 방법에 대한 정보를 포함합니다. JKS의 독특한 설계로 인해 개발된 구현은 키 저장소 비밀번호를 무시하고 개인키 비밀번호를 직접 크래킹할 수 있습니다. 키 저장소 비밀번호를 무시하기 때문에, 이 구현은 대부분의 다른 도구와 달리 모든 JKS 구성을 공격할 수 있습니다. JKS의 개인키에 대한 비밀번호 기반 암호화 방식의 약점을 악용하여 비밀번호를 매우 효율적으로 크래킹할 수 있습니다. 지금까지 이 약점을 악용한 공개 도구는 없었습니다. 이 기술은 hashcat에 구현되어 GPU에서 더 높은 크래킹 속도로 알고리즘의 효율성을 증폭시킵니다.
이론 부분을 확인하려면 이 저장소에 포함된 pocorgtfo15.pdf (이슈 0x15)의 POC||GTFO 기사 "15:12 Java Key Store 관에 박는 못"을 참조하거나, 이 아름다운 미러와 같은 다양한 미러에서 확인하세요: https://unpack.debug.su/pocorgtfo/
물어보기 전에: JCEKS, BKS 또는 기타 Key Store 형식은 (아직) 지원되지 않습니다.
정답은 직접 크래킹 하드웨어를 구축하는 것입니다 ;) . 하지만 조금 더 실용적으로 접근하자면, 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 17600 hash.txt -a 3 ?b?b?b?b?b?b?b?b --potfile-disable --keep-guessing
$ ./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 형식으로