
إثبات المفهوم لثغرات Sweyntooth في تقنية Bluetooth Low Energy (BLE).
هذا المستودع هو جزء من نتائج بحث من مجموعة أبحاث ASSET.

يكشف SweynTooth عن عائلة من 18 ثغرة أمنية عبر مجموعات تطوير البرمجيات (SDKs) المختلفة للبلوتوث منخفض الطاقة (BLE) لستة من كبار موردي الأنظمة على الرقاقة (SoC). وتكشف هذه الثغرات عن عيوب في تنفيذات محددة لـ BLE SoC تسمح لمهاجم ضمن نطاق الراديو بالتسبب في حالات توقف تام (deadlocks)، وتعطل (crashes) وتجاوز سعة المخزن المؤقت (buffer overflows) أو تجاوز أمني كامل حسب الظروف. (تحديث) قمنا أيضًا بتضمين سكربت اختبار للتحقق من الأجهزة ضد متغير BLE KNOB.
يمكنك الاطلاع على مزيد من المعلومات حول الثغرات، التصحيحات المتاحة والأجهزة المتأثرة على موقع الكشف عن SweynTooth لمجموعة أبحاث ASSET.
Fitbit وAugust Smart Lock وEve Energy وCubiTag وغيرها من الأجهزة "الذكية" متأثرة.
يستخدم هذا PoC مكتبات جيدة الصيانة مثل Scapy وColorama. يتم إنشاء حزم BLE وتحليلها عبر طبقات بروتوكول Scapy المخصصة (bluetooth4LE وbluetooth.py). هناك دمج قيد التقدم لتضمين إضافاتنا في المستودع الرئيسي لـ Scapy.
أولاً، يجب التأكد من توفر Python2.7 على نظامك وحزم Python المدرجة في ملف requirements.txt.
إذا كنت تستخدم Ubuntu، فقم بتشغيل ما يلي:
sudo apt-get install python2.7
sudo pip install -r requirements.txt
ثانيًا، يستخدم SweynTooth مهايئ Nordic nRF52840 لإرسال/استقبال حزم طبقة الارتباط الخام من وإلى الجهاز الطرفي المعرض للخطر عبر الهواء. من الضروري وميض البرنامج الثابت على اللوحة قبل بدء سكربتات Python 2.7.
الملف الثنائي لشفرة البرنامج الثابت لدينا موجود في ملف nRF52_driver_firmware.zip. تحتاج إلى تثبيت أداة nrfutil لوميض البرنامج الثابت على اللوحة. تذكر وضع nRF52840 في وضع DFU قبل الوميض (أعد تعيين مهايئ USB أثناء توصيله بجهاز الكمبيوتر الخاص بك بالضغط على زر إعادة التعيين الصغير).
يمكنك تشغيل الأوامر التالية لتثبيت تبعيات Python ووميض البرنامج الثابت:
python -m pip install nrfutil pyserial pycryptodome
nrfutil dfu usb-serial -p COM_PORT -pkg nRF52_driver_firmware.zip
تعمل السكربتات على Linux أو Windows. كل ما عليك فعله هو تغيير معامل COM_PORT ليطابق اسم منفذ nRF52840.
إذا لم تنجح طريقة الوميض السابقة، يمكنك أيضًا وميض البرنامج الثابت باستخدام تطبيق nRF Connect لسطح المكتب، والذي يوفر واجهة سهلة لوميض البرنامج الثابت بصيغة hex (nRF52_driver_firmware.hex).
بعد تثبيت المتطلبات، يمكنك تشغيل سكربت استغلال عن طريق تنفيذ الأمر التالي:
python Telink_key_size_overflow.py COM7 A4:C1:38:D8:AD:A9
الوسيطة الأولى هي اسم المنفذ التسلسلي (غالبًا /dev/ttyACM0 على Linux) والثانية هي عنوان جهاز BLE المعرض للخطر. يمكنك استخدام أي ماسح BLE أو تطبيق nRF Connect لاكتشاف هذا العنوان.
على سبيل المثال، بالنسبة لثغرة تجاوز حجم المفتاح (Key Size Overflow)، يُخرج السكربت الناتج التالي إذا علق الجهاز المعرض للخطر بعد التعطل:

إذا كنت ترغب في استخدام SweynTooth عبر صورة Docker لتجنب تثبيت تبعيات Python، يمكنك استخدام السكربت المساعد docker.sh لبناء وتشغيل نسخة Docker أو تنزيل صورة Docker المجمعة مسبقًا (الرابط) المتوفرة في صفحة الإصدارات. يُوصف استخدام 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
يتوافق كل سكربت استغلال مع ثغرة واحدة. يوضح الجدول الموجز التالي التطابق بين الثغرة والسكربت المستخدم لاستغلالها على أنظمة SoC المتأثرة.