
Proof-of-concept Reflective Loader для Cobalt Strike, призванный воссоздать, интегрировать и расширить функции обхода обнаружения Cobalt Strike!

Proof-of-concept User-Defined Reflective Loader (UDRL), который призван воссоздать, интегрировать и усовершенствовать функции обхода обнаружения Cobalt Strike!
| Участник | Значимый вклад | |
|---|---|---|
| Bobby Cooke | @0xBoku | Автор и основной сопровождающий проекта |
| Santiago Pecin | @s4ntiago_p | Значительные улучшения Reflective Loader |
| Chris Spehn | @ConsciousHacker | Скриптинг Aggressor |
| Joshua Magri | @passthehashbrwn | Перехват IAT |
| Dylan Tran | @d_tranman | Спуфинг стека вызовов |
| James Yeung | @5cript1diot | Косвенные системные вызовы |
Встроенный в Cobalt Strike Reflective Loader отличается надёжностью и поддерживает все функции обхода Malleable PE, которые предлагает Cobalt Strike. Главный недостаток использования собственного UDRL в том, что функции обхода Malleable PE могут поддерживаться из коробки, а могут и не поддерживаться.
Цель публичного проекта BokuLoader — помочь red team-ам создавать собственные внутренние UDRL для Cobalt Strike. Проект стремится поддерживать все значимые функции обхода Malleable PE в CS. Некоторые функции обхода используют интеграцию с CS, другие были полностью воссозданы, а некоторые не поддерживаются.
Перед использованием этого проекта в любом виде вы должны должным образом протестировать, что функции обхода работают как задумано. Из-за связки C-кода и Aggressor-скрипта компиляция с разными версиями операционных систем, компиляторов и Java может давать разные результаты.
NtProtectVirtualMemoryobfuscate "true" с собственной реализацией UDRL в Aggressor-скрипте.0x1000 байт будут обнулены.XGetProcAddress для разрешения символов
Kernel32.GetProcAddressxLoadLibrary для определения базового адреса DLL и загрузки DLL
TEB->PEB->PEB_LDR_DATA->InMemoryOrderModuleListKernel32.LoadLibraryAmakeBokuLoader.cnaScript Console убедитесь, что BokuLoader был внедрён в сборку beaconRAW beacon'ов работает из коробки. При использовании Artifact Kit для загрузчика beacon переменная stagesize должна быть больше значения по умолчанию.
| Исходная строка Cobalt Strike | Строка BokuLoader Cobalt Strike |
|---|---|
| ReflectiveLoader | BokuLoader |
| Microsoft Base Cryptographic Provider v1.0 | 12367321236742382543232341241261363163151d |
| (admin) | (tomin) |
| beacon | bacons |
Kernel32.LoadLibraryExAKernel32.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 байт виртуальной beacon DLL равны нулю.| Команда | Параметр(ы) | Поддержка |
|---|
allocator | HeapAlloc, MapViewOfFile, VirtualAlloc | Все поддерживаются через реализацию BokuLoader |
module_x64 | строка (имя DLL) | Поддерживается через реализацию BokuLoader. Действуют те же требования к затиранию DLL, что и в реализации CS |
obfuscate | true/false | HTTP/S beacon'ы поддерживаются через реализацию BokuLoader. SMB/TCP для obfuscate true в настоящее время не поддерживается. Подробности в issue. Буду рад помощи, если сможете исправить :) |
entry_point | RVA в виде десятичного числа | Поддерживается через реализацию BokuLoader |
cleanup | true | Поддерживается через интеграцию с CS |
userwx | true/false | Поддерживается через реализацию BokuLoader |
sleep_mask | (true/false) или (Sleepmask Kit+true) | Поддерживается. При использовании значения по умолчанию "sleepmask true" (без sleepmask kit) устанавливайте "userwx true". При использовании sleepmask kit с поддержкой RX-памяти beacon.text (src47/Ekko) устанавливайте "sleepmask true" && "userwx false". |
magic_mz_x64 | строка из 4 символов | Поддерживается через интеграцию с CS |
magic_pe | строка из 2 символов | Поддерживается через интеграцию с CS |
transform-x64 prepend | экранированная hex-строка | Модификация Aggressor-скрипта BokuLoader.cna |
transform-x64 strrep | строка строка | Модификация Aggressor-скрипта BokuLoader.cna |
stomppe | true/false | Не поддерживается. BokuLoader не копирует заголовки beacon DLL. Первые 0x1000 байт виртуальной beacon DLL — 0x00 |
checksum | число | Экспериментально. Модификация Aggressor-скрипта BokuLoader.cna |
compile_time | строка даты-времени | Экспериментально. Модификация Aggressor-скрипта BokuLoader.cna |
image_size_x64 | десятичное значение | Не поддерживается |
name | строка | Экспериментально. Модификация Aggressor-скрипта BokuLoader.cna |
rich_header | экранированная hex-строка | Экспериментально. Модификация Aggressor-скрипта BokuLoader.cna |
stringw | строка | Не поддерживается |
string | строка | Не поддерживается |