
إطار عمل C2 بدون ملفات بلغة تجميع x64 مع التنقل عبر بروتوكولات ICMP/DNS ثنائية القنوات، تنفيذ استدعاءات النظام المباشرة، وحقن العمليات القائم على ptrace لتنفيذ الأوامر واستخراج البيانات بشكل خفي.
________ ___ ___ ________ ________ _________ ________ ________
|\ ____\|\ \|\ \|\ __ \|\ ____\|\___ ___\ |\ ____\|\_____ \
\ \ \___| \ \ \\\ \ \ \|\ \ \ \___|\|___ \ \_| \ \ \___|\|____|\ \
\ \ \ __ \ \ __ \ \ \\\ \ \_____ \ \ \ \ \ \ \ ____\_\ \
\ \ \|\ \ \ \ \ \ \ \\\ \|____|\ \ \ \ \ \ \ \___|\____ \ \
\ \_______\ \__\ \__\ \_______\____\_\ \ \ \__\ \ \______\\_________\
\|_______|\|__|\|__|\|_______|\_________\ \|__| \|______\|_________|
\|_________|
إطار تحكم غير ملفي، مكتوب بلغة التجميع (Assembly) النقية لمعمارية x64، يستخدم بنية قناتين (ICMP / DNS). لا يعتمد على مكتبة libc. لا يترك أثرًا على القرص. غير مرئي لأدوات الكشف المعيارية EDR.
⭐️ إذا وجدت هذا البحث مفيدًا، فيرجى التفكير في منحه نجمة لدعم التطوير المستمر
🚨 البحث الفني الكامل وشيفرة المصدر: هذا المستودع هو ملخص. للحصول على التحليل المعماري الكامل، وتفاصيل تجاوز حماية W^X للذاكرة، وتنفيذ VTable، قم بزيارة صفحة المشروع الرسمية: التحليل الفني لـ ICMP-Ghost
Ghost-C2 هو إطار تحكم وقيادة (C2) مكتوب بالكامل بلغة التجميع الخالصة لـ x64 Linux بدون أي تبعيات من libc. كل عملية تتم عبر استدعاءات نظام مباشرة (syscalls). لا توجد جداول استيراد، ولا آثار لرابط ديناميكي، ولا أي كتابة على القرص.
بُني في الأصل كقناة ICMP متخفية، يقدم الإصدار 3.6.2 بنية "تنقل بروتوكول ثنائي القناة". يمكن للمشغل التبديل بسلاسة بين قناة اتصال الأداة الخفية بين ICMP Raw Sockets الصامت و DNS UDP Tunneling المراوغ أثناء التشغيل. تعيش الأداة حصريًا في الذاكرة RAM، محقونة في عملية نظام قيد التشغيل عبر أداة تحميل مخصصة قائمة على ptrace.
تم بناء هذا المشروع لاستكشاف مدى التخفي في مساحة المستخدم ومزامنة حالة الشبكة دون لمس النواة.
┌─────────────────────────────────────────────────────────────┐
│ جهاز المشغل │
│ │
│ ┌──────────────┐ │
│ │ client.asm │ ← واجهة طرفية: عنوان IP/نطاق + أمر │
│ │ (وحدة تحكم │ تشفير الحمولة باستخدام XOR دوراني │
│ │ المشغل) │ مزامنة الحالة: وضع ICMP / وضع DNS │
│ └──────┬───────┘ │
│ │ │
└──────────┼──────────────────────────────────────────────────┘
│ القناة 1: ICMP أولي (بدون حالة، بدون منفذ)
│ القناة 2: DNS UDP المنفذ 53 (غير متماثل)
┌──────────┼──────────────────────────────────────────────────┐
│ │ الجهاز الهدف │
│ ▼ │
│ ┌──────────────┐ ┌─────────────────────────────────┐ │
│ │ loader.asm │────▶│ sniff.asm (PIC) │ │
│ │ (محمل │ │ يعيش في الذاكرة فقط │ │
│ │ شبح) │ │ داخل عملية مضيفة │ │
│ └──────────────┘ └────────────────┬────────────────┘ │
│ │ │
│ 1. يمسح /proc للعثور على PID الهدف │ يستمع ICMP/DNS │
│ 2. ptrace ATTACH │ يتحقق من المصادقة│
│ 3. force remote mmap (RW) │ يفك تشفير الأمر │
│ 4. حقن shellcode PIC │ fork+execve │
│ 5. mprotect → RX │ memfd_create │
│ 6. إعادة توجيه RIP ← shellcode │ ضغط (DPCM-RLE) │
│ 7. ptrace DETACH → خروج │ تشفير وتجزئة │
│ │ إرسال الرد │
└─────────────────────────────────────────┼───────────────────┘
│ حركة مرور مشفرة
▼
[ client.asm ]
استقبال وتحقق
فك تشفير الحمولة
فك ضغط (هجين)
إعادة تجميع وطباعة
client.asm — وحدة تحكم المشغلالطرفية الخاصة بالمهاجم. تتعامل مع واجهة المستخدم، وإدارة الذاكرة الديناميكية، ومزامنة حالة الهدف. يمكنها إرسال الحزم إما كطلبات ICMP Echo أو استعلامات DNS TXT. تستمع للردود المجزأة، وتمنع تجاوز سعة المخزن المؤقت، وتعيد بناء المخرجات. تتضمن وحدة "إعادة الاتصال بالهدف النشط" لإنقاذ الجلسات المفقودة.
sniff.asm — أداة PIC الخفية (العميل)الأداة التي تعمل على الهدف. تُجمَع كملف ثنائي خام (مستقل عن الموقع، بدون رؤوس ELF) بحيث يمكن حقنها في عناوين ذاكرة عشوائية. تقوم بتحديث VTable الداخلي ديناميكيًا للتبديل بين استماع ICMP وربط UDP DNS بناءً على أوامر التوجيه من المشغل.
Phantom_Loader/loader.asm — محرك الحقنآلية التسليم. يفحص /proc، ويجد عملية مستهدفة باسم comm، ويحقن shellcode PIC فيها باستخدام آلة حالة ptrace متعددة المراحل. يخرج بشكل نظيف بعد الحقن — لا يترك أي أثر.
يتيح Ghost-C2 v3.6.2 للمشغل تبديل بروتوكول الشبكة دون فقدان الوكيل. بإرسال أوامر توجيه محددة، يتم الكتابة فوق جداول VTables في كل من السيد والوكيل ديناميكيًا:
!D (التحويل إلى DNS): يغلق كلا العقدتين مآخذ ICMP ويبدآن اتصال UDP بالمنفذ 53. مثالي لتجاوز التصفية الصارمة للطبقة الثالثة عن طريق الاندماج في حركة DNS الخاصة بالشركات.!I (التحويل إلى ICMP): يغلق الوكيل مآخذ UDP، ويقتل ارتباطات المنافذ، ويعود إلى الاستماع الصامت عبر Raw Socket. مثالي لوضع التخفي "الشبح".يستخدم محرك نقل بيانات Ghost-C2 طبقة ضغط وتشفير هجينة محسّنة بشدة في لغة التجميع x86-64.
كل حزمة ICMP صادرة منظمة بحيث لا يمكن تمييزها عن أمر ping القياسي في Linux:
struct timeval.iputils في Linux (0x10 إلى 0x1F) يتجاوز جدران الحماية الإرشادية الأساسية.يتم تشفير كلا الاتجاهين بمفتاح QWORD يتغير تدريجيًا. هذا يحافظ على إنتروبيا شانون منخفضة (على عكس AES الذي يسجل حوالي 8.0 ويؤدي إلى شذوذ في DPI). ينتج XOR الدوراني إنتروبيا تشبه البيانات المزعجة الطبيعية. لا توجد ثوابت تشفير، ولا صناديق S، ولا شيء لتطابقه YARA.
تتجاهل الأداة الخفية جميع حزم ICMP حيث ID + SEQ ≠ 45,000. ترد الأداة بحزم حيث ID + SEQ = 55,000. هذا يمنع الارتباك مع صدى نظام التشغيل ويصفي الماسحات الضوئية للإنترنت أو أجهزة الاستشعار (honeypots).