
개념 증명용 Cobalt Strike 반사 로더로, Cobalt Strike의 회피 기능을 재현·통합·향상시키는 것을 목표로 합니다!

Cobalt Strike의 회피 기능을 재현, 통합 및 향상시키는 것을 목표로 하는 개념 증명 사용자 정의 반사 로더 (UDRL)입니다!
| 기여자 | 트위터 | 주요 기여 |
|---|---|---|
| Bobby Cooke | @0xBoku | 프로젝트 원작자 및 유지보수자 |
| Santiago Pecin | @s4ntiago_p | 반사 로더 주요 개선 |
| Chris Spehn | @ConsciousHacker | 어그레서 스크립팅 |
| Joshua Magri | @passthehashbrwn | IAT 후킹 |
| Dylan Tran | @d_tranman | 반사 호출 스택 스푸핑 |
| James Yeung | @5cript1diot | 간접 시스템 호출 |
내장된 Cobalt Strike 반사 로더는 강력하며, 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을 사용하여 비콘 빌드에 BokuLoader가 구현되었는지 확인RAW 비콘 생성은 기본적으로 작동합니다. 비콘 로더에 Artifact Kit를 사용할 때 stagesize 변수는 기본값보다 커야 합니다.
| 원본 Cobalt Strike 문자열 | BokuLoader Cobalt Strike 문자열 |
|---|---|
| ReflectiveLoader | BokuLoader |
| Microsoft Base Cryptographic Provider v1.0 | 12367321236742382543232341241261363163151d |
| (admin) | (tomin) |
| beacon | bacons |
Kernel32.LoadLibraryExA가 호출되어 디스크에서 DLL을 매핑합니다.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 | string (DLL Name) | BokuLoader 구현을 통해 지원됩니다. CS 구현과 동일한 DLL 스톰프 요구 사항이 적용됩니다. |
obfuscate | true/false | HTTP/S 비콘은 BokuLoader 구현을 통해 지원됩니다. SMB/TCP는 현재 obfuscate true에 대해 지원되지 않습니다. 자세한 내용은 이슈를 참조하세요. 수정할 수 있다면 도움을 받습니다 :) |
entry_point | RVA as decimal number | 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는 비콘 DLL 헤더를 복사하지 않습니다. 가상 비콘 DLL의 처음 0x1000 바이트는 0x00입니다. |
checksum | 숫자 | 실험적. BokuLoader.cna Aggressor 스크립트 수정 |
compile_time | 날짜-시간 문자열 | 실험적. BokuLoader.cna Aggressor 스크립트 수정 |
image_size_x64 | 10진 값 | 지원되지 않음 |
name | 문자열 | 실험적. BokuLoader.cna Aggressor 스크립트 수정 |
rich_header | 이스케이프된 16진 문자열 | 실험적. BokuLoader.cna Aggressor 스크립트 수정 |
stringw | 문자열 | 지원되지 않음 |
string | 문자열 | 지원되지 않음 |