
Marc Newlin के कीस्ट्रोक इंजेक्शन प्रमाण-अवधारणा (CVE-2023-45866) का Rust कार्यान्वयन।
⚠️ अस्वीकरण: केवल अनुसंधान और शैक्षिक उद्देश्यों के लिए
यह प्रोजेक्ट एक प्रूफ ऑफ कॉन्सेप्ट (PoC) है जो ब्लूटूथ कीस्ट्रोक इंजेक्शन को प्रदर्शित करता है, जिसे Rust में पुनः कार्यान्वित किया गया है। यह विशेष रूप से शैक्षिक और सुरक्षा अनुसंधान उद्देश्यों के लिए है।
इस कोड को डाउनलोड, क्लोन या उपयोग करके, आप इसे जिम्मेदारी से और सभी लागू कानूनों और विनियमों के अनुपालन में उपयोग करने के लिए सहमत होते हैं।
Rusty Injector में आपका स्वागत है — यह Marc Newlin के ब्लूटूथ कीस्ट्रोक इंजेक्शन PoC से प्रेरित Rust कार्यान्वयन है, जो CVE-2023-45866, CVE-2024-21306 और CVE-2024-0230 से जुड़ा है।
वर्तमान में, यह रिपॉजिटरी केवल CVE-2023-45866 को लागू करता है, जो Linux ऑपरेटिंग सिस्टम पर BlueZ में कीस्ट्रोक इंजेक्शन की कमजोरियों का शोषण करता है।
नीचे NIST विवरण का स्क्रीनशॉट है, जिसमें CVSS स्कोरिंग शामिल है:
चित्र 1: CVE-2023-45866 का NIST विवरण।
अन्य CVEs, CVE-2024-21306 और CVE-2024-0230, मेरे द्वारा कार्यान्वित करने की योजना नहीं है, लेकिन योगदान का हार्दिक स्वागत है।
विवरण में जाने से पहले, मैं आपको NullCon 2024 सम्मेलन में Marc Newlin की प्रस्तुति देखने के लिए प्रोत्साहित करता हूँ, क्योंकि यह इन कमजोरियों की स्पष्ट और गहन व्याख्या प्रदान करती है: Hi, My Name Is keyboard by Marc Newlin.
मैंने एक वीडियो भी उपलब्ध कराया है जो इस कमजोरी को लोकप्रिय बनाता है। आप इसे यहाँ पाएंगे: How a Simple Bluetooth Hack Can Hijack Your Device - Hi, my name is keyboard.
📌 यदि आपको नीचे दिए गए स्पष्टीकरण में कोई लुप्त बिंदु, सरलीकरण के क्षेत्र या संभावित गलतियाँ दिखाई दें, तो कृपया इसे संशोधित करें और एक मर्ज अनुरोध सबमिट करें। मुझे आपके योगदानों की समीक्षा करने और उन्हें रिपॉजिटरी में शामिल करने में खुशी होगी।
चूँकि हमने केवल Linux ऑपरेटिंग सिस्टम के लिए CVE-2023-45866 कमजोरी को कवर किया है, हम केवल BlueZ लाइब्रेरी को लक्षित करने वाले इस विशिष्ट शोषण तक पहुँचने की प्रक्रिया समझाएंगे।
सबसे पहले, आपको यह समझना होगा कि यह कमजोरी केवल Bluetooth BR/EDR पर शोषणीय है क्योंकि यह इस तकनीक पर आधारित HID प्रोफ़ाइल को लक्षित करती है। आप जानते होंगे कि ब्लूटूथ वास्तुकला कार्यान्वयन कई परतों में विभाजित है, जैसे ईथरनेट प्रोटोकॉल के लिए OSI मॉडल, और जैसा कि आप नीचे हमारे योजनाबद्ध में देख सकते हैं।
आरेख 1: सरलीकृत Bluetooth BR/EDR (बेसिक रेट - एन्हांस्ड डेटा रेट) स्टैक। स्टैक की सबसे निचली परत समर्पित एंटीना के साथ भौतिक परत का प्रतिनिधित्व करती है, और उच्च स्तर एप्लिकेशन स्तर या उस स्तर को दर्शाता है जिसे हम कभी-कभी ऑपरेटिंग सिस्टम के रूप में नामित कर सकते हैं। जब दो डिवाइस एक-दूसरे के साथ संवाद करना चाहते हैं, तो वे इन विभिन्न परतों से गुज़रते हैं: आउटगोइंग पैकेट के लिए ऊपर से नीचे और आने वाले ब्लूटूथ पैकेट के लिए नीचे से ऊपर।
पूछताछ प्रक्रिया के बाद, एक बार जब डिवाइस यह निर्धारित कर लेते हैं कि वे कनेक्शन स्थापित करना चाहते हैं, तो वे पेयरिंग प्रक्रिया के लिए आगे बढ़ते हैं। यह प्रक्रिया डिवाइसों के बीच आपसी प्रमाणीकरण और एक एन्क्रिप्शन कुंजी की स्थापना को सक्षम बनाती है, जिसका उपयोग संचार को सुरक्षित करने के लिए किया जाता है।
ब्लूटूथ विनिर्देश विभिन्न स्तरों के प्रमाणीकरण और सुरक्षा प्रदान करता है। प्रमाणीकरण के लिए उपयोग किए जाने वाले तंत्र के आधार पर, संचार की सुरक्षा का स्तर भिन्न हो सकता है। डिवाइस अपने पास मौजूद इनपुट और आउटपुट परिधीयों के आधार पर प्रमाणित हो सकते हैं, इस अवधारणा को एसोसिएशन मॉडल कहा जाता है। आपने इसे तब देखा होगा जब दो डिवाइसों को पेयर किया जाता है—जैसे दूसरे डिवाइस पर प्रदर्शित PIN कोड दर्ज करने के लिए कहा जाना।
डिवाइसों की I/O (इनपुट/आउटपुट) क्षमताओं द्वारा निर्धारित चार पेयरिंग एसोसिएशन मॉडल हैं:
नीचे एक तालिका है जो दर्शाती है कि हमारे IoT डिवाइसों की क्षमताओं के आधार पर कौन सा एसोसिएशन मॉडल उपयोग किया जाता है।
आरेख 2: ब्लूटूथ कोर विनिर्देश v5.3 - 2.3.5.1 चयन कुंजी पीढ़ी विधि तालिका 2.8: IO क्षमताओं का कुंजी पीढ़ी विधि से मानचित्रण (पृष्ठ 1573) से प्रेरित ब्लूटूथ BR/EDR एसोसिएशन मॉडल दर्शाने वाली तालिका। सुरक्षा मोड और एसोसिएशन मॉडल के बारे में अधिक जानकारी के लिए कृपया Thyrasec द्वारा प्रकाशित इस दिलचस्प ब्लॉग पोस्ट को देखें: Bluetooth Security : Classic & BLE!
मुझे विश्वास है कि आप 'जस्ट वर्क्स' विधि से उत्सुक हैं, जो वास्तव में हमारी कमजोरी है। यहाँ समस्या है: यह विधि उपयोगकर्ता की पुष्टि या बातचीत की आवश्यकता के बिना पेयरिंग स्थापित करती है, जिससे पेयरिंग डिवाइस की प्रामाणिकता को सत्यापित करने का कोई तरीका नहीं बचता है। Linux सिस्टम पर, BlueZ स्टैक, डिफ़ॉल्ट रूप से, NoInputNoOutput के रूप में वर्गीकृत डिवाइसों से आने वाले पेयरिंग अनुरोधों को स्वीकार करता था (पिछड़ी संगतता को सक्षम करने के लिए)। वास्तव में एक "अद्भुत" डिज़ाइन विकल्प, क्या आप सहमत नहीं हैं?
चित्र 2: ब्लूटूथ सुरक्षा को सक्षम करने और CVE-2023-45866 को पैच करने के लिए BlueZ की डिफ़ॉल्ट कॉन्फ़िगरेशन का अद्यतन।
लक्ष्य डिवाइस के साथ पेयर करने के बाद, हमारा सिस्टम L2CAP परत के पोर्ट 1 के माध्यम से सर्विस डिस्कवरी प्रोटोकॉल (SDP) से कनेक्शन स्थापित करता है। जैसा कि आरेख 1 में दिखाया गया है, L2CAP परत निचली और ऊपरी सेवा परतों के बीच एक मध्यस्थ के रूप में कार्य करती है, डेटा पैकेटों का विभाजन, मल्टीप्लेक्सिंग और पुनःसंयोजन प्रदान करती है। SDP कनेक्शन के माध्यम से, हम लक्ष्य डिवाइस पर सभी उपलब्ध सेवाओं की पहचान करते हैं और ह्यूमन इंटरफ़ेस प्रोफ़ाइल (HID) सेवा से कनेक्ट होते हैं। HID प्रोफ़ाइल, जिसका उपयोग ऑपरेटिंग सिस्टम ब्लूटूथ कीबोर्ड और चूहों से इनपुट संसाधित करने के लिए करते हैं, L2CAP परत के पोर्ट 17 (HID नियंत्रण) और 19 (HID इंटरप्ट) के माध्यम से संचालित होती है। HID प्रोफ़ाइल तक पहुँचने के लिए, किसी प्रमाणीकरण की आवश्यकता नहीं है और L2CAP के पोर्ट 17 और 19 से जुड़ा कोई भी डिवाइस HID डिवाइस के रूप में पहचाना जाता है।
एक हमलावर ब्लूटूथ वायरलेस कीबोर्ड की सेवाओं और डिवाइस वर्ग का प्रतिरूपण कर सकता है, 'NoInputNoOutput' क्षमता निर्दिष्ट करके 'जस्ट वर्क्स' एसोसिएशन मॉडल का शोषण कर सकता है, और लक्ष्य डिवाइस में अनधिकृत कीस्ट्रोक इंजेक्ट कर सकता है।
पूरी तरह से ईमानदार होने के लिए, एकमात्र उद्देश्य इस शोषण की अंतर्दृष्टि की गहरी समझ हासिल करने के लिए प्रूफ ऑफ कॉन्सेप्ट को Rust में पुनः कार्यान्वित करना था। यही कारण है कि इस पहले पुनरावृत्ति में, वैश्विक आर्किटेक्चर Marc Newlin के पायथन PoC से प्रेरित था: Github "hi_my_name_is_keyboard"। भविष्य के पुनर्कार्य में, इसे अधिक Rusty तरीके से कार्यान्वित किया जा सकता है।
इस कार्यान्वयन के दौरान उपयोग किए गए क्रेट्स (= Rust लाइब्रेरीज़):