
emp3r0r v4.7.1
شبكة Gossip Mesh ذاتية الإصلاح لـ C2 مع اكتشاف الأقران المساعد، وتنفيذ BOF عبر الأنظمة الأساسية، وعوامل قابلة للبرمجة النصية.
emp3r0r
شبكة C2 من نوع Gossip Mesh ذاتية الإصلاح مع اكتشاف الأقران بمساعدة، وتنفيذ BOF عبر المنصات، وعوامل قابلة للبرمجة النصية.
ما هو emp3r0r؟
emp3r0r هو إطار عمل متقدم لمرحلة ما بعد الاستغلال ونظام قيادة وتحكم (C2) قائم على مبدأ الثقة المعدومة، مصمم لبيئات الأهداف التي تعمل بنظامي Linux وWindows. بُني من الصفر ليعمل في بيئات أمنية عالية المستوى، يجمع emp3r0r بين شبكات Gossip Mesh المستقلة، والتنفيذ بدون ملفات في الذاكرة فقط، وتحميل BOF عبر المنصات، ونقل الملفات بين العوامل، وعوامل قابلة للبرمجة النصية في الذاكرة لتقديم تمويه فائق، وتحكم تشغيلي، وأمان تشغيلي (OPSEC) متفوق.
أبرز المزايا والميزات الفريدة
🐍 عوامل قابلة للبرمجة النصية (محرك Starlark مدمج ووكيل Win32 API)
تتميز عوامل emp3r0r بمحرك برمجة نصية Starlark مدمج (لهجة من Python مطبقة بالكامل بلغة Go). تُنفَّذ البرامج النصية بدون ملفات في الذاكرة دون الحاجة إلى تثبيت Python أو Bash أو PowerShell على الهدف.
- صفر اعتماديات على المضيف: تنفيذ برامج نصية مستقلة دون تشغيل مترجمات أوامر (
/bin/sh,powershell.exe) أو الاعتماد على بيئات تشغيل مثبتة. - واجهات برمجة تطبيقات Go مدمجة للعامل: دوال مكشوفة لعمليات نظام الملفات (
read_file,write_file,list_dir,mkdir,remove,exists)، وشبكات HTTP (http_get,http_post)، وتنفيذ الأوامر (exec_cmd)، والتجزئة (crypto_hash). - وكيل Win32 API ديناميكي: على أهداف Windows، يمكن لبرامج Starlark النصية تحميل مكتبات DLL الخاصة بالنظام ديناميكيًا وتنفيذ واجهات برمجة تطبيقات Win32 الأصلية (
win_call,win_alloc,win_free,win_read_mem) مباشرة من كود البرنامج النصي دون تجميع كود C أصلي. - تكامل معياري: تُعرَّف برامج Starlark النصية باستخدام ملفات JSON (
config.json) لتحليل معلمات سطر الأوامر وتوزيعها بسلاسة.
لماذا هذا مهم: تتطلب وحدات البرمجة النصية التقليدية في C2 مترجمات على المضيف أو عمليات تشغيل، مما يترك آثارًا ثقيلة على القرص أو في تنفيذ سطر الأوامر. تنفذ عوامل emp3r0r القابلة للبرمجة النصية منطقًا معقدًا بالكامل في الذاكرة مع تفاعل أصلي مع النظام.
🔐 تثبيت الهوية المشفرة بنمط TOFU
يفرض emp3r0r مبدأ الثقة عند أول استخدام (TOFU) مع تثبيت صارم لمعرف UUID والمفتاح العام عند تسجيل العامل.
- ربط غير قابل للتغيير: بمجرد التسجيل، يُثبَّت معرف UUID الخاص بالعامل على مفتاحه العام المشفر. يُرفض إعادة التسجيل ببيانات اعتماد معدلة كمحاولة انتحال هوية.
- إعادة تعيين خاضعة للتحكم: يتطلب إلغاء التسجيل إذنًا صريحًا من المشغل عبر
forget_agent.
لماذا هذا مهم: يمنع اختطاف الجلسات، واستنساخ العوامل، وانجراف الهوية الصامت عبر البيئات التشغيلية.
🔒 سرية تامة للتوجيه المستقبلي (PFS)
تفرض جميع اتصالات C2 والأقران تبادل مفاتيح ECDH مع مفاتيح جلسة مشتقة عبر HKDF.
- مفاتيح مؤقتة: تولّد كل جلسة مفاتيح تشفير فريدة.
- أمان مفصول: اختراق المفاتيح طويلة الأمد أو عامل فردي لا يمكن أن يعرض الاتصالات السابقة أو المتوازية للخطر.
لماذا هذا مهم: يمنع فك تشفير التقاطات الشبكة المعترضة بأثر رجعي.
🕸️ شبكة Gossip Mesh مستقلة من نظير إلى نظير (P2P)
تكتشف العوامل في قطاعات الشبكة المقيدة بالخروج أو المعزولة الأقران بشكل مستقل وتنقل حركة المرور عبر شبكة Mesh قائمة على Gossip (Memberlist).
- نقل أقران قابل للتوصيل: دعم mTLS 1.3 للتمويه (باستخدام شهادات مؤقتة) وKCP (UDP موثوق).
- تشفير من طرف إلى طرف: جميع قفزات Mesh بين العوامل مغلفة بتشفير AES-GCM.
- بصمة شبكة منخفضة: الترحيل المباشر بين العوامل يلغي ضوضاء البث غير الضرورية ونقاط اختناق اتصال C2 المركزية.
لماذا هذا مهم: يحدث التنقل عبر الشبكات المقسمة بشكل مستقل دون الحاجة إلى تدخل مستمر من المشغل أو إعدادات وكيل ثابتة.
📂 نظام ملفات P2P
مشاركة ملفات مباشرة بين العوامل عبر نقل ترحيل P2P (mTLS/KCP) لتسريع تسليم الملفات عبر الشبكات الداخلية.
- أنفاق P2P مشفرة: نقل الملفات عبر الأقران باستخدام mTLS/KCP لتجاوز قيود الخروج وتقليل اختناقات عرض النطاق الترددي لـ C2 المركزي.
- تخزين مؤقت ذكي للملفات في الذاكرة: تُخزَّن الملفات في ذاكرة العامل ككتل مشفرة؛ ويمكن تقديمها بسلاسة لعوامل أخرى لتنزيلها عند الطلب. عند طلب ملف، تبحث العوامل في نظام ملفات الذاكرة المحلي (memfs)، ثم الأقران الآخرين، وأخيرًا C2.
- تراجع تلقائي لترحيل C2: إذا كان العامل الهدف يفتقر إلى الملف المطلوب، فإنه يجلبها ويبثها ديناميكيًا من خادم C2 عند الطلب.
لماذا هذا مهم: مشاركة الملفات المباشرة بين العوامل تزيد سرعات النقل إلى أقصى حد، وتتجاوز نقاط اختناق الشبكة، وتقلل من رؤية حركة مرور C2 المباشرة.
📡 مستمعات متعددة البروتوكولات وStagers قابلة للتوصيل
Stagers مرنة لتنزيل المرحلة 0 ومستمعات بروتوكولات للوصول الأولي وتسليم الحمولة.
- مستمعات متعددة البروتوكولات: مستمعات HTTP وTCP وUDP مدمجة ومستقلة مع تأطير موثوق لتأكيد التسلسل وملفات تعريف HTTP مخصصة. يدعم المستمع المستقل TLS اختياريًا (
-tls)، مع توليد شهادة موقعة ذاتيًا تلقائيًا عند عدم توفير زوج شهادة/مفتاح. - Stager تنزيل C مستقل: مبني باستدعاءات نظام Linux مباشرة ومستقلة عن libc للتوافق عبر التوزيعات دون أخطاء رموز.
- تسليم المرحلة المشفرة: يشفر المستمع الحمولة المرحلية باستخدام RC4 بمفتاح مشتق من سر يقدمه المشغل؛ يفك stager تشفيرها في الذاكرة قبل التحميل الانعكاسي.
- نقل Stager قابل للتوصيل: نظام نقل معياري يسمح للمشغلين بإضافة وحدات نقل C مخصصة (
transport_<name>.c). تشمل الخيارات المدمجة المستقلة HTTP وTCP وUDP عبر استدعاءات نظام خام، بالإضافة إلى نقل المكتبات الديناميكية (مثلlibcurlعبر حل الرموز في وقت التشغيل).- الفوائد: يتجاوز تصفية الخروج واكتشاف الشبكة بدمج حركة المرور بسلاسة في قنوات النظام المشروعة (مثل
libcurlالأصلي أو تطبيقات بروتوكول مخصصة) دون تغيير منطق stager الأساسي.
- الفوائد: يتجاوز تصفية الخروج واكتشاف الشبكة بدمج حركة المرور بسلاسة في قنوات النظام المشروعة (مثل
- حزم ذاتية فك الضغط قابلة للتوصيل: واجهة وحدات قابلة للتوسيع للـ stub والحزم (
pack_<name>.py+unpack_stub_<name>.c). يمكن للمشغلين كتابة خوارزميات حزم/إخفاء مخصصة (تشمل الخيارات المدمجة تشفير تدفق RC4 وضغط LZSS الجشع) مع تصحيح تلقائي لرأس وقت التشغيل.- الفوائد: يكسر قواعد YARA الثابتة لـ AV/EDR ومطابقة التوقيعات بتشفير/ضغط حمولة المرحلة 0 بمفاتيح أو خوارزميات فريدة، مع فك ضغط ذاتي في ذاكرة قراءة/كتابة تُقلب بعد ذلك إلى قراءة/تنفيذ قبل التنفيذ.
- حجم حمولة صغير: بينما يبلغ حجم ملفات عامل emp3r0r الثنائية حوالي 20 ميجابايت بدون ضغط، فإن هذا الـ stager يبلغ 2 كيلوبايت؛ والحمولة الشبيهة بـ sRDI التي يجلبها من مستمع emp3r0r تبلغ حوالي 8 ميجابايت (مضغوطة من ملف العامل الثنائي بتنسيق كائن مشترك ELF).
- تنسيقات مرنة: يُترجم إلى كود شل خام مستقل عن الموضع (
.bin)، وكود شل معبأ ذاتي فك الضغط (packed)، وملفات ELF قابلة للتنفيذ مستقلة، أو كائنات مشتركة (.so). - تقوية في الذاكرة: يخصص ذاكرة المرحلة للقراءة/الكتابة، ويزيل إخفاء الحمولات، ثم يفرض القراءة/التنفيذ قبل التحميل الانعكاسي. لا يقوم مفكك الضغط الذاتي أبدًا بتعيين RWX (قراءة/كتابة ← فك ضغط ← قراءة/تنفيذ)، وتعيش حالة stager القابلة للتغيير في صفحة قراءة/كتابة مخصصة بدلاً من كود قابل للكتابة.
🧩 دعم BOF وPICO أصلي عبر المنصات (COFF وELF وPICO)
تنفيذ وحدات ثنائية في الذاكرة على أهداف Windows وLinux:
- محملات Windows COFF: تشغيل ملفات BOF الثنائية لنظام Windows بدون ملفات مع تعبئة معلمات بنوع محدد (
int,short,cstr,wstr,binary). - محملات كائنات Linux ELF: تحميل ملفات كائنات ELF القابلة لإعادة التوطين (
.o) مباشرة في ذاكرة العامل على Linux. - وحدات Crystal-Kit PICO وانتحال مكدس الاستدعاءات: محملات وحزم PICO (كائنات كود مستقلة عن الموضع) مدمجة مع أداة SilentMoonwalk لتعطيل مكدس الاستدعاءات للتهرب المتقدم.
- مجموعات BOF المرفقة: دعم مدمج لمجموعات وحدات Kerbeus-BOF وRemote-OPs والوعي الظرفي (SA).
لماذا هذا مهم: يلغي عبء إنشاء العمليات ويتجاوز مراقبة سطر الأوامر ومكدس الاستدعاءات بتشغيل وحدات C المترجمة داخل العملية مع انتحال مكدس الاستدعاءات.
🔑 معالجة رموز Windows عند الطلب
يمكن للعوامل على Windows سرقة وتخزين مؤقت وانتحال رموز الوصول من العمليات الجارية — بالكامل داخل العملية باستخدام استدعاءات نظام NT غير مباشرة.
- سرقة وتخزين مؤقت:
steal_token --pid <PID>يكرر رمز عملية عبرNtOpenProcess+NtDuplicateTokenويخزنه في الذاكرة حسب SID. يمكن اختياريًا ربط الانتحال بـ--token <sid>للتصعيد من هوية مسروقة إلى أخرى. - تعداد: يعرض
list_tokensجميع الرموز المخزنة مؤقتًا بأسماءDOMAIN\User (SID). - انتحال شامل: الرجوع إلى رمز مخزن مؤقتًا حسب SID (
--token <sid>) في أي وحدة — Go أو Starlark أو COFF/BOF. يُطبق انتحال على مستوى الخيط (NtSetInformationThread) حول العمليات الحساسة. - Starlark مدرك للرموز: الدوال المدمجة (
read_file,write_file,exec_cmd, وكيل Win32 API، إلخ) تنتحل تلقائيًا لكل استدعاء نظام عند تعيين رمز، ويمكن لـexec_cmdتشغيل عمليات فرعية تحت الهوية المسروقة عبرCreateProcessWithTokenW.
لماذا هذا مهم: لا أدوات خارجية، ولا آثار على القرص، ولا ضوضاء إنشاء عمليات. تحدث سرقة الرموز وإعادة استخدامها بالكامل داخل العملية باستخدام استدعاءات نظام غير مباشرة، مع إمكانية استهلاك الرموز المسروقة فورًا بواسطة كل وحدة مدمجة.
🎭 نقل C2 قابل للتوصيل، وتهرب uTLS من JA3، وبروتوكول CBOR
- أوضاع C2 قابلة للتوصيل: إشارات مرنة (
http_poll) مع ملفات تعريف HTTP قابلة للتشكيل وبث (h2conn) عبر HTTP/2. - عشوائية توقيع JA3: يستخدم uTLS لعشوائية بصمات TLS Client Hello، مما يهزم التوقيعات الشبكية الثابتة.
- بروتوكول سلكي ثنائي: يستخدم CBOR (تمثيل الكائنات الثنائية المختصر) لجميع بيانات التحكم والتسلسل السلكي، مما يقلل أحجام حمولات الشبكة بنسبة 30-40% مقارنة بـ JSON.
💾 تخزين مشفر موجه للذاكرة أولاً
- نظام ملفات افتراضي مشفر في الذاكرة: تستخدم جميع عمليات ملفات العامل نظام ملفات افتراضي AES-GCM في الذاكرة. تُفرَّغ البيانات الكبيرة تلقائيًا إلى تخزين قرص مشفر دون رؤوس أو امتدادات قابلة للتحديد.
- تخزين مؤقت ذكي مدعوم بـ P2P: يخزن كل عامل ممكّن بـ P2P الملفات التي يجلبها من C2 في memfs؛ ثم يجعلها متاحة للأقران الآخرين، مما يقلل بصمة حركة مرور C2 مع الاستفادة من الاتصالات السريعة بين العوامل.
بدء الاستخدام السريع
1. تثبيت خادم C2
يتطلب بناء emp3r0r تثبيت Docker أو Podman على المضيف. لا حاجة إلى سلسلة أدوات Go محلية.
# استنساخ المستودع
git clone --depth=1 https://github.com/jm33-m0/emp3r0r.git && cd emp3r0r
# البناء داخل حاوية والتثبيت محليًا
./install.py
يقوم المثبت بترجمة الملفات الثنائية الأساسية داخل حاوية مؤقتة، ويولّد emp3r0r-operator-kit.tar.zst المجمّع مسبقًا، ويكوّن صلاحيات Linux المطلوبة (setcap)، ويجهز أدلة تشغيل النظام.
الخيارات:
./install.py [--debug] [--disable-garble] [--prefix /usr/local] [--skip-build] \
[--lightweight] [--targets linux/amd64,windows/amd64]
استخدم --lightweight لبناء أهداف linux/amd64 وwindows/amd64 exe/dll فقط (الأسرع، للنشر على x86-64 فقط)، أو --targets OS/ARCH,... لتجميع مجموعة محددة من أنواع الحمولات.
شغّل خادم C2:
emp3r0r server --c2-hosts 1.2.3.4 --http-port 12345 --operator-port 13377
ملاحظة: إذا تم التثبيت بمستخدم root بدلاً من sudo القياسي، فقد لا يتمكن المستخدم الحالي من تشغيل emp3r0r لأن الصلاحيات لا يمكن ضبطها بشكل صحيح بواسطة المثبت. ينطبق الأمر نفسه على أجهزة المشغل أيضًا.
2. إعداد جهاز المشغل
انقل ملف emp3r0r-operator-kit.tar.zst المُولّد إلى جهاز المشغل وشغّل المثبت:
tar --zstd -xpf emp3r0r-operator-kit.tar.zst
cd ./emp3r0r-operator-kit && ./install.py
اربط عميل المشغل بخادم C2 باستخدام بيانات اعتماد نفق WireGuard التي طبعها الخادم:
emp3r0r client --c2-port 13377 \
--server-wg-key '<SERVER_WG_KEY>' \
--server-wg-ip '<SERVER_WG_IP>' \
--operator-wg-ip '<OPERATOR_WG_IP>' \
--operator-wg-key '<OPERATOR_WG_KEY>' \
--c2-host 1.2.3.4
3. توليد حمولات العامل
استخدم أمر generate داخل واجهة مشغل emp3r0r لإنشاء الحمولات.
عامل C2 مباشر:
generate --type linux_executable --arch amd64 --cc your.domain.com
عامل بوابة Mesh:
generate --type linux_executable --arch amd64 --cc your.domain.com \
--p2p --direct-c2 --p2p-transport mtls
قرين وسيط في Mesh:
generate --type linux_executable --arch amd64 --cc your.domain.com \
--p2p --p2p-transport mtls --peers 1.2.3.4
التوثيق والموارد
- 📝 سياسة الأمان: SECURITY.md
- 📜 سجل التغييرات: CHANGELOG.md
- 🛠️ دليل تطوير الوحدات: core/modules/module_development_guide.md
دعم التطوير
إذا أثبت emp3r0r قيمته في أبحاثك واختباراتك الأمنية، ففكر في دعم تطويره المستمر عبر GitHub Sponsors.