
यह प्रोजेक्ट यह पता लगाता है कि क्या आधुनिक OpenSSH सूक्ष्म प्रतिक्रिया या समय अंतर के माध्यम से मान्य उपयोगकर्ता नामों को उजागर करता है। CVE-2016-6210 उपयोगकर्ता गणना जांच ( Welch's t-test, Cohen's d, और डिटेक्शन इंजीनियरिंग ) Ubuntu 22.04.5 LTS पर एक नियंत्रित प्रयोगशाला में, यह उन निशानों की भी जांच करता है जो ऐसे प्रयास पीछे छोड़ते हैं और उन्हें कैसे पहचाना जा सकता है।
OpenSSH उपयोगकर्ता नाम गणना का सांख्यिकीय विश्लेषण का उपयोग करके पुनरुत्पादक पुनर्जांच।
यह परियोजना CVE-2016-6210 का पुनर्जांच करती है, जो एक दस्तावेज़ीकृत OpenSSH टाइमिंग साइड-चैनल है, ताकि यह निर्धारित किया जा सके कि यह डिफ़ॉल्ट PAM कॉन्फ़िगरेशन वाले आधुनिक Ubuntu सर्वर पर अभी भी देखने योग्य है या नहीं।
प्रकाशित व्यवहार अभी भी लागू है यह मान लेने के बजाय, परियोजना मैन्युअल प्रोबिंग, Hydra, और Metasploit के माध्यम से एकत्रित प्रमाणीकरण टाइमिंग मापों का मूल्यांकन Welch's t-test और Cohen's d का उपयोग करके करती है ताकि वास्तविक टाइमिंग सिग्नल को माप शोर से अलग किया जा सके।
अध्ययन में परीक्षण किए गए डिफ़ॉल्ट कॉन्फ़िगरेशन पर कोई सांख्यिकीय रूप से महत्वपूर्ण टाइमिंग अंतर नहीं पाया गया, जो प्रकाशित सुरक्षा दावों के पुनरुत्पादक प्रयोग और साक्ष्य-आधारित सत्यापन के मूल्य को प्रदर्शित करता है।
⚠️ कानूनी नोटिस
यह परियोजना पूरी तरह से स्वयं के स्वामित्व वाले, पृथक प्रयोगशाला वातावरण में आयोजित की गई थी। सभी निष्कर्ष केवल परीक्षण किए गए कॉन्फ़िगरेशन पर लागू होते हैं। उन प्रणालियों का कभी परीक्षण न करें जिनके आप स्वामी नहीं हैं या जिनके लिए आपके पास स्पष्ट लिखित प्राधिकरण नहीं है।
उपयोगकर्ता गणना - वैध क्रेडेंशियल्स के बिना किसी दूरस्थ प्रणाली पर किसी विशिष्ट उपयोगकर्ता नाम के अस्तित्व का निर्धारण करने की क्षमता। यह खाता समझौते की ओर ले जाने वाली आक्रमण श्रृंखला में पहला महत्वपूर्ण कदम है:``` Reconnaissance → [User Enumeration] → Password Attack → Access ↑ This project investigates here
यदि कोई हमलावर सर्वर प्रतिक्रियाओं का विश्लेषण करके "यह उपयोगकर्ता मौजूद है" और "यह उपयोगकर्ता मौजूद नहीं है" में अंतर कर सकता है, तो वे बाद के ब्रूट फोर्स या क्रेडेंशियल स्टफिंग हमलों के लिए कीस्पेस को नाटकीय रूप से कम कर सकते हैं।
SSH एक लगातार लक्ष्य है क्योंकि यह लगभग सार्वभौमिक रूप से उजागर होता है, पासवर्ड प्रमाणीकरण को संभालता है, और पुराने कार्यान्वयनों में मान्य और अमान्य उपयोगकर्ता नामों के बीच मापने योग्य समय अंतर था (CVE-2016-6210)।
**यह जांच दो प्रश्न पूछती है:**
1. क्या Ubuntu 22.04.5 LTS पर डिफ़ॉल्ट कॉन्फ़िगरेशन के साथ आधुनिक OpenSSH उपयोगकर्ता नाम अस्तित्व लीक करता है
प्रतिक्रिया संदेशों, समय, या उपकरण-रिपोर्टेड सिग्नल के माध्यम से?
2. यदि कोई हमलावर फिर भी प्रयास करता है, तो यह क्या कलाकृतियाँ छोड़ता है? और कैसे
विश्वसनीय रूप से उनका पता लगाया जा सकता है?
---
## 🖥️ प्रयोगशाला सेटअप
सभी परीक्षण एक पूरी तरह से पृथक होस्ट-ओनली वर्चुअल नेटवर्क में किए गए
जिसमें कोई इंटरनेट एक्सपोज़र नहीं था।
| मशीन | OS | भूमिका | आईपी | SSH संस्करण |
|----------|---------------------------|-----------------------------------------|------------------|------------------|
| हमलावर | Kali Linux 2024.1 | आक्रामक उपकरण, विश्लेषण स्क्रिप्ट | 192.168.56.5 | — |
| लक्ष्य | Ubuntu Server 22.04.5 LTS | डिफ़ॉल्ट कॉन्फ़िगरेशन के साथ OpenSSH चला रहा है | 192.168.56.10 | OpenSSH 8.9p1 |
**लक्ष्य SSH कॉन्फ़िगरेशन (`/etc/ssh/sshd_config` डिफ़ॉल्ट):**```
PasswordAuthentication yes
UsePAM yes # Key setting — normalises timing via dummy hash
PermitRootLogin prohibit-password
MaxAuthTries 6
LogLevel INFO
UsePAM yes महत्वपूर्ण सुरक्षा सेटिंग है। यह OpenSSH को अस्तित्वहीन उपयोगकर्ताओं के लिए एक नकली bcrypt गणना चलाने के लिए मजबूर करता है, जो वास्तविक पासवर्ड जांच के समय से मेल खाता है। इसे विशेष रूप से CVE-2016-6210 के प्रतिकार के रूप में पेश किया गया था।
प्रत्येक आक्रमण विधि को एक स्वच्छ लॉग स्थिति के साथ एक स्वतंत्र परीक्षण के रूप में चलाया गया था:```bash
sudo truncate -s 0 /var/log/auth.log
sudo cp /var/log/auth.log ~/evidence/trial-N-auth.log
प्रति परीक्षण एकत्रित साक्ष्य:
- टूल stdout/stderr (शब्दशः सहेजा गया)
- लक्ष्य से `/var/log/auth.log`
- `manual_ssh.py` में `time.perf_counter()` के माध्यम से प्रतिक्रिया समय नमूने
- किसी भी प्रमाणीकरण प्रयास से पहले SSH बैनर प्राप्त किया गया
### हमला विधियाँ
| विधि | टूल | शब्दसूची | उद्देश्य |
|-------------------------|--------------------------------------|-------------------------|-------------------------------------------------|
| मैन्युअल SSH | `ssh` CLI + Paramiko | 50 सामान्य उपयोगकर्तानाम | आधार रेखा; कच्चे प्रतिक्रियाओं का निरीक्षण करें |
| हाइड्रा ब्रूट फोर्स | `hydra` | वही 50 | स्वचालित; हाइड्रा के अंतर्निहित एन्यूम मोड का लाभ उठाता है |
| मेटास्प्लॉइट मॉड्यूल | `auxiliary/scanner/ssh/ssh_enumuser` | वही 50 | फ्रेमवर्क का समर्पित गणना मॉड्यूल |
| बैनर फिंगरप्रिंटिंग | कस्टम `BannerFingerprinter` | N/A | बिना-प्रमाणीकरण संस्करण लीक, CVE जांच |
| टाइमिंग विश्लेषण | कस्टम `ResponseAnalyzer` | वैध बनाम अमान्य उपसमुच्चय | सांख्यिकीय साइड-चैनल जांच |
---
## क्या बनाया गया
यह प्रोजेक्ट केवल टूल चलाने से आगे जाता है — यह प्रत्येक हमले और सभी डिटेक्शन लॉजिक को एक संरचित Python कोडबेस में लपेटता है और एक ऑर्केस्ट्रेटर प्रदान करता है जो पूरे पाइपलाइन को एंड-टू-एंड चलाता है।
### हमला उपकरण (`src/attack_tools/`)
**`ManualSSHEnumerator`** — प्रत्येक उपयोगकर्तानाम का `paramiko` के साथ N बार परीक्षण करता है, सटीक समय, परिणाम प्रकार और SSH बैनर रिकॉर्ड करता है। प्रति उपयोगकर्तानाम माध्य/मानक विचलन की गणना करता है। महत्वपूर्ण रूप से, यह प्रयासों के बीच कनेक्शन का **पुन: उपयोग नहीं** करता है, यह सुनिश्चित करते हुए कि प्रत्येक नमूना पूर्ण सर्वर-साइड प्रसंस्करण समय को कैप्चर करता है।
**`BannerFingerprinter`** — रॉ TCP सॉकेट पर SSH बैनर प्राप्त करता है (कोई क्रेडेंशियल्स आवश्यक नहीं)। कार्यान्वयन नाम, संस्करण स्ट्रिंग और OS संकेत को पार्स करता है। एक स्थानीय CVE रजिस्ट्री के विरुद्ध क्रॉस-रेफरेंस देता है। `OpenSSH_8.9p1 Ubuntu-3ubuntu0.6` जैसा संस्करण सटीक सर्वर सॉफ्टवेयर प्रकट करता है — संभावित रूप से किसी भी प्रमाणीकरण का प्रयास करने से पहले ज्ञात कमजोरियों की पहचान करने के लिए पर्याप्त।
**`HydraAutomation`** — हाइड्रा के चारों ओर सबप्रोसेस रैपर। सफल लॉगिन, त्रुटि संदेश और हाइड्रा के स्वयं के गणना निर्णय को निकालने के लिए stdout को पार्स करता है (`does not support user enumeration`)।
**`MetasploitScanner`** — एक अस्थायी संसाधन स्क्रिप्ट लिखता है और सबप्रोसेस के माध्यम से `msfconsole` चलाता है। कठोरीकरण डिटेक्शन और किसी भी पाए गए उपयोगकर्तानाम के लिए आउटपुट पार्स करता है।
### डिटेक्शन उपकरण (`src/detection_tools/`)
**`LogParser`** — रेगेक्स-आधारित auth.log पार्सर जो पाँच SSH घटना प्रकारों का समर्थन करता है: `failed_invalid_user`, `failed_valid_user`, `pre_auth_reject`, `accepted`, `disconnected`। टाइमस्टैम्प, घटना प्रकार, उपयोगकर्तानाम, स्रोत IP और पोर्ट के साथ संरचित घटना dicts लौटाता है।
**`ResponseAnalyzer`** — वैध बनाम अमान्य उपयोगकर्तानाम से समय वितरण पर वेल्च का t-परीक्षण करता है। समय डेल्टा (ms), p-मान, कोहेन का d प्रभाव आकार और सरल भाषा में निष्कर्ष की गणना करता है। सीमा: डेल्टा ≥ 5ms और p < 0.05 साइड-चैनल चेतावनी को ट्रिगर करता है।
**`EnumerationDetector`** — चार डिटेक्शन पैटर्न:
- **त्वरित उपयोगकर्ता जांच**: स्लाइडिंग विंडो - समान IP, 60 सेकंड के भीतर ≥10 विशिष्ट उपयोगकर्तानाम
- **शब्दसूची सहसंबंध**: प्रयासित उपयोगकर्तानाम और ज्ञात हमला सूचियों के बीच मिलान दर
- **अनुक्रमिक समय**: अंतर-प्रयास अंतराल पर भिन्नता का गुणांक (कम CoV → टूल)
- **वितरित जांच**: एकाधिक IP से समान उपयोगकर्तानाम (क्रेडेंशियल स्टफिंग रीकॉन)
**`AlertingSystem`** — हल्का अलर्ट उत्सर्जक। stdout पर टाइमस्टैम्प वाले JSON अलर्ट उत्पन्न करता है। आवश्यकतानुसार ईमेल/SIEM/वेबहुक एकीकरण के साथ विस्तार योग्य।
### ऑर्केस्ट्रेटर
**`run_investigation.py`** — CLI ड्राइवर जो सभी चार चरणों को क्रम में चलाता है और परिणाम `data/results/` में लिखता है। पूर्ण उपयोग के लिए `--help` के साथ चलाएँ।```bash
python run_investigation.py \
-target 192.168.xx.xxxx \
-usernames data/wordlists/common-usernames-50.txt \
-log data/sample-logs/auth.log \
-known-valid root ubuntu \
-samples 10
परीक्षित परिकल्पना: क्या OpenSSH एक अस्तित्वहीन उपयोगकर्ता के लिए गलत पासवर्ड वाले मौजूदा उपयोगकर्ता की तुलना में एक अलग त्रुटि संदेश लौटाता है?```bash
$ ssh [email protected] Permission denied (publickey,password).
$ ssh [email protected] Permission denied (publickey,password).
**Result:** प्रतिक्रियाएँ बाइट-दर-बाइट समान हैं। प्रोटोकॉल कुछ भी लीक नहीं करता।
**Why:** OpenSSH 7.3 से, `UsePAM yes` सर्वर को गैर-मौजूद उपयोगकर्ताओं के लिए एक डमी `crypt()` ऑपरेशन चलाने के लिए मजबूर करता है, जो वास्तविक असफल प्रमाणीकरण के समय और त्रुटि पथ दोनों से मेल खाता है। यह सुधार CVE-2016-6210 की सीधी प्रतिक्रिया थी।
---
### Finding 2: No Timing Side-Channel Detected
**परीक्षित परिकल्पना:** भले ही त्रुटि संदेश मेल खाते हों, क्या वैध और अमान्य उपयोगकर्ता नामों के बीच कोई मापने योग्य समय अंतर है जिसका सांख्यिकीय रूप से शोषण किया जा सकता है?
50 उपयोगकर्ता नामों में से प्रत्येक के लिए दस समय नमूने एकत्र किए गए। ज्ञात-वैध उपयोगकर्ताओं (सिस्टम से पुष्टि) की तुलना अमान्य-उपयोगकर्ता पूल से की गई।
| Metric | Value |
|-----------------------------|-------------------------------------|
| अमान्य उपयोगकर्ताओं के लिए औसत समय | ~312 ms |
| वैध उपयोगकर्ताओं के लिए औसत समय | ~311 ms |
| डेल्टा | **~1 ms** |
| Welch's t-test p-value | > 0.40 |
| निष्कर्ष | **कोई पहचान योग्य साइड-चैनल नहीं** |
~1ms का डेल्टा 5ms शोर सीमा से काफी नीचे है और सांख्यिकीय रूप से महत्वपूर्ण नहीं है (p >> 0.05). OpenSSH का डमी हैश गणना प्रभावी है।
---
### Finding 3: Hydra Reports No Enumeration Support
हाइड्रा का SSH एनुमरेशन मोड तीन संकेतों में से एक पर निर्भर करता है: अलग-अलग त्रुटि संदेश, अलग-अलग समय, या अलग-अलग कनेक्शन व्यवहार। तीनों को सामान्यीकृत करने के बाद, हाइड्रा स्पष्ट रूप से रिपोर्ट करता है:```
[ERROR] target ssh://192.168.56.10:22/ does not support user enumeration
[STATUS] 50/50 tries completed, 0 valid logins found
देखा गया दुष्प्रभाव: गणना करने में विफल होने के बावजूद, सभी 50 प्रयास /var/log/auth.log में स्रोत IP, टाइमस्टैम्प और प्रयासित उपयोगकर्ता नाम के साथ लॉग किए जाते हैं। हमलावर की उपस्थिति पूरी तरह से दृश्यमान है।
auxiliary/scanner/ssh/ssh_enumuser मॉड्यूल गणना का प्रयास करने से पहले बैनर से OpenSSH संस्करण की जाँच करता है। UsePAM yes के साथ संस्करण ≥ 7.3 को हार्डन किए गए के रूप में चिह्नित किया जाता है और मॉड्यूल जल्दी बाहर निकल जाता है:```
[] 192.168.xx.xxxx:22 - SSH - Checking for vulnerability
[] 192.168.xx.xxxx:22 - SSH - Target is not vulnerable: OpenSSH 8.9p1 (hardened)
यह एक उपयोगी खोज है: बैनर अकेला ही किसी भी गणना प्रयास से पहले हमलावर को सर्वर की रक्षात्मक मुद्रा बता देता है।
---
### खोज 5: गणना विफल होने पर भी पता लगाना विश्वसनीय है
रक्षक के दृष्टिकोण से मुख्य अंतर्दृष्टि: **हमला शोर उत्पन्न करता है भले ही वह सफल न हो**। सभी चार पता लगाने के पैटर्न ने एकत्रित auth.log के विरुद्ध सही ढंग से काम किया:
| पता लगाना | ट्रिगर | गंभीरता |
|-------------------------------|------------------------------------------------------|----------|
| त्वरित उपयोगकर्ता जांच | Kali IP ने 60 सेकंड में 50 उपयोगकर्ता नाम जांचे | उच्च |
| शब्दसूची सहसंबंध | 48/50 प्रयासित नाम शब्दसूची से मेल खाए | उच्च |
| अनुक्रमिक समय | अंतर-प्रयास CoV = 0.04 (टूल सिग्नेचर) | मध्यम |
| केवल-बैनर जांच | कोई उपयोगकर्ता नाम भेजे जाने से पहले प्री-ऑथ डिस्कनेक्ट | निम्न |
---
## विचार प्रक्रिया
### पहले मैनुअल SSH एनुमरेशन क्यों?
मैन्युअल परीक्षण से शुरू करने की प्रवृत्ति पद्धतिगत रूप से सही थी: टूल आउटपुट पर भरोसा करने से पहले, आपको यह समझना होगा कि रॉ प्रोटोकॉल वास्तव में क्या कहता है। `ssh ghost@target` चलाना और सटीक त्रुटि संदेश देखना आपको बताता है कि स्वचालन में समय निवेश करने से पहले कुछ भी गणना करने को है या नहीं।
पहला अवलोकन, कि `Permission denied (publickey,password)` भले ही उपयोगकर्ता मौजूद हो या नहीं, समान दिखता है, केंद्रीय खोज था। इसके बाद जो कुछ भी हुआ वह उस परिणाम का सत्यापन था।
### मान्यताएँ जो बनाई गईं (और पुनः जाँची गईं)
प्रारंभिक धारणा यह थी कि Hydra और Metasploit मैन्युअल परीक्षण से *अधिक* सक्षम होंगे, इसलिए यदि मैन्युअल विफल हुआ, तो टूल अभी भी सफल हो सकते हैं। यह अपेक्षित दिशा में गलत निकला लेकिन *क्यों* में सही था: टूल यहाँ क्षमता नहीं जोड़ते क्योंकि प्रोटोकॉल स्वयं सिग्नल लीक नहीं करता। टूल केवल उसी प्रोटोकॉल पर स्वचालन हैं।
एक दूसरी धारणा जाँचने लायक है: पहला मैन्युअल प्रयास बाद के प्रयासों की तुलना में काफी धीमा था, और सफल-पासवर्ड प्रयास तेज़ था। इसे प्रारंभ में संभावित समय संकेत के रूप में व्याख्यायित किया गया था। विचार करने पर, मंदी ताज़ा नेटवर्क स्थिति (ARP रिज़ॉल्यूशन, कनेक्शन सेटअप) पर TCP कनेक्शन स्थापना ओवरहेड थी, सर्वर-साइड प्रोसेसिंग समय नहीं। इसे नियंत्रित करना – TCP हैंडशेक के *बाद* `time.perf_counter()` से मापकर, या पहले नमूने को त्यागकर – अधिक कठोर होता। `ManualSSHEnumerator` कार्यान्वयन प्रति उपयोगकर्ता नाम 10 नमूने एकत्र करके और mean/std रिपोर्ट करके इसे संबोधित करता है, जो पहले-नमूने के शोर को कम करता है।
### परियोजना के दौरान क्या बदला
मूल दायरा संकीर्ण था: तीन टूल चलाएँ, दस्तावेज़ करें कि वे काम करते हैं या नहीं। परियोजना दो दिशाओं में विकसित हुई:
**अंदर की ओर (गहन विश्लेषण):** जब प्रारंभिक परिणाम नकारात्मक थे, तो स्वाभाविक प्रश्न *क्यों* बन गया – जिसने OpenSSH चेंजलॉग, CVE-2016-6210, और `UsePAM` कार्यान्वयन को पढ़ने तक पहुँचाया। तंत्र को समझना केवल परिणाम को रिकॉर्ड करने से अधिक मूल्यवान है।
**बाहर की ओर (पता लगाने का मोड़):** एक नकारात्मक हमला परिणाम अभी भी एक उपयोगी रक्षात्मक डेटा बिंदु है। 'भले ही गणना विफल हुई, सर्वर ने क्या देखा?' की ओर मोड़ ने लॉग विश्लेषण और डिटेक्शन इंजीनियरिंग घटकों को जन्म दिया, जिसने एक-आयामी टूल-चलाने के अभ्यास को दो-तरफा जाँच में बदल दिया।
### क्या अलग किया जाएगा
समय माप एक होस्ट-ओनली वर्चुअल नेटवर्क पर लिए गए, जो वास्तविक नेटवर्क की तुलना में कम जिटर लाता है लेकिन इसका मतलब यह भी है कि परिणाम आशावादी हैं। वास्तविक वातावरण में TCP विलंबता, जिटर और पुनर्प्रेषण के साथ, शोर फर्श अधिक होगा और समय विश्लेषण को प्रति उपयोगकर्ता नाम अधिक नमूनों की आवश्यकता होगी। एक अधिक मजबूत पद्धति एक अनुकरणीय WAN लिंक (नियंत्रित विलंबता और जिटर लाने के लिए `tc netem` का उपयोग करके) पर परीक्षण करेगी ताकि देखा जा सके कि यथार्थवादी परिस्थितियों में निष्कर्ष कैसे टिकते हैं।
---
## सुरक्षा जोखिम
भले ही इस प्रयोगशाला में गणना सफल नहीं हुई, हमले की सतह और संबंधित जोखिम हैं:
**यदि गणना *संभव* होती (जैसे, पुराना OpenSSH, `UsePAM no`, कस्टम PAM स्टैक):**
- हमलावर ब्रूट फोर्स अभियान को केवल पुष्टि किए गए वैध उपयोगकर्ता नामों तक सीमित कर सकते हैं, जिससे पता लगाने का जोखिम कम हो जाता है और दक्षता नाटकीय रूप से बढ़ जाती है।
- पासवर्ड स्प्रेइंग (सभी वैध उपयोगकर्ता नामों पर एक सामान्य पासवर्ड) के साथ संयुक्त, यह प्रति-उपयोगकर्ता लॉकआउट्स के `MaxAuthTries` को बायपास करता है।
**जोखिम जो एनुमरेशन प्रतिरोध के साथ भी लागू होते हैं:**
- SSH बैनर सटीक OpenSSH संस्करण और OS लीक करता है। एक हमलावर जो `OpenSSH_8.9p1` देखता है, वह तुरंत जाँच सकता है कि CVE-2024-6387 (regreSSHion) लागू होता है या नहीं, एक भी प्रमाणीकरण पैकेट भेजने से पहले।
- सभी एनुमरेशन प्रयास स्रोत IP के साथ लॉग किए जाते हैं। यदि लॉग मॉनिटरिंग अनुपस्थित है, तो एक धीमी-जलती हमला (प्रति घंटे एक प्रयास) दर-आधारित अलर्ट ट्रिगर किए बिना हजारों उपयोगकर्ता नामों की जांच कर सकता है।
- `PasswordAuthentication yes` पासवर्ड-आधारित हमले की सतह को खुला रखता है, भले ही एनुमरेशन संभव न हो। पोस्ट-OSINT क्रेडेंशियल हमले (OSINT-व्युत्पन्न उपयोगकर्ता नामों के विरुद्ध लीक हुई पासवर्ड सूचियों का उपयोग करके) को सर्वर-साइड एनुमरेशन की बिल्कुल आवश्यकता नहीं होती है।
---
## शमन रणनीतियाँ
| खतरा | शमन | आवश्यक कॉन्फ़िगरेशन परिवर्तन |
|--------------------------|-----------------------------------------------------------|--------------------------------------|
| समय साइड-चैनल | `UsePAM yes` सुनिश्चित करें (Ubuntu पर डिफ़ॉल्ट) | कोई नहीं – पहले से डिफ़ॉल्ट |
| बैनर संस्करण प्रकटीकरण | `sshd_config` में `VersionAddendum none` और `DebianBanner no` | हाँ |
| पासवर्ड-आधारित हमले | `PasswordAuthentication no` – केवल-कुंजी प्रमाणीकरण | हाँ |
| OSINT के बाद ब्रूट फोर्स| `sshd` जेल के साथ `fail2ban` | इंस्टॉल + कॉन्फ़िगर करें |
| धीमी-जलती गणना | SIEM को लॉग शिपिंग; प्रति IP/घंटा >N अलग उपयोगकर्ता नामों पर अलर्ट | SIEM आवश्यक |
| रूट लॉगिन | `PermitRootLogin no` | हाँ (डिफ़ॉल्ट `prohibit-password` है) |
| प्री-ऑथ डिस्कनेक्ट | `MaxStartups 10:30:60` अप्रमाणित कनेक्शनों को दर-सीमित करने के लिए | हाँ |
**कठोर तैनाती के लिए न्यूनतम अनुशंसित `sshd_config` परिवर्धन:**```
PasswordAuthentication no
PermitRootLogin no
MaxAuthTries 3
MaxStartups 10:30:60
VersionAddendum none
LogLevel VERBOSE
वर्तमान परियोजना एक कॉन्फ़िगरेशन में एक प्रोटोकॉल का परीक्षण करती है। स्वाभाविक विस्तार:
उसी होस्ट पर अन्य सेवाओं को सूचीबद्ध करें। SMTP (VRFY/EXPN), LDAP (विशेषता
क्वेरीज़), HTTP लॉगिन फॉर्म, और SNMP, सभी उसी मशीन पर सामान्य उपयोगकर्ता नाम लीक वेक्टर हैं जो SSH पर कठोर है। सेवाओं में एक तुलनात्मक अध्ययन अधिक संपूर्ण जोखिम चित्र उत्पन्न करेगा।
गैर-डिफ़ॉल्ट SSH कॉन्फ़िगरेशन का परीक्षण करें। UsePAM no, कस्टम PAM मॉड्यूल, Kerberos
प्रमाणीकरण बैकएंड, और पुराने OpenSSH संस्करण (एम्बेडेड सिस्टम, नेटवर्क उपकरणों में तैनात) अभी भी समय लीक प्रदर्शित कर सकते हैं। जानबूझकर कमजोर कॉन्फ़िगरेशन के विरुद्ध उसी पाइपलाइन का परीक्षण करने से विपरीतता प्रदर्शित होगी।
inotify के साथ लाइव डिटेक्शन। वर्तमान डिटेक्शन कॉपी किए गए लॉग फ़ाइल के विरुद्ध पोस्ट-हॉक चलता है। एक उत्पादन-ग्रेड संस्करण inotify (या tail -f + एक पार्सर थ्रेड) का उपयोग करके निकट-वास्तविक समय में, किसी एनुमरेशन प्रयास शुरू होने के कुछ सेकंड के भीतर, पहचान और सचेत करेगा।
नेटवर्क-स्तरीय डिटेक्शन। Auth.log एक होस्ट-आधारित कलाकृति है। इसे पैकेट-स्तरीय डिटेक्शन के साथ पूरक करें: पोर्ट 22 पर अल्पकालिक TCP कनेक्शन जो प्रमाणीकरण हैंडशेक पूरा करने से पहले बंद हो जाते हैं, बैनर-केवल फ़िंगरप्रिंटिंग का एक संकेत हैं। इसे Zeek या Suricata नियम के रूप में कार्यान्वित किया जा सकता है।
सांख्यिकीय रिपोर्टिंग के लिए Jupyter नोटबुक। एकत्रित समय डेटा विज़ुअलाइज़ेशन के लिए उपयुक्त है - प्रति-उपयोगकर्ता समय वितरण के बॉक्स प्लॉट, समय के साथ प्रयास आवृत्ति के स्कैटर प्लॉट, स्रोत IP के हीटमैप। नोटबुक विश्लेषण को पुनरुत्पादनीय और साझा करने योग्य बनाएंगे।
ssh-enumeration-analysis/ │ ├── README.md ├── run_investigation.py ← Full pipeline orchestrator (start here) ├── requirements.txt │ ├── src/ │ ├── attack_tools/ │ │ ├── init.py │ │ ├── manual_ssh.py ← Paramiko-based timing probe │ │ ├── banner_fingerprinter.py ← No-auth banner grab + CVE lookup │ │ ├── hydra_automation.py ← Hydra subprocess wrapper │ │ └── metasploit_scanner.py ← MSF console automation │ │ │ └── detection_tools/ │ ├── init.py │ ├── log_parser.py ← auth.log regex parser │ ├── response_analyzer.py ← Welch t-test + Cohen's d │ ├── pattern_detector.py ← 4 detection patterns │ └── alerting_system.py ← JSON alert emitter │ ├── data/ │ ├── sample-logs/ │ │ ├── auth-baseline.log ← Normal SSH activity (no attacks) │ │ ├── auth-hydra-run.log ← Captured during Hydra trial │ │ └── auth-msf-run.log ← Captured during Metasploit trial │ │ │ ├── wordlists/ │ │ ├── common-usernames-50.txt │ │ └── common-usernames-100.txt │ │ │ └── results/ ← Auto-generated (gitignored) │ ├── investigation-summary.json │ ├── manual-enumeration-results.json │ ├── timing-analysis.json │ └── detection-report.json │ ├── tests/ │ ├── test_enumeration.py │ ├── test_detection.py │ └── test_log_parser.py │ ├── case-study/ │ └── User_Enumeration_attempt_using_manual_SSH.docx │ └── screenshots/ ├── manual-ssh-same-response.png ├── hydra-no-enumeration-support.png ├── metasploit-hardened-detected.png ├── auth-log-hydra-evidence.png └── detection-alerts-output.png
## ⚡ त्वरित शुरुआत```bash
# 1. Clone and install dependencies
git clone https://github.com/Alisha-chaudhary/ssh-enum
cd ssh-enum
pip install -r requirements.txt
# 2. Run just the banner fingerprint (no credentials needed)
python -c "
from src.attack_tools.banner_fingerprinter import BannerFingerprinter
r = BannerFingerprinter().grab('192.168.xx.xxxx')
print(r.raw_banner, r.cves)
"
# 3. Run the full investigation pipeline
python run_investigation.py \
-target 192.168.xx.xxxx \
-usernames data/wordlists/common-usernames-50.txt \
-log data/sample-logs/auth-hydra-run.log \
-known-valid root ubuntu \
-samples 10
# 4. Analyse a log file only (no live target needed)
python -c "
from src.detection_tools.pattern_detector import EnumerationDetector
d = EnumerationDetector('data/sample-logs/auth-hydra-run.log')
import json; print(json.dumps(d.run_all(), indent=2))
"
आवश्यकताएँ:``` paramiko>=3.3.1 scipy>=1.11.0 Hydra and Metasploit must be installed separately (pre-installed on Kali Linux).
---
## 📚 संदर्भ
| संसाधन | प्रासंगिकता |
|---------------------------------------------------------------------------------------|-------------------------------------------------|
| [CVE-2016-6210](https://nvd.nist.gov/vuln/detail/CVE-2016-6210) | इस परियोजना द्वारा परीक्षण किया गया टाइमिंग साइड-चैनल |
| [CVE-2024-6387 (regreSSHion)](https://nvd.nist.gov/vuln/detail/CVE-2024-6387) | OpenSSH ≤ 9.7 में अप्रमाणित RCE |
| [OpenSSH sshd_config मैनुअल](https://man.openbsd.org/sshd_config) | `UsePAM`, `MaxAuthTries`, `VersionAddendum` |
| [OWASP — उपयोगकर्ता एनुमरेशन](https://owasp.org/www-community/attacks/User_Enumeration) | सामान्य एनुमरेशन हमले के पैटर्न |
| [RFC 4252 — SSH प्रमाणीकरण प्रोटोकॉल](https://tools.ietf.org/html/rfc4252) | प्रोटोकॉल विनिर्देश; त्रुटि संदेश व्यवहार को परिभाषित करता है |
| [fail2ban दस्तावेज़ीकरण](https://www.fail2ban.org/wiki/index.php/Main_Page) | दर सीमा और IP प्रतिबंध |
---
## 🎓 प्रदर्शित कौशल
| डोमेन | साक्ष्य |
|------------------------|---------------------------------------------------------------------------------------------------------|
| SSH प्रोटोकॉल आंतरिक | `UsePAM` टाइमिंग सामान्यीकरण, CVE-2016-6210 फिक्स, बैनर जानकारी एक्सपोज़र की समझ |
| आक्रामक सुरक्षा | एक संरचित पद्धति में Hydra, Metasploit और कस्टम Paramiko प्रोबिंग का व्यावहारिक उपयोग |
| सांख्यिकीय विश्लेषण | टाइमिंग डेटा पर लागू Welch's t-test, Cohen's d, भिन्नता का गुणांक |
| डिटेक्शन इंजीनियरिंग | चार पैटर्न प्रकारों में लॉग-आधारित IOC पहचान; संरचित अलर्ट आउटपुट |
| पायथन इंजीनियरिंग | डेटाक्लासेस, टाइप हिंट्स, सबप्रोसेस ऑटोमेशन, रेगेक्स पार्सिंग, सांख्यिकीय लाइब्रेरीज़ |
| सुरक्षा अनुसंधान | परिकल्पना → नियंत्रित प्रयोग → साक्ष्य संग्रह → दस्तावेजी निष्कर्ष → कार्रवाई योग्य निष्कर्ष |
---
**स्थिति:** पूर्ण | **परीक्षित किया गया:** Ubuntu Server 22.04 LTS + OpenSSH 8.9p1 | Kali Linux 2024.1