
ESP32/8266 वाई-फ़ाई कमजोरियों (CVE-2019-12586, CVE-2019-12587, CVE-2019-12588) का प्रूफ ऑफ़ कॉन्सेप्ट
यह रिपॉजिटरी ASSET Research Group के शोध परिणाम का हिस्सा है।

यह रिपॉजिटरी लोकप्रिय ESP32/8266 IoT उपकरणों के विरुद्ध 3 वाई-फाई हमलों का प्रदर्शन करती है:
अधिक विवरण और Espressif के पैच के लिए प्रत्येक भेद्यता के लिंक का अनुसरण करें।
ये भेद्यताएं ESP32 और ESP8266 के SDK में पाई गईं। खोज के समय उनके संस्करण क्रमशः ESP-IDF v4.0-dev-459-gba1ff1692 और NONOS-SDK v3.0-103-g7a31cb7 थे।
जबकि पहली 2 भेद्यताओं के परीक्षण के लिए hostapd का एक कस्टम संस्करण प्रदान किया गया है, अंतिम के लिए, एक ESP8266 का उपयोग नकली 802.11 बीकन फ्रेम इंजेक्ट करने के लिए किया जाता है ताकि अपने ही अन्य उपकरणों को क्रैश किया जा सके (कोई वाक्य-दोष नहीं!)।
यदि आप डेबियन या उबंटू चला रहे हैं तो आप फ़ोल्डर hostapd-2.8_binary में पहले से संकलित hostapd को निष्पादित कर सकते हैं। भेद्यता का परीक्षण करने के लिए एक्सेस पॉइंट शुरू करने के लिए hostapd-2.8_binary/run_hostapd_exploit.sh चलाएं या इस परीक्षण के बिना शुरू करने के लिए hostapd-2.8_binary/run_zero_pmk_EAP.sh चलाएं। कृपया ध्यान दें कि आपको अपने वाई-फाई इंटरफ़ेस को मुक्त करने के लिए service network-manager stop के साथ नेटवर्क सेवाओं को रोकना होगा।
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
यदि किसी कारण से बाइनरी आपके सिस्टम पर काम नहीं करती है, तो आप स्क्रिप्ट ./buid.sh चलाकर प्रोजेक्ट hostapd-2.8_source को संकलित कर सकते हैं। स्क्रिप्ट टूल चलाने से पहले निम्नलिखित निर्भरताएं स्थापित करती है: 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
फ़ोल्डर beacon_frame_crasher में esp8266 के लिए कोड संकलित करने के लिए, ESP8266 Deauther में दिए गए चरणों का पालन करना आवश्यक है। यह ESP8266 के लिए बोर्ड सपोर्ट पैकेज का एक संशोधित संस्करण है जो कच्चे 802.11 फ्रेम के इंजेक्शन की अनुमति देता है। यदि आपके पास एक अतिरिक्त wemos d1 mini बोर्ड है, तो त्वरित परीक्षण के लिए beacon_frame_crasher/ESP8266Crasher.ino.d1_mini.bin में एक बाइनरी भी प्रदान की गई है। ध्यान दें कि यह कोड ssid=TEST_KRA वाले एक्सेस पॉइंट के लिए कॉन्फ़िगर किए गए ESP8266 को क्रैश करने के लिए हार्डकोडेड है। जैसे ही "बीकन फ्रेम क्रैशर" डिवाइस शुरू होता है, एक्सेस पॉइंट से जुड़े अन्य ESP8266 उपकरणों को बीच-बीच में रीस्टार्ट होना चाहिए।
वैकल्पिक रूप से, यदि आपका वाई-फाई हार्डवेयर मॉनिटरिंग और इंजेक्शन का समर्थन करता है, तो आप पायथन स्क्रिप्ट चला सकते हैं:
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 डिवाइस SDK CVE-2019-12587 के प्रति संवेदनशील है, तो आपको hostapd से इस प्रकार का आउटपुट प्राप्त होना चाहिए:

यदि आपका ESP डिवाइस SDK CVE-2019-12586 के प्रति संवेदनशील है, तो आपको hostapd से इस प्रकार का आउटपुट प्राप्त होना चाहिए:

इस मामले में, जैसा कि डिवाइस हर बार hostapd के साथ कनेक्शन का प्रयास करने पर पुनरारंभ हो रहा है, आपको पुनः-कनेक्शन का संकेत देने वाले बहुत सारे लॉग प्राप्त होने चाहिए। यदि आप डिवाइस सीरियल पोर्ट की निगरानी कर रहे हैं, तो आप ट्रेस लॉग भी प्राप्त कर सकते हैं।
डिफ़ॉल्ट रूप से PoC एक्सेस पॉइंट में निम्नलिखित डिफ़ॉल्ट कॉन्फ़िगरेशन है:
इन विकल्पों को बदलने के लिए, hostapd के रूट फ़ोल्डर में hostapd.conf फ़ाइल बदलें (hostapd-2.8_binary/hostapd.conf या hostapd-2.8_source/hostapd/hostapd.conf)। कृपया अपने वाई-फाई NIC से मेल खाने के लिए इंटरफ़ेस पैरामीटर बदलें, यदि आप 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) का उपयोग करके संकलित किया जा सकता है। गैर-अरुडिनो कोड के लिए, ESP8266_EAP_Client और ESP32_EAP_Client को संकलित करने के लिए ESP-IDF और ESP8266_NONOS_SDK की आवश्यकता होती है। ध्यान दें कि वर्णित सभी भेद्यताओं को ट्रिगर करने के लिए आपको यहां उल्लिखित समान या पहले के SDK का उपयोग करने की आवश्यकता है।
यह शोध आंशिक रूप से Keysight Technologies द्वारा समर्थित था।