
Доказательство концепции Cobalt Strike Reflective Loader, целью которого является воссоздание, интеграция и улучшение функций обхода защиты Cobalt Strike!

Загрузчик пользовательской рефлективной загрузки (UDRL) proof-of-concept, который воспроизводит, интегрирует и улучшает функции обхода Cobalt Strike!
| Автор | Значимые вклады | |
|---|---|---|
| Bobby Cooke | @0xBoku | Первоначальный автор и мейнтейнер проекта |
| Santiago Pecin | @s4ntiago_p | Значительные улучшения рефлективного загрузчика |
| Chris Spehn | @ConsciousHacker | Скриптинг Aggressor |
| Joshua Magri | @passthehashbrwn | Хукинг IAT |
| Dylan Tran | @d_tranman | Спуфинг стека вызовов рефлективного загрузчика |
| James Yeung | @5cript1diot | Косвенные системные вызовы |
Встроенный рефлективный загрузчик Cobalt Strike является надежным и поддерживает все функции обхода PE, предоставляемые Cobalt Strike. Основной недостаток использования пользовательского UDRL заключается в том, что функции обхода PE могут поддерживаться или не поддерживаться "из коробки".
Цель публичного проекта BokuLoader — помочь red-командам создать собственный внутренний UDRL для Cobalt Strike. Проект направлен на поддержку всех значимых функций обхода PE Cobalt Strike. Некоторые функции обхода используют интеграцию CS, другие были полностью переработаны, а некоторые не поддерживаются.
Перед использованием этого проекта в любой форме вы должны проверить, что функции обхода работают как задумано. Между кодом на C и скриптом Aggressor компиляция с разными версиями операционных систем, компиляторов и Java может давать разные результаты.
NtProtectVirtualMemory.obfuscate "true" с пользовательской реализацией скрипта Aggressor для UDRL.0x1000 байт будут нулевыми.XGetProcAddress для разрешения символов
Kernel32.GetProcAddress.xLoadLibrary для разрешения базового адреса DLL и загрузки DLL
TEB->PEB->PEB_LDR_DATA->InMemoryOrderModuleList.Kernel32.LoadLibraryA.| Команда | Опция(и) | Поддерживается |
|---|---|---|
allocator | HeapAlloc, MapViewOfFile, VirtualAlloc | Все поддерживаются через реализацию BokuLoader |
module_x64 | строка (имя DLL) | Поддерживается через реализацию BokuLoader. Те же требования к затиранию DLL, что и в реализации CS |
obfuscate | true/false | Beacon'ы HTTP/S поддерживаются через реализацию 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 | экранированная шестнадцатеричная строка | Модификация скрипта 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 | экранированная шестнадцатеричная строка | Экспериментально. Модификация скрипта Aggressor BokuLoader.cna |
stringw | строка | Не поддерживается |
string | строка | Не поддерживается |
makeBokuLoader.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.LoadLibraryExA для отображения DLL с диска.Kernel32.LoadLibraryExA — DONT_RESOLVE_DLL_REFERENCES (0x00000001).
RX или RWX будет существовать в куче, если не используется sleepmask kit.Kernel32.CreateFileMappingA и Kernel32.MapViewOfFile для выделения памяти для виртуального beacon DLL.