
Cobalt Strike의 회피 기능을 재현·통합·강화하는 것을 목표로 하는 개념 증명용 Cobalt Strike Reflective Loader입니다!

Cobalt Strike의 회피 기능을 재현, 통합, 개선하는 것을 목표로 하는 개념 증명(PoC)용 User-Defined Reflective Loader (UDRL)입니다!
| 기여자 | 주요 기여 | |
|---|---|---|
| Bobby Cooke | @0xBoku | 프로젝트 원저자 및 관리자 |
| Santiago Pecin | @s4ntiago_p | Reflective Loader 주요 개선 |
| Chris Spehn | @ConsciousHacker | Aggressor 스크립팅 |
| Joshua Magri | @passthehashbrwn | IAT 후킹 |
| Dylan Tran | @d_tranman | Reflective 콜 스택 스푸핑 |
| James Yeung | @5cript1diot | 간접 시스템 콜 |
내장된 Cobalt Strike reflective loader는 강력하며 Cobalt Strike가 제공하는 모든 Malleable PE 회피 기능을 처리합니다. 사용자 정의 UDRL을 사용할 때의 가장 큰 단점은 Malleable PE 회피 기능이 기본적으로 지원될 수도 있고 지원되지 않을 수도 있다는 것입니다.
공개 BokuLoader 프로젝트의 목표는 레드 팀이 자체적인 Cobalt Strike UDRL을 제작하는 것을 돕는 것입니다. 이 프로젝트는 가치 있는 모든 CS Malleable PE 회피 기능을 지원하는 것을 목표로 합니다. 일부 회피 기능은 CS 통합을 활용하고, 다른 기능은 완전히 재구현되었으며, 일부는 지원되지 않습니다.
이 프로젝트를 어떤 형태로든 사용하기 전에 회피 기능이 의도한 대로 작동하는지 제대로 테스트해야 합니다. C 코드와 Aggressor 스크립트 사이에서 운영 체제, 컴파일러, Java의 서로 다른 버전으로 컴파일하면 다른 결과가 나올 수 있습니다.
NtProtectVirtualMemory에 대한 간접 시스템 콜을 통해 수행됩니다.obfuscate "true"0x1000 바이트는 null이 됩니다.XGetProcAddress
Kernel32.GetProcAddress를 사용하지 않습니다.xLoadLibrary
TEB->PEB->PEB_LDR_DATA->InMemoryOrderModuleList에서 DLL 기본 주소를 가져옵니다.Kernel32.LoadLibraryA를 사용하지 않습니다.make로 BokuLoader 오브젝트 파일을 컴파일합니다.BokuLoader.cna Aggressor 스크립트를 가져옵니다.Script Console을 사용하여 beacon 빌드에 BokuLoader가 구현되었는지 확인합니다.RAW beacon 생성은 기본적으로 바로 작동합니다. beacon 로더에 Artifact Kit을 사용하는 경우 stagesize 변수가 기본값보다 커야 합니다.| 원본 Cobalt Strike 문자열 | BokuLoader Cobalt Strike 문자열 |
|---|---|
| ReflectiveLoader | BokuLoader |
| Microsoft Base Cryptographic Provider v1.0 | 12367321236742382543232341241261363163151d |
| (admin) | (tomin) |
| beacon | bacons |
Kernel32.LoadLibraryExA가 호출됩니다.Kernel32.LoadLibraryExA의 세 번째 인자는 DONT_RESOLVE_DLL_REFERENCES (0x00000001)입니다.
RX 또는 RWX 메모리가 존재하게 됩니다.Kernel32.CreateFileMappingA 및 Kernel32.MapViewOfFile이 호출됩니다.NtAllocateVirtualMemory, NtProtectVirtualMemoryntdll.dll에 사용자 영역 후크를 설정해도 이러한 시스템 콜을 탐지할 수 없습니다.mov eax, r11d; mov r11, r10; mov r10, rcx; jmp r11 어셈블리 명령을 포함합니다.0x1000 바이트는 0입니다.| 명령 | 옵션 | 지원 여부 |
|---|
allocator | HeapAlloc, MapViewOfFile, VirtualAlloc | 모두 BokuLoader 구현을 통해 지원됨 |
module_x64 | 문자열(DLL 이름) | BokuLoader 구현을 통해 지원됨. CS 구현과 동일한 DLL 스톰핑 요구 사항이 적용됩니다 |
obfuscate | true/false | HTTP/S 비콘은 BokuLoader 구현을 통해 지원됨. SMB/TCP는 현재 obfuscate true를 지원하지 않음. 자세한 내용은 이슈 참조. 수정할 수 있다면 도움을 환영합니다 :) |
entry_point | 십진수 RVA | BokuLoader 구현을 통해 지원됨 |
cleanup | true | CS 통합을 통해 지원됨 |
userwx | true/false | BokuLoader 구현을 통해 지원됨 |
sleep_mask | (true/false) 또는 (Sleepmask Kit+true) | 지원됨. 기본 "sleepmask true"(sleepmask kit 없이)를 사용하는 경우 "userwx true"로 설정하십시오. RX beacon.text 메모리(src47/Ekko)를 지원하는 sleepmask kit을 사용하는 경우 "sleepmask true" && "userwx false"로 설정하십시오. |
magic_mz_x64 | 4자 문자열 | CS 통합을 통해 지원됨 |
magic_pe | 2자 문자열 | CS 통합을 통해 지원됨 |
transform-x64 prepend | 이스케이프된 16진수 문자열 | BokuLoader.cna Aggressor 스크립트 수정 |
transform-x64 strrep | 문자열 문자열 | BokuLoader.cna Aggressor 스크립트 수정 |
stomppe | true/false | 지원되지 않음. BokuLoader는 beacon DLL 헤더를 복사하지 않습니다. 가상 beacon DLL의 처음 0x1000 바이트는 0x00입니다. |
checksum | 숫자 | 실험적. BokuLoader.cna Aggressor 스크립트 수정 |
compile_time | 날짜-시간 문자열 | 실험적. BokuLoader.cna Aggressor 스크립트 수정 |
image_size_x64 | 십진수 값 | 지원되지 않음 |
name | 문자열 | 실험적. BokuLoader.cna Aggressor 스크립트 수정 |
rich_header | 이스케이프된 16진수 문자열 | 실험적. BokuLoader.cna Aggressor 스크립트 수정 |
stringw | 문자열 | 지원되지 않음 |
string | 문자열 | 지원되지 않음 |