Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
BokuLoader — Proof-of-concept Reflective Loader для Cobalt Strike, призванный воссоздать, интегрировать и расширить функции обхода обнаружения Cobalt Strike! | Kitploit
Инструменты/GitHubGitHub/xforcered/bokuloader
Фреймворки для пентестаОбход IDS/IPSПост-эксплуатацияКомандование и УправлениеRed TeamingРазработка Полезной НагрузкиСостязательная Атака
GitHubxforcered/bokuloader

BokuLoader

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

Репозиторий
3352512 лет назадПроверено Kitploit

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

BokuLoader : Reflective Loader для Cobalt Strike

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

Авторы:

УчастникTwitterЗначимый вклад
Bobby Cooke@0xBokuАвтор и основной сопровождающий проекта
Santiago Pecin@s4ntiago_pЗначительные улучшения Reflective Loader
Chris Spehn@ConsciousHackerСкриптинг Aggressor
Joshua Magri@passthehashbrwnПерехват IAT
Dylan Tran@d_tranmanСпуфинг стека вызовов
James Yeung@5cript1diotКосвенные системные вызовы

Рекомендации по использованию UDRL

Встроенный в Cobalt Strike Reflective Loader отличается надёжностью и поддерживает все функции обхода Malleable PE, которые предлагает Cobalt Strike. Главный недостаток использования собственного UDRL в том, что функции обхода Malleable PE могут поддерживаться из коробки, а могут и не поддерживаться.

Цель публичного проекта BokuLoader — помочь red team-ам создавать собственные внутренние UDRL для Cobalt Strike. Проект стремится поддерживать все значимые функции обхода Malleable PE в CS. Некоторые функции обхода используют интеграцию с CS, другие были полностью воссозданы, а некоторые не поддерживаются.

Перед использованием этого проекта в любом виде вы должны должным образом протестировать, что функции обхода работают как задумано. Из-за связки C-кода и Aggressor-скрипта компиляция с разными версиями операционных систем, компиляторов и Java может давать разные результаты.

Функции обхода

Специфичные функции обхода BokuLoader

  • Спуфинг стека вызовов с помощью синтетических фреймов.
  • Собственный код Reflective Loader на ASM/C
  • Косвенные системные вызовы NT через техники HellsGate и HalosGate
    • Все изменения защиты памяти для всех вариантов выделения памяти выполняются через косвенный системный вызов NtProtectVirtualMemory
  • obfuscate "true" с собственной реализацией UDRL в Aggressor-скрипте.
  • NOHEADERCOPY
    • Загрузчик не копирует заголовки из raw beacon DLL в виртуальную beacon DLL. Первые 0x1000 байт будут обнулены.
  • XGetProcAddress для разрешения символов
    • Не использует Kernel32.GetProcAddress
  • xLoadLibrary для определения базового адреса DLL и загрузки DLL
    • Для загруженных DLL получает базовый адрес DLL из TEB->PEB->PEB_LDR_DATA->InMemoryOrderModuleList
    • Не использует Kernel32.LoadLibraryA
  • Шифр Цезаря для обфускации строк
  • Размер UDRL — 100 КБ
  • Имена импортируемых DLL и строки имён импортируемых функций затираются в виртуальной beacon DLL.

Поддерживаемые функции обхода Malleable PE

Тестирование

  • (22.02.23) Все 4 метода выделения памяти протестированы с threatexpress/malleable-c2/master/jquery-c2.4.7.profile

Истоки проекта

  • Основан на потрясающем проекте Reflective Loader от Стивена Фьюрера (Stephen Fewer):
    • https://github.com/stephenfewer/ReflectiveDLLInjection
  • Изначально создан при прохождении видео Renz0h по Reflective DLL из курса Sektor7 Malware Developer Intermediate (MDI)

Использование

  1. Скомпилируйте объектный файл BokuLoader с помощью make
  2. Запустите ваш Team Server Cobalt Strike
  3. В Cobalt Strike импортируйте Aggressor-скрипт BokuLoader.cna
  4. Сгенерируйте x64 beacon (Attacks -> Packages -> Windows Executable (S))
  5. С помощью Script Console убедитесь, что BokuLoader был внедрён в сборку beacon
  • Вариант x86 не поддерживается. Бинарник x86 — это исходный объектный файл Reflective Loader.
  • Генерация RAW beacon'ов работает из коробки. При использовании Artifact Kit для загрузчика beacon переменная stagesize должна быть больше значения по умолчанию.
    • Дополнительную информацию см. в документации Cobalt Strike по User-Defined Reflective Loader

Рекомендации по обнаружению

Захардкоженные строки

  • BokuLoader заменяет некоторые часто обнаруживаемые строки новыми захардкоженными значениями. Эти строки можно использовать для создания сигнатур BokuLoader:
Исходная строка Cobalt StrikeСтрока BokuLoader Cobalt Strike
ReflectiveLoaderBokuLoader
Microsoft Base Cryptographic Provider v1.012367321236742382543232341241261363163151d
(admin)(tomin)
beaconbacons

Аллокаторы памяти

Затирание модуля DLL (DLL Module Stomping)

  • Для отображения DLL с диска вызывается Kernel32.LoadLibraryExA
  • Третий аргумент Kernel32.LoadLibraryExA — DONT_RESOLVE_DLL_REFERENCES (0x00000001)
    • система не вызывает DllMain
  • Адреса в записи LDR PEB не разрешаются, как подробно описано MDSec здесь
  • Может быть обнаружен сканированием памяти процесса инструментом pe-sieve

Выделение памяти в куче

  • Если sleepmask kit не используется, в куче будет присутствовать исполняемая память RX или RWX.

Аллокатор через отображение (Mapped Allocator)

  • Для выделения памяти под виртуальную beacon DLL вызываются Kernel32.CreateFileMappingA и Kernel32.MapViewOfFile.

Обнаружение Sleepmask

  • Если используется sleepmask kit, существуют методы обнаружения этого независимого выделения памяти, как подробно описано MDSec здесь

Косвенные системные вызовы

  • BokuLoader вызывает следующие системные вызовы NT для подготовки памяти загружаемого исполняемого beacon: NtAllocateVirtualMemory, NtProtectVirtualMemory
  • Они вызываются косвенно из исполняемой памяти BokuLoader.
  • Установка пользовательских хуков в ntdll.dll не позволит обнаружить эти системные вызовы.
  • Возможно зарегистрировать kernel-callback'и с помощью драйвера ядра для мониторинга указанных выше системных вызовов и обнаружения их использования.
  • Сам BokuLoader будет содержать ассемблерные инструкции mov eax, r11d; mov r11, r10; mov r10, rcx; jmp r11 в своей исполняемой памяти.

Заголовок виртуальной beacon DLL

  • Первые 0x1000 байт виртуальной beacon DLL равны нулю.

Доступен исходный код

  • Исходный код BokuLoader предоставлен в репозитории и может использоваться для создания сигнатур памяти.
  • Если у вас есть дополнительные рекомендации по обнаружению, пожалуйста, не стесняйтесь внести свой вклад, отправив pull request.

Благодарности / Ссылки

Reflective Call Stack Spoofing (спуфинг стека вызовов)

  • LoudSunRun: спуфер стека вызовов с синтетическими фреймами и косвенными системными вызовами
  • SilentMoonwalk: PoC-реализация полностью динамического спуфера стека вызовов
  • Vulcan Raven: PoC-реализация спуфинга произвольных стеков вызовов при совершении системных вызовов
  • CallStackMasker: PoC-реализация динамической маскировки стеков вызовов с помощью таймеров
  • ThreadStackSpoofer: PoC спуфинга стека потока
  • Behind the Mask: динамический спуфинг стеков вызовов с помощью таймеров

Reflective Loader

  • https://github.com/stephenfewer/ReflectiveDLLInjection
  • Посмотрите эти видео, если вам интересна тема Reflective DLL:
    • Танцы с таблицей адресов импорта (IAT) — курс Sektor 7 MDI
    • Прогулка по таблице адресов экспорта — курс Sektor 7 MDI
    • Reflective Injection: объяснение — курс Sektor 7 MDI
    • Обзор исходного кода ReflectiveLoader — курс Sektor 7 MDI
  • TitanLdr
  • AceLdr
  • KaynLdr

HalosGate SysCaller

  • Reenz0h из @SEKTOR7net
    • Обязательно посмотрите потрясающие курсы и блоги Reenz0h!
    • Лучшие курсы по разработке вредоносного ПО, которые я проходил.
    • Создатель техники Halos Gate. Его работа изначально послужила мотивацией для этой работы.
    • Блог Sektor7 о HalosGate

HellsGate Syscaller

  • @smelly__vx и @am0nsec ( создатели/публикаторы техники Hells Gate )
    • Без них я бы не смог сделать свою реализацию HellsGate :)
    • Потрясающая работа над этим методом, мне очень понравилось разбираться в нём самостоятельно. Спасибо!
    • https://github.com/am0nsec/HellsGate
    • Ссылка на статью Hell's Gate: https://vxug.fakedoma.in/papers/VXUG/Exclusive/HellsGate.pdf

Скриптинг Aggressor

  • sinusoid @the_bit_diddler : returnIntegerFromArray

User Defined Reflective Loader в Cobalt Strike

  • https://www.cobaltstrike.com/help-user-defined-reflective-loader

Отличный ресурс для изучения Intel ASM

  • Pentester Academy — SLAE64

Обход ETW и AMSI

  • @anthemtotheego inline-ExecuteAssembly
  • @mariuszbit - за отличную идею реализовать обходы в reflective loader!
  • @XPN Сокрытие вашего .NET – ETW
  • ajpc500/BOFs
  • Offensive Security OSEP

Реализация ASM в C-коде с GCC

  • https://outflank.nl/blog/2020/12/26/direct-syscalls-in-beacon-object-files/
  • https://www.cs.uaf.edu/2011/fall/cs301/lecture/10_12_asm_c.html
  • http://gcc.gnu.org/onlinedocs/gcc-4.0.2/gcc/Extended-Asm.html#Extended-Asm

C2-профили Cobalt Strike

  • Эпический проект SourcePoint от Tylous
  • threatexpress/malleable-c2/jquery-c2.4.7.profile
Скачать инструмент
КомандаПараметр(ы)Поддержка
allocatorHeapAlloc, MapViewOfFile, VirtualAllocВсе поддерживаются через реализацию BokuLoader
module_x64строка (имя DLL)Поддерживается через реализацию BokuLoader. Действуют те же требования к затиранию DLL, что и в реализации CS
obfuscatetrue/falseHTTP/S beacon'ы поддерживаются через реализацию BokuLoader. SMB/TCP для obfuscate true в настоящее время не поддерживается. Подробности в issue. Буду рад помощи, если сможете исправить :)
entry_pointRVA в виде десятичного числаПоддерживается через реализацию BokuLoader
cleanuptrueПоддерживается через интеграцию с CS
userwxtrue/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
stomppetrue/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строкаНе поддерживается