Bitcracker เป็นเครื่องมือแคร็กรหัสผ่านโอเพ่นซอร์สเครื่องแรกสำหรับอุปกรณ์จัดเก็บข้อมูล (ฮาร์ดดิสก์, USB Pendrive, การ์ด SD, ฯลฯ ... ) เข้ารหัสด้วย Bitlocker, คุณสมบัติการเข้ารหัสที่มีอยู่ใน Windows Vista, 7, 8.1 และ 10 (Ultimate, Pro และ Enterprise รุ่น) Bitlocker เสนอวิธีการตรวจสอบความถูกต้องที่แตกต่างกันเพื่อเข้ารหัสอุปกรณ์จัดเก็บข้อมูลเช่นโมดูลแพลตฟอร์มที่เชื่อถือได้ (TPM) สมาร์ทการ์ดรหัสผ่านการกู้คืนรหัสผ่านที่ผู้ใช้ให้
ด้วยการโจมตีพจนานุกรม Bitcracker พยายามค้นหารหัสผ่านผู้ใช้หรือรหัสผ่านการกู้คืนที่ถูกต้องเพื่อถอดรหัสอุปกรณ์จัดเก็บข้อมูลที่เข้ารหัส มันถูกนำไปใช้ใน Cuda และ Opencl
วารสารหลายเล่มล่าช้าการตีพิมพ์กระดาษ bitcracker ของเรา (เกือบ 3 ปีโดยมีการปฏิเสธขั้นสุดท้ายหลังจากการแก้ไขหลายครั้ง) ซึ่งอธิบายรายละเอียดของการโจมตีของเรารูปแบบปริมาณการเข้ารหัสไดรฟ์ Bitlocker (BDE) และจุดอ่อนที่เป็นไปได้ในขั้นตอนการเข้ารหัส/การถอดรหัส ในที่สุดเราก็เผยแพร่บทความที่นี่: https://arxiv.org/abs/1901.01337 โปรดอย่าลังเลที่จะแสดงความคิดเห็นและแบ่งปัน
ในการเรียกใช้ bitcracker-cuda ข้อกำหนดขั้นต่ำคือ:
ในการเรียกใช้ bitcracker-opencl ข้อกำหนดขั้นต่ำคือ GPU หรือ CPU ที่รองรับ OpenCL (คุณสามารถค้นหาความช่วยเหลือได้ที่นี่
Bitcracker ต้องการหน่วยความจำอุปกรณ์อย่างน้อย 260 MB
เราขอแนะนำอย่างยิ่งให้เรียกใช้การโจมตีของคุณใน GPU แทนที่จะเป็น CPU เพื่อเหตุผลด้านประสิทธิภาพ (ดูประสิทธิภาพส่วน)
การรันสคริปต์ build.sh
สร้าง 4 executables ภายในไดเรกทอรี build
: bitcracker_hash
, bitcracker_rpgen
, bitcracker_cuda
, bitcracker_opencl
ในการสร้าง bitcracker_cuda
อย่างสอดคล้องกับเวอร์ชัน Nvidia GPU และ CUDA ของคุณคุณต้องปรับเปลี่ยน src_CUDA/Makefile
เลือกรุ่น SM ที่ถูกต้อง เป็นข้อมูลอ้างอิงคุณสามารถใช้ตารางต่อไปนี้:
สถาปัตยกรรม GPU | cuda ที่แนะนำ | 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 |
Volta | Cuda 9.0 | arch = compute_70, code = sm_70 |
คุณต้องสร้างภาพของอุปกรณ์จัดเก็บข้อมูลที่เข้ารหัสด้วย BitLocker โดยใช้เป็นตัวอย่างคำสั่ง 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)
จากนั้นคุณจะต้องเรียกใช้งาน bitcracker_hash
บน imageEncrypted.img
ของคุณเพื่อ:
หากการดำเนินการเสร็จสมบูรณ์อย่างถูกต้อง 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-u
: ระบุการโจมตีด้วยรหัสผ่านของผู้ใช้ที่ต้องการ สำหรับตัวเลือกทั้งหมดที่มีให้พิมพ์ ./build/bitcracker_cuda -h
เพื่อให้มีประสิทธิภาพที่ดีที่สุดโปรดดูที่ตารางในส่วนประสิทธิภาพเพื่อตั้งค่าตัวเลือก t
และ b
อย่างถูกต้องตาม Nvidia GPU ของคุณ
ข้อควรพิจารณาเดียวกันสามารถนำไปใช้กับการดำเนินการ 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
: จำนวนรหัสผ่านการกู้คืนต่อ WordList-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
จากการวิจัยของเราการกระจายรหัสผ่านนั้นเหมือนกันและไม่มีวิธีใดที่จะค้นหาตัวเลข "น่าจะเป็นไปได้มากขึ้น" จนถึงตอนนี้เราไม่พบกฎเพื่อลดจำนวนผู้สมัครที่เป็นไปได้ ซึ่งหมายความว่าการโจมตีด้วยรหัสผ่านการกู้คืนอาจใช้เวลาตลอดไป (การโจมตีของผู้ใช้ Passwod นั้นเป็นที่ต้องการเสมอ) ในไม่ช้าเราจะปรับเปลี่ยนเครื่องมือ 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 ในระบบของคุณก่อนเริ่มการโจมตีจริงเราได้จัดทำรูปภาพของอุปกรณ์จัดเก็บข้อมูลที่เข้ารหัสหลายภาพ
คุณสามารถโจมตีภาพเหล่านั้นด้วยโหมดผู้ใช้และรหัสผ่านการกู้คืนโดยใช้ WordLists ที่เก็บไว้ในโฟลเดอร์ Dictionary
ที่นี่เรารายงานการแสดง bitcracker ที่ดีที่สุดในกรณีที่การโจมตีอย่างรวดเร็ว (เริ่มต้น) ไปยังรหัสผ่านผู้ใช้ (ตัวเลือก -u)
GPU acronim | GPU | โค้ง | ซีซี | # SM | นาฬิกา | คนขี้เกียจ |
---|---|---|---|---|---|---|
GFT | GeForce Titan | เคปเลอร์ | 3.5 | 14 | 835 | 7.0 |
GTK80 | Tesla K80 | เคปเลอร์ | 3.5 | 13 | 875 | 7.5 |
GFTX | GeForce Titan X | แมกซ์เวล | 5.2 | 24 | 1001 | 7.5 |
GTP100 | Tesla P100 | ประเทศปาสคาล | 6.1 | 56 | 1328 | 8.0 |
GTV100 | Tesla v100 | Volta | 7.0 | 80 | 1290 | 9.0 |
AMDM | Radeon Malta | - | - | - | - | - |
ผลงาน:
รุ่น | GPU | -t | -b | รหัสผ่าน 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
เราเปิดตัว Bitcracker เป็นรูปแบบ OpenCl-Bitlocker ใน John the Ripper ( --format=bitlocker-opencl
) ไฟล์แฮชที่สร้างโดย bitcracker_hash
(ดู วิธีการ ส่วน) เข้ากันได้อย่างสมบูรณ์กับรูปแบบของ John
ในอัตรารหัสผ่าน GTV100 อยู่ที่ประมาณ 3150p/s ทีม JTR พัฒนา CPU เวอร์ชันการโจมตีนี้ ( --format=bitlocker
); บน CPU Intel (R) Xeon (R) V4 2.20GHz อัตรารหัสผ่านอยู่ที่ประมาณ 78p/s
นี่คืองานที่กำลังดำเนินการ ...
พ.ย. 2021: อัปเดตรหัสเพื่อทำงานบน Nvidia GPU ampere โดยใช้ cuda 11.x
PLASE แบ่งปันและทดสอบโครงการของเรา: เราต้องการความคิดเห็นของคุณ!
ขอขอบคุณเป็นพิเศษสำหรับทีม John the Ripper, Dislocker และ Libbde Project
นี่คือโครงการวิจัยที่ร่วมมือกับสภาวิจัยแห่งชาติอิตาลีที่เปิดตัวภายใต้ใบอนุญาต GPLV2
Copyright (C) 2013-2021 Elena AGO (Elena Dot AGO ที่ Gmail Dot Com) และ Massimo Bernaschi (Massimo dot Bernaschi ที่ Gmail dot com)
เราจะให้ข้อมูลเพิ่มเติมเกี่ยวกับการโจมตีของ Bitcracker ในกระดาษในอนาคต
แม้ว่าเราจะใช้ใบอนุญาต GPLV2 แต่เราก็เปิดรับความร่วมมือ สำหรับข้อมูลเพิ่มเติมใด ๆ รายงานความร่วมมือหรือข้อผิดพลาดโปรดติดต่อเราหรือเปิดปัญหา