Bitcracker는 Bitlocker와 암호화 된 스토리지 장치 (하드 디스크, USB Pendrive, SD 카드 등)를위한 최초의 오픈 소스 비밀번호 크래킹 도구입니다. Windows Vista, 7, 8.1 및 10에서 사용할 수있는 암호화 기능 에디션). Bitlocker는 신뢰할 수있는 플랫폼 모듈 (TPM), 스마트 카드, 복구 비밀번호, 사용자 제공 비밀번호와 같은 저장 장치를 암호화하기위한 여러 가지 인증 방법을 제공합니다.
사전 공격을 통해 Bitcracker는 암호화 된 저장 장치를 해독하기 위해 올바른 사용자 비밀번호 또는 복구 비밀번호를 찾으려고합니다. Cuda와 Opencl에서 구현되었습니다.
몇몇 저널은 우리의 공격의 세부 사항, BDE (Bitlocker Drive 암호화) 볼륨 형식 및 암호화/암호 해독 절차의 가능한 약점을 설명하는 Bitcracker Paper의 출판을 지연 시켰습니다. 마지막으로, 우리는 여기에 논문을 게시했습니다 : https://arxiv.org/abs/1901.01337. 의견을 보내 주시고 공유하십시오.
Bitcracker-Cuda를 실행하려면 최소한의 요구 사항이 다음과 같습니다.
Bitcracker-OpenCL을 실행하려면 최소 요구 사항은 OpenCL을 지원하는 GPU 또는 CPU입니다 (여기에서 도움을받을 수 있습니다.
Bitcracker는 260MB 이상의 장치 메모리가 필요합니다.
성능의 이유로 CPU가 아닌 GPU에 대한 공격을 강력히 권장합니다 (섹션 성능 참조).
build.sh 스크립트를 실행하면 bitcracker_hash , bitcracker_rpgen , bitcracker_cuda , bitcracker_opencl 의 build 내부에서 4 개의 실행 파일이 생성됩니다.
NVIDIA GPU 및 CUDA 버전과 일관되게 bitcracker_cuda 구축하려면 src_CUDA/Makefile 올바른 SM 버전을 선택하는 것을 수정해야합니다. 참조로 다음 표를 사용할 수 있습니다.
| GPU 아키텍처 | 제안 된 쿠다 | Makefile |
|---|---|---|
| 케플러 | CUDA 7.5 | Arch = compute_35, code = sm_35 |
| 맥스웰 | CUDA 8.0 | Arch = compute_52, code = sm_52 |
| 파스칼 | CUDA 9.0 | Arch = compute_60, code = sm_60 |
| 볼타 | CUDA 9.0 | Arch = compute_70, code = sm_70 |
예를 들어 DD 명령을 사용하여 Bitlocker로 암호화 된 저장 장치의 이미지를 작성해야합니다.
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)
그런 다음 imageEncrypted.img 에서 bitcracker_hash 실행 파일을 실행해야합니다.
실행이 올바르게 완료되면 bitcracker_hash 1 또는 2 개의 출력 파일을 생성합니다.
BDE 암호화 볼륨은 다른 인증 방법에 대해 다른 형식을 가질 수 있습니다. bitcracker_hash 암호화 된 이미지에서 복구 비밀번호를 찾을 수 없으면 문제를 열거나 저에게 연락하십시오.
An example:
/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"
스토리지 장치가 다음 이미지와 같이 사용자가 제공된 비밀번호로 암호화 된 경우이 유형의 공격을 사용할 수 있습니다. Bitcracker는 사전 공격을 수행하므로 가능성이있는 사용자 비밀번호의 단어 목록을 제공해야합니다.
필요한 공격을 시작하려면 :
hash_user_pass.txt 파일명령 줄 예 :
./build/bitcracker_cuda -f hash_user_pass.txt -d wordlist.txt -t 1 -b 1 -g 0 -u
어디:
-f : hash_user_pass.txt 파일로가는 경로-d : 단어 목록으로가는 길-t : 각 CUDA 스레드에서 처리 한 암호 수-b : CUDA 블록 수-g : NVIDIA GPU 장치 ID-u : 원하는 사용자 비밀번호 공격을 지정하십시오 사용 가능한 모든 옵션에 대해 ./build/bitcracker_cuda -h 입력하십시오. 최상의 성능을 얻으려면 NVIDIA GPU에 따라 t 및 b 옵션을 올바르게 설정하려면 성능 섹션 테이블을 참조하십시오.
bitcracker_opencl 실행 파일에 대해 동일한 고려 사항을 적용 할 수 있습니다.
출력 예 :
====================================
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
================================================
현재 Bitcracker는 8 ~ 55 자 사이의 입력 암호를 처리 할 수 있습니다.
스토리지 장치의 암호화 중에 (인증 방법에 관계없이) Bitlocker 보통. 따라서 복구 비밀번호는 모든 인증 방법에 대한 일종의 Passe-Partout 이며 다음과 같은 48 자리 키로 구성됩니다.
236808-089419-192665-495704-618299-073414-538373-542366
자세한 내용은 Microsoft 문서를 참조하십시오.
사용자 비밀번호의 경우 Bitcracker는 사전 공격을 수행하여 Bitlocker가 생성 한 올바른 복구 비밀번호를 찾아 저장 장치를 암호화 할 수 있습니다. 스토리지 장치가 TPM으로 암호화되지 않은 경우에만 복구 암호를 공격 할 수 있습니다.
필요한 공격을 시작하려면 :
hash_recv_pass.txt 파일 가능한 모든 암호를 생성하고 저장하는 것은 어려운 문제입니다. 이러한 이유로 bitcracker_rpgen 이라는 복구 비밀번호 생성기를 만들었습니다. 이 도구를 사용하면 공격에 사용할 수있는 복구 암호 단어 목록을 만들 수 있습니다. 예를 들어 :
./build/bitcracker_rpgen -n 300 -p 10000000 -s 000000-000011-000022-000033-000044-000055-008459-015180
이것은 다음을 생성합니다.
-n : 워드리스트 수-p : 워드리스트 당 복구 비밀번호 수-s :이 암호에서 시작하는 복구 비밀번호를 생성합니다옵션없이 실행중인 기본 구성을 사용할 수 있습니다.
./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
...
-s 옵션을 사용하여 마지막 생성 된 복구 비밀번호에서 생성을 다시 시작할 수 있습니다 (초기에서 매번 다시 시작하는 대신). -d 옵션을 사용하면 동일한 복구 비밀번호에서 복제를 가질 수 있습니다. 예를 들어 : 000000-000011-000055-000055-000044-000055-000902-217822
사용 가능한 모든 옵션에 대해 ./build/bitcracker_rpgen -h 입력하십시오.
참고 : 가능한 복구 암호의 양은 엄청납니다.
recovery password = 65536 x 65536 x 65536 x 65536 x 65536 x 65536 x 65536 x 65536
우리의 연구에 따르면, 비밀번호 분포는 균일하며 "더 가능성이 높은"숫자를 찾을 방법이 없습니다. 지금까지 우리는 가능한 후보자의 양을 줄이는 규칙을 찾지 못했습니다. 이는 복구 암호 공격이 영원히 걸릴 수 있음을 의미합니다 (사용자 패스 워드 공격은 항상 선호하는 공격입니다). 곧 우리는 bitcracker_rpgen 도구를 수정하여 순서대로 순서 대신 복구 암호를 생성합니다.
명령 줄 예 :
./build/bitcracker_cuda -f hash_recv_pass.txt -d bitcracker_wlrp_0.txt -t 1 -b 1 -g 0 -r
옵션이 사용자 비밀번호의 경우와 동일하지만 -u 대신 -r 지정해야합니다. 출력 예 :
====================================
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
================================================
기본적으로 Bitcracker는 빠른 공격 (사용자 및 복구 비밀번호 모드 모두)을 수행하여 오 탐지를 반환 할 수 있습니다. 이 경우 -m 옵션으로 공격을 다시 실행하여 MAC 검증 (느린 솔루션)을 가능하게 할 수 있습니다.
실제 공격을 시작하기 전에 시스템에서 Bitcracker를 테스트하기 위해 암호화 된 스토리지 장치의 여러 이미지를 제공했습니다.
Dictionary 폴더에 저장된 워드리스트를 사용하여 사용자 및 복구 비밀번호 모드로 해당 이미지를 공격 할 수 있습니다.
여기서는 빠른 공격 (기본값)의 경우 사용자 비밀번호 (-U 옵션)의 경우 최고의 비트 크랙 커 성능을보고합니다.
| GPU Acronim | GPU | 아치 | CC | # sm | 시계 | 쿠다 |
|---|---|---|---|---|---|---|
| GFT | Geforce Titan | 케플러 | 3.5 | 14 | 835 | 7.0 |
| GTK80 | 테슬라 K80 | 케플러 | 3.5 | 13 | 875 | 7.5 |
| gftx | Geforce Titan x | 맥스웰 | 5.2 | 24 | 1001 | 7.5 |
| GTP100 | 테슬라 P100 | 파스칼 | 6.1 | 56 | 1328 | 8.0 |
| GTV100 | 테슬라 V100 | 볼타 | 7.0 | 80 | 1290 | 9.0 |
| AMDM | 라데온 몰타 | - | - | - | - | - |
성능:
| 버전 | GPU | -티 | -비 | 암호 x 커널 | 암호/초 | 해시/초 |
|---|---|---|---|---|---|---|
| 쿠다 | GFT | 8 | 13 | 106.496 | 303 | 635 mh/s |
| 쿠다 | GTK80 | 8 | 14 | 114.688 | 370 | 775 mh/s |
| 쿠다 | gftx | 8 | 24 | 106.608 | 933 | 1.957 MH/s |
| 쿠다 | GTP100 | 1 | 56 | 57.344 | 1.418 | 2.973 MH/s |
| 쿠다 | 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 각 비밀번호에는 약 2.097.152 SHA-256이 필요합니다
우리는 John the Ripper ( --format=bitlocker-opencl )의 Opencl-Bitlocker 형식으로 Bitcracker를 출시했습니다. bitcracker_hash 에서 생성 된 해시 파일 (섹션 방법 참조)은 John 형식과 완전히 호환됩니다.
GTV100 비밀번호 속도는 약 3150p/s입니다. JTR 팀은이 공격의 CPU 버전을 개발했습니다 ( --format=bitlocker ); CPU Intel (R) Xeon (R) v4 2.20GHz에서 암호 속도는 약 78p/s입니다.
이것은 진행중인 작업입니다 ...
2021 년 11 월 : Cuda 11.x를 사용하여 Nvidia GPU Ampere에서 실행하도록 코드 업데이트
Plase 공유 및 테스트 프로젝트 : 귀하의 의견이 필요합니다!
John the Ripper 팀, Dislocker 및 Libbde 프로젝트에 특별한 감사를드립니다.
이것은 GPLV2 라이센스에 따라 발표 된 이탈리아 국립 연구위원회와 협력하여 연구 프로젝트입니다.
Copyright (C) 2013-2021 Elena Age (Gmail Dot Com의 Elena Dot) 및 Massimo Bernaschi (Gmail Dot Com의 Massimo Dot Bernaschi)
우리는 미래의 논문에서 Bitcracker의 공격에 대한 추가 정보를 제공 할 것입니다.
우리는 GPLV2 라이센스를 사용하지만 협업에 열려 있습니다. 추가 정보, 협업 또는 버그 보고서는 저희에게 연락하거나 문제를 열어주십시오.