
IoT और परिचालन प्रौद्योगिकी हनीपॉट
| 📢 ध्यान दें!!! |
|---|
| इस रिपॉजिटरी को हनीनेट प्रोजेक्ट में स्थानांतरित कर दिया गया है :) |
RIoTPot एक हाइब्रिड इंटरेक्शन हनीपॉट है, जो मुख्य रूप से IoT और OT प्रोटोकॉल के अनुकरण पर केंद्रित है, हालांकि, यह अन्य सेवाओं का भी अनुकरण करने में सक्षम है। संक्षेप में, RIoTPot सिस्टम में शामिल अन्य हनीपॉट्स के लिए एक प्रॉक्सी सेवा के रूप में कार्य करता है। इसलिए, आप RIoTPot के साथ-साथ कोई भी हनीपॉट और अन्य सेवाएँ चला सकते हैं। इसके अतिरिक्त, एक UI वेब-एप्लिकेशन है जिसका उपयोग आप अपने रूटिंग को प्रबंधित करने के लिए कर सकते हैं।
हनीपॉट के साथ उपयोग के लिए तैयार कई निम्न-अंतःक्रिया सेवाएँ आती हैं। चूँकि ये सेवाएँ प्लगइन्स के रूप में लिखी गई हैं, ये केवल लिनक्स पर समर्थित हैं; हालाँकि, आप इनके बिना RIoTPot शुरू कर सकते हैं। निम्नलिखित तालिका में RIoTPot में डिफ़ॉल्ट रूप से शामिल सेवाओं, उनके आंतरिक पोर्ट और प्रॉक्सी पोर्ट की सूची है।
विषय-सूची
RIoTPot आर्किटेक्चर आंतरिक और आस-पास (या बाहरी) सेवाओं (जैसे, हनीपॉट्स, पूर्ण-सेवाएँ, कंटेनर, रिमोट होस्ट, आदि) के लिए प्रॉक्सी कनेक्शन पर आधारित है।
इसके लिए, हनीपॉट उपयोगकर्ता-परिभाषित प्रॉक्सीज़ की एक संख्या का प्रबंधन करता है जो सेवाओं और RIoTPot के बीच कनेक्शन को रिले करते हैं 1।
इस तरह, RIoTPot यह तय कर सकता है कि आने वाले हमलों को कैसे और कहाँ रूट करना है।
आने वाले हमले को संभालने के लिए उपयोग किए जाने वाले तर्क को मिडलवेयर के रूप में लागू किया जाता है 2।
सेवाओं, मिडलवेयर और प्रॉक्सीज़ को प्रबंधित करने के लिए, RIoTPot में आउट-ऑफ-द-बॉक्स एक REST API 3 और एक वेबऐप UI 4 शामिल है।
UI तक आप अपने ब्राउज़र में localhost:2022 पर पहुँच सकते हैं और आप API एंडपॉइंट्स के साथ localhost:2022/api/swagger पर खिलवाड़ कर सकते हैं, जो एक Swagger इंटरफ़ेस दिखाता है।
चित्र 1 RIoTPot आर्किटेक्चर दिखाता है, जिसमें दो मुख्य एप्लिकेशन शामिल हैं जो RIoTPot (स्वयं RIoTPot, और RIoTPot UI) और उनके घटक, और बाहरी (या आस-पास की) सेवाओं को घेरने के लिए एक अनुभाग शामिल है।
RIoTPot गोलंग में लिखा गया है 5। प्रत्येक RIoTPot इंस्टेंस माँग पर पंजीकृत प्रॉक्सीज़ (उनके पोर्ट के आधार पर) को उजागर करता है। एक प्रॉक्सी को सेवा देने के लिए, उसके पास एक बाउंडेड सेवा होनी चाहिए और प्रॉक्सी पोर्ट उपलब्ध होना चाहिए (वर्तमान में, RIoTPot एक ही पोर्ट पर चलने वाली कई सेवाओं को स्वीकार नहीं करता है)। जब एक प्रॉक्सी को बाउंड और सेवा दी जाती है, तो हमलावर उस पोर्ट पर RIoTPot को संदेश भेजने में सक्षम होंगे, संदेशों को बाउंडेड सेवा और वापस हमलावर को भेज सकेंगे 6।
पहुँच में आसानी के लिए, RIoTPot UI वेबऐप से RIoTPot के कई इंस्टेंसेस को प्रबंधित किया जा सकता है।
प्रत्येक इंस्टेंस में पंजीकृत प्रॉक्सीज़ के प्रबंधन के अलावा, UI आपको प्रोफाइल बनाने, उपयोग करने और संपादित करने की अनुमति देता है।
प्रत्येक प्रोफाइल में प्रोटोकॉल या अन्य सेवाओं के नाम पर कई प्रॉक्सीज़ होती हैं, जो RIoTPot इंस्टेंस को एक वास्तविक जीवन उपकरण (जैसे, एक होम असिस्टेंट) जैसा दिखाती हैं।
कुछ शब्दों में, प्रोफाइल विशिष्ट कॉन्फ़िगरेशन के साथ एक RIoTPot इंस्टेंस को सेट अप और प्रोविजन करने की प्रक्रिया को गति देते हैं।
UI React फ्रंट-एंड जावास्क्रिप्ट लाइब्रेरी (हम इस प्रोजेक्ट के लिए Typescript का उपयोग करते हैं) और Recoil स्थिति प्रबंधन लाइब्रेरी का उपयोग करके लिखा गया है।
चूँकि RIoTPot काफी छोटा है, फिलहाल, यह डेटाबेस का उपयोग नहीं करता है।
RIoTPot चलाना अपेक्षाकृत सरल है। कुल मिलाकर, आपके पास तीन विकल्प हैं। पहला है RIoTPot रिलीज़ डाउनलोड करना; आप या तो नवीनतम रिलीज़ डाउनलोड करना चुन सकते हैं, या पिछली रिलीज़। दूसरा विकल्प है प्रोजेक्ट को स्वयं बनाना। अंतिम विकल्प है RIoTPot और हनीपॉट को बढ़ाने के लिए कुछ अतिरिक्त एप्लिकेशन के साथ एक डॉकर कंटेनर बनाने के लिए स्रोत कोड का उपयोग करना।
जानकारी: यह गाइड उन उपयोगकर्ताओं के लिए है जिनकी कोई विशेष आवश्यकता नहीं है, और जो एक सरल आउट-ऑफ-द-बॉक्स अनुभव चाहते हैं।
प्रत्येक रिलीज़ एक फ़ोल्डर में आती है जिसका नाम riotpot है, जिसमें एक निष्पादन योग्य बाइनरी (भी) का नाम riotpot और एक plugins फ़ोल्डर होता है जिसमें कई सेवाएँ (या निम्न-अंतःक्रिया हनीपॉट) भरी होती हैं।
RIoTPot को इच्छित रूप से काम करने के लिए आंतरिक फ़ोल्डर संरचना को बनाए रखना महत्वपूर्ण है।
📁 riotpot
┕ riotpot
┕ 📁 plugins
riotpot फ़ोल्डर को निकालें।riotpot बाइनरी चलाएँ। इससे RIoTPot API सक्षम, सभी प्लगइन्स उपयोग के लिए तैयार, और UI सर्वर के साथ शुरू होगा।
localhost:2022 के माध्यम से सुलभ हैंजानकारी: यह गाइड उन उन्नत उपयोगकर्ताओं के लिए है जो विकास वातावरण में सहज हैं।
आवश्यकताएँ
- गोलंग - प्रोजेक्ट बनाने के लिए आवश्यक
- Node - UI बनाने के लिए आवश्यक
वैकल्पिक:
- Git - स्रोत कोड डाउनलोड करने के लिए
- Make - पहले से तैयार कमांड चलाने के लिए
GitHub से RIoTPot स्रोत कोड डाउनलोड करें। एक कंसोल खोलें और निम्नलिखित पंक्ति दर्ज करें।
git clone [email protected]:aau-network-security/riotpot.git
उस फ़ोल्डर पर जाएँ जहाँ आपने RIoTPot स्रोत डाउनलोड किया है और आवश्यक नोड पैकेज इंस्टॉल करें।
npm install
यदि आपने Make इंस्टॉल किया है, तो हमने आपको प्रोजेक्ट बनाने में सहायता के लिए कई कमांड हेल्पर्स शामिल किए हैं। इसे सरल रखने के लिए, आप दो सरल कमांड चला सकते हैं जो RIoTPot बाइनरी और प्लगइन्स का निर्माण करेंगे (और उन्हें सही फ़ोल्डर में रखेंगे)।
# सर्वर बनाएँ
make build-ui
# RIoTPot और प्लगइन्स बनाएँ
make riotpot-build
नोट: UI प्रोजेक्ट बनाने के लिए Vite का उपयोग करता है। यदि आप किसी अन्य बिल्डर का उपयोग करना पसंद करते हैं, तो आपको पहले स्वयं कुछ बदलाव करने पड़ सकते हैं।
जानकारी: यह गाइड उन उन्नत उपयोगकर्ताओं के लिए है जो वर्चुअल वातावरण में RIoTPot का उपयोग करना पसंद करते हैं।
आवश्यकताएँ
- डॉकर - RIoTPot इंस्टेंस और UI सर्वर की एक छवि बनाने के लिए उपयोग किया जाता है।
- डॉकर-कम्पोज़ - RIoTPot इंस्टेंस, UI और अन्य एप्लिकेशन और सेवाओं के साथ एक एकल कंटेनर बनाने के लिए उपयोग किया जाता है।
इस सेटअप का उपयोग करने के मुख्य लाभ कंटेनर कॉन्फ़िगरेशन और स्वयं कंटेनरों में न्यूनतम परिवर्तनों के साथ अतिरिक्त सुरक्षा सुविधाएँ हैं। उदाहरण के लिए, हम RIoTPot और अन्य आस-पास की सेवाओं को छिपाने, सैंडबॉक्स करने और एन्कैप्सुलेट करने के लिए अलग-अलग वर्चुअल प्राइवेट नेटवर्क और ओवरले नेटवर्क परिभाषित कर सकते हैं। इसके अलावा, कंटेनर हमें उनके IP के बजाय उनके डॉकर पते के नाम का उपयोग करके सेवाओं को बाइंड करने की अनुमति देते हैं, जो बहुत सुविधाजनक है। अंत में, हम अन्य सेवाओं को प्रभावित किए बिना अलग-अलग कंटेनरों को मांग पर स्पॉन और रोक सकते हैं।
दूसरी ओर, वर्चुअलाइजेशन बेयर-मेटल पर एप्लिकेशन का उपयोग करने की तुलना में काफी अधिक मांग वाला है। जबकि RIoTPot का एक एकल इंस्टेंस अपेक्षाकृत हल्का होता है, वर्चुअलाइजेशन और हार्डवेयर अनुकरण (जैसे, प्रतिक्रिया विलंब) द्वारा शुरू की गई कमियों पर विचार करना महत्वपूर्ण है।
चेतावनी: तकनीकी रूप से, एक समर्पित हमलावर यह महसूस कर सकता है कि RIoTPot वास्तव में एक हनीपॉट है, जो वर्चुअलाइजेशन द्वारा शुरू किए गए प्रतिक्रिया-समय विलंबों का विश्लेषण और वास्तविक सर्वरों से तुलना करके ऐसा कर सकता है (!!)। जबकि इस प्रकार की हनीपॉट फिंगरप्रिंटिंग का पहले अध्ययन किया गया है, सामान्य इंटरनेट सेवाओं (जैसे, HTTP, Telnet और SSH) के परिणाम अभी भी अनिर्णायक हैं, क्लाउड होस्टिंग सेवाओं के वर्चुअल मशीनों और विस्तृत सर्वर कॉन्फ़िगरेशन का उपयोग करने के कारण।
docker-compose फ़ाइल में RIoTPot अनुभव को बढ़ाने के लिए अतिरिक्त सेवाएँ शामिल हैं।
निम्नलिखित तालिका इस कंटेनर में पैक की गई सेवाओं और एप्लिकेशन की सूची का सारांश प्रस्तुत करती है।
सेवाएँ
RIoTPot फ्लैग कमांडों के साथ आता है जो प्रभावित करते हैं कि कैसे और क्या शुरू किया गया है। उदाहरण:
# UI के बिना RIoTPot चलाएँ
./riotpot --ui false
आंतरिक और आस-पास की सेवाएँ इंटरनेट के माध्यम से सुलभ नहीं हैं। आंतरिक सेवाएँ एकीकृत हैं और केवल RIoTPot के लिए सुलभ हैं। ये सेवाएँ स्टार्ट-अप पर लोड होती हैं और इन्हें हटाया नहीं जा सकता, लेकिन इन्हें रोका जा सकता है। आस-पास की सेवाएँ RIoTPot के समान नेटवर्क में होनी चाहिए। बाहरी सेवाओं को RIoTPot को केवल व्हाइटलिस्ट करना चाहिए। ↩
मिडलवेयर वर्तमान में विकास के अधीन हैं। ↩
RIoTPot API को इंटरनेट पर उजागर नहीं किया जाना चाहिए। फिर भी, API वर्तमान में केवल लोकलहोस्ट से कनेक्शन स्वीकार करता है। भविष्य में इसे बदला जा सकता है, जिसमें होस्ट की एक व्हाइटलिस्ट और मानक प्रमाणीकरण प्रदान किया जाएगा। ↩
हालाँकि वेब इंटरफ़ेस को एक अलग घटक के रूप में उपयोग किया जा सकता है, यह RIoTPot बाइनरी के साथ एम्बेडेड है। ↩
जबकि बेस एप्लिकेशन इंटरऑपरेबल है, आंतरिक सेवाएँ (प्लगइन्स) का उपयोग केवल लिनक्स, फ्रीबीएसडी और मैकओएस वातावरणों में किया जा सकता है। हम प्लगइन्स को gRPC के माध्यम से संचार करने वाली माइक्रो-सेवाओं से बदलकर इस सीमा को दूर करने की योजना बना रहे हैं। ↩
नैतिक और सुरक्षा कारणों से, RIoTPot बाहर की ओर अनचाहे अनुरोधों की अनुमति नहीं देता है, अर्थात, रिवर्सेड शेल और इसी तरह की चीजों की अनुमति नहीं है। ↩
| सेवा | आंतरिक पोर्ट | प्रॉक्सी पोर्ट |
|---|
| Echo | 20007 | 7 |
| SSH | 20022 | 22 |
| Telnet | 20023 | 23 |
| HTTP | 28080 | 80 |
| Modbus | 20502 | 502 |
| MQTT | 21883 | 1883 |
| CoAP | 25683 | 5683 |
| सेवा | इमेज | पोर्ट | विवरण |
|---|
| MQTT | eclipse-mosquitto | 1883 | Mosquito MQTT सर्वर |
| HTTP | httpd | 80 | सामान्य HTTP सर्वर |
| Modbus | oitc/modbus-server | 502 | मॉडबस सर्वर |
| OCPP | ocpp1.6-central-system | 443 | OCPP v1.6 (कार चार्जिंग स्टेशनों में उपयोग किया जाता है) |
| एप्लिकेशन | इमेज | विवरण |
|---|---|---|
| TCPDump | kaazing/tcpdump | पैकेट रिकॉर्डर। यह नेटवर्क ट्रैफ़िक को .pcap फ़ाइलों में संग्रहीत करता है |
कंटेनर को तीन सरल चरणों में सेट किया जा सकता है:
GitHub से RIoTPot स्रोत कोड डाउनलोड करें। एक कंसोल खोलें और निम्नलिखित पंक्ति दर्ज करें।
git clone [email protected]:aau-network-security/riotpot.git
उस फ़ोल्डर पर जाएँ जहाँ आपने RIoTPot स्रोत डाउनलोड किया है।
डॉकर चलने पर: यदि आपने Make इंस्टॉल किया है, तो निम्न कमांड चलाएँ। अन्यथा, build/docker फ़ोल्डर में शामिल डॉकर-कम्पोज़ फ़ाइल का उपयोग करके डॉकर-कम्पोज़ कमांड चलाएँ।
# Make के साथ
make up
# डॉकर-कम्पोज़ के साथ
docker-compose -p riotpot -f build/docker/docker-compose.yaml up -d --build
| फ्लैग | प्रकार | डिफ़ॉल्ट | विवरण |
|---|
| debug | Boolean | false | लॉग स्तर को डीबग पर सेट करें |
| api | Boolean | true | क्या API शुरू करना है |
| plugins | Boolean | true | क्या निम्न-अंतःक्रिया हनीपॉट प्लगइन्स लोड करना है |
| whitelist | String | http://localhost,http://localhost:3000 | API से संपर्क करने के लिए अनुमत होस्टों की अल्पविराम से अलग की गई सूची |
| ui | Boolean | true | क्या UI शुरू करना है |