
BitCracker هي أول أداة مفتوحة المصدر لتكسير كلمات المرور لوحدات الذاكرة المشفرة باستخدام BitLocker.
BitCracker هي أول أداة مفتوحة المصدر لكسر كلمات المرور لأجهزة التخزين (القرص الصلب، USB، بطاقة 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، الحد الأدنى من المتطلبات هو أي وحدة معالجة رسومية أو معالج يدعم OpenCL (يمكنك العثور على بعض المساعدة هنا.
يتطلب BitCracker ما لا يقل عن 260 ميغابايت من ذاكرة الجهاز.
نوصي بشدة بتشغيل هجومك على وحدة معالجة رسومية بدلاً من المعالج لأسباب تتعلق بالأداء (انظر قسم الأداء).
تشغيل البرنامج النصي build.sh يولد 4 ملفات تنفيذية داخل دليل build: bitcracker_hash وbitcracker_rpgen وbitcracker_cuda وbitcracker_opencl.
من أجل بناء bitcracker_cuda بشكل متوافق مع وحدة معالجة الرسوميات NVIDIA وإصدار CUDA الخاص بك، تحتاج إلى تعديل ملف src_CUDA/Makefile باختيار إصدار SM الصحيح. كمرجع، يمكنك استخدام الجدول التالي:
تحتاج إلى إنشاء صورة لجهاز التخزين المشفر باستخدام 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 ملفًا أو ملفين:
يمكن أن تحتوي وحدات التخزين المشفرة بـ 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 الخاصة بك.
يمكن تطبيق نفس الاعتبارات على الملف التنفيذي 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.
ملاحظة: يرجى ملاحظة أن عدد كلمات مرور الاسترداد الممكنة ضخم:
كلمة مرور الاسترداد = 65536 × 65536 × 65536 × 65536 × 65536 × 65536 × 65536 × 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.
نقدم هنا أفضل أداءات BitCracker في حالة الهجوم السريع (الافتراضي) على كلمة مرور المستخدم (الخيار -u).
الأداء:
ملاحظة: تتطلب كل كلمة مرور حوالي 2.097.152 SHA-256
أصدرنا BitCracker كتنسيق OpenCL-BitLocker في John The Ripper (--format=bitlocker-opencl).
ملفات التجزئة الناتجة عن bitcracker_hash (انظر قسم كيفية الاستخدام) متوافقة تمامًا مع تنسيق John.
على GTV100، معدل كلمات المرور حوالي 3150p/s. قام فريق JtR بتطوير إصدار CPU لهذا الهجوم (--format=bitlocker); على معالج Intel(R) Xeon(R) v4 2.20GHz، يكون معدل كلمات المرور حوالي 78p/s.
هذا قيد التطوير...
نوفمبر 2021: تم تحديث الكود للعمل على NVIDIA GPU Ampere باستخدام CUDA 11.x
يرجى المشاركة واختبار مشروعنا: نحتاج إلى ملاحظاتك!
شكر خاص لفريق John The Ripper، ومشروعي Dislocker وLibBDE.
هذا مشروع بحثي بالتعاون مع المجلس الوطني للبحوث في إيطاليا صدر تحت ترخيص GPLv2.
حقوق النشر (C) 2013-2021 إيلينا أغو (elena dot ago at gmail dot com) وماسيمو بيرناسكي (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 |