
Sweyntooth ब्लूटूथ लो एनर्जी (BLE) भेद्यताओं का प्रूफ ऑफ कॉन्सेप्ट।
यह रिपॉजिटरी ASSET Research Group की शोध उपलब्धि का हिस्सा है।

SweynTooth में छह प्रमुख सिस्टम-ऑन-चिप (SoC) विक्रेताओं के विभिन्न ब्लूटूथ लो एनर्जी (BLE) सॉफ़्टवेयर डेवलपमेंट किट्स (SDKs) में 18 भेद्यताओं का एक परिवार शामिल है। ये भेद्यताएँ विशिष्ट BLE SoC कार्यान्वयनों में ऐसी कमज़ोरियाँ उजागर करती हैं जो परिस्थितियों के आधार पर रेडियो रेंज में मौजूद हमलावर को डेडलॉक, क्रैश और बफर ओवरफ्लो ट्रिगर करने या सुरक्षा को पूरी तरह से बायपास करने की अनुमति देती हैं। (अपडेट) हमने BLE KNOB वेरिएंट के विरुद्ध उपकरणों की जाँच के लिए एक परीक्षण स्क्रिप्ट भी शामिल की है।
आप ASSET Research Group SweynTooth disclosure website पर भेद्यताओं, उपलब्ध पैच और प्रभावित उपकरणों के बारे में अधिक जानकारी देख सकते हैं।
Fitbit, August Smart Lock, Eve Energy, CubiTag और अन्य "स्मार्ट" चीज़ें प्रभावित हैं।
इस PoC में Scapy और Colorama जैसी अच्छी तरह से अनुरक्षित लाइब्रेरीज़ का उपयोग किया गया है। BLE पैकेट निर्माण और विच्छेदन कस्टमाइज़्ड Scapy प्रोटोकॉल लेयर्स (bluetooth4LE और bluetooth.py) के माध्यम से किया जाता है। हमारे परिवर्धन को Scapy की मुख्य रिपॉजिटरी में शामिल करने हेतु एक मर्ज प्रगति पर है।
सबसे पहले, आपको यह सुनिश्चित करना होगा कि आपके सिस्टम पर Python2.7 और requirements.txt फ़ाइल में सूचीबद्ध पायथन पैकेज मौजूद हैं। यदि आप Ubuntu उपयोग कर रहे हैं, तो निम्नलिखित चलाएँ:
sudo apt-get install python2.7
sudo pip install -r requirements.txt
दूसरे, SweynTooth Nordic nRF52840 Dongle का उपयोग करके कमजोर पेरिफेरल के साथ हवा से कच्चे लिंक लेयर पैकेट भेजने/प्राप्त करने का कार्य करता है। Python 2.7 स्क्रिप्ट शुरू करने से पहले बोर्ड में ड्राइवर फ़र्मवेयर फ्लैश करना आवश्यक है।
हमारे फ़र्मवेयर कोड का बाइनरी nRF52_driver_firmware.zip फ़ाइल में है। बोर्ड पर फ़र्मवेयर फ्लैश करने के लिए आपको nrfutil टूल इंस्टॉल करना होगा। याद रखें कि फ्लैश करने से पहले nRF52840 को DFU मोड में रखें (अपने PC से कनेक्टेड USB डोंगल को छोटे रीसेट बटन को दबाकर रीसेट करें)।
आप पायथन निर्भरताएँ इंस्टॉल करने और फ़र्मवेयर फ्लैश करने के लिए निम्नलिखित कमांड चला सकते हैं:
python -m pip install nrfutil pyserial pycryptodome
nrfutil dfu usb-serial -p COM_PORT -pkg nRF52_driver_firmware.zip
स्क्रिप्ट Linux या Windows पर काम करती हैं। आपको केवल nRF52840 पोर्ट नाम से मेल खाने के लिए COM_PORT पैरामीटर बदलने की आवश्यकता है।
यदि पिछली फ्लैशिंग विधि काम नहीं करती है, तो आप nRF Connect App for Desktop का उपयोग करके भी फ़र्मवेयर फ्लैश कर सकते हैं, जो हेक्स फ़र्मवेयर (nRF52_driver_firmware.hex) को फ्लैश करने के लिए एक अच्छा इंटरफ़ेस प्रदान करता है।
आवश्यकताएँ स्थापित हो जाने के बाद, आप निम्नलिखित कमांड निष्पादित करके एक एक्सप्लॉइट स्क्रिप्ट चला सकते हैं:
python Telink_key_size_overflow.py COM7 A4:C1:38:D8:AD:A9
पहला तर्क सीरियल पोर्ट नाम है (सामान्यतः Linux पर /dev/ttyACM0) और दूसरा कमजोर BLE डिवाइस का पता है। आप इस पते का पता लगाने के लिए किसी भी BLE स्कैनर या nRF Connect App का उपयोग कर सकते हैं।
Key Size Overflow भेद्यता को उदाहरण के रूप में लेते हुए, यदि कमजोर डिवाइस क्रैश के बाद हैंग हो जाता है तो स्क्रिप्ट द्वारा निम्नलिखित आउटपुट दिया जाता है:

यदि आप Python निर्भरताएँ इंस्टॉल करने से बचने के लिए Docker इमेज के माध्यम से SweynTooth का उपयोग करना चाहते हैं, तो आप Docker इंस्टेंस को बिल्ड और रन करने के लिए docker.sh हेल्पर स्क्रिप्ट का उपयोग कर सकते हैं या रिलीज़ पेज पर उपलब्ध प्रीबिल्ट Docker इमेज (link) डाउनलोड कर सकते हैं। docker.sh का उपयोग नीचे वर्णित है।
--------- HELP -------------
sudo ./docker run <script_name> <serial_port> <ble_target_address> - Start any sweyntooth script by its name (<script_name>)
sudo ./docker build - Build docker container
sudo ./docker build release - Build docker container and create compressed image for release
sudo ./docker shell - Start docker container shell
---------- EXAMPLE ----------
./docker.sh run extras/Microchip_and_others_non_compliant_connection.py /dev/ttyACM0 f0:f8:f2:da:09:63
प्रत्येक एक्सप्लॉइट स्क्रिप्ट एक कमज़ोरी के अनुरूप है। निम्न सारांश तालिका भेद्यता और प्रभावित SoCs पर भेद्यता का शोषण करने के लिए स्क्रिप्ट के बीच पत्राचार दर्शाती है।