
ब्लूटूथ डिवाइस से ऑडियो रिकॉर्ड करने के लिए PoC

इस रिपॉजिटरी में एक प्रूफ ऑफ कॉन्सेप्ट का कार्यान्वयन शामिल है, जो वैध उपयोगकर्ता की जानकारी के बिना ब्लूटूथ डिवाइस से ऑडियो रिकॉर्ड और रीप्ले करता है।
यह PoC RootedCON 2024 में मैड्रिड में BSAM: Seguridad en Bluetooth वार्ता के दौरान प्रदर्शित किया गया था।
इसे ब्लूटूथ डिवाइसों के असुरक्षित उपयोग और सुरक्षा मूल्यांकन के लिए एक सुसंगत पद्धति की आवश्यकता के बारे में जागरूकता बढ़ाने के लिए डिज़ाइन किया गया है। यही BSAM, Bluetooth Security Assessment Methodology का उद्देश्य है, जिसे Tarlogic द्वारा प्रकाशित किया गया है और यहाँ उपलब्ध है।
यह प्रूफ ऑफ कॉन्सेप्ट BSAM पद्धति के भीतर BSAM-PA-05 नियंत्रण का अनुपालन करने में विफलता का फायदा उठाता है। परिणामस्वरूप, डिवाइस उपयोगकर्ता की सहभागिता की आवश्यकता के बिना पेयरिंग प्रक्रिया सक्षम करता है और सिग्नल रेंज के भीतर किसी भी एजेंट को अपनी कार्यक्षमता उजागर करता है।
हमारे ब्लॉग पर अधिक जानकारी।
कोड Python में लिखा गया है और Python 3.11.8 के साथ परीक्षण किया गया है, लेकिन यह मुख्य रूप से Linux सिस्टम में व्यापक रूप से उपलब्ध टूल्स का उपयोग करता है।
PoC निम्नलिखित टूल्स का उपयोग करता है:
bluetoothctlbtmgmtpactlparecordpaplayArch Linux वितरणों में, bluetoothctl और btmgmt को bluez-utils पैकेज के साथ स्थापित किया जा सकता है, जबकि pactl, parecord और paplay libpulse पैकेज में उपलब्ध हैं।
PoC के काम करने के लिए, BlueZ ब्लूटूथ स्टैक की एक कार्यशील स्थापना होना आवश्यक है, जो Arch Linux वितरणों के लिए bluez पैकेज में उपलब्ध है। ऑडियो रिकॉर्ड और चलाने के लिए PulseAudio के साथ संगत ऑडियो सर्वर, जैसे PipeWire, की भी एक कार्यशील स्थापना आवश्यक है।
सुनिश्चित करें कि आपका डिवाइस ऑडियो स्रोत के रूप में कार्य करने में सक्षम है, यानी उसमें माइक्रोफ़ोन है, और वह ब्लूटूथ के माध्यम से खोजने योग्य (discoverable) और कनेक्ट होने योग्य (connectable) है।
उदाहरण के लिए, खोजने और कनेक्ट करने योग्य होने के लिए, वार्ता के दौरान उपयोग किए गए ईयरबड्स को उनके चार्जिंग केस के बाहर होना चाहिए। डिफ़ॉल्ट रूप से, वे केवल उपयोगकर्ता के कानों में रखे जाने पर ही माइक्रोफ़ोन सक्रिय करते हैं, हालाँकि यह सेटिंग कॉन्फ़िगरेशन ऐप में समायोजित की जा सकती है।
इसके अतिरिक्त, सुनिश्चित करें कि डिवाइस पहले से कनेक्टेड नहीं है, या वैकल्पिक रूप से, वह कई कनेक्शनों का समर्थन करता है।
सबसे पहले, डिवाइस का पता bluetoothctl जैसे टूल का उपयोग करके खोजा जाना चाहिए:
$ bluetoothctl
[bluetooth]# scan on
डिवाइस का पता खोज लेने के बाद, स्क्रिप्ट बाकी काम संभाल सकती है:
$ python BlueSpy.py -a <address>
नोट: स्क्रिप्ट आपके BlueZ इंस्टेंस के कॉन्फ़िगरेशन को संशोधित करने और उसे रिमोट डिवाइस के साथ पेयर करने के लिए सुपरयूज़र अनुमतियाँ माँग सकती है।
BlueSpy.py मुख्य स्क्रिप्ट है जो प्रक्रिया के हर चरण को निष्पादित करती है। हालाँकि, यदि आपको किसी भी चरण में समस्या आती है, तो उन्हें व्यक्तिगत रूप से निष्पादित करना सहायक हो सकता है:
pair.py आपके BlueZ के कॉन्फ़िगरेशन को संशोधित करने और रिमोट डिवाइस के साथ पेयरिंग प्रक्रिया शुरू करने के लिए कमांड-लाइन टूल btmgmt का उपयोग करता है। उपयोग किए गए सटीक कमांड core.py के अंदर pair फ़ंक्शन में हैं।connect.py एक त्वरित स्कैन शुरू करने (BlueZ के लिए आवश्यक) और डिवाइस से कनेक्शन स्थापित करने के लिए कमांड-लाइन टूल bluetoothctl का उपयोग करता है। उपयोग किए गए सटीक कमांड core.py के अंदर connect फ़ंक्शन में हैं।just_record.py सिस्टम के ऑडियो स्रोतों में डिवाइस खोजने (उसे माइक्रोफ़ोन के रूप में कार्य करना चाहिए) और रिकॉर्डिंग सत्र शुरू करने के लिए कमांड-लाइन टूल pactl और parecord का उपयोग करता है। उपयोग किए गए सटीक कमांड core.py के अंदर record फ़ंक्शन में हैं।यदि आपको किसी भी चरण में समस्या आती है, तो core.py में कमांडों की जाँच करें और उन्हें शेल में निष्पादित करने का प्रयास करें। इससे आपको यह अधिक जानकारी मिलेगी कि क्या विफल हो सकता है।
यदि आपके पास ब्लूटूथ मानक कैसे काम करता है या ब्लूटूथ डिवाइस की सुरक्षा का आकलन कैसे करें, इससे संबंधित कोई प्रश्न हैं, तो कृपया हमारी BSAM पद्धति वेबपेज देखें:
core.py के अंदर playback फ़ंक्शन कैप्चर किए गए ऑडियो को चलाने के लिए paplay निष्पादित करता है।