
أداة تعداد مستخدمي OpenSSH مبنية على CVE-2018-15473 مع فحص المنافذ، وبصمات الأصابع، والتنفيذ المتوازي للتحقق من وجود المستخدمين على خوادم SSH البعيدة.
Opensshenum هي أداة تعداد مستخدمي OpenSsh تتيح التحقق من قائمة تعسفية من أسماء المستخدمين ضد خادم OpenSsh، لمعرفة أي منها موجود فعليًا على تلك الآلة البعيدة. يستغل هذا البرنامج خطأً (تم تصحيحه في يوليو 2018) ثبتت فعاليته على الأقل انطلاقًا من OpenSSH 2.3.0 (الذي صدر في نوفمبر 2000).
لقد كتبت كود الاستغلال انطلاقًا من Tssh، وهو عميل SSH 2 كتبته بلغة C++11 من الصفر بناءً على مستندات RFC.
للمزيد من المعلومات اقرأ هنا:
http://seclists.org/oss-sec/2018/q3/124
هذه المشكلة حصلت على CVE-2018-15473.
تم نشر هذا الرمز لأغراض إعلامية وتعليمية. الدخول إلى الأنظمة والخدمات دون إذن المالك أمر غير قانوني. قد يؤدي سوء استخدام المعلومات والبرمجيات الموجودة في هذا المستودع إلى توجيه تهم جنائية ضد مرتكب الجريمة. أي إجراءات و/أو أنشطة تتعلق بالمادة الموجودة داخل هذا المستودع هي مسؤوليتك وحدك. لن يكون المؤلف مسؤولًا في حال توجيه أي تهم جنائية ضد أي أفراد يسيئون استخدام المعلومات أو البرامج الموجودة في هذا الموقع لخرق القانون.
البرنامج مخصص للاستخدام في بيئة *nix وقد تم اختباره على توزيعات Linux مختلفة وعلى OS X:
وباستخدام واحد من هذه القائمة كمترجم:
وكخادم ssh، واحد من التالية:
الاعتماد الخارجي الوحيد هو مكتبة OpenSSL، المستخدمة في الدوال التشفيرية. قد أقدم بدائل لـ OpenSSL في الإصدارات القادمة. هذا البرنامج مخصص للاستخدام مع إصدار OpenSSL يساوي أو يفوق:
(هذا يعني أنه مع OS X، الترقية إلزامية).
لتجميع البرنامج، هذه الأدوات/المكتبات ضرورية:
يعالج البرنامج قائمة المستخدمين المُمررة عبر الأنبوب (pipe)، مثال:
cat user.txt | ./opensshenum -i dummy_cert target_addr
xxx:NOK
gabriel:OK
حيث user.txt ملف يحتوي على قائمة مستخدمين، واحد في كل سطر وبينما dummy_cert هو مفتاح تم توليده بأمر ssh-keygen الخاص بـ OpenSsh (دليل المفاتيح هو ~/.shh كإعداد افتراضي).
يمكن استخدام برنامج لتوليد القائمة:
printf "xxx\ngabriel" | ./src/opensshenum -i dummy_rsa localhost
xxx:NOK
gabriel:OK
انظر صفحة الدليل المرفقة في هذا الإصدار.
أُضيفت إمكانية ماسح منافذ SSH: الآن يمكن لـ opensshenum فحص جميع المنافذ المرتبطة بعنوان ما لاكتشاف حالات SSH التي تستمع على منافذ مختلفة عن 22، لتنفيذ الاستغلال فقط على تلك المنافذ المُتحقَّق منها. يمكن استخدام هذه الميزة بشكل مستقل، مما يتيح الحصول فقط على قائمة المنافذ المرتبطة بـ SSH، دون تنفيذ أي هجوم.
مثال:
opensshenum -s -n -t2 -m22221 -M22225 -r'.*OpenSSH' -idummy_rsa my_imaginary_website.com
سيقوم بفحص المنافذ (-s) بين 22221 و22225 (شاملًا الطرفين)، مع إجراء الفحص فقط (-n)، بمهلة زمنية قدرها ثانيتان (-t)، متوقعًا أن تحتوي رسالة الترحيب على السلسلة OpenSSH، باستخدام مفتاح عام باسم idummy_rsa (أنصح بتوليد مفتاح لهذا النوع من العمليات فقط)، وباستخدام my_imaginary_website.com كهدف. مزيد من المعلومات في صفحة الدليل.
تم تضمين سكربت ألفا تجريبي يستخدم GNU Parallel (parallenum.sh)، كإثبات لمفهوم تقليل زمن الفحص الممكن تحقيقه بتقسيم نطاق المنافذ المراد فحصها إلى نطاقات فرعية، كل منها يخص عملية محددة. من الواضح أن هذا يُحدث الكثير من الضوضاء. لتقليل الضوضاء يمكن استخدام المعامل -t لهذا الغرض.
دالة البصمة، مفيدة لتحديد نوع نظام التشغيل تلقائيًا (أي إذا كانت سلسلة "hello" محذوفة) وتحديد الخدمات عبر قاعدة بيانات من المستخدمين/مجموعات المستخدمين. تُنشأ قاعدة البيانات من ملفات *.lst المجمَّعة في دليل. كل ملف *.lst له اسم <os_name_or_service>.lst، أمثلة:
ubuntu_17_10.lst aix.lst proprietary_ftp.lst
قاعدة البيانات، وهي ملف csv، لها الصيغة:
user_1;os_or_service_1; ... ;os_or_service_n ... user_m;os_or_service_1; ... ;os_or_service_n
يمكن إنشاء قاعدة البيانات من ملفات *.lst باستخدام أداة createdb الموجودة في الدليل ./utils، مع تحديد دليل *.lst، مثال:
cd utils make ./createdb ../lists/
لتفعيل البصمة، استخدم الخيار -F مع ملف قاعدة البيانات، مثال:
cat test/scan.sample | opensshenum -p22 -idummy_rsa -Futils/opensshenum.db localhost