
CVE-2020-0688 के प्रति संवेदनशील Microsoft Exchange सर्वरों के लिए नेटवर्क स्कैन करता है, होस्ट डिस्कवरी के लिए zmap और अनपैच किए गए इंस्टेंस की पहचान के लिए TLS/संस्करण फ़िंगरप्रिंटिंग का उपयोग करता है।
CVE-2020-0688 Microsoft Exchange में स्थैतिक कुंजियों (static keys) के उपयोग के कारण एक गंभीर भेद्यता है। हालाँकि शोषण के लिए वैध क्रेडेंशियल्स (ईमेल उपयोगकर्ता स्तर पर) की आवश्यकता होती है और बड़े पैमाने पर शोषण का जोखिम कम है, फिर भी यह भेद्यता लक्षित हमलों में बहुत उपयोगी हो सकती है क्योंकि यह SYSTEM स्तर के RCE की ओर ले जाती है।
अधिक जानकारी:
ज्ञात गलत-नकारात्मक परिणामों के कई स्रोत हैं (संवेदनशील Exchange सर्वर जिन्हें यह स्क्रिप्ट खोज नहीं पाएगी):
संभावित Exchange सर्वरों की प्रारंभिक जाँच उन होस्ट्स की पहचान करके की जाती है जिनमें पोर्ट 25 और 443 दोनों खुले होते हैं। यदि कोई सेटअप इनमें से किसी एक को ब्लॉक करता है, तो वे छूट जाएँगे।
zmap गति और स्केलेबिलिटी के लिए अनुकूलित है, सटीकता की कीमत पर। आमतौर पर zmap के लगातार कई रन थोड़े अलग परिणाम देते हैं। परिणामस्वरूप, इस स्क्रिप्ट के कई रन भी थोड़े अलग परिणाम दिखाएँगे।
यह निश्चित नहीं है कि यह पूरी तरह से नेटवर्क कंजेशन के कारण है या बग्गी कोड के कारण। पैच/वर्कअराउंड वाले पुल-रिक्वेस्ट निश्चित रूप से स्वागत योग्य हैं!
हम यहाँ चुपके से काम करने की कोशिश नहीं कर रहे हैं, इसलिए कुछ फ़ायरवॉल हमें रोबोट समझकर ब्लॉक कर सकते हैं।
चूँकि हम कोई फैंसी फिंगरप्रिंटिंग नहीं कर रहे हैं और केवल उस संस्करण पर निर्भर हैं जो Exchange सर्वर स्वयं रिपोर्ट करता है, इसलिए हम संस्करण संख्या के पहले तीन फ़ील्ड तक सीमित हैं।
उदाहरण के लिए, Exchange Server 2019 के लिए नवीनतम संचयी अपडेट 15.2.529.5 है जो दिसंबर में जारी हुआ था और संवेदनशील है। पैच युक्त नवीनतम अपडेट 15.2.529.8 है। ये दोनों अपने संस्करण को 15.2.529 के रूप में स्वयं रिपोर्ट करते हैं, इसलिए स्क्रिप्ट यह मान लेगी कि सर्वर पैच किया हुआ है, भले ही उसमें नवीनतम पैच इंस्टॉल न हो और वह संवेदनशील हो।
हालाँकि व्यवहार में ऐसा लगता है कि या तो Exchange एडमिन होते हैं जो पैच आते ही अपने सिस्टम को अपडेट कर देते हैं, या वे जो "अगर काम कर रहा है, तो इसे मत छेड़ो" सिद्धांत पर जीते हैं। इसके बीच कुछ नहीं होता।
zmap, Python >= 3.5, मॉड्यूल:
आप उन्हें वैश्विक रूप से इंस्टॉल कर सकते हैं:
$ sudo dnf install zmap python3-gevent python3-dns python3-pyOpenSSL
या:
$ sudo apt install zmap python3-gevent python3-dns python3-openssl
Python मॉड्यूल को virtualenv के माध्यम से स्थानीय रूप से भी इंस्टॉल किया जा सकता है:
$ virtualenv -p python3 CVE-2020-0688
$ . ./CVE-2020-0688/bin/activate
$ pip install -r ./requirements.txt
बुनियादी स्कैनिंग के लिए आपको बस IPs/सबनेट (CIDR प्रारूप में) वाली एक फ़ाइल चाहिए:
$ ./scan.py ~/my_networks.txt output.csv
आउटपुट निम्नलिखित कॉलम के साथ CSV प्रारूप में लिखा जाएगा:
| IP | Exchange संस्करण | सर्वर नाम | PTR | सामान्य नाम (TLS प्रमाणपत्र से) |
|---|
वैकल्पिक रूप से, आप मिले सभी Exchange सर्वरों की जानकारी आउटपुट करने के लिए कह सकते हैं:
$ ./scan.py -f ~/my_networks.txt output.csv
ऐसी स्थिति में यह बताने के लिए एक और कॉलम होगा कि सर्वर संवेदनशील है या नहीं:
| IP | Exchange संस्करण | संवेदनशील? | सर्वर नाम | PTR | सामान्य नाम (TLS प्रमाणपत्र से) |
|---|
आप ब्लैकलिस्टेड IPs/सबनेट वाली फ़ाइल भी प्रदान कर सकते हैं (विकल्प -b), समानांतर कार्यों की संख्या (-p) या टाइमआउट की अवधि (-t) बदल सकते हैं:
$ # ./scan.py -h
usage: scan.py [-h] [-b BLACKLIST] [-f] [-p PARALLEL] [-t TIMEOUT]
input output
Identify Exchange servers vulnerable to CVE-2020-0688.
positional arguments:
input Input file, each line contains one IP/subnet
output File to save the results (in CSV format)
optional arguments:
-h, --help show this help message and exit
-b BLACKLIST, --blacklist BLACKLIST
File containing IPs/subnets to avoid
-f, --full Don't filter seemingly up-to-date Exchange servers
-p PARALLEL, --parallel PARALLEL
How many requests to send in parallel (default: 1000)
-t TIMEOUT, --timeout TIMEOUT
Timeout (seconds) to use for network connections
(default: 5)