
CVE-2019-0708 "BlueKeep" भेद्यता के लिए एक त्वरित स्कैनर।
यह Microsoft Remote Desktop में CVE-2019-0708 भेद्यता के लिए एक quick-and-dirty स्कैनर है। अभी, सार्वजनिक इंटरनेट पर लगभग 900,000 मशीनें इस भेद्यता के प्रति संवेदनशील हैं, इसलिए कई लोग WannaCry और notPetya जैसे वर्म जल्द आने की उम्मीद कर रहे हैं। इसलिए, अपने नेटवर्क को स्कैन करें और कमजोर सिस्टम पर पैच (या कम से कम, NLA सक्षम) करें।
यह एक कमांड-लाइन टूल है। आप स्रोत डाउनलोड करके इसे संकलित कर सकते हैं स्वयं, या आप पहले से संकलित बाइनरी में से एक डाउनलोड कर सकते हैं Windows या macOS के लिए ऊपर दिए गए लिंक से।
यह टूल पूरी तरह से https://github.com/zerosum0x0/CVE-2019-0708 के rdesktop पैच पर आधारित है।
मैंने केवल कोड को ट्रिम किया है ताकि मैं macOS और Windows पर आसानी से संकलित कर सकूं,
साथ ही कई लक्ष्यों को स्कैन करने की क्षमता जोड़ी है।
यह केवल कुछ दिन पुराना और प्रायोगिक है। हालाँकि, मैं पूरे इंटरनेट को स्कैन करके इसका परीक्षण कर रहा हूँ
(masscan की मदद से), इसलिए मैं बहुत सारी समस्याओं से काफी जल्दी निपट रहा हूँ।
आप मदद/टिप्पणियों के लिए मुझसे ट्विटर (@erratarob) पर संपर्क कर सकते हैं।
किसी नेटवर्क को स्कैन करने के लिए, इसे निम्न प्रकार चलाएँ:
rdpscan 192.168.1.1-192.168.1.255
यह प्रत्येक पते के लिए 3 परिणामों में से एक उत्पन्न करता है:
जब किसी लक्ष्य IP पते पर कुछ भी मौजूद नहीं होता है, तो पुराने संस्करण प्रिंट करते थे संदेश "UNKNOWN - connection timed out"। बड़े नेटवर्क को स्कैन करते समय, यह उन सिस्टमों के बारे में बहुत अधिक जानकारी का भार पैदा करता है जिनकी आपको परवाह नहीं है इसलिए, नया संस्करण डिफ़ॉल्ट रूप से यह जानकारी नहीं देता है जब तक कि आप कमांड-लाइन पर -v (verbose के लिए) नहीं जोड़ते।
आप बड़े नेटवर्क को स्कैन करने की गति बढ़ा सकते हैं वर्कर्स की संख्या बढ़ाकर:
rdpscan --workers 10000 10.0.0.0/8
हालाँकि, मेरे कंप्यूटर पर, यह केवल लगभग 1500 वर्कर्स ही उत्पन्न करता है, क्योंकि सिस्टम सीमाओं के कारण, चाहे मैं इस पैरामीटर को कितना भी ऊँचा कॉन्फ़िगर करूँ।
आप इसे masscan के साथ संयोजन में उपयोग करके गति को और भी अधिक बढ़ा सकते हैं,
जैसा कि नीचे वर्णित है।
तीन सामान्य प्रतिक्रियाएँ हैं:
हमारे विचार में तीन मुख्य कारण हैं जिनकी वजह से कोई लक्ष्य सुरक्षित है:
इसका मतलब है कि हमने पुष्टि कर दी है कि सिस्टम इस बग के प्रति संवेदनशील है।
अज्ञात (UNKNOWN) के लिए असंख्य विविधताएँ हैं
यह rdpscan टूल काफी धीमा है, प्रति सेकंड केवल कुछ सौ लक्ष्यों को स्कैन करता है।
आप इसके बजाय चीज़ों को तेज़ करने के लिए masscan का उपयोग कर सकते हैं।
masscan टूल लगभग 1000 गुना तेज़ है, लेकिन केवल सीमित जानकारी देता है
लक्ष्य के बारे में।
चरण हैं:
masscan के आउटपुट को rdpscan में फीड करें, ताकि उसे केवल
उन्हीं लक्ष्यों को स्कैन करना पड़े जिन्हें हम जानते हैं कि सक्रिय हैं।इसे चलाने का सरल तरीका है उन्हें कमांड-लाइन पर संयोजित करना:
masscan 10.0.0.0/8 -p3389 | rdpscan --file -
मैं इसे दो चरणों में करता हूँ:
masscan 10.0.0.0/8 -p3389 > ips.txt
rdpscan --file ips.txt --workers 10000 >results.txt
कठिन हिस्सा OpenSSL लाइब्रेरीज़ को स्थापित करना है, और सिस्टम पर मौजूद अन्य संस्करणों से टकराव न होना। Debian Linux पर, मैं यह करता हूँ:
$ sudo apt install libssl-dev
एक बार जब आप उस समस्या को हल कर लेते हैं, तो आप बस सभी .c फाइलों को एक साथ संकलित करते हैं
इस प्रकार:
$ gcc *.c -lssl -lcrypto -o rdpscan
मैंने निर्देशिका में एक Makefile रखा है जो यह करता है, इसलिए आप संभवतः केवल यह कर सकते हैं:
$ make
कोड C में लिखा गया है, इसलिए इसमें C कंपाइलर स्थापित होना आवश्यक है, जैसे निम्नलिखित करना:
$ sudo apt install build-essential
यह अनुभाग अधिक स्पष्ट बिल्ड त्रुटियों का वर्णन करता है।
ssl.h:24:25: fatal error: openssl/rc4.h: No such file or directory
इसका मतलब है कि आपके पास OpenSSL हेडर स्थापित नहीं हैं, या वे किसी path में नहीं हैं। याद रखें कि भले ही आपके पास OpenSSL बाइनरी स्थापित हों, इसका मतलब यह नहीं है कि आपने डेवलपमेंट सामग्री स्थापित कर ली है। आपको दोनों की आवश्यकता है हेडर और लाइब्रेरीज़ स्थापित होने की।
Debian पर इन चीज़ों को स्थापित करने के लिए, करें:
$ sudo apt install libssl-dev
path समस्या को ठीक करने के लिए, एक संकलन फ्लैग -I/usr/local/include, या कुछ इसी तरह
जोड़ें।
लिंकर समस्या का एक उदाहरण निम्नलिखित है:
Undefined symbols for architecture x86_64:
"_OPENSSL_init_ssl", referenced from:
_tcp_tls_connect in tcp-fac73c.o
"_RSA_get0_key", referenced from:
_rdssl_rkey_get_exp_mod in ssl-d5fdf5.o
"_SSL_CTX_set_options", referenced from:
_tcp_tls_connect in tcp-fac73c.o
"_X509_get_X509_PUBKEY", referenced from:
_rdssl_cert_to_rkey in ssl-d5fdf5.o
मुझे यह macOS पर मिलता है क्योंकि OpenSSL के कई संस्करण हैं। मैं इसे पाथों को हार्ड-कोड करके ठीक करता हूँ:
$ gcc *.c -lssl -lcrypto -I/usr/local/include -L/usr/local/lib -o rdpscan
दूसरों की टिप्पणियों के अनुसार, यदि आपने Homebrew से चीज़ें स्थापित की हैं तो निम्न कमांड-लाइन macOS पर काम कर सकती है मुझे अभी भी ऊपर दी गई लिंकिंग त्रुटियाँ मिलती हैं, हालाँकि, क्योंकि मैंने अन्य OpenSSL घटक स्थापित किए हैं जो टकराव पैदा कर रहे हैं।
gcc $(brew --prefix)/opt/openssl/lib/libssl.a $(brew --prefix)/opt/openssl/lib/libcrypto.a -o rdpscan *.c
ऊपर दिया गया अनुभाग प्रोग्राम चलाने के लिए त्वरित-प्रारंभ सुझाव देता है। यह अनुभाग अधिक गहन सहायता देता है।
एकल लक्ष्य को स्कैन करने के लिए, बस लक्ष्य का पता पास करें:
./rdpscan 192.168.10.101
आप IPv6 पते और DNS नाम पास कर सकते हैं। आप कई लक्ष्य पास कर सकते हैं। इसका एक उदाहरण होगा:
./rdpscan 192.168.10.101 exchange.example.com 2001:0db8:85a3::1
आप पतों की श्रेणियाँ भी स्कैन कर सकते हैं, या तो begin-end IPv4 पतों का उपयोग करके, या IPv4 CIDR spec का। IPv6 श्रेणियाँ समर्थित नहीं हैं क्योंकि वे बहुत बड़ी होती हैं।
./rdpscan 10.0.0.1-10.0.0.25 192.168.0.0/16
डिफ़ॉल्ट रूप से, यह एक बार में केवल 100 लक्ष्यों को स्कैन करता है। आप इस संख्या को बढ़ा सकते हैं
--workers पैरामीटर के साथ। हालाँकि, आप इस पैरामीटर को कितना भी ऊँचा सेट करें,
व्यवहार में आपको एक बार में लगभग 500 से 1500 वर्कर्स चलते हुए मिलेंगे,
जो आपके सिस्टम पर निर्भर करता है।
./rdpscan --workers 1000 10.0.0.0/24
कमांड-लाइन पर लक्ष्य निर्दिष्ट करने के बजाय, आप उन्हें फ़ाइल से लोड कर सकते हैं,
अच्छे नाम वाले --file पैरामीटर का उपयोग करके:
./rdpscan --file ips.txt
फ़ाइल का प्रारूप प्रति पंक्ति एक पता, नाम, या श्रेणी है। यह masscan द्वारा उत्पन्न टेक्स्ट का उपभोग भी कर सकता है।
अतिरिक्त व्हॉट्सस्पेस को हटा दिया जाता है,
खाली पंक्तियों को अनदेखा किया जाता है, और किसी भी टिप्पणी पंक्तियों को अनदेखा किया जाता है। एक टिप्पणी वह है
जो # वर्ण या // वर्णों से शुरू होती है।
आउटपुट stdout पर भेजा जाता है जो VULNERABLE, SAFE, या UNKNOWN की स्थिति देता है।
प्रत्येक के लिए अतिरिक्त कारण हो सकते हैं। ये कारण
ऊपर वर्णित हैं।
211.101.37.250 - SAFE - CredSSP/NLA required
185.11.124.79 - SAFE - not RDP - SSH response seen
125.121.137.42 - UNKNOWN - no connection - refused (RST)
40.117.191.215 - SAFE - CredSSP/NLA required
121.204.186.182 - SAFE - CredSSP/NLA required
99.8.11.148 - SAFE - CredSSP/NLA required
121.204.186.114 - SAFE - CredSSP/NLA required
49.50.145.236 - SAFE - CredSSP/NLA required
106.12.74.155 - VULNERABLE - got appid
222.84.253.26 - SAFE - CredSSP/NLA required
144.35.133.109 - UNKNOWN - RDP protocol error - receive timeout
199.212.226.196 - UNKNOWN - RDP protocol error - receive timeout
183.134.58.152 - UNKNOWN - no connection - refused (RST)
83.162.246.149 - VULNERABLE - got appid
आप इसे grep और cut जैसे अतिरिक्त यूनिक्स कमांड के साथ प्रोसेस कर सकते हैं।
केवल संवेदनशील मशीनों की सूची पाने के लिए:
./rdpscan 10.0.0.0/8 | grep 'VULN' | cut -f1 -d'-'
पैरामीटर -dddd का अर्थ diagnostic जानकारी है, जहाँ आप जितने अधिक ds
जोड़ते हैं, उतने अधिक विवरण प्रिंट होते हैं। इसे stdout के बजाय stderr पर भेजा जाता है
ताकि आप स्ट्रीम्स को अलग कर सकें। bash का उपयोग करके यह इस प्रकार किया जाता है:
./rdpscan --file myips.txt -ddd 2> diag.txt 1> results.txt
-d पैरामीटर जोड़ने से कनेक्शनों की डायग्नोस्टिक जानकारी stderr पर डंप हो जाती है।
./rdpscan 62.15.34.157 -d
[+] [62.15.34.157]:3389 - connecting...
[+] [62.15.34.157]:3389 - connected from [10.1.10.133]:49211
[+] [62.15.34.157]:3389 - SSL connection
[+] [62.15.34.157]:3389 - version = v4.8
[+] [62.15.34.157]:3389 - Sending MS_T120 check packet
[-] [62.15.34.157]:3389 - Max sends reached, waiting...
62.15.34.157 - SAFE - Target appears patched
macOS/Linux पर, आप stdout और stderr को अलग-अलग
फाइलों में सामान्य तरीके से रीडायरेक्ट कर सकते हैं:
./rdpscan --file ips.txt 2> diag.txt 1> results.txt
तो इसमें SOCKS5 समर्थन शामिल है:
./rdpscan --file ips.txt --socks5 localhost --socks5port 9050
यह कनेक्शन समस्याओं को और बदतर बना देता है, इसलिए आपको बहुत अधिक "UNKNOWN" परिणाम मिलते हैं।