
BitCracker BitLocker से एन्क्रिप्टेड मेमोरी इकाइयों के लिए पहला ओपन सोर्स पासवर्ड क्रैकिंग टूल है।
BitCracker पहला ओपन सोर्स पासवर्ड क्रैकिंग टूल है जो BitLocker से एन्क्रिप्टेड स्टोरेज डिवाइसों (हार्ड डिस्क, USB पेनड्राइव, SD कार्ड, आदि) के लिए है। BitLocker Windows Vista, 7, 8.1 और 10 (Ultimate, Pro और Enterprise संस्करण) पर उपलब्ध एक एन्क्रिप्शन सुविधा है। BitLocker किसी स्टोरेज डिवाइस को एन्क्रिप्ट करने के लिए कई अलग-अलग प्रमाणीकरण विधियाँ प्रदान करता है, जैसे Trusted Platform Module (TPM), स्मार्ट कार्ड, रिकवरी पासवर्ड, उपयोगकर्ता द्वारा प्रदान किया गया पासवर्ड।
डिक्शनरी अटैक के माध्यम से, BitCracker एन्क्रिप्टेड स्टोरेज डिवाइस को डिक्रिप्ट करने के लिए सही उपयोगकर्ता पासवर्ड या रिकवरी पासवर्ड खोजने का प्रयास करता है। इसे CUDA और OpenCL में लागू किया गया है।
कई जर्नल ने हमारे BitCracker पेपर के प्रकाशन में देरी की (लगभग 3 साल, कई संशोधनों के बाद अंतिम अस्वीकृति), जो हमारे हमले के विवरण, BitLocker Drive Encryption (BDE) वॉल्यूम प्रारूप और एन्क्रिप्शन/डिक्रिप्शन प्रक्रिया में संभावित कमजोरियों की व्याख्या करता है। अंततः, हमने पेपर यहाँ प्रकाशित किया: https://arxiv.org/abs/1901.01337 । कृपया टिप्पणी करने और साझा करने के लिए स्वतंत्र महसूस करें।
BitCracker-CUDA चलाने के लिए न्यूनतम आवश्यकताएँ हैं:
BitCracker-OpenCL चलाने के लिए न्यूनतम आवश्यकता कोई भी GPU या CPU है जो OpenCL का समर्थन करता है (आप यहाँ कुछ सहायता पा सकते हैं)।
BitCracker को कम से कम 260 MB डिवाइस मेमोरी की आवश्यकता है।
हम दृढ़ता से अनुशंसा करते हैं कि प्रदर्शन कारणों से अपना हमला CPU के बजाय GPU पर चलाएँ (अनुभाग प्रदर्शन देखें)।
build.sh स्क्रिप्ट चलाने से build निर्देशिका के अंदर 4 निष्पादन योग्य फ़ाइलें उत्पन्न होती हैं: bitcracker_hash, bitcracker_rpgen, bitcracker_cuda, bitcracker_opencl।
अपने NVIDIA GPU और CUDA संस्करण के अनुरूप bitcracker_cuda बनाने के लिए, आपको सही SM संस्करण चुनकर src_CUDA/Makefile को संशोधित करना होगा। संदर्भ के लिए, आप निम्न तालिका का उपयोग कर सकते हैं:
आपको अपने 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)
फिर आपको अपने 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।
सर्वोत्तम प्रदर्शन के लिए, कृपया प्रदर्शन अनुभाग में तालिका देखें ताकि अपने 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 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
हमारे शोध के अनुसार, पासवर्ड वितरण एकसमान है और "अधिक संभावित" संख्याएँ खोजने का कोई तरीका नहीं है। अब तक, हमें संभावित उम्मीदवारों की संख्या कम करने का कोई नियम नहीं मिला है। इसका मतलब है कि रिकवरी पासवर्ड हमले में हमेशा के लिए लग सकता है (उपयोगकर्ता पासवर्ड हमला हमेशा पसंदीदा होता है)। जल्द ही हम 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 विकल्प) के लिए सर्वश्रेष्ठ 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: कोड को CUDA 11.x का उपयोग करके NVIDIA GPU Ampere पर चलाने के लिए अपडेट किया गया
कृपया हमारे प्रोजेक्ट को साझा करें और परीक्षण करें: हमें आपकी प्रतिक्रिया चाहिए!
John The Ripper टीम, Dislocker और LibBDE प्रोजेक्टों को विशेष धन्यवाद।
यह 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 |