
BLURtooth: ब्लूटूथ क्लासिक और ब्लूटूथ लो एनर्जी में क्रॉस-ट्रांसपोर्ट कुंजी व्युत्पत्ति का शोषण [CVE-2020-15802] [CVE-2022-20361]
यह रिपॉजिटरी AsiaCCS'22 में प्रस्तुत BLURtooth: Exploiting Cross-Transport Key Derivation in Bluetooth Classic and Bluetooth Low Energy शीर्षक वाले पेपर में वर्णित BLUR हमलों के बारे में है।
उपयोगी लिंक: pdf, video, slides, website।
BibTex प्रविष्टि:
@inproceedings{antonioli22blur,
author={Antonioli, Daniele and Tippenhauer, Nils Ole and Rasmussen, Kasper
and Payer, Mathias},
title={{BLURtooth: Exploiting Cross-Transport Key Derivation in
Bluetooth Classic and Bluetooth Low Energy}},
booktitle={Proceedings of the Asia conference on computer and
communications security (ASIACCS)},
month={May},
year={2022}
}
BLUR हमलों को CVE-2020-15802 और CVE-2022-20361 निर्दिष्ट किया गया है।
README के शेष भाग में हम ब्लूटूथ क्लासिक (उर्फ BR/EDR) को BT, ब्लूटूथ लो एनर्जी को BLE, और क्रॉस-ट्रांसपोर्ट की डेरिवेशन को CTKD के रूप में निरूपित करते हैं। हम यह भी मानते हैं कि हमला करने वाला उपकरण और पीड़ित BT, BLE और CTKD का समर्थन करते हैं। इसका मतलब है कि उपकरण ब्लूटूथ 4.2+ और BT/BLE सिक्योर कनेक्शन का समर्थन करते हैं।
हमले करने का सबसे आसान तरीका एक ही उपकरण को पीड़ित और हमला करने वाले उपकरण दोनों के रूप में उपयोग करना है। उदाहरण के लिए, हम एक लिनक्स लैपटॉप को पीड़ित/हमला करने वाले उपकरण के रूप में और किसी अन्य उपकरण को दूसरे पीड़ित के रूप में उपयोग करने की सलाह देते हैं।
हम bluez और bluez tools चलाने वाली लिनक्स मशीन का उपयोग कर रहे हैं। हम btmgmt टूल पर निर्भर हैं और इसके स्रोत कोड को देखना सहायक हो सकता है। विशेष रूप से हम इसके pair उप-कमांड का उपयोग करते हैं, क्योंकि यह अन्य कार्यों के अलावा, BT/BLE पर मनमानी पेयरिंग अनुरोध भेजने की अनुमति देता है, साथ ही मनमानी इनपुट-आउटपुट क्षमताओं की घोषणा करता है।
Usage: pair [-c cap] [-t type] <remote address>
यदि आप हमारे पेपर में प्रस्तुत सटीक हमले के परिदृश्य को पुन: उत्पन्न करना चाहते हैं तो आपको कुछ अतिरिक्त कार्य करने होंगे। विशेष रूप से आपको BIAS attack में प्रस्तुत सेटअप को पुन: उत्पन्न करना होगा। एक बार आपका सेटअप तैयार हो जाने पर आपको डेवलपमेंट बोर्ड को अपने BT/BLE कंट्रोलर के रूप में और लिनक्स लैपटॉप को होस्ट के रूप में उपयोग करने में सक्षम होना चाहिए। इसके अलावा, आपको होस्ट से लिंक लेयर पैकेट (जैसे BT LMP ट्रैफिक) को सूंघने और internalblue का उपयोग करके रनटाइम पर डेवलपमेंट बोर्ड के फर्मवेयर को गतिशील रूप से पैच करने में सक्षम होना चाहिए।
यह चरण वैकल्पिक है और इसमें आपके अपने लिनक्स कर्नेल को पैच करना आवश्यक है।
btmgmt -c 3 का उपयोग करते समय bluez स्वचालित रूप से MitM सुरक्षा फ्लैग को अनसेट कर देता है, उदाहरण के लिए यह AuthReq बाइट को 0x03 के बजाय 0x02 पर सेट करता है। हालांकि, BLUR हमलों के लिए इस फ्लैग को अनसेट करने की आवश्यकता नहीं है, केवल तब NoInputNoOutput क्षमताओं की घोषणा करने की आवश्यकता है जब दूरस्थ उपकरण इनपुट-आउटपुट क्षमताओं का समर्थन करता है। ऐसा करने से पेयरिंग प्रक्रिया MitM फ्लैग को अनसेट किए बिना जस्ट वर्क्स पर डाउनग्रेड हो जाती है।
इस सेटअप को लागू करने के लिए लिनक्स कर्नेल में न्यूनतम संशोधन की आवश्यकता है। विशेष रूप से, /net/bluetooth/hci_event.c में हम निम्नलिखित बदलते हैं:
cp.authentication = conn->auth_type;
से:
cp.authentication = 0x03;
ऐसा करके, हम अपने AuthReq फ्लैग को 0x03 पर हार्डकोड कर देते हैं, भले ही हम किसी भी इनपुट-आउटपुट क्षमता की घोषणा करें।
पीड़ित उपकरणों को सामान्य रूप से पेयर करें। उदाहरण के लिए, यदि आप एक स्मार्टफोन को लक्षित कर रहे हैं, तो इसे अपने लैपटॉप (पीड़ित और हमला करने वाले उपकरण दोनों के रूप में कार्य करते हुए) से पेयर करें। पेयरिंग के भाग के रूप में कुछ उपयोगकर्ता इंटरैक्शन की आवश्यकता हो सकती है (जैसे न्यूमेरिक तुलना)।
REMOTE-BTADD के रूप में दर्शाया गया हैhciconfig चलाएं और अपने hci इंडेक्स पर ध्यान दें, उदा., 0sudo btmgmt -i 0 चलाएं[hci0] # होयहाँ मैं मान रहा हूँ कि पीड़ित एक सार्वजनिक BLE पते का उपयोग कर रहा है। यदि वह एक यादृच्छिक पते का उपयोग कर रहा है तो -t विकल्प को 2 में बदलें।
btmgmt CLI से चलाएं:
pair -t 1 REMOTE-BTADD
यदि आपको एसोसिएशन को जस्ट वर्क्स पर डाउनग्रेड करने की भी आवश्यकता है तो चलाएं:
pair -c 3 -t 1 REMOTE-BTADD
-c फ्लैग हमलावर की इनपुट-आउटपुट क्षमताओं को सेट करता है और 0x3 का मान NoInputNoOutput को मैप करता है, जबकि लैपटॉप/स्मार्टफोन के लिए डिफ़ॉल्ट मान 0x1 है जो Display Yes/No को मैप करता है।
इस मामले में, भले ही हम एक BLE परिधीय का प्रतिरूपण कर रहे हों, हम BT पर सेंट्रल के रूप में पेयर करते हैं।
btmgmt CLI से चलाएं:
pair -t 0 REMOTE-BTADD
यदि आपको एसोसिएशन को जस्ट वर्क्स पर डाउनग्रेड करने की भी आवश्यकता है तो चलाएं:
pair -c 3 -t 0 REMOTE-BTADD
ऊपर वर्णित हमलों को दोहराएं, जबकि एक ऐसे उपकरण का प्रतिरूपण कर रहे हों जो वर्तमान में पीड़ित के लिए अज्ञात है (अर्थात, उसके साथ पेयर नहीं किया गया है)।
bluetoothctl CLI से आप discoverable को on या off और pairable सेट कर सकते हैं। btmgmt CLI से आप connectable फ्लैग भी सेट कर सकते हैं।
bluetoothctl से, आप discoverable-timeout का उपयोग करके डिस्कवरेबिलिटी टाइमआउट को नियंत्रित कर सकते हैं, उदाहरण के लिए, यदि आप इसे 0 पर सेट करते हैं तो उपकरण हमेशा डिस्कवरेबल रहता है।
BT के लिए, किसी दूरस्थ उपकरण के साथ सेंट्रल या परिधीय के रूप में पेयर करते समय, आपको निम्नलिखित LMP पैकेट प्राप्त होगा: LMP not accepted ext (ऑपकोड: 0x02) जिसमें पेयरिंग की अनुमति नहीं है (त्रुटि कोड: 0x18)
BLE के लिए, किसी दूरस्थ उपकरण के साथ सेंट्रल या परिधीय के रूप में पेयर करते समय, आपको निम्नलिखित SMP पैकेट प्राप्त होगा: SMP Pairing Failed Command (ऑपकोड 0x05) जिसमें Pairing Not Supported (कारण 0x05) है।
BT के लिए, किसी दूरस्थ उपकरण के साथ पेयर करते समय LMP फीचर पैकेज में होस्ट और कंट्रोलर के लिए सिक्योर कनेक्शन समर्थन देखें, उदाहरण के लिए, निम्नलिखित वायरशार्क डिस्प्ले फिल्टर का उपयोग करें: btbrlmp.efeat.scc or btbrlmp.efeat.sch।
BLE के लिए, किसी दूरस्थ उपकरण के साथ पेयर करते समय SMP पेयरिंग अनुरोध या प्रतिक्रिया में सिक्योर कनेक्शन फ्लैग वाले AuthReq बाइट की जांच करें, उदाहरण के लिए, निम्नलिखित वायरशार्क डिस्प्ले फिल्टर का उपयोग करें: btsmp.sc_flag == 1।
BT के लिए, किसी दूरस्थ उपकरण के साथ पेयर करते समय BLE SMP ट्रैफिक L2CAP पर टनल किया जाता है। इसलिए btl2cap.payload वायरशार्क फिल्टर का उपयोग करके आपको सेंट्रल से परिधीय तक एक पैकेट दिखना चाहिए जिसमें 0x01 (SMP पेयरिंग अनुरोध) से शुरू होने वाला पेलोड हो और दूसरी दिशा में एक पैकेट जिसमें 0x02 (SMP पेयरिंग प्रतिक्रिया) से शुरू होने वाला पेलोड हो। फिर आपको SMP की वितरण चरण को एन्कोड करने वाले अन्य कच्चे L2CAP पैकेट भी दिखने चाहिए।
BLE के लिए, किसी दूरस्थ उपकरण के साथ पेयर करते समय SMP पेयरिंग अनुरोध या प्रतिक्रिया में जांचें कि सेंट्रल और परिधीय दोनों SMP की वितरण के दौरान एक लिंक की भेजने और प्राप्त करने के लिए तैयार हैं, उदाहरण के लिए, निम्नलिखित वायरशार्क फिल्टर का उपयोग करें: btsmp.key_dist_linkkey or btsmp.key_dist_linkkey।