NOTÍCIAS

[ANONYMOUS][grids]

JKS Private Key Cracker - Cracking senhas de entradas de chaves privadas em um arquivo JKS

JKS Private Key Cracker - Cracking senhas de entradas de chaves privadas em um arquivo JKS



O Java Key Store (JKS) é a maneira Java de armazenar uma ou várias chaves criptográficas privadas e públicas para criptografia assimétrica em um arquivo. Embora existam vários formatos de loja chave, o Java e o Android ainda são padrão para o formato de arquivo JKS. O JKS é um dos formatos de arquivo para lojas de chaves Java, mas JKS é usado confusamente como a sigla para a API geral da biblioteca de chaves Java. Este projeto inclui informações sobre os mecanismos de segurança do formato de arquivo JKS e como a proteção por senha da chave privada pode ser quebrada. Devido ao design incomum da JKS, a implementação desenvolvida pode ignorar a senha da chave de armazenamento e crackar a senha da chave privada diretamente. Como ignora a senha da loja de chaves, esta implementação pode atacar cada configuração do JKS, o que não é o caso da maioria das outras ferramentas. Ao explorar uma fraqueza do esquema de criptografia baseada em senha para a chave privada no JKS, as senhas podem ser quebradas de forma muito eficiente. Até agora, nenhuma ferramenta pública estava disponível explorando essa fraqueza. Esta técnica foi implementada em hashcat para amplificar a eficiência do algoritmo com maiores velocidades de fissuração em GPUs.
Para obter a parte da teoria, consulte o artigo POC || GTFO "Núcleo 15:12 no caixote da loja Java Key Store" na edição 0x15 incluído neste repositório (pocorgtfo15.pdf) ou disponível em vários mirros como este lindo: https : //unpack.debug.su/pocorgtfo/
Antes de perguntar: JCEKS ou BKS ou qualquer outro formato da Key Store não é suportado (ainda).
Como você deve gravar arquivos JKS
A resposta é criar seu próprio hardware de cracking para isso;). Mas vamos ser um pouco mais práticos, então a resposta está usando sua GPU:
    _____:  _____________         _____:  v3.6.0     ____________
   _\    |__\______    _/_______ _\    |_____ _______\______    /__ ______
   |     _     |  __   \   ____/____   _     |   ___/____  __    |_______/
   |     |     |  \    _\____      /   |     |   \      /  \     |     |
   |_____|     |______/     /     /____|     |_________/_________:     |
         |_____:-aTZ!/___________/     |_____:                 /_______:
 
* BLAKE2 * BLOCKCHAIN2 * DPAPI * CHACHA20 * JAVA KEYSTORE * ETHEREUM WALLET *
Tudo o que você precisa fazer é executar o seguinte comando:
java -jar JksPrivkPrepare.jar your_JKS_file.jks > hash.txt
Se o seu hash.txt acabar sendo vazio, não há nenhuma chave privada no arquivo JKS ou você especificou um arquivo que não seja JKS. 
Em seguida, alimente o arquivo hash.txt para hashcat (versão 3.6.0 e superior), por exemplo, como este:
$ ./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...

OpenCL Platform #1: NVIDIA Corporation
======================================
* Device #1: GeForce GTX 1080, 2026/8107 MB allocatable, 20MCU

Hashes: 1 digests; 1 unique digests, 1 unique salts
Bitmaps: 16 bits, 65536 entries, 0x0000ffff mask, 262144 bytes, 5/13 rotates

Applicable optimizers:
* Zero-Byte
* Precompute-Init
* Not-Iterated
* Appended-Salt
* Single-Hash
* Single-Salt
* Brute-Force

Watchdog: Temperature abort trigger set to 90c
Watchdog: Temperature retain trigger set to 75c

$jksprivk$*D1BC102EF5FE5F1A7ED6A63431767DD4E1569670...8*test:POC||GTFO
                                                          
Session..........: hashcat
Status...........: Cracked
Hash.Type........: JKS Java Key Store Private Keys (SHA1)
Hash.Target......: $jksprivk$*D1BC102EF5FE5F1A7ED6A63431767DD4E1569670...8*test
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
Então, a partir deste repositório você basicamente só precisa do JksPrivkPrepare.jar para executar uma sessão de quebra. 

Outras coisas neste repositório
  • test_run.sh: Um pequeno script de teste que você deve poder executar após alguns minutos para ver este projeto em ação. Inclui comentários sobre como configurar as dependências para este projeto.
  • benchmarking: testes que mostram por que você deve usar esta técnica e não outras. Leia o artigo "Nail in the JKS caixão".
  • example_jks: gere exemplos de arquivos JKS
  • fingerprint_creation: Toda chave privada de texto simples no PKCS # 8 possui sua própria "impressão digital" que esperamos quando adivinemos a senha correta. Essas impressões digitais são necessárias para garantir que possamos detectar quando adivinemos a senha correta. Leia o artigo "Nail in the JKS caixão". Esta pasta tem o código para gerar essas impressões digitais, é um pouco complicado, mas não espero que seja necessário adicionar outras impressões digitais.
  • JksPrivkPrepare: o código-fonte de como os arquivos JKS são lidos e o hash calculado que precisamos dar ao hashcat.
  • jksprivk_crack.py: uma implementação de prova de conceito que pode ser usada em vez de hashcat. Obviamente, isso é muito mais lento do que o hashcat, mas pode superar John the Ripper (JtR) em certos casos. Leia o artigo "Nail in the JKS caixão".
  • jksprivk_decrypt.py: Um pequeno script de ajuda que pode ser usado para extrair uma chave particular uma vez que a senha foi corretamente adivinhada.
  • run_example_jks.sh: Um script que executa JksPrivkPrepare.jar e jksprivk_crack.py em todos os exemplos de arquivos JKS na pasta example_jks. Certifique-se de executar o generate_examples.py no script example_jks antes.

Trabalhos relacionados e links adicionais
Um grande grito para Casey Marshall que escreveu a classe JKS.java, que é usada em uma versão modificada neste projeto:
/* JKS.java -- implementation of the "JKS" key store.
   Copyright (C) 2003  Casey Marshall <[email protected]>

Permission to use, copy, modify, distribute, and sell this software and
its documentation for any purpose is hereby granted without fee,
provided that the above copyright notice appear in all copies and that
both that copyright notice and this permission notice appear in
supporting documentation.  No representations are made about the
suitability of this software for any purpose.  It is provided "as is"
without express or implied warranty.

This program was derived by reverse-engineering Sun's own
implementation, using only the public API that is available in the 1.4.1
JDK.  Hence nothing in this program is, or is derived from, anything
copyrighted by Sun Microsystems.  While the "Binary Evaluation License
Agreement" that the JDK is licensed under contains blanket statements
that forbid reverse-engineering (among other things), it is my position
that US copyright law does not and cannot forbid reverse-engineering of
software to produce a compatible implementation.  There are, in fact,
numerous clauses in copyright law that specifically allow
reverse-engineering, and therefore I believe it is outside of Sun's
power to enforce restrictions on reverse-engineering of their software,
and it is irresponsible for them to claim they can.  */