
CVE-2019-0708 bluekeep भेद्यता के लिए rdpscan
यह 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) पर संपर्क कर सकते हैं।
- 2019-05-38 - बेहतर आउटपुट परिणाम विवरण, साथ ही उनके अर्थ का दस्तावेज़ीकरण (नीचे देखें)।
- 2019-05-27 - Windows और macOS बाइनरी जारी की गईं (ऊपर दिए गए बैज पर क्लिक करें)।
- 2019-05-26 - Windows नेटवर्किंग समस्याओं को ठीक किया जा रहा है
- 2019-05-25 - Linux और macOS अच्छी तरह काम कर रहे हैं, Windows में कुछ नेटवर्क त्रुटियाँ हैं
- 2019-05-24 - Linux और macOS पर काम करता है, Windows में कुछ संकलन बग हैं
- 2019-05-23 - वर्तमान में XCode के भीतर macOS पर काम कर रहा हूँ
प्राथमिक उपयोग
किसी नेटवर्क को स्कैन करने के लिए, इसे निम्न प्रकार चलाएँ:
rdpscan 192.168.1.1-192.168.1.255
यह प्रत्येक पते के लिए 3 परिणामों में से एक उत्पन्न करता है:
- SAFE - यदि लक्ष्य पैच किया हुआ या कम से कम CredSSP/NLA की आवश्यकता वाला पाया गया हो
- VULNERABLE - यदि लक्ष्य की भेद्यता की पुष्टि हो गई हो
- UNKNOWN - यदि लक्ष्य प्रतिक्रिया नहीं देता है या कोई प्रोटोकॉल विफलता है
जब किसी लक्ष्य IP पते पर कुछ भी मौजूद नहीं होता है, तो पुराने संस्करण प्रिंट करते थे
संदेश "UNKNOWN - connection timed out"। बड़े नेटवर्क को स्कैन करते समय,
यह उन सिस्टमों के बारे में बहुत अधिक जानकारी का भार पैदा करता है जिनकी आपको परवाह नहीं है
इसलिए, नया संस्करण डिफ़ॉल्ट रूप से यह जानकारी नहीं देता है
जब तक कि आप कमांड-लाइन पर -v (verbose के लिए) नहीं जोड़ते।
आप बड़े नेटवर्क को स्कैन करने की गति बढ़ा सकते हैं
वर्कर्स की संख्या बढ़ाकर:
rdpscan --workers 10000 10.0.0.0/8
हालाँकि, मेरे कंप्यूटर पर, यह केवल लगभग 1500 वर्कर्स ही उत्पन्न करता है, क्योंकि
सिस्टम सीमाओं के कारण, चाहे मैं इस पैरामीटर को कितना भी ऊँचा कॉन्फ़िगर करूँ।
आप इसे masscan के साथ संयोजन में उपयोग करके गति को और भी अधिक बढ़ा सकते हैं,
जैसा कि नीचे वर्णित है।
परिणामों की व्याख्या
तीन सामान्य प्रतिक्रियाएँ हैं:
- SAFE - जिसका अर्थ है कि लक्ष्य संभवतः पैच किया हुआ है या अन्यथा
इस बग के प्रति संवेदनशील नहीं है।
- VULNERABLE: जिसका अर्थ है कि हमने पुष्टि कर दी है कि लक्ष्य संवेदनशील है
इस बग के प्रति, और जब वर्म आएगा, तो संभवतः
संक्रमित हो जाएगा।
- UNKNOWN: इसका अर्थ है कि हम किसी भी तरह की पुष्टि नहीं कर सकते, आमतौर पर क्योंकि
लक्ष्य प्रतिक्रिया नहीं देता है या RDP नहीं चला रहा है, जो
अधिकांश प्रतिक्रियाएँ हैं। साथ ही, जब लक्ष्य संसाधनों से बाहर होते हैं
या नेटवर्क समस्याओं का सामना कर रहे होते हैं, तो हमें
इनमें से बहुत सारे मिलेंगे। अंत में, प्रोटोकॉल त्रुटियाँ
बहुत सारे के लिए जिम्मेदार हैं।
जबकि तीन मुख्य प्रतिक्रियाएँ SAFE, VULNERABLE, और UNKNOWN हैं,
उनमें निदान समझाने वाला अतिरिक्त पाठ होता है। यह अनुभाग
उन विभिन्न स्ट्रिंग्स का वर्णन करता है जो आप देखेंगे।
SAFE
हमारे विचार में तीन मुख्य कारण हैं जिनकी वजह से कोई लक्ष्य सुरक्षित है:
- SAFE - Target appears patched
ऐसा तब होता है जब लक्ष्य ट्रिगर करने वाले अनुरोध का जवाब नहीं देता है।
इसका मतलब है कि यह एक Windows सिस्टम है जिसे पैच किया गया है,
या ऐसा सिस्टम है जो शुरू से ही संवेदनशील नहीं था, जैसे Windows 10
या Unix।
- SAFE - CredSSP/NLA required
इसका मतलब है कि RDP कनेक्शन स्थापित होने से पहले लक्ष्य को पहले Network Level Authentication की आवश्यकता होती है।
यह टूल वैध क्रेडेंशियल्स के बिना, इस बिंदु से आगे नहीं जा सकता,
इसलिए यह निर्धारित नहीं कर सकता कि लक्ष्य पैच किया गया है या नहीं।
हालाँकि, हैकर्स भी कमजोर सिस्टम का शोषण करने के लिए इस बिंदु से आगे नहीं बढ़ सकते,
इसलिए आप संभवतः "सुरक्षित" हैं। लेकिन जब एक्सप्लॉइट सामने आएंगे, तो वैध
यूज़रनेम/पासवर्ड वाले अंदरूनी लोग सिस्टम का शोषण करने में सक्षम होंगे यदि वह अन-पैच्ड है।
- SAFE - not RDP
इसका मतलब है कि सिस्टम RDP नहीं है, बल्कि कोई अन्य सेवा है जो संयोगवश
इसी पोर्ट का उपयोग करती है, और स्पष्ट रूप से RDP नहीं होने वाली प्रतिक्रिया देती है। सामान्य उदाहरण हैं
HTTP और SSH। ध्यान दें कि पहचाने जाने योग्य प्रोटोकॉल के बजाय, एक सर्वर
RST या FIN पैकेट के साथ जवाब दे सकता है। इन्हें UNKNOWN के रूप में पहचाना जाता है
SAFE के बजाय।
VULNERABLE
इसका मतलब है कि हमने पुष्टि कर दी है कि सिस्टम इस बग के प्रति संवेदनशील है।
- VULNERABLE - got appid
जब सिस्टम संवेदनशील होता है तो केवल एक ही प्रतिक्रिया होती है, यह वाली।
UNKNOWN
अज्ञात (UNKNOWN) के लिए असंख्य विविधताएँ हैं
- UNKNOWN - no connection - timeout
यह अब तक की सबसे आम प्रतिक्रिया है, और तब होती है जब लक्ष्य
IP पता कोई भी प्रतिक्रिया नहीं देता है। वास्तव में, यह इतना सामान्य है कि
पतों की बड़ी श्रृंखलाओं को स्कैन करते समय, इसे आमतौर पर छोड़ दिया जाता है। इसे सक्षम करने के लिए आपको
-v (verbose) फ्लैग जोड़ना होगा।
- UNKNOWN - no connection - refused (RST)
यह अब तक की दूसरी सबसे आम प्रतिक्रिया है, और तब होती है जब
लक्ष्य मौजूद होता है और नेटवर्क ट्रैफ़िक का जवाब देता है, लेकिन RDP नहीं चला रहा होता है,
इसलिए वह TCP RST पैकेट के साथ कनेक्शन अस्वीकार कर देता है।
- UNKNOWN - RDP protocol error - receive timeout
यह तीसरी सबसे आम प्रतिक्रिया है, और तब होती है जब हमने सफलतापूर्वक
एक RDP कनेक्शन स्थापित कर लिया है, लेकिन फिर सर्वर हमें
जवाब देना बंद कर देता है। यह नेटवर्क त्रुटियों के कारण होता है और जब लक्ष्य सिस्टम
किसी कारण से अतिभारित होता है। यह इस छोर पर नेटवर्क त्रुटियाँ भी हो सकती हैं,
जैसे जब आप NAT के पीछे हों और उसे बहुत अधिक
कनेक्शनों से अतिभारित कर रहे हों।
- UNKNOWN - no connection - connection closed
इसका मतलब है कि हमने एक कनेक्शन (TCP SYN-ACK) स्थापित कर लिया है, लेकिन फिर
कनेक्शन तुरंत बंद कर दिया जाता है (RST या FIN के साथ)। ऐसा होने के
कई कारण हैं, जिन्हें हम अलग नहीं कर सकते:
- यह RDP चला रहा है, लेकिन किसी कारण से कनेक्शन बंद कर देता है,
संभवतः क्योंकि यह संसाधनों से बाहर है।
- यह RDP नहीं है, और हमारे द्वारा भेजे गए RDP अनुरोध को पसंद नहीं करता है,
इसलिए हमें एक अच्छा त्रुटि संदेश भेजने के बजाय (जो
SAFE - not RDP को ट्रिगर करेगा), यह अचानक कनेक्शन बंद कर देता है।
- कोई मध्यस्थ डिवाइस, जैसे IPS, फ़ायरवॉल, या NAT, कनेक्शन बंद कर देता है
क्योंकि उसने इसे शत्रुतापूर्ण पहचाना, या
संसाधन समाप्त हो गए।
- कुछ अन्य कारण जिन्हें मैंने पहचाना नहीं है, बहुत सारी
अजीब चीज़ें होती हैं जब मैं इंटरनेट स्कैन करता हूँ।
- UNKNOWN - no connection - host unreachable (ICMP error)