
BitCracker는 BitLocker로 암호화된 메모리 장치를 위한 최초의 오픈 소스 비밀번호 크래킹 도구입니다.
BitCracker는 BitLocker로 암호화된 저장 장치(하드 디스크, USB 펜드라이브, SD 카드 등)를 위한 최초의 오픈 소스 비밀번호 크래킹 도구입니다. BitLocker는 Windows Vista, 7, 8.1 및 10(Ultimate, Pro 및 Enterprise 에디션)에서 사용할 수 있는 암호화 기능입니다. BitLocker는 TPM(Trusted Platform Module), 스마트 카드, 복구 암호, 사용자 제공 암호 등 저장 장치를 암호화하기 위한 다양한 인증 방법을 제공합니다.
사전 공격을 통해 BitCracker는 암호화된 저장 장치를 해독하기 위해 올바른 사용자 암호 또는 복구 암호를 찾으려고 시도합니다. CUDA 및 OpenCL로 구현되었습니다.
여러 저널이 BitCracker 논문의 출판을 지연시켰습니다(거의 3년, 여러 번의 수정 끝에 최종 거절). 이 논문은 공격의 세부 사항, BitLocker 드라이브 암호화(BDE) 볼륨 형식 및 암호화/복호화 절차의 가능한 취약점을 설명합니다. 마지막으로 여기에 논문을 게시했습니다: https://arxiv.org/abs/1901.01337 . 자유롭게 댓글을 달고 공유해 주세요.
BitCracker-CUDA를 실행하려면 최소 요구 사항은 다음과 같습니다:
BitCracker-OpenCL을 실행하려면 최소 요구 사항은 OpenCL을 지원하는 모든 GPU 또는 CPU입니다 (여기에서 도움을 찾을 수 있습니다).
BitCracker는 최소 260MB의 디바이스 메모리가 필요합니다.
성능상의 이유로 CPU보다 GPU에서 공격을 실행하는 것을 강력히 권장합니다 (성능 섹션 참조).
build.sh 스크립트를 실행하면 build 디렉토리 안에 4개의 실행 파일이 생성됩니다: bitcracker_hash, bitcracker_rpgen, bitcracker_cuda, bitcracker_opencl.
bitcracker_cuda를 NVIDIA GPU 및 CUDA 버전에 맞게 빌드하려면 src_CUDA/Makefile을 수정하여 올바른 SM 버전을 선택해야 합니다. 참고로 다음 표를 사용할 수 있습니다:
예를 들어 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가 암호화된 이미지에서 복구 암호를 찾을 수 없는 경우, 이슈를 열거나 저에게 연락해 주세요.
예제:
/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를 입력하세요.
최상의 성능을 얻으려면 Performance 섹션의 표를 참조하여 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는 사용자에게 드라이브를 정상적으로 잠금 해제할 수 없는 경우 암호화된 저장 장치에 대한 액세스를 복원하는 데 사용할 수 있는 복구 암호를 어딘가에 저장하도록 요청합니다. 따라서 복구 암호는 모든 인증 방법에 대한 일종의 마스터 키이며 다음과 같은 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는 빠른 공격을 수행합니다(사용자 및 복구 암호 모드 모두). 이 공격은 일부 오탐지를 반환할 수 있습니다. 이 경우 MAC 검증을 활성화하는 -m 옵션을 사용하여 공격을 다시 실행할 수 있습니다(느린 솔루션).
실제 공격을 시작하기 전에 시스템에서 BitCracker를 테스트하기 위해 여러 암호화된 저장 장치 이미지를 제공했습니다.
Dictionary 폴더에 저장된 단어 목록을 사용하여 사용자 및 복구 암호 모드 모두로 해당 이미지를 공격할 수 있습니다.
다음은 사용자 암호(-u 옵션)에 대한 빠른 공격(기본)의 최상의 BitCracker 성능을 보고합니다.
성능:
참고: 각 암호는 약 2,097,152 SHA-256이 필요합니다.
BitCracker를 John The Ripper의 OpenCL-BitLocker 형식으로 출시했습니다 (--format=bitlocker-opencl).
bitcracker_hash가 생성한 해시 파일(How To 섹션 참조)은 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에서 실행되도록 코드 업데이트
프로젝트를 공유하고 테스트해 주세요: 여러분의 피드백이 필요합니다!
John The Ripper 팀, Dislocker 및 LibBDE 프로젝트에 특별히 감사드립니다.
이는 이탈리아 국립 연구 위원회(National Research Council of Italy)와의 협력 연구 프로젝트이며 GPLv2 라이선스로 출시되었습니다.
저작권 (C) 2013-2021 Elena Ago (elena dot ago at gmail dot com) 및 Massimo Bernaschi (massimo dot bernaschi at gmail dot com)
향후 논문에서 BitCracker 공격에 대한 추가 정보를 제공할 예정입니다.
GPLv2 라이선스를 사용하지만 협력에 열려 있습니다. 추가 정보, 협업 또는 버그 신고는 연락 주시거나 이슈를 열어 주세요.
| GPU 아키텍처 | 권장 CUDA | 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 |
| GPU 약어 | GPU | 아키텍처 | CC | # SM | 클럭 | 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 | - | - | - | - | - |
| 버전 | GPU | -t | -b | 커널당 암호 수 | 암호/초 | 해시/초 |
|---|
| 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 |