
نشر آلي للبنية التحتية للفريق الأحمر باستخدام Docker
إصدار مبكر. تابعني على تويتر للبقاء على اطلاع بتطوير Redcloud.
💁☁️🐚🌱
البدء السريع - الهندسة المعمارية - حالات الاستخدام - لقطات الشاشة
Redcloud عبارة عن صندوق أدوات قوي وسهل الاستخدام لنشر بنية تحتية كاملة لـ Red Team باستخدام Docker. استغل سرعة السحابة لأدواتك. يتم النشر في دقائق. استخدمها وأدرها باستخدام واجهة الويب الأنيقة.
مثالية لاختبارات الاختراق، وميادين الرماية، وعمليات Red Team، وصيد الثغرات!
استضف بنيتك التحتية الهجومية دون عناء، وانشر بنيتك التحتية الهجومية الحية والقابلة للتوسع والمرنة في غضون دقائق.
العرض التوضيحي التالي يعرض نشر Redcloud عبر SSH، متبوعًا بـ Metasploit. ثم ننظر إلى Traefik وحجم مباشر مرتبط بـ Metasploit. أخيرًا، نتحقق من أن قاعدة بيانات Metasploit تعمل باستخدام المحطة الطرفية عبر الويب، ونحذف الحاوية، وننهي Redcloud.
الإعداد:```bash
cat ~/.ssh/id_rsa.pub | ssh root@your-deploy-target-ip 'cat >> .ssh/authorized_keys'
eval (docker-machine env default)
python --version
نشر:```bash
> git clone https://github.com/khast3x/redcloud.git
> cd redcloud
> python redcloud.py
يستخدم Redcloud PyYAML لطباعة قائمة القوالب المتاحة. وهي مثبتة افتراضيًا على معظم الأنظمة.
إذا لم تكن مثبتة، قم بتشغيل:```bash
pip install -r requirements.txt
لدى Redcloud 3 طرق نشر مختلفة:
1. **محليًا**
2. **عن بُعد، باستخدام ssh**. يتطلب وجود مفتاحك العام في ملف `authorized_keys` على الخادم الهدف.
3. **عن بُعد، باستخدام docker-machine**. قم بتشغيل سطر `eval (docker-machine env deploy_target)` لتحميل بيئتك مع docker-machine، ثم قم بتشغيل `redcloud.py`. سيكتشف Redcloud تلقائيًا docker-machine، وسيبرز عناصر القائمة ذات الصلة بنشر docker-machine.
___
<h4 align="center">
<b>القوالب</b>
<br>
<br>
</h4>
<p align="center">
<img src="https://assets.kitploit.com/production/public/readmes/345/e38f19fa9cc10216030f7856b99170a4ac7c35399c2dd9daf19156a6e9b75e46.png" width="540" title="قوالب Redcloud">
</p>
___
**باختصار،**
`redcloud.py` ينشر مجموعة [Portainer](https://www.portainer.io/)، **محملة مسبقًا بالعديد من قوالب الأدوات لعملياتك الهجومية**، مدعومة بواسطة Docker. بعد النشر، تحكم في Redcloud من خلال [واجهة الويب](#screenshots). يستخدم [Traefik](https://traefik.io/) كموزع عكسي. نشر عن بُعد سهل على الخادم الهدف باستخدام `ssh` أو `docker-machine` النظاميين.
* :rocket: هل سبق لك أن أردت تشغيل Kali في السحابة ببضع نقرات فقط؟
* :package: هل تريد حاويات نظيفة بين أدواتك وأساليبك ومراحلك؟
* :ambulance: مراقبة صحة عمليات المسح و C2 الخاصة بك؟
* :fire: تجاوز مهام مسؤول النظام لإعداد حملة تصيد والوصول إلى الاختراق بشكل أسرع؟
* :smiling_imp: هل لديك فضول حول كيفية بناء البنية التحتية المثالية للهجوم؟
استخدم واجهة الويب لمراقبة وإدارة **والتفاعل مع كل حاوية**. استخدم محطة الويب السريعة كما تفعل مع محطتك الخاصة. أنشئ وحدات تخزين وشبكات وتوجيه منافذ باستخدام واجهة Portainer البسيطة.
انشر وتعامل مع جميع أدواتك وتقنياتك المفضلة بقوة إنترنت من فئة مراكز البيانات :rocket:
___
*في القسم التالي، سنتعمق أكثر في مفاهيم تصميم Redcloud. يمكنك البدء دون الحاجة إلى الغوص في التفاصيل.*
___
* :book: **جدول المحتويات**
- [مقدمة](#introduction)
- [الميزات](#features)
- [بداية سريعة](#quick-start)
- [التفاصيل](#details)
- [بنية Redcloud](#redcloud-architecture)
- [سير عمل النشر](#deployment-workflow)
- [الشبكات](#networks)
- [وحدات التخزين](#volumes)
- [الوصول إلى الحاويات من المحطة الطرفية](#accessing-containers-from-the-terminal)
- [الوصول إلى الملفات](#accessing-files)
- [شهادات SSL](#ssl-certificates)
- [إيقاف Redcloud](#stopping-redcloud)
- [قوالب تطبيقات Portainer](#portainer-app-templates)
- [الموزع العكسي Traefik](#traefik-reverse-proxy)
- [اعتبارات أمان Redcloud](#redcloud-security-considerations)
- [خيارات النشر المختبرة](#tested-deployment-candidates)
- [استكشاف الأخطاء وإصلاحها](#troubleshooting)
- [حالات الاستخدام](#use-cases)
- [لقطات الشاشة](#screenshots)
- [إرشادات المساهمة](#contribution-guideline)
- [استضافة Redcloud](#hosting-redcloud)
- [الإلهام والتحية](#inspirations--shout-outs)
___
## التفاصيل
### بنية Redcloud
* `redcloud.py`: يبدأ/يوقف واجهة الويب وقوالب التطبيقات، باستخدام Docker و Portainer.
* `portainer`: واجهة ويب Portainer.
* `traefik`: حاوية الموزع العكسي Traefik لواجهة الويب وواجهة API وحاويات الملفات. تحتوي بعض القوالب على مسارات مهيأة مسبقًا للراحة. راجع `templates.yml`.
* `templates`: حاوية `http.server` بلغة python3 التي تغذي قوالب التطبيقات. تقع في شبكة "داخلية".
* `cert_gen`: حاوية [omgwtfssl](https://github.com/paulczar/omgwtfssl) التي تنشئ شهادات SSL باستخدام أفضل الممارسات الشائعة.
* https://your-server-ip/portainer: واجهة ويب Redcloud بعد النشر.
* https://your-server-ip/files: وحدة تخزين `redcloud_files`. يمكنك أيضًا الوصول إلى محتوى حاوية `redcloud_log`، محمي بنفس `.htpasswd` الخاص بـ Traefik. بيانات الاعتماد الافتراضية: `admin:Redcloud`
* https://your-server-ip/api: صفحة مراقبة صحة الموزع العكسي Traefik. تعرض إحصائيات حية عن المسارات، الخوادم الخلفية، رموز الإرجاع. ستعرض أيضًا بيانات الاستدعاء العكسي للبرامج الضارة إذا تم تكوينها عبر Traefik.
### سير عمل النشر
**سير عمل نشر Redcloud كما يلي:**
1. استنساخ/تنزيل مستودع Redcloud.
2. تشغيل `redcloud.py`.
3. اختيار خيار النشر من القائمة (محلي، ssh، docker-machine).
4. يقوم `redcloud.py` تلقائيًا بما يلي:
* التحقق من وجود `docker` و `docker-compose` على الجهاز الهدف.
* تثبيت `docker` و `docker-compose` إذا لم يكونا موجودين.
* نشر مجموعة الويب على الهدف باستخدام `docker-compose`.
5. بعد اكتمال النشر، سيقوم `redcloud.py` بعرض عنوان URL. توجه إلى https://your-deploy-machine-ip/portainer.
6. تعيين اسم المستخدم/كلمة المرور من واجهة الويب.
7. تحديد نقطة النهاية (الوحيدة في القائمة).
8. الوصول إلى القوالب باستخدام عنصر القائمة "App Templates" على اليسار :rocket:
**نشر قوالب التطبيقات كما يلي:**
1. اختيار قالب.
2. إذا كنت ترغب في إضافة خيارات إضافية، حدد "+ Show advanced options".
3. أضف تعيين المنفذ، وخيارات الشبكة، وتعيين وحدة التخزين كما تراه مناسبًا.
4. حدد "Deploy the container".
5. سيطلق Portainer الحاوية. قد يستغرق ذلك بضع دقائق إذا كانت بحاجة إلى جلب الصورة. إذا كان خادمك في مركز بيانات، ستكون هذه الخطوة سريعة جدًا.
6. يجب أن تكون الحاوية قيد التشغيل :rocket:
7. سيعيدك Portainer إلى صفحة "Containers". من هناك، يمكنك:
أ. عرض سجلات الحاوية المباشرة.
ب. فحص تفاصيل الحاوية (`docker inspect`).
ج. عرض إحصائيات الحاوية المباشرة (الذاكرة/وحدة المعالجة المركزية/الشبكة/العمليات).
د. استخدام محطة ويب للتفاعل مع حاويتك.
ه. اعتمادًا على قالب التطبيق، استخدم إما `bash` أو `sh`. اختر وفقًا من القائمة المنسدلة.
<p align="center">
<img src="https://assets.kitploit.com/production/public/readmes/345/cf013b73e9bb7dc6f94dafbd31d9d158f7736fc676f94995c64de133ad9bebbe.png" width="540" title="قائمة Redcloud">
</p>
### الشبكات
يجعل Redcloud من السهل اللعب بالشبكات والحاويات.
يمكنك إنشاء شبكات إضافية بمشغلات مختلفة، وإرفاق حاوياتك كما تراه مناسبًا. يأتي Redcloud مع شبكتين، `redcloud_default` و `redcloud_inside`.
### وحدات التخزين
يمكنك مشاركة البيانات بين الحاويات عن طريق مشاركة وحدات التخزين. يأتي Redcloud مع 3 وحدات تخزين:
* `certs`: حاوية تحتوي على الشهادات التي تم إنشاؤها بواسطة [omgwtfssl](https://github.com/paulczar/omgwtfssl).
* `files`: وحدة تخزين قياسية لمشاركة الملفات. حاليًا، الملفات متاحة عند تصفح https://your-server-ip/files، ويتم تقديمها بواسطة حاوية الموزع العكسي Traefik مباشرة من وحدة تخزين `files`. حالة استخدام نموذجية هي إرفاق وحدة التخزين بحاوية Metasploit، وإنشاء حمولتك مباشرة في وحدة تخزين `files`. يمكنك الآن تقديم حمولتك الجديدة مباشرة عبر Traefik إلى مسار خادم الملفات.
* `logs`: متاحة للسجلات، يتم تقديمها أيضًا بواسطة خادم الملفات. يتطلب الوصول مصادقة أساسية. الافتراضي هو `admin:Redcloud`.
### الوصول إلى الحاويات من المحطة الطرفية
إذا كنت ترغب في البقاء في محطتك الطرفية للعمل مع الحاويات المنشورة، فمن السهل جدًا استخدام Docker. ضع هذه الأمور في الاعتبار:
* تحتوي معظم الحاويات على `bash`، لكن بعضها يستخدم `sh` بدلاً من ذلك
* تبدأ جميع أسماء حاويات قوالب تطبيقات Redcloud بـ `red_`، مثل `red_msf-postgresql`
* باستخدام Docker، يمكنك استخدام إما `docker exec` أو `attach` للتفاعل مع حاوية
* يفضل استخدام `exec` لأنه ينشئ عملية جديدة
* يؤدي `attach` إلى وضعك مباشرة على العملية الجارية، مما قد يؤدي إلى قتل الحاوية قيد التشغيل
* إذا كنت تستخدم Redcloud:
* محليًا أو باستخدام `docker-machine`، ما عليك سوى كتابة هذه الأوامر في شاشتك المحلية
* باستخدام `ssh`، قم أولاً بتسجيل الدخول عبر ssh إلى هدف النشر لتشغيل الأوامر التالية
لبدء التفاعل مع الحاوية المنشورة المطلوبة:```bash
> docker exec -it red_container-name /bin/bash
root@70a819ef0e87:/#
إذا رأيت الرسالة التالية، فهذا يعني أن bash غير مثبت. في هذه الحالة ببساطة استبدل /bin/bash بـ /bin/sh:```bash
docker exec -it red_container-name /bin/bash OCI runtime exec failed: exec failed: container_linux.go:344: starting container process caused "exec: "/bin/bash": stat /bin/bash: no such file or directory": unknown
docker exec -it red_container-name /bin/sh
لاستخدام `docker attach`، قم ببساطة بتشغيل:```bash
> docker attach red_container-name
إذا كنت تستخدم attach، فيجب بدء الحاوية في الوضع التفاعلي، حتى تهبط في قشرة تفاعلية.
وجه متصفحك إلى https://your-redcloud-ip/files.
يُرجى الرجوع إلى وحدة تخزين files لمزيد من المعلومات.
يقوم Redcloud بإنشاء شهادة SSL غير موقعة جديدة عند النشر.
يتم إنشاء الشهادة بواسطة omgwtfssl مع تنفيذ معظم أفضل الممارسات.
بمجرد إنشائها:
سيقوم بتفريغ الشهادات التي أنشأها في /certs افتراضيًا وسيقوم أيضًا بإخراجها إلى stdout بصيغة YAML قياسية، مما يجعل من السهل استهلاكها في Ansible أو أدوات أخرى تستخدم YAML.
يتم تخزين الشهادات في وحدة تخزين Docker مشتركة تسمى certs. يمكن للحاويات الخاصة بك الوصول إلى وحدة التخزين هذه إذا قمت بالإشارة إليها في "+ Advanced Settings" عند نشرها. تقوم حاوية Traefik العكسية الوكيلة بجلب الشهادات مباشرة من ملف التهيئة الخاص بها. إذا كنت ترغب في استبدال هذه الشهادات بشهاداتك الخاصة، فما عليك سوى استبدالها في وحدة التخزين هذه.
كما يعني ذلك أنه يمكنك مشاركة الشهادات المُنشأة في حاويات أخرى، مثل Empire أو Metasploit لإرجاع الاتصالات العكسية، أو لحملة تصيد.
يمكن العثور على معظم تكوينات SSL ذات الصلة في traefik/traefik.toml أو ملف docker-compose.yml.
يمكنك إيقاف Redcloud مباشرة من القائمة.
يجب إيقاف قوالب التطبيقات المنشورة يدويًا قبل إيقاف Redcloud. يمكنك إيقافها باستخدام واجهة الويب Portainer، أو docker rm -f container-name.
إذا كنت ترغب في فرض إيقاف حاويات Portainer التي تشغل Redcloud، فما عليك سوى تشغيل docker-compose kill داخل مجلد redcloud/.
خيار الإيقاف المحلي و docker-machine هو نفسه، وبالتالي يتم دمجهما في نفس الخيار.
يستخدم Redcloud Portainer لتنسيق والتفاعل مع محرك Docker. Portainer بحد ذاته مشروع رائع لإدارة عمليات نشر Docker عن بُعد. يتضمن Portainer أيضًا نظام قوالب مريحًا جدًا، وهو المكون الرئيسي لنشر Redcloud الخاص بنا.
يمكن العثور على القوالب في ./templates/templates.yml. يقوم Portainer بجلب ملف القالب من حاوية مخصصة (templates).
Traefik هو "موجه حافة سحابي أصلي" رائع. لقد حل محل إعداد الوكيل العكسي السابق NGINX.
يتم بناء صورة Traefik أثناء النشر، باستخدام Dockerfile الموجود في traefik/Dockerfile. يضيف ملف .htpasswd يحتوي على بيانات اعتماد admin:Redcloud.
افتراضيًا، يؤدي النشر إلى إنشاء المسارات التالية:
https://your-server-ip/portainerhttps://your-server-ip/fileshttps://your-server-ip/apiتعتمد عمليات المصادقة على بيانات .htaccess.
من واجهة ويب Traefik api، يمكنك عرض المسارات المنشورة، ومراقبة الصحة، بالإضافة إلى المقاييس في الوقت الفعلي. إنها أنيقة جدًا.
يمكنك إضافة تسميات إضافية تخبر Traefik بمكان توجيه حركة المرور، باستخدام إما:
traefik/traefik.tomldocker-compose.ymltemplates.ymlراجع التوثيق الرسمي لمزيد من المعلومات.

ينشر Redcloud بشهادة https ذاتية التوقيع، ويقوم بتمرير جميع التفاعلات مع وحدة التحكم الويب من خلالها.
ومع ذلك، فإن الشبكة الافتراضية تعرض منافذ الحاويات الخاصة بك للعالم الخارجي.
يمكنك:
labels مخصصة لإنشاء مسارات باستخدام Traefik. راجع ملف docker-compose.yml للإلهام.بالإضافة إلى ذلك:
docker و docker-machine صلاحيات الجذر. يمكنك تقليل متطلبات الصلاحيات باتباع التوثيق الرسمي.redcloud.py عنوان IP العام لـ Redcloud باستخدام icanhazip.com.| هدف النشر | الحالة |
|---|---|
| Ubuntu Bionic | ✔️ |
| Ubuntu Xenial | ✔️ |
| Debian Strech | ✔️ |
python --version. يحتاج Redcloud إلى Python 3+.python3 بدلاً من python إذا كنت على نظام أقدم.redcloud.py أن يكون لدى مرشح النشر المفتاح العام في ملف .ssh/authorized_keys، ويتعامل مع المصادقة بدون كلمة مرور باستخدام المفتاح العام للمستخدم. هذا هو التكوين الافتراضي لمعظم سير عمل VPS.eval كما هو موضح أعلاه.docker و docker-machine صلاحيات الجذر. يمكنك تقليل متطلبات الصلاحيات باتباع التوثيق الرسمي.rm -rf /opt/portainer/datapython3-distutils باستخدام على نظام debian/ubuntu./files/./files/.
msfconsole الخاص بـ Metasploit عبر واجهة الويب
أي مساعدة موضع تقدير. هذا مشروع جانبي، لذا ربما ينقصه بعض البراغي والمسامير. قبل كل شيء:
يمكنك استضافة Redcloud على أي خادم Unix يعمل عليه Docker.
Redcloud مخصص للاستخدام في بيئة سحابية، مثل VPS بسيط مع ssh، أو حتى AWS EC2، GCP، إلخ...
تقدم مجموعة كبيرة من مزودي الخدمات السحابية اعتمادات مجانية للتعرف على خدماتهم. تغطي العديد من القوائم والبرامج التعليمية الحصول على اعتمادات استضافة مجانية من البائعين الرئيسيين. هذه القائمة هي مكان جيد للبدء.
بخصوص طريقة النشر، أنا شخصياً أفضل العمل مع docker-machine حيث يصبح من السهل جدًا إنشاء آلات جديدة وإدارتها بمجرد إعداد برنامج تشغيل مزود السحابة. إذا كنت تفضل استخدام ssh، فتأكد من إلقاء نظرة على مشروع evilsocket shellz لإدارة مفاتيحك وملفاتك الشخصية.
Red Team Infrastructure Wiki - bluscreenofjeff
Automated Red Team Infrastructure Guide - rastamouse
Safe Red Team Infrastructure - Tim MalcomVetter
Red Baron - Coalfire Research
Rapid Attack Infrastructure - Obscurity Labs
Decker - Steven Aldinger
hideNsneak - Mike Hodges
أخيرًا، إذا كنت ترغب في رؤية أداتك مدمجة، تواصل معي على تويتر. هذا المشروع يُصان في وقت فراغي. ترقب في فرع dev للميزات القادمة.
تم تطوير Redcloud في الأصل لتسهيل نشر بيئات التدريب لطلاب أمن المعلومات.
إذا كنت ترغب في البقاء على اطلاع دائم بهذا المشروع:
apt-get install python3-distutilsportainer من استخدام موقع وحدة التخزين الافتراضية /opt/. لحل هذه المشكلة، افتح ملف docker-compose.yml، استبدل /opt/portainer/data:/data بمجلد لديه صلاحية الكتابة، على سبيل المثال: /tmp/portainer/:/data وأنشئ المجلد /tmp/portainer قبل تشغيل Redcloud.