BitCracker هي أول أداة تكسير كلمة المرور مفتوحة المصدر لأجهزة التخزين (القرص الصلب ، Pendrive ، بطاقة SD ، إلخ ...) مشفرة مع Bitlocker ، ميزة تشفير متوفرة على Windows Vista ، 7 ، 8.1 و 10 (Ultimate ، Pro and Enterprise الطبعات). يوفر BitLocker عددًا من طرق المصادقة المختلفة لتشفير جهاز تخزين مثل وحدة المنصة الموثوقة (TPM) ، والبطاقة الذكية ، وكلمة مرور الاسترداد ، كلمة المرور المقدمة من المستخدم.
عن طريق هجوم قاموس ، يحاول BitCracker العثور على كلمة مرور المستخدم الصحيحة أو كلمة مرور الاسترداد لفك تشفير جهاز التخزين المشفر. تم تنفيذها في CUDA و OPENCL.
أخرت العديد من المجلات نشر ورقة BitCracker الخاصة بنا (تقريبًا 3 سنوات ، مع الرفض النهائي بعد عدة مراجعات) والتي تشرح تفاصيل هجومنا ، وتنسيق حجم تشفير محرك Bitlocker (BDE) والضعف المحتمل في إجراء التشفير/فك التشفير. أخيرًا ، نشرنا الورقة هنا: https://arxiv.org/abs/1901.01337. لا تتردد في التعليق والمشاركة.
لتشغيل bitcracker-cuda ، الحد الأدنى من المتطلبات هي:
لتشغيل BitCracker-Opencl ، فإن الحد الأدنى من متطلبات GPU أو وحدة المعالجة المركزية التي تدعم OpenCL (يمكنك العثور على بعض المساعدة هنا.
يتطلب BitCracker 260 ميجابايت على الأقل من ذاكرة الجهاز.
نوصي بشدة بتشغيل هجومك على GPU بدلاً من وحدة المعالجة المركزية لأسباب الأداء (انظر أداء القسم).
يقوم تشغيل برنامج build.sh
Script بإنشاء 4 نقاط تنفيذية داخل دليل build
: bitcracker_hash
، bitcracker_rpgen
، bitcracker_cuda
، bitcracker_opencl
.
من أجل إنشاء bitcracker_cuda
بشكل متماسك مع إصدار NVIDIA GPU و CUDA ، تحتاج إلى تعديل src_CUDA/Makefile
CHONGED SM الصحيح. كمرجع ، يمكنك استخدام الجدول التالي:
العمارة GPU | اقترح كودا | Makefile |
---|---|---|
كيبلر | كودا 7.5 | Arch = compute_35 ، الكود = sm_35 |
ماكسويل | CUDA 8.0 | Arch = compute_52 ، الكود = sm_52 |
باسكال | كودا 9.0 | Arch = compute_60 ، الكود = sm_60 |
فولتا | كودا 9.0 | Arch = compute_70 ، الكود = 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
ينتج ملفًا أو 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
بشكل صحيح وفقًا ل GPU 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 من المستخدم تخزين كلمة مرور الاسترداد في مكان يمكن استخدامه لاستعادة الوصول إلى جهاز التخزين المشفر في حالة عدم إمكانية إلغاء قفل محرك الأقراص عادة. وبالتالي ، فإن كلمة مرور الاسترداد هي نوع من الأجزاء passe لجميع أساليب المصادقة وتتألف من مفتاح 48 رقمًا مثل هذا:
236808-089419-192665-495704-618299-073414-538373-542366
انظر Microsoft Docs لمزيد من التفاصيل.
بالنسبة إلى كلمة مرور المستخدم ، فإن 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
وفقًا لبحثنا ، فإن توزيع كلمة المرور موحدة ولا توجد طريقة للعثور على أرقام "أكثر احتمالًا". حتى الآن ، لم نجد قاعدة لتقليل كمية المرشحين المحتملين. هذا يعني أن هجوم كلمة مرور الاسترداد قد يتخذ إلى الأبد (هجوم المستخدم 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 على نظامك قبل بدء الهجوم الحقيقي ، قدمنا عدة صور لأجهزة التخزين المشفرة.
يمكنك مهاجمة تلك الصور باستخدام أوضاع كلمة مرور المستخدم والاسترداد ، باستخدام قوائم الكلمات المخزنة في مجلد Dictionary
.
نحن هنا نقوم بالإبلاغ عن أفضل عروض bitCracker في حالة الهجوم السريع (الافتراضي) إلى كلمة مرور المستخدم (خيار -u).
GPU Acronim | GPU | قوس | نسخة | # 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 | -t | -ب | كلمات المرور x kernel | كلمات المرور/ثانية | التجزئة/ثانية |
---|---|---|---|---|---|---|
كودا | 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 نسخة وحدة المعالجة المركزية من هذا الهجوم ( --format=bitlocker
) ؛ على وحدة المعالجة المركزية Intel (R) Xeon (R) V4 2.20 جيجا هرتز ، يبلغ معدل كلمة المرور حوالي 78p/s.
هذا عمل مستمر ...
نوفمبر 2021: تم تحديث الكود على تشغيل NVIDIA GPU Ampere باستخدام CUDA 11.x
مشاركة واختبار مشروعنا: نحن بحاجة إلى ملاحظاتك!
شكر خاص لفريق John the Ripper و Dislocker و Libbde.
هذا مشروع بحثي بالتعاون مع المجلس الوطني للأبحاث في إيطاليا التي تم إصدارها بموجب ترخيص GPLV2.
حقوق الطبع والنشر (C) 2013-2021 Elena منذ ذلك الحين (Elena dot any في Gmail Dot Com) و Massimo Bernaschi (Massimo Dot Bernaschi في Gmail Dot Com)
سنقدم بعض المعلومات الإضافية حول هجوم BitCracker في ورقة مستقبلية.
على الرغم من أننا نستخدم ترخيص GPLV2 ، إلا أننا منفتحون على التعاون. للحصول على أي معلومات إضافية أو تعاون أو تقرير خطأ ، يرجى الاتصال بنا أو فتح مشكلة