
स्व-निहित 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 होस्ट कुंजी उत्पन्न करता है, यदि वह पहले से मौजूद न हो। किसी मैन्युअल कुंजी निर्माण की आवश्यकता नहीं है।
tarpit मोड सक्षम करने के लिए:
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
सेंसर सेटिंग्स CLI > environment > configuration file > defaults का उपयोग करती हैं।
केवल स्पष्ट रूप से दिए गए CLI फ़्लैग अन्य स्रोतों को ओवरराइड करते हैं। यह
serve पर लागू होता है; dashboard/query कमांड अपनी स्वयं की CLI सेटिंग्स बनाए रखते हैं।
Python 3.11+ पर:
cp sshintel.toml.example sshintel.toml
chmod 600 sshintel.toml
python3 run.py serve
Python 3.8/3.10 पर, निर्भरता-मुक्त JSON समकक्ष का उपयोग करें:
cp sshintel.json.example sshintel.json
chmod 600 sshintel.json
python3 run.py serve
कॉपी की गई फ़ाइल को परिनियोजन से पहले संपादित करें। TOML के लिए Python 3.11+ आवश्यक है; पुराने
संस्करण JSON का उपयोग करने के स्पष्ट निर्देश के साथ विफल हो जाते हैं। कोई स्पष्ट फ़ाइल न होने पर,
SSHintel वर्तमान निर्देशिका में पहले sshintel.toml, फिर sshintel.json खोजता है।
किसी अन्य फ़ाइल का चयन करने के लिए serve --config /path/to/settings.json या HONEYPOT_CONFIG का उपयोग करें
(--config प्राथमिकता लेता है)। स्पष्ट रूप से अनुपस्थित फ़ाइलें, विकृत फ़ाइलें, अज्ञात कुंजियाँ,
और अमान्य मान सर्वर या डेटाबेस शुरू होने से पहले विफल हो जाते हैं। कॉन्फ़िगरेशन के अंदर फ़ाइल पथ प्रक्रिया की कार्यशील निर्देशिका के सापेक्ष होते हैं, कॉन्फ़िग फ़ाइल के नहीं।
| फ़ाइल कुंजी | पर्यावरण चर | डिफ़ॉल्ट |
|---|---|---|
host | HONEYPOT_HOST | 0.0.0.0 |
port | HONEYPOT_PORT (legacy alias: PORT) | 2222 |
username | HONEYPOT_USERNAME | user1 |
password | HONEYPOT_PASSWORD | pass123 |
tarpit | HONEYPOT_TARPIT | false |
tarpit_max_seconds | HONEYPOT_TARPIT_MAX_SECONDS | 120 |
max_connections | HONEYPOT_MAX_CONNECTIONS | 50 |
auth_timeout | HONEYPOT_AUTH_TIMEOUT | 60 |
session_idle_timeout | HONEYPOT_SESSION_IDLE_TIMEOUT | 300 |
sensor_id | HONEYPOT_SENSOR_ID | unset |
db_path | HONEYPOT_DB_PATH | data/sshintel.db |
no_db | HONEYPOT_NO_DB | false |
fetch_payloads | HONEYPOT_FETCH_PAYLOADS | false (reserved) |
पर्यावरण बूलियन true/false, 1/0, yes/no, और on/off स्वीकार करते हैं।
HONEYPOT_PORT PORT पर प्राथमिकता लेता है। पोर्ट 1–65535 होने चाहिए और सीमाएँ
और टाइमआउट धनात्मक पूर्णांक होने चाहिए। कम-प्राथमिकता वाली true सेटिंग को ओवरराइड करने के लिए --no-tarpit, --db-enabled, या
--no-fetch-payloads का उपयोग करें। डेटाबेस पथ मौजूदा --db CLI फ़्लैग का उपयोग करते हैं। पेलोड फ़ेचिंग लागू नहीं है: fetch_payloads को सक्षम करना
चुपचाप अनदेखा करने के बजाय अस्वीकार कर दिया जाता है।
स्थानीय sshintel.toml/sshintel.json फ़ाइलें Git-इग्नोर की गई हैं और Docker
बिल्ड से बाहर रखी गई हैं क्योंकि उनमें क्रेडेंशियल हो सकते हैं। इसके बजाय किसी कॉन्फ़िगरेशन फ़ाइल को कंटेनर में केवल-पढ़ने के लिए माउंट करें। Docker पर्यावरण चर सीधे उपभोग करता है (क्रेडेंशियल को शेल-इंटरपोलेट किए बिना); इसके मौजूदा ENV डिफ़ॉल्ट माउंट की गई फ़ाइल पर प्राथमिकता लेते हैं। आवश्यकतानुसार उन चरों को ओवरराइड करें या स्पष्ट CLI फ़्लैग का उपयोग करें।
SSHintel कई समवर्ती कनेक्शनों या अनिश्चित काल तक जीवित रखे गए कनेक्शनों से संसाधन की कमी के विरुद्ध सुरक्षा प्रदान करता है। इन्हें CLI के माध्यम से कॉन्फ़िगर किया जा सकता है:
| फ़्लैग | डिफ़ॉल्ट | उद्देश्य |
|---|---|---|
--max-connections | 50 | अधिकतम एक साथ सक्रिय कनेक्शन; अतिरिक्त कनेक्शन अस्वीकार किए जाते हैं और connection_rejected ईवेंट के रूप में लॉग किए जाते हैं |
--auth-timeout | 60 (s) | SSH हैंडशेक/प्रमाणीकरण पूरा करने के लिए अनुमत समय; रुके हुए क्लाइंट डिस्कनेक्ट कर दिए जाते हैं |
--session-idle-timeout | 300 (s) | प्रमाणित शेल के लिए निष्क्रियता टाइमआउट; निष्क्रिय सत्र समाप्त कर दिया जाता है, लेकिन सक्रिय रूप से टाइप करने वाला हमलावर कभी नहीं मारा जाता |
उदाहरण:
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 के साथ समाप्त होता है।
Tarpit मोड जानबूझकर आउटपुट धीरे-धीरे भेजता है ताकि हमलावर लगा रहे, इसलिए tarpit बैनर लूप निष्क्रियता टाइमआउट के अधीन नहीं है — लेकिन tarpit सत्र कनेक्शन सीमा के विरुद्ध गिने जाते हैं।
SSHintel में एक स्थानीय वेब डैशबोर्ड शामिल है जो SQLite में संग्रहीत सुरक्षा टेलीमेट्री को विज़ुअलाइज़ करता है।
python3 run.py dashboard
फिर अपने ब्राउज़र में http://localhost:5000 खोलें।
डैशबोर्ड डिफ़ॉल्ट रूप से
data/sshintel.dbपर मौजूद SQLite डेटाबेस से पढ़ता है। पहले हनीपॉट शुरू करें ताकि टेलीमेट्री कैप्चर हो रही हो, फिर डैशबोर्ड लॉन्च करें ताकि आप इसे भरते हुए देख सकें।