
मूल रूप से CVE-2026-20131 के लिए एक हनीपॉट
एक लो-इंटरैक्शन हनीपॉट जो Cisco Secure Firewall Management Center (FMC) वेब सतह का अनुकरण करता है और अनऑथेंटिकेटेड Java सीरियलाइज़ेशन-शैली आक्रमण ट्रैफ़िक (CVE-शैली असुरक्षित डीसीरियलाइज़ेशन प्रोब) को कैप्चर करता है।
\xac\xed\x00\x05 (और Base64 rO0AB…) का पता लगाता है और रेगुलर एक्सप्रेशन्स और ह्यूरिस्टिक्स का उपयोग करके शेल या URL स्ट्रिंग्स निकालता है।requests के साथ एक गैर-निष्पादन योग्य डाउनलोड वॉल्यूम में प्राप्त किए जाते हैं।एकल-पंक्ति JSON लॉग (Splunk और ELK के साथ संगत), वैकल्पिक Telegram अलर्ट, हैशेड दूसरे-चरण के आर्टिफैक्ट, और एक गैर-रूट कंटेनर उपयोगकर्ता। यह प्रोजेक्ट शोधकर्ताओं के लिए है जिन्हें अतिरिक्त एकीकरण कोड के बिना एक केंद्रित FMC-शैली जाल की आवश्यकता है।
| आइटम | नोट्स |
|---|---|
| Docker और Docker Compose v2 | Docker स्थापित करें |
| VPS या होस्ट | एक समर्पित या पृथक नेटवर्क खंड अनुशंसित है |
| डोमेन (वैकल्पिक) | HTTPS के लिए: DNS कॉन्फ़िगर करें और होस्ट पर इनबाउंड TCP 80 और TCP 443 की अनुमति दें |
git clone https://github.com/Hassan-Pouladi/Cisco-FMC-honeypot
cd FMC-Trap
cp .env.example .env
आवश्यकतानुसार .env संपादित करें (देखें पर्यावरण चर)। बंडल किए गए Caddy के पीछे तैनाती के लिए, TRUST_X_FORWARDED_FOR=1 सेट करें ताकि लॉग में क्लाइंट IP पते मूल क्लाइंट को प्रतिबिंबित करें।
Caddyfile संपादित करें: प्लेसहोल्डर होस्टनाम को अपने डोमेन (और यदि लागू हो तो www) से बदलें:
example.com, www.example.com {
reverse_proxy fmc-trap:5000
}
वैकल्पिक रूप से, Let's Encrypt समाप्ति सूचनाओं के लिए Caddyfile में वैश्विक email [email protected] ब्लॉक को अनकमेंट करें।
yourdomain.com को आपके सर्वर के सार्वजनिक IP पर, और यदि उपयोग किया जाता है तो www।ufw allow 80,443/tcp)।एप्लिकेशन कंटेनर के अंदर UID 10001 के रूप में चलता है। बाइंड-माउंटेड ./data निर्देशिका लिखने योग्य होनी चाहिए:
mkdir -p data/logs data/downloads
sudo chown -R 10001:10001 data/logs data/downloads
सही स्वामित्व के बिना, एक्सप्लॉइट POST अनुरोध 500 लौटा सकते हैं (लॉग या रॉ ब्लॉब लिखते समय अनुमति अस्वीकृत)।
docker compose up -d --build
docker compose ps
curl -sI https://yourdomain.com/
HTTP/2 200 (या 301 या 302) और Via: Caddy की अपेक्षा करें। ब्राउज़र में, https://yourdomain.com/ को सिम्युलेटेड FMC लॉगिन पृष्ठ प्रदर्शित करना चाहिए।
ईवेंट, पेलोड और Docker आउटपुट कहाँ पढ़ें, इसके लिए देखें लॉग, डाउनलोड और सेवा आउटपुट ढूँढना और सामान्य संचालन।
नीचे दी गई सभी चीज़ें आपकी प्रोजेक्ट निर्देशिका (वह फ़ोल्डर जिसमें docker-compose.yml है, आमतौर पर क्लोन करने के बाद FMC-Trap) के सापेक्ष हैं। पथ होस्ट पर हैं; Docker उन्हें कंटेनर में बाइंड-माउंट करता है।
| क्या | होस्ट पथ | कैसे खोलें या अनुसरण करें |
|---|---|---|
| ईवेंट लॉग (JSON पंक्तियाँ) | data/logs/fmc-trap.json | tail -f data/logs/fmc-trap.json (लाइव स्ट्रीम), या संपादक में खोलें, या Splunk या ELK में निगलें |
| डाउनलोड किए गए दूसरे-चरण पेलोड | data/downloads/ | फ़ाइलें तभी दिखाई देती हैं जब हार्वेस्टर एक दूरस्थ प्रतिक्रिया सहेजता है; प्रत्येक फ़ाइल का नाम उसके SHA256 हैश (64 हेक्साडेसिमल वर्ण) के साथ है, कोई एक्सटेंशन नहीं। ls -la data/downloads (Linux या macOS) या Get-ChildItem data\downloads (Windows PowerShell) के साथ सूचीबद्ध करें |
| एप्लिकेशन प्रक्रिया आउटपुट | फ़ाइल नहीं; Docker | docker compose logs -f fmc-trap |
| Caddy (TLS, प्रॉक्सी, ACME) | फ़ाइल नहीं; Docker | docker compose logs -f caddy |
| Telegram अलर्ट (वैकल्पिक) | data/ में संग्रहीत नहीं | .env में TELEGRAM_BOT_TOKEN और TELEGRAM_CHAT_ID सेट करें; जब ईवेंट लॉग होते हैं तो अलर्ट फायर होते हैं |
जब लॉग फ़ाइल में कुछ दिखाई देता है: fmc-trap.json को प्रति पंक्ति एक JSON ऑब्जेक्ट प्राप्त होता है जब कोई अनुरोध डीसीरियलाइज़ेशन प्रोब व्यवहार (POST में मैजिक बाइट्स) से मेल खाता है। नकली लॉगिन पृष्ठ के सामान्य GET अनुरोध डिफ़ॉल्ट रूप से इस फ़ाइल में नहीं लिखे जाते हैं।
जब डाउनलोड फ़ोल्डर में फ़ाइलें होती हैं: प्रविष्टियाँ तभी दिखाई देती हैं जब पाइपलाइन एक प्रोब से URL निकालती है और हार्वेस्टर MAX_DOWNLOAD_MB के भीतर अनुमत दूरस्थ सामग्री को सफलतापूर्वक प्राप्त करता है। यदि निर्देशिका खाली रहती है, तो अभी तक कोई योग्य URL नहीं हो सकता है, या फ़ेच एप्लिकेशन में नीति द्वारा अवरुद्ध हो सकते हैं।
Pretty-printing JSON (वैकल्पिक): एकल पंक्ति के लिए, python -m json.tool के माध्यम से पाइप करें या स्थापित होने पर jq का उपयोग करें।
| लक्ष्य | कमांड या कार्रवाई |
|---|---|
| देखें कि कंटेनर चल रहे हैं या नहीं | docker compose ps |
.env या Caddyfile संपादित करने के बाद पुनरारंभ करें | docker compose up -d --build (या यदि केवल env बदला है तो docker compose up -d --force-recreate) |
| स्टैक रोकें | docker compose down |
| लगातार नए JSON ईवेंट का अनुसरण करें | tail -f data/logs/fmc-trap.json |
| अंतिम कुछ ईवेंट का निरीक्षण करें | tail -n 50 data/logs/fmc-trap.json |
| डाउनलोड किए गए आर्टिफैक्ट की गणना करें | अपने फ़ाइल प्रबंधक में data/downloads खोलें, या उस निर्देशिका पर शेल फ़ाइल गणना का उपयोग करें (फ़ाइलों का नाम SHA256 द्वारा रखा गया है) |
| पुष्टि करें कि हनीपॉट पृष्ठ लोड होता है | ब्राउज़र में https://yourdomain.com/ खोलें या सत्यापन चरण की तरह curl -sI का उपयोग करें |
Internet :443/:80 → Caddy (TLS, Let's Encrypt) → fmc-trap:5000 (Gunicorn/Flask)
↓
./data/logs, ./data/downloads (bind mounts)
expose: "5000" देखें)।| वेरिएबल | उद्देश्य | डिफ़ॉल्ट / नोट |
|---|---|---|
TRUST_X_FORWARDED_FOR | src_ip के रूप में पहले X-Forwarded-For हॉप का उपयोग करें | Caddy के साथ 1 अनुशंसित है |
DECEPTION_STATUS | 200 एक HTML बॉडी लौटाता है; 302 एक रीडायरेक्ट लौटाता है | 200 |
DECEPTION_REDIRECT_URL | जब स्थिति 302 हो तो लक्ष्य पथ | / |
MAX_DOWNLOAD_MB | प्रति URL हार्वेस्टर सीमा | 16 |
TELEGRAM_BOT_TOKEN / TELEGRAM_CHAT_ID | वैकल्पिक अलर्ट | खाली होने पर अलर्ट अक्षम हो जाते हैं |
FMC_SERVER_HEADER | Server प्रतिक्रिया हेडर | nginx |
VT_API_KEY | आरक्षित | वैकल्पिक |
Compose इन वेरिएबल्स को fmc-trap सेवा में पास करता है; विस्तार के लिए docker-compose.yml देखें।
data/logs/fmc-trap.json में प्रत्येक पंक्ति एक JSON ऑब्जेक्ट है। सामान्य कुंजियों में timestamp, event_type, src_ip, headers, raw_payload_hash, extracted_commands, और जब कोई फ़ाइल संग्रहीत की गई थी तो downloaded_file_hash शामिल हैं। data/downloads/ के अंतर्गत सहेजे गए ब्लॉब मोड 0400 (स्वामी के लिए केवल-पढ़ने के लिए) का उपयोग करते हैं।