
ماسح الثغرات لـ CVE-2020-0688
CVE-2020-0688 هي ثغرة أمنية حرجة في Microsoft Exchange بسبب استخدام مفاتيح ثابتة. على الرغم من أن استغلالها يتطلب بيانات اعتماد صالحة (على مستوى مستخدم البريد الإلكتروني) وأن خطر الاستغلال الجماعي منخفض، إلا أن هذه الثغرة قد تكون مفيدة جدًا في الهجمات المستهدفة حيث تؤدي إلى تنفيذ أوامر عن بُعد (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
للمسح الأساسي، كل ما تحتاجه هو ملف يحتوي على عناوين IP/نطاقات فرعية (بصيغة 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) |
|---|
يمكنك أيضًا تقديم ملف يحتوي على عناوين IP/نطاقات فرعية مدرجة في القائمة السوداء (خيار -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)