O Bitcracker é a primeira ferramenta de rachaduras de senha de código aberto para dispositivos de armazenamento (disco rígido, USB Pendrive, SD Card, etc ...) criptografado com bitlocker, um recurso de criptografia disponível no Windows Vista, 7, 8.1 e 10 (Ultimate, Pro e Enterprise edições). O BitLocker oferece vários métodos de autenticação diferentes para criptografar um dispositivo de armazenamento como o Módulo de Plataforma Confiável (TPM), cartão inteligente, senha de recuperação, senha de fornecimento de usuário.
Por meio de um ataque de dicionário, o Bitcracker tenta encontrar a senha correta do usuário ou a senha de recuperação para descriptografar o dispositivo de armazenamento criptografado. Foi implementado em CUDA e OpenCL.
Vários periódicos atrasaram a publicação de nosso artigo de bitcracker (quase 3 anos, com rejeição final após várias revisões), o que explica os detalhes de nosso ataque, o formato de volume de criptografia (BDE) do Bitlocker Drive e possíveis fraquezas no procedimento de criptografia/descriptografia. Finalmente, publicamos o artigo aqui: https://arxiv.org/abs/1901.01337. 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 que suporta OpenCL (você pode encontrar alguma ajuda aqui.
O Bitcracker requer pelo menos 260 MB de memória do dispositivo.
Recomendamos fortemente executar seu ataque a uma GPU em vez de CPU por razões de desempenho (consulte o desempenho da seção).
A execução do script build.sh
gera 4 executáveis dentro do diretório build
: bitcracker_hash
, bitcracker_rpgen
, bitcracker_cuda
, bitcracker_opencl
.
Para criar bitcracker_cuda
coerentemente com sua versão NVIDIA GPU e CUDA, você precisa modificar o src_CUDA/Makefile
escolhendo a versão SM correta. Como referência, você pode usar a tabela a seguir:
Arquitetura da GPU | Cuda sugerido | Makefile |
---|---|---|
Kepler | CUDA 7.5 | arch = compute_35, código = sm_35 |
Maxwell | CUDA 8.0 | arch = compute_52, código = sm_52 |
Pascal | CUDA 9.0 | arch = compute_60, código = sm_60 |
Volta | CUDA 9.0 | arch = compute_70, código = sm_70 |
Você precisa criar a imagem do seu dispositivo de armazenamento criptografado com o Bitlocker usando, como exemplo, o comando dd :
sudo dd if=/dev/disk2 of=/path/to/imageEncrypted.img conv=noerror,sync
4030464+0 records in
4030464+0 records out
2063597568 bytes transferred in 292.749849 secs (7049013 bytes/sec)
Então você precisa executar o bitcracker_hash
executável em seu imageEncrypted.img
para:
Se a execução concluir corretamente, bitcracker_hash
produzirá 1 ou 2 arquivos de saída:
Os volumes criptografados do BDE podem ter formatos diferentes para diferentes métodos de autenticação. Se bitcracker_hash
não puder encontrar a senha de recuperação em sua imagem criptografada, abra um problema ou entre em contato comigo
Um exemplo:
/build/bitcracker_hash -o test_hash -i ./Images/imgWin7
---------> BitCracker Hash Extractor <---------
Opening file ./Images/imgWin7
....
Signature found at 0x02208000
Version: 2 (Windows 7 or later)
VMK entry found at 0x022080bc
VMK encrypted with user password found!
VMK encrypted with AES-CCM
VMK entry found at 0x0220819c
VMK encrypted with Recovery key found!
VMK encrypted with AES-CCM
User Password hash:
$bitlocker$0$16$89a5bad722db4a729d3c7b9ee8e76a29$1048576$12$304a4ac192a2cf0103000000$60$24de9a6128e8f8ffb97ac72d21de40f63dbc44acf101e68ac0f7e52ecb1be4a8ee30ca1e69fbe98400707ba3977d5f09b14e388c885f312edc5c85c2
Recovery Key hash:
$bitlocker$2$16$8b7be4f7802275ffbdad3766c7f7fa4a$1048576$12$304a4ac192a2cf0106000000$60$6e72f6ef6ba688e72211b8cf8cc722affd308882965dc195f85614846f5eb7d9037d4d63bcc1d6e904f0030cf2e3a95b3e1067447b089b7467f86688
Output file for user password attack: "hash_user_pass.txt"
Output file for recovery password attack: "hash_recv_pass.txt"
Você pode usar esse tipo de ataque se o dispositivo de armazenamento tiver sido criptografado com uma senha fornecida pelo usuário, como mostrado na imagem a seguir. O Bitcracker executa um ataque de dicionário, portanto, você precisa fornecer uma lista de palavras de senhas de usuário Possibile.
Para iniciar o ataque que você precisa:
hash_user_pass.txt
Um 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 lista de palavras-t
: número de senhas processadas por cada thread CUDA-b
: Número de blocos CUDA-g
: NVIDIA GPU ID do dispositivo-u
: especifique seu desejo de senha de um usuário Para todas as opções disponíveis, digite ./build/bitcracker_cuda -h
. Para ter o melhor desempenho, consulte a seção Tabela na seção de desempenho para definir corretamente as opções t
e b
de acordo com a sua GPU da NVIDIA.
As mesmas considerações podem ser aplicadas para o executável bitcracker_opencl
.
Um exemplo de saída:
====================================
Selected device: GPU Tesla K80 (ID: 0)
====================================
....
Reading hash file "hash_user_pass.txt"
$bitlocker$0$16$0a8b9d0655d3900e9f67280adc27b5d7$1048576$12$b0599ad6c6a1cf0103000000$60$c16658f54140b3d90be6de9e03b1fe90033a2c7df7127bcd16cb013cf778c12072142c484c9c291a496fc0ebd8c21c33b595a9c1587acfc6d8bb9663
====================================
Attack
====================================
Type of attack: User Password
CUDA Threads: 1024
CUDA Blocks: 1
Psw per thread: 1
Max Psw per kernel: 1024
Dictionary: wordlist.txt
Strict Check (-s): No
MAC Comparison (-m): No
CUDA Kernel execution:
Stream 0
Effective number psw: 12
Passwords Range:
abcdefshhf
.....
blablalbalbalbla12
Time: 28.651947 sec
Passwords x second: 0.42 pw/sec
================================================
....
Password found: paperino
================================================
Atualmente, o BitCracker é capaz de processar senhas de entrada com um comprimento entre 8 e 55 caracteres.
Durante a criptografia de um dispositivo de armazenamento (independentemente do método de autenticação), o Bitlocker pede ao usuário que armazene em algum lugar uma senha de recuperação que possa ser usada para restaurar o acesso ao dispositivo de armazenamento criptografado no caso de que ela não possa desbloquear a unidade normalmente. Assim, a senha de recuperação é uma espécie de partida de ataque para todos os métodos de autenticação e consiste em uma chave de 48 dígitos como esta:
236808-089419-192665-495704-618299-073414-538373-542366
Consulte Docs da Microsoft para obter mais detalhes.
Quanto à senha do usuário, o Bitcracker pode executar um ataque de dicionário para encontrar a senha de recuperação correta gerada pelo Bitlocker para criptografar o dispositivo de armazenamento. Observe que atualmente podemos atacar a senha de recuperação apenas se o dispositivo de armazenamento não tiver sido criptografado com o TPM.
Para iniciar o ataque que você precisa:
hash_recv_pass.txt
Gere e armazene todas as senhas de possibilidade, é um problema difícil. Por esse motivo, criamos um gerador de senha de recuperação chamado bitcracker_rpgen
. Com esta ferramenta, você pode criar várias listas de palavras de senhas de recuperação que você pode usar para seus ataques. Como exemplo:
./build/bitcracker_rpgen -n 300 -p 10000000 -s 000000-000011-000022-000033-000044-000055-008459-015180
Isso gera:
-n
: número de listas de palavras-p
: número de senhas de recuperação por lista de palavras-s
: gerar senhas de recuperação a partir desteVocê pode usar a configuração padrão em execução sem opções:
./build/bitcracker_rpgen
************* BitCracker Recovery Password wordlists generator *************
Running with this configuration:
### Create 100 wordlists
### Recovery Passwords per wordlist=5000000
### Allow duplicates=No
### Generate starting from=000000-000011-000022-000033-000044-000055-000066-000077
Creating wordlist "bitcracker_wlrp_0.txt" with 5000000 passwords
First password=000000-000011-000022-000033-000044-000055-000066-000077
Last password= 000000-000011-000022-000033-000044-000055-000902-217822
...
Observe que a opção -s
pode ser usada para reiniciar a geração a partir da última senha de recuperação gerada (em vez de reiniciar sempre que a inicial). A opção -d
permite a possibilidade de duplicar na mesma senha de recuperação. Por exemplo: 000000-000011-000055-000055-000044-000055-000902-217822
Para todas as opções disponíveis, digite ./build/bitcracker_rpgen -h
.
Nota: Observe que a quantidade de senhas de recuperação possível é enorme:
recovery password = 65536 x 65536 x 65536 x 65536 x 65536 x 65536 x 65536 x 65536
De acordo com nossa pesquisa, a distribuição de senha é uniforme e não há como encontrar números "mais prováveis". Até agora, não encontramos uma regra para reduzir a quantidade de possíveis candidatos. Isso significa que o ataque de senha de recuperação pode levar uma eternidade (o ataque do Passwod do usuário é sempre o preferido). Em breve, modificaremos a ferramenta bitcracker_rpgen
para gerar senha de recuperação de maneira casual, e não em sequência ordenada.
Um exemplo de linha de comando:
./build/bitcracker_cuda -f hash_recv_pass.txt -d bitcracker_wlrp_0.txt -t 1 -b 1 -g 0 -r
Onde as opções são as mesmas do caso de senha do usuário, mas em vez de -u
você precisa especificar -r
. Um exemplo de saída:
====================================
Selected device: GPU Tesla K80 (ID: 0)
====================================
...
Reading hash file "hash_recv_pass.txt"
$bitlocker$2$16$432dd19f37dd413a88552225628c8ae5$1048576$12$a0da3fc75f6cd30106000000$60$3e57c68216ef3d2b8139fdb0ec74254bdf453e688401e89b41cae7c250739a8b36edd4fe86a597b5823cf3e0f41c98f623b528960a4bee00c42131ef
====================================
Attack
====================================
Type of attack: Recovery Password
CUDA Threads: 1024
CUDA Blocks: 1
Psw per thread: 8
Max Psw per kernel: 8192
Dictionary: wordlist.txt
Strict Check (-s): No
MAC Comparison (-m): No
CUDA Kernel execution:
Effective passwords: 6014
Passwords Range:
390775-218680-136708-700645-433191-416240-153241-612216
.....
090134-625383-540826-613283-563497-710369-160182-661364
Time: 193.358937 sec
Passwords x second: 31.10 pw/sec
================================================
CUDA attack completed
Passwords evaluated: 6014
Password found: 111683-110022-683298-209352-468105-648483-571252-334455
================================================
Por padrão, o Bitcracker faz um ataque rápido (para os modos de senha de usuário e recuperação) que podem retornar algum falso positivo. Nesse caso, você pode executar novamente seu ataque com a opção -m
que permite a verificação do MAC (solução mais lenta).
Para testar o Bitcracker no seu sistema antes de iniciar o ataque real, fornecemos várias imagens de dispositivos de armazenamento criptografados.
Você pode atacar essas imagens com os modos de senha do usuário e de recuperação, usando as listas do Words armazenadas na pasta Dictionary
.
Aqui, relatamos as melhores performances de bitcracker em caso de ataque rápido (padrão) à senha do usuário (-u opção).
GPU Acronim | GPU | Arco | Cc | # Sm | Relógio | CUDA |
---|---|---|---|---|---|---|
GFT | GeForce Titan | Kepler | 3.5 | 14 | 835 | 7.0 |
GTK80 | Tesla K80 | Kepler | 3.5 | 13 | 875 | 7.5 |
Gftx | GeForce Titan x | Maxwell | 5.2 | 24 | 1001 | 7.5 |
GTP100 | Tesla P100 | Pascal | 6.1 | 56 | 1328 | 8.0 |
GTV100 | Tesla v100 | Volta | 7.0 | 80 | 1290 | 9.0 |
AMDM | Radeon Malta | - | - | - | - | - |
Desempenho:
Versão | GPU | -t | -b | Senhas x kernel | Senhas/seg | Hash/s |
---|---|---|---|---|---|---|
CUDA | GFT | 8 | 13 | 106.496 | 303 | 635 MH/S. |
CUDA | GTK80 | 8 | 14 | 114.688 | 370 | 775 MH/S. |
CUDA | Gftx | 8 | 24 | 106.608 | 933 | 1,957 MH/S. |
CUDA | GTP100 | 1 | 56 | 57.344 | 1.418 | 2,973 MH/S. |
CUDA | GTV100 | 1 | 80 | 81.920 | 3.252 | 6.820 MH/S. |
OpenCl | AMDM | 32 | 64 | 524.288 | 241 | 505 MH/S. |
OpenCl | Gftx | 8 | 24 | 196.608 | 884 | 1,853 MH/S. |
NB Cada senha requer cerca de 2.097.152 SHA-256
Lançamos o Bitcracker como o formato OpenCl-Bitlocker em John the Ripper ( --format=bitlocker-opencl
). Os arquivos de hash gerados pelo bitcracker_hash
(veja como seção) são totalmente compatíveis com o formato John.
Na taxa de senha do GTV100, é de cerca de 3150p/s. A equipe da JTR desenvolveu a versão da CPU deste ataque ( --format=bitlocker
); Em um CPU Intel (R) Xeon (R) V4 2.20GHz, a taxa de senha é de cerca de 78p/s.
Este é um trabalho em andamento ...
Nov 2021: Código atualizado para ser executado no NVIDIA GPU ampere usando CUDA 11.x
Plase Compartilhe e teste nosso projeto: precisamos do seu feedback!
Agradecimentos especiais aos projetos de João O Ripper, Deslocker e Libbde.
Este é um projeto de pesquisa em colaboração com o Conselho Nacional de Pesquisa da Itália divulgado sob licença GPLV2.
Copyright (c) 2013-2021 Elena atrás (Elena Dot atrás no Gmail Dot Com) e Massimo Bernaschi (Massimo Dot Bernaschi no Gmail Dot Com)
Forneceremos algumas informações adicionais sobre o ataque do Bitcracker em um artigo futuro.
Embora usemos a licença GPLV2, estamos abertos a colaborações. Para qualquer informação adicional, colaborações ou relatório de bugs, entre em contato conosco ou abra um problema