
Spip नेटवर्क सेंसर जो Go में लिखा गया है
Spip लिनक्स के लिए एक लो-इंटरैक्शन नेटवर्क हनीपॉट सेंसर है, जो Go में लिखा गया है। यह होस्ट द्वारा इसकी ओर रीडायरेक्ट किए गए किसी भी पोर्ट पर TCP कनेक्शन स्वीकार करता है, सादे या TLS, क्लाइंट को उसका अगला संदेश भेजने के लिए प्रेरित करने भर का उत्तर देता है, और प्रत्येक आदान-प्रदान को ECS फ़ील्ड नामों के साथ एक JSON रिकॉर्ड के रूप में लिखता है, जो SIEM या डेटा लेक के लिए तैयार होता है। वैकल्पिक UDP कैप्चर डेटाग्राम रिकॉर्ड करता है और उनका कभी उत्तर नहीं देता।
HoneyLabs honeylabs.net पर प्रकाशित डेटा एकत्र करने के लिए Spip चलाता है।
पूर्वापेक्षाएँ:
iptables और रूट एक्सेसgit clone https://github.com/honeylabshq/Spip-Go.git
cd Spip-Go
go build -o spip-agent ./cmd/spip-agent
observer.version और agent.version (डिफ़ॉल्ट dev) में रिपोर्ट किए गए संस्करण को सेट करने के लिए, -ldflags "-X main.version=v1.2.3" जोड़ें।
sudo ./scripts/initial_setup.sh
नीचे प्रारंभिक सेटअप सहायक देखें।
config.toml बनाएँ या संपादित करें
न्यूनतम config.toml:name = "spip-agent"
ip = "0.0.0.0"
port = 8080
वैकल्पिक कॉन्फ़िगरेशन कुंजियाँ:
cert_path / key_path: यदि दोनों सेट हैं तो TLS सक्षम करें। सापेक्ष पथ कॉन्फ़िग फ़ाइल की निर्देशिका के सापेक्ष हल होते हैं।log_file: रिकॉर्ड को stdout के बजाय इस फ़ाइल में जोड़ें। नीचे Log output देखें।[loom]: रिकॉर्ड को HTTP के माध्यम से भी भेजें। नीचे Loom देखें।read_timeout_seconds / write_timeout_seconds: प्रति कनेक्शन निष्क्रिय पठन टाइमआउट और लेखन टाइमआउट।rate_limit_per_second / rate_limit_burst: नए TCP कनेक्शनों पर दर सीमा, जो सभी स्रोतों द्वारा साझा की जाती है। सीमा से अधिक कनेक्शन बिना पढ़े बंद कर दिया जाता है।community_id_seed: Community ID v1 फ़्लो हैशिंग के लिए वैकल्पिक 16-बिट सीड (डिफ़ॉल्ट के लिए छोड़ दें या 0 रखें)।capture_client_hello: tls.client.hello_hex को छोड़ने के लिए false सेट करें। Fingerprinting देखें।ignore_sources: वे पते या नेटवर्क जिनके कनेक्शन और डेटाग्राम कुछ भी पढ़े जाने से पहले बंद या त्याग दिए जाते हैं, ताकि वे कभी लॉग, फ़िंगरप्रिंट या भेजे न जाएँ। केवल पते और CIDR, IPv4 या IPv6:
ignore_sources = ["192.0.2.10", "198.51.100.0/24", "2001:db8::/32"]। किराए के होस्ट पर स्थित हनीपॉट को उसी होस्ट की अपनी मॉनिटरिंग द्वारा पोल किया जाता है, और उन स्क्रैप को गिनने से पोर्ट रैंकिंग और स्कैनर गणनाएँ विकृत हो जाती हैं। जो प्रविष्टि पार्स नहीं होती, वह एजेंट को शुरू होने से रोक देती है, क्योंकि यहाँ एक टाइपो चुपचाप उस ट्रैफ़िक को रिकॉर्ड कर देगा जिसे आप त्यागा हुआ मानते हैं। ड्रॉप्स को प्रति स्रोत गिना जाता है और हर घंटे तथा शटडाउन पर लॉग में रिपोर्ट किया जाता है।udp_enabled और udp_* कुंजियाँ: UDP capture देखें।यदि ये रनटाइम ट्यूनिंग फ़ील्ड छोड़ दिए जाते हैं या 0 पर सेट किए जाते हैं, तो Spip निम्नलिखित डिफ़ॉल्ट लागू करता है:
read_timeout_seconds: 30write_timeout_seconds: 10rate_limit_per_second: 20rate_limit_burst: 50000sudo iptables -t nat -F
sudo iptables -t nat -A PREROUTING -p tcp --dport 22 -j RETURN
sudo iptables -t nat -A PREROUTING -p tcp -j REDIRECT --to-port 8080
पहला कमांड पूरी nat तालिका को फ्लश करता है। जिस होस्ट पर अपने NAT नियम हों, वहाँ इसे छोड़ दें। ip6tables के साथ वही दो नियम IPv6 को कवर करते हैं। Spip प्रत्येक कनेक्शन का मूल गंतव्य कर्नेल की कनेक्शन ट्रैकिंग से पढ़ता है और उसे destination.ip और destination.port के रूप में रिकॉर्ड करता है।
./spip-agent -config config.toml
-config एकमात्र फ़्लैग है और डिफ़ॉल्ट रूप से कार्यशील निर्देशिका में config.toml पर सेट होता है। SIGINT या SIGTERM लिसनर को रोकता है, खुली कनेक्शनों के लिए अधिकतम 15 सेकंड प्रतीक्षा करता है और किसी भी लंबित Loom बैच को स्पूल में लिखता है, उसे भेजने के लिए 5 सेकंड देता है; शेष अगली बार शुरू होने पर भेजा जाता है।
Spip मूल गंतव्य पोर्ट द्वारा एक रिस्पॉन्डर चुनता है। प्रत्येक केवल इतना कहता है कि क्लाइंट अपना अगला संदेश भेज दे: क्रेडेंशियल, एक कमांड या एक मेल एनवेलप।
| पोर्ट | प्रतिक्रिया |
|---|---|
| 23, 2323 | Telnet विकल्प वार्ता और एक login: प्रॉम्प्ट, फिर Password:, फिर Login incorrect और बंद |
| 21, 990 | FTP अभिवादन, पहली पंक्ति के बाद पासवर्ड अनुरोध, फिर 530 Login incorrect. और बंद |
| 25, 465, 587 | SMTP अभिवादन, पहली तीन पंक्तियों के लिए 250 उत्तर, चौथी के लिए 354, फिर बंद। कुछ भी रिले नहीं किया जाता और कोई आउटबाउंड कनेक्शन नहीं बनाया जाता। |
| 110, 995 | POP3 अभिवादन, पहली पंक्ति के बाद +OK, दूसरी के बाद -ERR invalid login, फिर बंद |
| 143, 993 | IMAP अभिवादन, फिर * BAD Login failed और बंद |
| 6379, 6380, या कोई भी पेलोड जो Redis कमांड जैसा दिखता है | PING के लिए +PONG, बाकी सब के लिए +OK |
| कोई अन्य पोर्ट | HTTP अनुरोध के लिए क्लाइंट के IP पते को बॉडी के रूप में लेकर HTTP/1.1 200 OK, बाकी किसी भी चीज़ के लिए केवल IP पता |
एक क्लाइंट जो कुंजी विनिमय संदेश के बिना SSH-2.0 भेजता है, उसे बैनर SSH-2.0-spip मिलता है, और Spip कुंजी विनिमय के लिए अधिकतम 2 सेकंड प्रतीक्षा करता है ताकि वह क्लाइंट फ़िंगरप्रिंट की गणना कर सके।
telnet, FTP, SMTP, POP3 और IMAP अभिवादन कनेक्ट पर भेजे जाते हैं। TLS सक्षम होने पर, Spip पहले TLS को सादे टेक्स्ट से अलग पहचानने के लिए एक बाइट पढ़ता है, इसलिए वे अभिवादन केवल तब भेजे जाते हैं जब क्लाइंट ने कुछ भेज दिया हो।
Spip ECS लॉग को एकल स्थानीय गंतव्य पर लिखता है और वही रिकॉर्ड एक Loom सर्वर पर भी भेज सकता है:
| गंतव्य | कॉन्फ़िग | व्यवहार |
|---|---|---|
| स्थानीय | log_file | छोड़ा गया या खाली: stdout। किसी पथ पर सेट: रिकॉर्ड उस फ़ाइल में जोड़े जाते हैं। हमेशा चालू। |
| Loom | [loom] के साथ enabled = true | वैकल्पिक। स्थानीय आउटपुट के अतिरिक्त वही रिकॉर्ड बैच में आपके Loom ingest URL पर POST किए जाते हैं। |
स्थानीय आउटपुट एजेंट की अपनी लॉग पंक्तियाँ भी ले जाता है, जैसे प्रति घंटा ड्रॉप गणना और चेतावनियाँ, {"timestamp": <unix seconds>, "level": "INFO", "message": "...", "target": "...", "record_type": "log"} के रूप में। केवल कनेक्शन रिकॉर्ड Loom पर जाते हैं। स्टार्टअप संदेश stderr पर जाते हैं।