
CVE-2018-15473-आधारित OpenSSH उपयोगकर्ता गणक (enumerator) जिसमें पोर्ट स्कैनिंग, फिंगरप्रिंटिंग, और समानांतर निष्पादन शामिल है, दूरस्थ SSH सर्वरों पर उपयोगकर्ता की उपस्थिति की पुष्टि करने के लिए।
Opensshenum एक OpenSsh उपयोगकर्ता गणक (enumerator) है जो OpenSsh सर्वर के विरुद्ध उपयोगकर्ता नामों की एक मनमानी सूची को सत्यापित करने की अनुमति देता है, ताकि यह जान सके कि वास्तव में वे रिमोट मशीन पर मौजूद हैं। यह प्रोग्राम एक बग का शोषण करता है (जुलाई 2018 में सुधारा गया) जो कम से कम OpenSSH 2.3.0 (नवंबर 2000 में जारी) से प्रभावी साबित हुआ है।
मैंने इस एक्सप्लॉइट को Tssh से शुरू करके लिखा, जो कि एक SSH 2 क्लाइंट है जिसे मैंने C++11 में RFCs से शुरू करके लिखा था।
अधिक जानकारी के लिए यहाँ पढ़ें:
http://seclists.org/oss-sec/2018/q3/124
इस मुद्दे को CVE-2018-15473 प्राप्त हुआ।
यह कोड सूचना और शैक्षिक उद्देश्यों के लिए पोस्ट किया गया है। मालिक की अनुमति के बिना सिस्टम और सेवाओं में घुसपैठ करना अवैध है। इस रिपॉजिटरी में सामग्री के दुरुपयोग से अपराधी के खिलाफ आपराधिक आरोप लग सकते हैं। इस Git Repository में निहित सामग्री से संबंधित कोई भी कार्रवाई या गतिविधि पूरी तरह से आपकी जिम्मेदारी है। लेखक किसी भी व्यक्ति के खिलाफ आपराधिक आरोप लगने की स्थिति में उत्तरदायी नहीं होगा जो इस वेबसाइट पर सामग्री का दुरुपयोग करता है या कानून तोड़ता है।
यह प्रोग्राम *nix वातावरण में उपयोग के लिए है और इसे विभिन्न लिनक्स वितरणों और OS X पर परीक्षण किया गया है:
निम्नलिखित कंपाइलरों में से किसी एक का उपयोग करते हुए:
और, ssh सर्वर के रूप में, निम्नलिखित में से एक:
एकमात्र बाहरी निर्भरता OpenSSL लाइब्रेरी है, जिसका उपयोग क्रिप्टोग्राफिक फंक्शन्स के लिए किया जाता है।
मैं अगले संस्करणों में OpenSSL के विकल्प प्रस्तुत कर सकता हूँ।
यह प्रोग्राम OpenSSL संस्करण के साथ उपयोग करने के लिए है जो इसके बराबर या उससे अधिक है:
(इसका मतलब है कि OS X पर, अपग्रेड अनिवार्य है)।
प्रोग्राम को संकलित करने के लिए, निम्नलिखित टूल्स/लाइब्रेरीज़ आवश्यक हैं:
यह पाइप में पारित उपयोगकर्ता सूची को संसाधित करता है, उदाहरण:
cat user.txt | ./opensshenum -i dummy_cert target_addr
xxx:NOK
gabriel:OK
जहाँ user.txt एक फ़ाइल है जिसमें उपयोगकर्ताओं की सूची है, प्रत्येक पंक्ति में एक उपयोगकर्ता
और dummy_cert एक कुंजी है जो OpenSsh के कमांड ssh-keygen से उत्पन्न हुई है
( कुंजियों की निर्देशिका डिफ़ॉल्ट रूप से ~/.ssh है )।
सूची उत्पन्न करने के लिए एक प्रोग्राम का उपयोग किया जा सकता है:
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
पोर्ट 22221 से 22225 (दोनों सम्मिलित) के बीच स्कैन करेगा (-s), केवल स्कैन करेगा (-n), 2 सेकंड का टाइमआउट (-t), एक हैलो स्ट्रिंग की अपेक्षा करेगा जिसमें OpenSSH स्ट्रिंग हो, एक सार्वजनिक कुंजी का उपयोग करेगा जिसका नाम idummy_rsa है (मैं इस प्रकार के ऑपरेशन के लिए केवल एक कुंजी उत्पन्न करने की सलाह देता हूँ) और लक्ष्य के रूप में my_imaginary_website.com का उपयोग करेगा।
अधिक जानकारी मैन पेज में।
GNU Parallel (parallenum.sh) का उपयोग करते हुए एक अल्फा स्क्रिप्ट शामिल है, जो स्कैन किए जाने वाले पोर्ट की श्रेणी को उप-श्रेणियों में विभाजित करके प्राप्त करने योग्य स्कैनिंग समय में कमी के प्रमाण के रूप में है, प्रत्येक उप-श्रेणी एक विशिष्ट प्रक्रिया से संबंधित है। यह स्पष्ट रूप से बहुत अधिक शोर उत्पन्न करता है। शोर को कम करने के लिए -t पैरामीटर का उपयोग किया जा सकता है।
फिंगरप्रिंट फ़ंक्शन, जो स्वचालित रूप से OS प्रकार (यानी यदि "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
डेटाबेस को ./utils निर्देशिका में मौजूद createdb उपयोगिता का उपयोग करके *.lst फ़ाइलों से बनाया जा सकता है, *.lst निर्देशिका निर्दिष्ट करते हुए, उदाहरण:
cd utils
make
./createdb ../lists/
फ़िंगरप्रिंटिंग का अनुरोध करने के लिए, डेटाबेस फ़ाइल के साथ -F विकल्प का उपयोग करें, उदाहरण:
cat test/scan.sample | opensshenum -p22 -idummy_rsa -Futils/opensshenum.db localhost