
स्व-निहित SSH हनीपॉट जो हमलावरों की अंतःक्रियाओं को कैप्चर करता है और उन्हें संरचित सुरक्षा खुफिया जानकारी में बदल देता है।
SSHintel Python और Paramiko का उपयोग करके बनाया गया एक हल्का SSH हनीपॉट है। यह अनधिकृत एक्सेस प्रयासों को लॉग करने, क्रेडेंशियल्स कैप्चर करने और नियंत्रित वातावरण में हमलावर के व्यवहार का विश्लेषण करने के लिए एक नकली Linux शेल का अनुकरण करता है।
ls, cd, pwd, cat, echo, grep, find, tree, head, tail, wc, stat, ps, df, free, env, id, whoami, आदि)--tarpit मोडSSHintel एक पूर्ण Bash/Linux शेल नहीं है। यह हमलावर टेलीमेट्री एकत्र करने के लिए सामान्य कमांडों के एक विश्वसनीय उपसमुच्चय का अनुकरण करता है। कमांड एक हल्के रजिस्ट्री द्वारा भेजे जाते हैं; एक कमांड जोड़ने का मतलब है एक छोटा हैंडलर फ़ंक्शन जोड़ना।
pip install -r requirements.txt
नोट: SSH होस्ट कुंजी पहली बार चलाने पर स्वचालित रूप से उत्पन्न होती है। मैन्युअल कुंजी निर्माण की आवश्यकता नहीं है।
हनीपॉट को एक विशिष्ट पोर्ट, उपयोगकर्ता नाम और पासवर्ड के साथ चलाएं:
python3 run.py serve --port 2222 --username user1 --password pass123
डिफ़ॉल्ट पोर्ट
2222है और होस्ट0.0.0.0है।
हनीपॉट पहली बार चलाने पर static/server.key पर एक SSH होस्ट कुंजी स्वचालित रूप से उत्पन्न करता है यदि एक मौजूद नहीं है। मैन्युअल कुंजी निर्माण की आवश्यकता नहीं है।
टारपिट मोड सक्षम करने के लिए:
python3 run.py serve --port 2222 --username user1 --password pass123 --tarpit
SQLite टेलीमेट्री अक्षम करने के लिए (केवल JSONL):
python3 run.py serve --port 2222 --username user1 --password pass123 --no-db
SSHintel कई समवर्ती कनेक्शनों या अनिश्चित काल तक जीवित रखे गए कनेक्शनों से संसाधन क्षय के खिलाफ सुरक्षा करता है। ये CLI के माध्यम से कॉन्फ़िगर करने योग्य हैं:
| फ्लैग | डिफ़ॉल्ट | उद्देश्य |
|---|---|---|
--max-connections | 50 | अधिकतम समवर्ती सक्रिय कनेक्शन; अतिरिक्त कनेक्शन अस्वीकार कर दिए जाते हैं और connection_rejected इवेंट के रूप में लॉग किए जाते हैं |
--auth-timeout | 60 (सेकंड) | SSH हैंडशेक/प्रमाणीकरण पूरा करने के लिए अनुमत समय; रुके हुए क्लाइंट डिस्कनेक्ट कर दिए जाते हैं |
--session-idle-timeout | 300 (सेकंड) | प्रमाणित शेल के लिए निष्क्रियता टाइमआउट; एक निष्क्रिय सत्र समाप्त हो जाता है, लेकिन सक्रिय रूप से टाइप करने वाला हमलावर कभी नहीं मारा जाता |
उदाहरण:
python3 run.py serve --port 2222 --username user1 --password pass123 \
--max-connections 25 --auth-timeout 30 --session-idle-timeout 300
जब बहुत सारे कनेक्शन खुले होते हैं, तो अतिरिक्त कनेक्शन तुरंत बंद कर दिया जाता है और एक connection_rejected सुरक्षा इवेंट (reason: connection_limit के साथ) JSONL लॉग में लिखा जाता है। एक रुका हुआ प्रमाणीकरण reason: auth_timeout के साथ डिस्कनेक्ट के रूप में दर्ज किया जाता है; एक निष्क्रिय शेल reason: idle_timeout के साथ समाप्त होता है।
टारपिट मोड जानबूझकर हमलावर को व्यस्त रखने के लिए आउटपुट धीरे-धीरे भेजता है, इसलिए टारपिट बैनर लूप निष्क्रियता टाइमआउट के अधीन नहीं है — लेकिन टारपिट सत्र कनेक्शन सीमा के खिलाफ गिने जाते हैं।
SSHintel में एक स्थानीय वेब डैशबोर्ड शामिल है जो SQLite में संग्रहीत सुरक्षा टेलीमेट्री को विज़ुअलाइज़ करता है।
python3 run.py dashboard
फिर अपने ब्राउज़र में http://localhost:5000 खोलें।
डैशबोर्ड डिफ़ॉल्ट रूप से
data/sshintel.dbपर SQLite डेटाबेस से पढ़ता है। पहले हनीपॉट शुरू करें ताकि टेलीमेट्री कैप्चर हो रही हो, फिर इसे भरते हुए देखने के लिए डैशबोर्ड लॉन्च करें।
किसी सत्र ID पर क्लिक करें (या /session/<session_id> पर नेविगेट करें) सत्र जांच दृश्य खोलने के लिए, जो एक एकल हमले को कालानुक्रमिक रूप से पुनर्निर्मित करता है:
$ command दृश्य, कार्यशील निर्देशिकाओं के साथ# टर्मिनल 1: हनीपॉट शुरू करें
python3 run.py serve --port 2222 --username user1 --password pass123
# टर्मिनल 2: डैशबोर्ड शुरू करें
python3 run.py dashboard
# टर्मिनल 3: हमलावर का अनुकरण करें
ssh user1@localhost -p 2222
# (कुछ कमांड चलाएं, फिर बाहर निकलें)
फिर कैप्चर की गई गतिविधि का निरीक्षण करने के लिए http://localhost:5000 खोलें।
डैशबोर्ड लाइव टेलीमेट्री का समर्थन करता है — यह हर 2 सेकंड में हनीपॉट को पोल करता है और स्वचालित रूप से अपडेट होता है। नए सत्र, कमांड और इवेंट पेज को रीफ्रेश किए बिना वास्तविक समय में दिखाई देते हैं। एक लाइव संकेतक (● Live) कनेक्शन स्थिति दिखाता है।
दूसरा टर्मिनल खोलें और कनेक्ट करने का प्रयास करें:
ssh user1@localhost -p 2222
यदि क्रेडेंशियल्स मेल खाते हैं, तो आप अनुकरणित शेल में डाल दिए जाएंगे।
पुराने SSH फिंगरप्रिंट हटाने के लिए:
notepad "%USERPROFILE%\.ssh\known_hosts"
localhostया हनीपॉट के IP वाली प्रासंगिक पंक्ति हटाएं।
creds_logger में लॉग किए जाते हैंfunnel_logger के माध्यम से लॉग किए जाते हैंlog_files/events.jsonl में JSON Lines (JSONL) के रूप में लिखे जाते हैं — प्रति पंक्ति एक मान्य JSON ऑब्जेक्टप्रत्येक JSONL इवेंट में UTC ISO-8601 timestamp, एक event_type, एक अद्वितीय session_id, और source_ip शामिल होता है। कनेक्शन, प्रमाणीकरण प्रयास/परिणाम, कमांड निष्पादन, टारपिट सक्रियण, और डिस्कनेक्ट सभी संरचित इवेंट के रूप में दर्ज किए जाते हैं।
प्रत्येक आने वाला SSH कनेक्शन अपने स्वयं के session_id के साथ एक स्वतंत्र सत्र के रूप में ट्रैक किया जाता है। एक सत्र स्रोत IP, कनेक्ट/डिस्कनेक्ट समय, प्रमाणीकरण परिणाम, और कनेक्शन अवधि रिकॉर्ड करता है, और उस कनेक्शन के भीतर उत्पन्न हर इवेंट समान session_id रखता है (ताकि प्रमाणीकरण प्रयास, कमांड और डिस्कनेक्ट को एक ही कनेक्शन से जोड़ा जा सके)। सत्र प्रति-कनेक्शन पृथक होते हैं — समवर्ती क्लाइंट के बीच कोई स्थिति साझा नहीं की जाती।