
BitCracker é a primeira ferramenta de código aberto para quebra de senhas em unidades de memória criptografadas com BitLocker.
O BitCracker é a primeira ferramenta de cracking de senhas de código aberto para dispositivos de armazenamento (Disco Rígido, Pendrive USB, cartão SD, etc...) criptografados com BitLocker, um recurso de criptografia disponível no Windows Vista, 7, 8.1 e 10 (edições Ultimate, Pro e Enterprise). O BitLocker oferece diferentes métodos de autenticação para criptografar um dispositivo de armazenamento, como Trusted Platform Module (TPM), Smart Card, Senha de Recuperação, Senha fornecida pelo usuário.
Através de um ataque de dicionário, o BitCracker tenta encontrar a Senha de Usuário correta ou a Senha de Recuperação para descriptografar o dispositivo de armazenamento criptografado. Ele foi implementado em CUDA e OpenCL.
Vários periódicos atrasaram a publicação do nosso artigo sobre o BitCracker (quase 3 anos, com rejeição final após várias revisões) que explica os detalhes do nosso ataque, o formato de volume BitLocker Drive Encryption (BDE) e possíveis fraquezas no procedimento de criptografia/descriptografia. Finalmente, publicamos o artigo aqui: https://arxiv.org/abs/1901.01337 . Por favor, sinta-se à vontade para comentar e compartilhar.
Para executar o BitCracker-CUDA, os requisitos mínimos são:
Para executar o BitCracker-OpenCL, os requisitos mínimos são qualquer GPU ou CPU compatível com OpenCL (você pode encontrar ajuda aqui.
O BitCracker requer pelo menos 260 MB de memória do dispositivo.
Recomendamos fortemente executar seu ataque em uma GPU em vez de CPU por razões de desempenho (veja a seção Desempenho).
Executar o script build.sh gera 4 executáveis dentro do diretório build: bitcracker_hash, bitcracker_rpgen, bitcracker_cuda, bitcracker_opencl.
Para compilar o bitcracker_cuda de forma compatível com sua GPU NVIDIA e versão do CUDA, você precisa modificar o src_CUDA/Makefile escolhendo a versão SM correta. Como referência, você pode usar a seguinte tabela:
| Arquitetura GPU | CUDA Sugerido | Makefile |
|---|---|---|
| Kepler | CUDA 7.5 | arch=compute_35,code=sm_35 |
| Maxwell | CUDA 8.0 | arch=compute_52,code=sm_52 |
| Pascal | CUDA 9.0 | arch=compute_60,code=sm_60 |
| Volta | CUDA 9.0 | arch=compute_70,code=sm_70 |
Você precisa criar a imagem do seu dispositivo de armazenamento criptografado com BitLocker usando, por exemplo, o comando dd:
sudo dd if=/dev/disk2 of=/caminho/para/imagemCriptografada.img conv=noerror,sync
4030464+0 records in
4030464+0 records out
2063597568 bytes transferred in 292.749849 secs (7049013 bytes/sec)
Em seguida, você precisa executar o executável bitcracker_hash na sua imagemCriptografada.img para:
Se a execução for concluída corretamente, bitcracker_hash produz 1 ou 2 arquivos de saída:
Volumes criptografados com BDE podem ter formatos diferentes para diferentes métodos de autenticação. Se o bitcracker_hash não conseguir encontrar a Senha de Recuperação na sua imagem criptografada, por favor abra uma issue ou entre em contato comigo
Um exemplo:
/build/bitcracker_hash -o test_hash -i ./Images/imgWin7
---------> BitCracker Hash Extractor <---------
Abrindo arquivo ./Images/imgWin7
....
Assinatura encontrada em 0x02208000
Versão: 2 (Windows 7 ou posterior)
Entrada VMK encontrada em 0x022080bc
VMK criptografado com senha de usuário encontrada!
VMK criptografado com AES-CCM
Entrada VMK encontrada em 0x0220819c
VMK criptografado com chave de recuperação encontrada!
VMK criptografado com AES-CCM
Hash de Senha de Usuário:
$bitlocker$0$16$89a5bad722db4a729d3c7b9ee8e76a29$1048576$12$304a4ac192a2cf0103000000$60$24de9a6128e8f8ffb97ac72d21de40f63dbc44acf101e68ac0f7e52ecb1be4a8ee30ca1e69fbe98400707ba3977d5f09b14e388c885f312edc5c85c2
Hash de Chave de Recuperação:
$bitlocker$2$16$8b7be4f7802275ffbdad3766c7f7fa4a$1048576$12$304a4ac192a2cf0106000000$60$6e72f6ef6ba688e72211b8cf8cc722affd308882965dc195f85614846f5eb7d9037d4d63bcc1d6e904f0030cf2e3a95b3e1067447b089b7467f86688
Arquivo de saída para ataque de senha de usuário: "hash_user_pass.txt"
Arquivo de saída para ataque de senha de recuperação: "hash_recv_pass.txt"
Você pode usar este tipo de ataque se o dispositivo de armazenamento foi criptografado com uma senha fornecida pelo usuário, conforme mostrado na imagem a seguir.
O BitCracker realiza um ataque de dicionário, portanto, você precisa fornecer uma wordlist de possíveis senhas de usuário.
Para iniciar o ataque, você precisa:
hash_user_pass.txtUm exemplo de linha de comando:
./build/bitcracker_cuda -f hash_user_pass.txt -d wordlist.txt -t 1 -b 1 -g 0 -u
Onde:
-f : caminho para o arquivo hash_user_pass.txt-d : caminho para sua wordlist-t : número de senhas processadas por cada thread CUDA-b : número de blocos CUDA-g : ID do dispositivo GPU NVIDIA-u : especifica que você deseja um ataque de senha de usuárioPara todas as opções disponíveis, digite ./build/bitcracker_cuda -h.
Para obter o melhor desempenho, consulte a tabela na seção Desempenho para configurar corretamente as opções t e b de acordo com sua GPU NVIDIA.
As mesmas considerações podem ser aplicadas ao executável bitcracker_opencl.
Um exemplo de saída:
====================================
Dispositivo selecionado: GPU Tesla K80 (ID: 0)
====================================
....
Lendo arquivo de hash "hash_user_pass.txt"
$bitlocker$0$16$0a8b9d0655d3900e9f67280adc27b5d7$1048576$12$b0599ad6c6a1cf0103000000$60$c16658f54140b3d90be6de9e03b1fe90033a2c7df7127bcd16cb013cf778c12072142c484c9c291a496fc0ebd8c21c33b595a9c1587acfc6d8bb9663
====================================
Ataque
====================================
Tipo de ataque: Senha de Usuário
Threads CUDA: 1024
Blocos CUDA: 1
Senhas por thread: 1
Máx de senhas por kernel: 1024
Dicionário: wordlist.txt
Verificação Estrita (-s): Não
Comparação MAC (-m): Não
Execução do kernel CUDA:
Stream 0
Número efetivo de senhas: 12
Faixa de Senhas:
abcdefshhf
.....
blablalbalbalbla12
Tempo: 28.651947 sec
Senhas por segundo: 0.42 pw/sec
================================================
....
Senha encontrada: paperino
================================================
Atualmente, o BitCracker é capaz de processar senhas de entrada com comprimento entre 8 e 55 caracteres.