Cobalt Strike BOF - AMSI-Bypass injizieren
Cobalt Strike Beacon Object File (BOF), das AMSI in einem entfernten Prozess mittels Code-Injektion umgeht.
Ausführen des inject-amsiBypass BOF von CobaltStrike

Was macht das?
1. Verwende das angegebene PID-Argument, um ein Handle auf den entfernten Prozess zu erhalten
hProc = KERNEL32$OpenProcess(PROCESS_VM_OPERATION | PROCESS_VM_WRITE, FALSE, (DWORD)pid);
2. Lade AMSI.DLL in den Beacon-Speicher und ermittle die Adresse von AMSI.AmsiOpenSession
hProc = KERNEL32$OpenProcess(PROCESS_VM_OPERATION | PROCESS_VM_WRITE, FALSE, (DWORD)pid);
- Sowohl der Beacon als auch der Zielprozess haben dieselbe Adresse für das Symbol.
- Falls AMSI.DLL im entfernten Prozess nicht existiert, kann die Ausführung den Zielprozess zum Absturz bringen.
3. Schreibe den AMSI-Bypass in den Speicher des entfernten Prozesses
unsigned char amsibypass[] = { 0x48, 0x31, 0xC0 }; // xor rax, rax
BOOL success = KERNEL32$WriteProcessMemory(hProc, amsiOpenSessAddr, (PVOID)amsibypass, sizeof(amsibypass), &bytesWritten);
Methode = AMSI.AmsiOpenSession
- Verwendet die AMSI-Bypass-Technik, die im Kurs 'Evasion Techniques and Breaching Defenses' von Offensive Security (PEN-300/OSEP) gelehrt wird.
Proof-of-Concept-Demo-Screenshots
Vorher - Powershell.exe AMSI.AmsiOpenSession

Nachher - Powershell.exe AMSI.AmsiOpenSession

Kompilieren mit x64 MinGW:
x86_64-w64-mingw32-gcc -c inject-amsiBypass.c -o inject-amsiBypass.o
Ausführen über die Cobalt Strike Beacon-Konsole
beacon> inject-amsiBypass <PID>
- Stelle sicher, dass das Skript inject-amsiBypass.cna in den Cobalt Strike Script Manager geladen wird.
To-do-Liste
- Prüfen, ob AMSI.DLL im entfernten Prozess existiert, bevor die Injektion erfolgt
- Weitere AMSI-Bypässe zum Injizieren hinzufügen
- Unterstützung für x86
Danksagungen / Referenzen
Raphael Mudge - Beacon Object Files - Luser Demo
Cobalt Strike - Beacon Object Files
Referenzen zu BOF-Code
ajpc500/BOFs
trustedsec/CS-Situational-Awareness-BOF
Sektor7 Malware Dev Essentials Kurs
Offensive Security OSEP