
संशोधित hostapd और मॉनिटर-मोड फ्रेम रीप्ले का उपयोग करके KRACK कुंजी पुनर्स्थापना भेद्यताओं के लिए WPA2 क्लाइंट्स और APs को सत्यापित करने वाली स्क्रिप्ट्स।
यह प्रोजेक्ट स्क्रिप्ट्स प्रदान करता है जो यह जाँचने के लिए हैं कि क्या क्लाइंट या एक्सेस पॉइंट्स (APs) WPA2 के विरुद्ध KRACK हमले से प्रभावित हैं। इस हमले के पीछे के विवरण के लिए हमारी वेबसाइट देखें और शोध पत्र।
याद रखें कि हमारी स्क्रिप्ट्स हमले वाली स्क्रिप्ट्स नहीं हैं! यह जाँचने के लिए कि क्या कोई एक्सेस पॉइंट या क्लाइंट KRACK हमले से प्रभावित है, आपको उपयुक्त नेटवर्क क्रेडेंशियल्स की आवश्यकता होगी।
दिसंबर 2024: 7वें टेस्ट ./krack-test-client.py --gtkinit में एक बग ठीक किया गया है। इस बगफिक्स से पहले, यह उल्लेख किया गया था कि यह टेस्ट (इसका आउटपुट) अविश्वसनीय था, लेकिन अब नए निर्देशों का पालन करने पर आउटपुट भरोसेमंद होना चाहिए। अर्थात, जब यह टेस्ट अब संकेत देता है कि डिवाइस संवेदनशील है, तो वह वास्तव में संभावतः संवेदनशील है।
जनवरी 2021: स्क्रिप्ट्स को Python3 के साथ संगत बनाया गया है और नए Linux वितरणों को बेहतर समर्थन देने के लिए अद्यतन किया गया है। यदि आप पुराने संस्करण पर वापस जाना चाहते हैं, तो रिपॉजिटरी को क्लोन करने के बाद git fetch --tags && git checkout v1 निष्पादित करें (और git checkout research का उपयोग करके नवीनतम संस्करण पर वापस जाएँ)।
हमारी स्क्रिप्ट्स का परीक्षण Kali Linux पर किया गया था। Kali पर आवश्यक निर्भरताएँ स्थापित करने के लिए, निष्पादित करें:
sudo apt update
sudo apt install libnl-3-dev libnl-genl-3-dev pkg-config libssl-dev net-tools git sysfsutils python3-venv iw
अब हमारे संशोधित hostapd इंस्टेंस को कंपाइल करें और एक python वर्चुअल वातावरण बनाएँ। यह सुनिश्चित करता है कि आप संगत python लाइब्रेरीज़ (जो krackattack/requirements.txt में सूचीबद्ध हैं) का उपयोग कर रहे हैं:
git clone https://github.com/vanhoefm/krackattacks-scripts.git
cd krackattacks-scripts/krackattack
./build.sh
./pysetup.sh
फिर बेहतर परिणामों के लिए हार्डवेयर एन्क्रिप्शन अक्षम करें:
cd krackattack
sudo ./disable-hwcrypto.sh
ध्यान दें कि यदि आवश्यक हो तो आप बाद में sudo ./reenable-hwcrypto.sh स्क्रिप्ट का उपयोग करके हार्डवेयर एन्क्रिप्शन को पुनः सक्षम कर सकते हैं। हार्डवेयर एन्क्रिप्शन अक्षम करने के बाद रिबूट करने की अनुशंसा की जाती है। हमने अपनी स्क्रिप्ट्स का परीक्षण Kali Linux पर Intel Dual Band Wireless-AC 7260 और TP-Link TL-WN722N v1 के साथ किया।
हर बार स्क्रिप्ट्स का उपयोग करने से पहले आपको अपने नेटवर्क मैनेजर में Wi-Fi अक्षम करना होगा। फिर निष्पादित करें:
sudo rfkill unblock wifi
cd krackattack
sudo su
source venv/bin/activate
ऐसा करने के बाद आप स्क्रिप्ट्स को कई बार निष्पादित कर सकते हैं, जब तक आप टर्मिनल को बंद नहीं करते।
यदि आप disable-hwcrypto.sh के प्रभावों को पूर्ववत करना चाहते हैं, तो फ़ाइल /etc/modprobe.d/nohwcrypt.conf को हटा दें।
पहले hostapd/hostapd.conf को संशोधित करें और टेस्ट निष्पादित करने के लिए उपयोग किए जाने वाले Wi-Fi इंटरफ़ेस को निर्दिष्ट करने हेतु interface= लाइन को संपादित करें। ध्यान दें कि सभी टेस्टों के लिए, एक बार स्क्रिप्ट चलने के बाद, आपको परीक्षण किए जा रहे डिवाइस को पासवर्ड abcdefgh का उपयोग करके SSID testnetwork से कनेक्ट करने देना होगा। आप hostapd/hostapd.conf को संशोधित करके AP की सेटिंग्स बदल सकते हैं। सभी टेस्टों में क्लाइंट को Wi-Fi नेटवर्क से कनेक्ट होने के बाद IP प्राप्त करने के लिए DHCP का उपयोग करना चाहिए। ऐसा इसलिए है क्योंकि कुछ टेस्ट केवल क्लाइंट द्वारा DHCP का उपयोग करके IP का अनुरोध करने के बाद ही शुरू होते हैं!
अब आपको krackattacks/ निर्देशिका में स्थित निम्नलिखित टेस्ट चलाने चाहिए:
./krack-test-client.py --replay-broadcast। यह जाँचता है कि क्या क्लाइंट रीप्ले किए गए ब्रॉडकास्ट फ्रेम्स को स्वीकार करता है। यदि क्लाइंट रीप्ले किए गए ब्रॉडकास्ट फ्रेम्स को स्वीकार करता है, तो इसे पहले पैच किया जाना चाहिए। यदि आप क्लाइंट को पैच नहीं करते हैं, तो हमारी स्क्रिप्ट यह निर्धारित नहीं कर पाएगी कि ग्रुप की पुनः स्थापित हो रही है या नहीं (क्योंकि तब स्क्रिप्ट हमेशा कहेगी कि ग्रुप की पुनः स्थापित हो रही है)।
./krack-test-client.py --group --gtkinit। यह जाँचता है कि क्या क्लाइंट दिए गए रिसीव सीक्वेंस काउंटर (RSC) के साथ ग्रुप की हैंडशेक में ग्रुप की स्थापित करता है। इस संवेदनशीलता के पीछे के विवरण के लिए हमारे अनुवर्ती शोध पत्र का खंड 6.4 देखें।
./krack-test-client.py --group। यह जाँचता है कि क्या क्लाइंट ग्रुप की हैंडशेक में ग्रुप की को पुनः स्थापित करता है। दूसरे शब्दों में, यह जाँचता है कि क्या क्लाइंट CVE-2017-13080 के प्रति संवेदनशील है। स्क्रिप्ट पहले से उपयोग किए गए (रीप्ले किए गए) पैकेट नंबर (यहाँ पैकेट नंबर = nonce = IV) का उपयोग करके क्लाइंट को ब्रॉडकास्ट ARP अनुरोध भेजकर ग्रुप की की पुनः स्थापनाओं का परीक्षण करती है। ध्यान दें कि यदि क्लाइंट हमेशा रीप्ले किए गए ब्रॉडकास्ट फ्रेम्स को स्वीकार करता है (देखें --replay-broadcast), तो यह टेस्ट गलत निष्कर्ष निकाल सकता है कि ग्रुप की पुनः स्थापित हो रही है।
./krack-test-client.py। यह क्लाइंट को बार-बार एन्क्रिप्टेड मैसेज 3 भेजकर 4-way हैंडशेक में की पुनः स्थापनाओं का परीक्षण करता है। दूसरे शब्दों में, यह CVE-2017-13077 (सबसे अधिक प्रभाव वाली संवेदनशीलता) और CVE-2017-13078 के लिए परीक्षण करता है। स्क्रिप्ट यह देखने के लिए क्लाइंट द्वारा भेजे गए ट्रैफिक की निगरानी करती है कि क्या पेयरवाइज़ की पुनः स्थापित हो रही है। ध्यान दें कि यह प्रभावी रूप से दो परीक्षण करता है: क्या पेयरवाइज़ की पुनः स्थापित होती है, और क्या ग्रुप की पुनः स्थापित होती है। ग्रुप की पुनः स्थापना परीक्षण शुरू करने के लिए सुनिश्चित करें कि क्लाइंट DHCP का उपयोग करके IP का अनुरोध करता है। यह सुनिश्चित करने के लिए कि क्लाइंट पर्याप्त यूनिकास्ट फ्रेम्स भेज रहा है, आप वैकल्पिक रूप से AP को पिंग कर सकते हैं: ping 192.168.100.254।
./krack-test-client.py --tptk। टेस्ट 4 के समान, सिवाय इसके कि एन्क्रिप्टेड मैसेज 3 भेजने से पहले एक जाली मैसेज 1 इंजेक्ट किया जाता है। टेस्ट का यह प्रकार महत्वपूर्ण है क्योंकि कुछ क्लाइंट (जैसे wpa_supplicant v2.6) केवल तब 4-way हैंडशेक में पेयरवाइज़ की पुनः स्थापनाओं के प्रति संवेदनशील होते हैं जब पुनः प्रेषित मैसेज 3 भेजने से पहले एक जाली मैसेज 1 इंजेक्ट किया जाता है।
./krack-test-client.py --tptk-rand। उपरोक्त टेस्ट के समान, सिवाय इसके कि जाली मैसेज 1 में एक यादृच्छिक ANonce होता है।
./krack-test-client.py --gtkinit। यह जाँचता है कि क्या क्लाइंट दिए गए रिसीव सीक्वेंस काउंटर (RSC) के साथ 4-way हैंडशेक में ग्रुप की स्थापित करता है। यह 4-way हैंडशेक के Msg3/4 को हर बार एक नई ग्रुप की और बहुत उच्च रीप्ले काउंटर के साथ पुनः प्रेषित करके किया जाता है। हम जानते हैं कि यह संवेदनशील है यदि परीक्षण के तहत क्लाइंट बाद में कम रीप्ले काउंटर वाले ब्रॉडकास्ट फ्रेम्स को स्वीकार करता है। दुर्भाग्यवश, कुछ क्लाइंट पुनः प्रेषित Msg3/4 को बिल्कुल स्वीकार नहीं करते हैं, जिसका अर्थ है कि ऐसे क्लाइंट्स का इस कमांड से परीक्षण नहीं किया जा सकता है। जो क्लाइंट पुनः प्रेषित Msg3/4 को स्वीकार करते हैं, और इसलिए इस कमांड से परीक्षण किए जा सकते हैं, वे Msg4/4 के साथ उत्तर देंगे जिसे निम्नलिखित आउटपुट के आधार पर पहचाना जा सकता है:
[09:24:11] 02:20:2a:22:a8:30: received a new message 4
हम यह भी अनुशंसा करते हैं कि इस टेस्ट को कम पृष्ठभूमि शोर वाले वातावरण में निष्पादित करें और इसे कई बार निष्पादित करें।
कुछ अतिरिक्त टिप्पणियाँ:
सबसे महत्वपूर्ण टेस्ट ./krack-test-client है, जो 4-way हैंडशेक में सामान्य की पुनः स्थापनाओं का परीक्षण करता है।
इन टेस्टों को कम हस्तक्षेप वाले कमरे में करें। अधिक मात्रा में पैकेट लॉस इस स्क्रिप्ट को कम विश्वसनीय बना देगा!
वैकल्पिक रूप से आप स्क्रिप्ट के आउटपुट की पुष्टि करने के लिए नेटवर्क ट्रैफिक की मैन्युअल रूप से जाँच कर सकते हैं (कुछ Wi-Fi NICs हमारी स्क्रिप्ट्स में हस्तक्षेप कर सकते हैं):
यह पुष्टि करने के लिए कि हमारी स्क्रिप्ट (AP) उचित पैकेट नंबरों (IVs) का उपयोग करके फ्रेम्स भेजती है, मॉनिटर मोड में एक अतिरिक्त Wi-Fi NIC का उपयोग करें। विशेष रूप से, जाँचें कि क्या रीप्ले किए गए ब्रॉडकास्ट फ्रेम्स वास्तव में पहले से उपयोग किए गए पैकेट नंबर (IV) के साथ भेजे जाते हैं।
क्लाइंट द्वारा भेजे गए फ्रेम्स के IVs की निगरानी करके पेयरवाइज़ की पुनः स्थापनाओं की जाँच करने के लिए मॉनिटर मोड में एक अतिरिक्त Wi-Fi NIC का उपयोग करें।
यह देखने के लिए कि रीप्ले किए गए ब्रॉडकास्ट ARP अनुरोध स्वीकार किए जाते हैं या नहीं, क्लाइंट पर ट्रैफिक कैप्चर करें।