
هونيبوت IoT والتكنولوجيا التشغيلية
| 📢 انتباه!!! |
|---|
| تم نقل هذا المستودع إلى مشروع Honeynet :) |
RIoTPot هو وعاء تفاعل هجين، يركز بشكل أساسي على محاكاة بروتوكولات إنترنت الأشياء (IoT) والبروتوكولات التشغيلية (OT)، على الرغم من أنه قادر أيضًا على محاكاة خدمات أخرى. في جوهره، يعمل RIoTPot كخدمة وكيل (Proxy) للأوعية الأخرى المضمنة في النظام. لذلك، يمكنك تشغيل أي وعاء وخدمات أخرى جنبًا إلى جنب مع RIoTPot. بالإضافة إلى ذلك، يوجد تطبيق ويب للواجهة الرسومية يمكنك استخدامه لإدارة التوجيه الخاص بك.
يأتي الوعاء مزودًا بالعديد من الخدمات منخفضة التفاعل الجاهزة للاستخدام. نظرًا لأن هذه الخدمات مكتوبة كـ ملحقات (plugins)، فهي مدعومة فقط على نظام لينكس؛ ومع ذلك، يمكنك بدء تشغيل RIoTPot بدونها. يحتوي الجدول التالي على قائمة الخدمات المضمنة افتراضيًا في RIoTPot ومنفذها الداخلي ومنفذ الوكيل.
| الخدمة | المنفذ الداخلي | منفذ الوكيل |
|---|---|---|
| Echo | 20007 | 7 |
| SSH | 20022 | 22 |
| Telnet | 20023 | 23 |
| HTTP | 28080 | 80 |
| Modbus | 20502 | 502 |
| MQTT | 21883 | 1883 |
| CoAP | 25683 | 5683 |
جدول المحتويات
تعتمد بنية RIoTPot على اتصالات وكيلة (Proxy) للخدمات الداخلية والخدمات المحيطة (أو الخارجية) (مثل الأوعية، الخدمات الكاملة، الحاويات، المضيفين البعيدين، إلخ). لهذا، يدير الوعاء عددًا من الوكلاء (proxies) المعرفة من قبل المستخدم والتي تقوم بتوصيل الاتصالات بين الخدمات و RIoTPot 1. بهذه الطريقة، يمكن لـ RIoTPot أن يقرر كيفية وأين يقوم بتوجيه الهجمات الواردة. يتم تنفيذ المنطق المستخدم لتحديد كيفية معالجة الهجوم الوارد في شكل وسائط (middlewares) 2. لإدارة الخدمات والوسائط والوكلاء، يأتي RIoTPot مزودًا بواجهة برمجة تطبيقات REST (API) 3 وتطبيق ويب للواجهة الرسومية (UI) 4 بشكل افتراضي. يمكن الوصول إلى الواجهة الرسومية عبر المتصفح على العنوان localhost:2022 ويمكنك التفاعل مع نقاط نهاية واجهة API على العنوان localhost:2022/api/swagger الذي يعرض واجهة Swagger.
الشكل 1 يوضح بنية RIoTPot، بما في ذلك التطبيقين الرئيسيين اللذين يشكلان RIoTPot (RIoTPot نفسه، وواجهة RIoTPot الرسومية) ومكوناتهما، وقسم يضم الخدمات الخارجية (أو المجاورة).
RIoTPot مكتوب بلغة Golang5. كل مثيل من RIoTPot يعرض الوكلاء المسجلين (بناءً على منفذهم) عند الطلب. لخدمة وكيل، يجب أن يكون لديه خدمة مربوطة وأن يكون منفذ الوكيل متاحًا (حاليًا، لا يقبل RIoTPot تشغيل خدمات متعددة على نفس المنفذ). عند ربط وكيل وخدمته، سيتمكن المهاجمون من إرسال رسائل إلى RIoTPot على ذلك المنفذ، وسيتم تمرير الرسائل إلى الخدمة المربوطة ثم العودة إلى المهاجم6.
لسهولة الوصول، يمكن إدارة مثيلات متعددة من RIoTPot من تطبيق الويب الخاص بالواجهة الرسومية.
بالإضافة إلى إدارة الوكلاء المسجلين في كل مثيل، تسمح لك الواجهة الرسومية بإنشاء واستخدام وتحرير الملفات التعريفية (profiles).
يحتوي كل ملف تعريفي على عدد من الوكلاء المسماة حسب البروتوكولات أو الخدمات الأخرى مما يجعل مثيل RIoTPot يشبه أجهزة الحياة الواقعية (مثل مساعد منزلي).
باختصار، تعمل الملفات التعريفية على تسريع عملية إعداد وتجهيز مثيل RIoTPot بإعدادات محددة.
تمت كتابة الواجهة الرسومية باستخدام مكتبة React الأمامية (نستخدم TypeScript لهذا المشروع) ومكتبة إدارة الحالة Recoil.
نظرًا لأن RIoTPot صغير نسبيًا، في الوقت الحالي، لا يستخدم قاعدة بيانات.
تشغيل RIoTPot بسيط نسبيًا. بشكل عام، لديك ثلاثة خيارات. الأول هو تنزيل إصدار من RIoTPot؛ يمكنك إما اختيار تنزيل أحدث إصدار، أو إصدار سابق. الخيار الثاني هو بناء المشروع بنفسك. الخيار الأخير هو استخدام الكود المصدري لإنشاء حاوية Docker مع RIoTPot وبعض التطبيقات الإضافية لتعزيز الوعاء.
معلومة: هذا الدليل مخصص للمستخدمين ذوي الاحتياجات الخاصة، الذين يريدون تجربة جاهزة وبسيطة.
يأتي كل إصدار في مجلد باسم riotpot مع ملف تنفيذي ثنائي (أيضًا) باسم riotpot ومجلد plugins مملوء بالعديد من الخدمات (أو الأوعية منخفضة التفاعل).
من المهم الحفاظ على بنية المجلد الداخلية لكي يعمل RIoTPot كما هو مقصود.
📁 riotpot
┕ riotpot
┕ 📁 plugins
riotpot.riotpot. سيؤدي ذلك إلى بدء تشغيل RIoTPot مع تمكين واجهة API، وجميع الملحقات جاهزة للاستخدام، وخادم الواجهة الرسومية.
localhost:2022معلومة: هذا الدليل مخصص للمستخدمين المتقدمين والمريحين في بيئات التطوير.
المتطلبات
- Golang - مطلوب لبناء المشروع
- Node - مطلوب لبناء الواجهة الرسومية
اختياري:
- Git - يستخدم لتنزيل الكود المصدري
- Make - لتشغيل الأوامر المُعدة مسبقًا
لا يمكن الوصول إلى الخدمات الداخلية والمحيطة عبر الإنترنت. الخدمات الداخلية مدمجة ولا يمكن الوصول إليها إلا بواسطة RIoTPot. يتم تحميل هذه الخدمات عند بدء التشغيل ولا يمكن حذفها، ولكن يمكن إيقافها. يجب أن تكون الخدمات المحيطة في نفس الشبكة مثل RIoTPot. يجب أن تقوم الخدمات الخارجية بإدراج RIoTPot في القائمة البيضاء فقط. ↩
الوسائط قيد التطوير حاليًا. ↩
يجب عدم تعريض واجهة API الخاصة بـ RIoTPot للإنترنت. بغض النظر، تقبل واجهة API حاليًا الاتصالات فقط من المضيف المحلي (localhost). قد يتغير هذا في المستقبل، مع توفير قائمة بيضاء بالمضيفين ومصادقة قياسية. ↩
على الرغم من إمكانية استخدام الواجهة الرسومية كمكون منفصل، إلا أنها مدمجة مع ملف RIoTPot الثنائي. ↩
بينما التطبيق الأساسي قابل للتشغيل البيني، يمكن استخدام الخدمات الداخلية (الملحقات) فقط في بيئات لينكس وFreeBSD وmacOS. نخطط لتجاوز هذا القيد عن طريق استبدال الملحقات بخدمات مصغرة تتواصل عبر gRPC. ↩
لأسباب أخلاقية وأمنية، لا يسمح RIoTPot بالطلبات غير المرغوب فيها إلى الخارج، أي الصدف العكسية (reversed shells) وما شابه ذلك غير مسموح بها. ↩