
إثبات المفهوم لثغرات Wi-Fi في ESP32/8266 (CVE-2019-12586, CVE-2019-12587, CVE-2019-12588)
هذا المستودع جزء من مخرجات بحثية من ASSET Research Group.

يعرض هذا المستودع 3 هجمات Wi-Fi ضد أجهزة ESP32/8266 الشهيرة المستخدمة في إنترنت الأشياء:
اتبع الروابط الخاصة بكل ثغرة لمزيد من التفاصيل وتصحيحات Espressif.
تم العثور على هذه الثغرات في حزم تطوير (SDKs) الخاصة بـ ESP32 وESP8266. كانت إصداراتها ESP-IDF v4.0-dev-459-gba1ff1692 وNONOS-SDK v3.0-103-g7a31cb7 على التوالي وقت الاكتشاف.
في حين يتم توفير نسخة مخصصة من hostapd لاختبار أول ثغرتين، يتم استخدام ESP8266 في الثغرة الأخيرة لحقن إطارات 802.11 beacon مزيفة من أجل تعطيل أجهزة أخرى من نفس النوع (بلا تورية مقصودة!).
إذا كنت تستخدم debian أو ubuntu، يمكنك تنفيذ ملف hostapd المُجمَّع بالفعل في المجلد hostapd-2.8_binary. فقط شغّل hostapd-2.8_binary/run_hostapd_exploit.sh لبدء نقطة الوصول لاختبار الثغرة، أو hostapd-2.8_binary/run_zero_pmk_EAP.sh للبدء دون هذا الاختبار. يُرجى العلم أنك تحتاج إلى إيقاف خدمات الشبكة باستخدام service network-manager stop حتى تكون واجهة Wi-Fi الخاصة بك حرة.
service network-manager stop
./run_zero_pmk_EAP.sh # to test against CVE-2019-12587 (remember to restart ESP first)
./run_crash_esp_EAP.sh # to test against CVE-2019-12586
إذا كان الثنائي لا يعمل مع نظامك لسبب ما، يمكنك تجميع المشروع hostapd-2.8_source عن طريق تشغيل السكربت ./buid.sh. يقوم السكربت بتثبيت التبعيات التالية قبل تشغيل الأداة: build-essential pkg-config git libnl-genl-3-dev libssl-dev libnl-route-3-dev.
بعد نجاح البناء، يمكنك تشغيل السكربت ./run_zero_pmk_EAP.sh لبدء نقطة الوصول لاختبار الثغرة، أو ./run_hostapd_normal.sh للبدء دون الاختبار.
./build
./run_zero_pmk_EAP.sh # to test against CVE-2019-12587 (remember to restart ESP first)
./run_crash_esp_EAP.sh # to test against CVE-2019-12586
من أجل تجميع الكود الخاص بـ esp8266 في المجلد beacon_frame_crasher، من الضروري اتباع الخطوات الواردة في ESP8266 Deauther. هذه نسخة معدلة من حزمة دعم اللوحة (board support package) لـ ESP8266 تسمح بحقن إطارات 802.11 الخام. يتم أيضًا توفير ثنائي للاختبار السريع في beacon_frame_crasher/ESP8266Crasher.ino.d1_mini.bin في حال كان لديك لوحة wemos d1 mini احتياطية. لاحظ أن هذا الكود مبرمج بشكل ثابت لتعطيل ESP8266 مُهيأ كنقطة وصول بمعرف ssid=TEST_KRA. بمجرد بدء تشغيل جهاز "beacon frame crasher"، يجب أن تُعاد تشغيل أجهزة ESP8266 الأخرى المتصلة بنقطة الوصول بشكل متقطع.
بدلاً من ذلك، إذا كانت أجهزة Wi-Fi لديك تدعم وضع المراقبة والحقن، يمكنك تشغيل سكربت بايثون:
sudo apt-get install -y aircrack-ng
sudo airmon-ng check kill
sudo airmon-ng wlan0 start # wlan0 is your wifi interface name
pip install scapy
python beacon_frame_crasher/ESP8266Crasher.py
إذا كانت حزمة تطوير جهاز ESP الخاص بك عرضة لـ CVE-2019-12587، فيجب أن تتلقى مخرجات مثل هذه من hostapd:

إذا كانت حزمة تطوير جهاز ESP الخاص بك عرضة لـ CVE-2019-12586، فيجب أن تتلقى مخرجات مثل هذه من hostapd:

في هذه الحالة، نظرًا لأن الجهاز يُعاد تشغيله في كل مرة يحاول فيها الاتصال بـ hostapd، يجب أن تتلقى الكثير من السجلات التي تشير إلى إعادة الاتصال. إذا كنت تراقب المنفذ التسلسلي للجهاز، يمكنك أيضًا تلقي سجلات تتبع.
بشكل افتراضي، تحتوي نقطة الوصول الخاصة بـ PoC على الإعدادات الافتراضية التالية:
لتغيير هذه الخيارات، عدّل الملف hostapd.conf في المجلد الجذر لـ hostapd (hostapd-2.8_binary/hostapd.conf أو hostapd-2.8_source/hostapd/hostapd.conf). يُرجى تغيير معامل interface ليتوافق مع بطاقة Wi-Fi لديك، ويُنصح بترك المعاملات الأخرى على الإعدادات الافتراضية إذا كنت ترغب في اختبار أكواد عميل ESP32/8266. الشهادات الصحيحة مضمنة أيضًا (نفس الشهادات من مستودع ESP-IDF)، لذلك ليست هناك حاجة لتغييرها في مجلد hostapd.
إذا كنت ترغب في تغيير طرق EAP أو بيانات اعتماد اسم المستخدم، فقط عدّل hostapd.eap_user
تحقق مما إذا كانت مكتبة openssl لديك تسمح باستخدام إصدار TLS 1.0. يمكنك تغيير هذا الإعداد عادةً في /etc/ssl/openssl.cnf، بتغيير الأسطر الأخيرة إلى:
[system_default_sect]
MinProtocol = TLSv1.0
CipherString = DEFAULT@SECLEVEL=1
الأكواد المستخدمة لاختبار الأجهزة المعرضة للخطر موجودة في المجلد esp_client_test_codes.
يمكن تجميع ESP32_Arduino_EAP_Client و ESP8266_Arduino_EAP_Client باستخدام حزم دعم لوحات Arduino الخاصة بكل منهما (arduino-esp32 و arduino-esp8266). أما بالنسبة للأكواد غير الخاصة بـ Arduino، فستحتاج إلى ESP-IDF وESP8266_NONOS_SDK لتجميع ESP8266_EAP_Client و ESP32_EAP_Client. لاحظ أنك بحاجة إلى استخدام نفس حزم التطوير أو إصدارات أقدم من تلك المذكورة هنا لتفعيل جميع الثغرات الموصوفة.
هذا البحث مدعوم جزئيًا من Keysight Technologies.