
RedPeanut — это небольшой RAT, разработанный на .Net Core 2, а его агент — на .Net 3.5 / 4.0.
__________________________________________________________________________
ooooooo________________oo_ooooooo___________________________________oo____
oo____oo___ooooo___oooooo_oo____oo__ooooo___ooooo__oo_ooo__oo____o__oo____
oo____oo__oo____o_oo___oo_oo____oo_oo____o_oo___oo_ooo___o_oo____o_oooo___
ooooooo___ooooooo_oo___oo_oooooo___ooooooo_oo___oo_oo____o_oo____o__oo____
oo____oo__oo______oo___oo_oo_______oo______oo___oo_oo____o_ooo___o__oo__o_
oo_____oo__ooooo___oooooo_oo________ooooo___oooo_o_oo____o_oo_ooo____ooo__
__________________________________________________________________________
________________________________________________RedPeanut_v0.3.0___@b4rtik
__________________________________________________________________________
В настоящее время тестируется.
Известные проблемы модулей:
process -> spawnasagent
process -> spawnasshellcode
RedPeanut — это небольшой RAT, разработанный на .Net Core 2, а его агент — на .Net 3.5 / 4.0. Выполнение кода RedPeanut основано на шеллкоде, сгенерированном с помощью DonutCS. Таким образом, это гибрид: хотя он разработан на .Net, он не полагается исключительно на Assembly.Load. Это увеличивает поверхность обнаружения, но позволяет нам практиковаться и экспериментировать с различными техниками обхода, связанными с окружением dotnet, управлением процессами и инъекциями. Это поведение можно изменить во время выполнения с помощью команд "managed" и "unmanaged". Если вас интересует консистентный .Net C2 Framework, пригодный для использования в реальных операциях, рекомендую Covenant.
RedPeanut вооружен:
Агент RedPeanut может быть скомпилирован под .Net 3.5 и 4.0 и обладает возможностями pivoting через NamedPipe.
При выполнении в неуправляемом режиме агент выполняет свои критические задачи в отдельном процессе, чтобы предотвратить потерю всего агента из-за реакции AV на обнаружение или ошибки во время выполнения.
Поток выполнения следующий:
В настоящее время агент поддерживает только https-канал.
Протокол регистрации агента очень прост:
Альтернативно можно активировать функцию скрытого канала (пока что это PoC). Идея заключается в имитации веб-трафика реального пользователя. Обычно веб-страница состоит из HTML-страницы и всех объектов, необходимых для её отображения, таких как css, изображения и т.д. При запросе новой задачи ответ от сервера будет не напрямую зашифрованной задачей, а HTML-страницей, из которой нужно извлечь ссылку на изображение, содержащее зашифрованную задачу. HTTP-запрос к изображению будет содержать заголовок Referer.
Доставка контента организована по 4 каналам:
RedPeanut позволяет настраивать сетевой след как на стороне сервера, так и на стороне клиента. Настраиваемые свойства:
Domain Fronting
Для поддержки domain fronting необходимо указать заголовок "Host" в клиентской части, как для POST, так и для GET (пример в профиле по умолчанию 2).
Модуль PowerShellExecuter позволяет выполнять однострочные команды или файлы в runspace с AMSI bypass, отключением логирования и уже загруженным PowerView.
Начиная с версии 0.3.0, RedPeanutAgent поддерживает команду blockdlls. При включении этой опции дочерние процессы, создаваемые для выполнения задач в неуправляемом режиме, создаются с атрибутом PROCESS_CREATION_MITIGATION_POLICY_BLOCK_NON_MICROSOFT_BINARIES_ALWAYS_ON. Этот атрибут предотвращает загрузку в процесс dll, не подписанных Microsoft, что может защитить наши задачи от техник хукинга со стороны AV и EDR.
RedPeanutAgent использует динамическую загрузку DLL для избежания использования подозрительных импортов DLL. Благодарности за динамическую загрузку DLL принадлежат @TheRealWover, @cobbr_io и @FuzzySec за их работу в SharpSploit.
Некоторые поставщики AV и EDR используют технику хукинга для отслеживания активности. Чтобы избежать использования хукированных системных вызовов, RedPeanutAgent использует прямые системные вызовы, автоматически внедряя необходимый код. Благодарности за прямые системные вызовы принадлежат @Cneelis
Для запуска RedPeanut необходимо установить dotnet. Установка dotnet на Kali:
wget -qO- https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > microsoft.asc.gpg
mv microsoft.asc.gpg /etc/apt/trusted.gpg.d/
wget -q https://packages.microsoft.com/config/debian/9/prod.list
mv prod.list /etc/apt/sources.list.d/microsoft-prod.list
chown root:root /etc/apt/trusted.gpg.d/microsoft.asc.gpg
chown root:root /etc/apt/sources.list.d/microsoft-prod.list
apt-get install apt-transport-https
apt-get update
apt-get install dotnet-sdk-2.1
git clone --recursive https://github.com/b4rtik/RedPeanut.git
Для работы скрытого канала необходимо установить библиотеку libgdiplus:
Для пользователей Linux:
apt-get install -y libgdiplus
Для OSx
brew install mono-libgdiplus
Генерация ключа подписи сборки
C:\Program Files (x86)\Microsoft Visual Studio\2017\Community>sn.exe -k 4096 key.snk
Затем скопируйте key.snk в Workspace/KeyFile
root@kali:~# cd RedPanut
root@kali:~/RedPeanut# dotnet run
Using launch settings from /root/Projects/RedPeanut/Properties/launchSettings.json...
Enter password to encrypt serverkey:
__________________________________________________________________________
ooooooo________________oo_ooooooo___________________________________oo____
oo____oo___ooooo___oooooo_oo____oo__ooooo___ooooo__oo_ooo__oo____o__oo____
oo____oo__oo____o_oo___oo_oo____oo_oo____o_oo___oo_ooo___o_oo____o_oooo___
ooooooo___ooooooo_oo___oo_oooooo___ooooooo_oo___oo_oo____o_oo____o__oo____
oo____oo__oo______oo___oo_oo_______oo______oo___oo_oo____o_ooo___o__oo__o_
oo_____oo__ooooo___oooooo_oo________ooooo___oooo_o_oo____o_oo_ooo____ooo__
__________________________________________________________________________
________________________________________________RedPeanut_v0.3.0___@b4rtik
__________________________________________________________________________
[*] No profile available, creating new one...
[RP] >
DonutCS — это инструмент генерации шеллкода, который создает позиционно-независимые полезные нагрузки из .NET сборок. Этот шеллкод может быть использован для внедрения сборки в произвольные процессы Windows. Для заданной .NET сборки, параметров и точки входа (например, Program.Main) он создает позиционно-независимый шеллкод, загружающий её из памяти. .NET сборка может быть либо загружена по URL (staged), либо встроена непосредственно в шеллкод (stageless).
Техника CLR persistence была впервые представлена в этом посте от @Am0nsec. Техника заключается в выполнении хукинга доменного менеджера приложений. Как описано в посте, необходима сборка для выполнения хукинга, которая доступна в GAC. Сборка для использования из GAC должна иметь строгое имя и быть подписана ключом. Модуль CLR persistence требует ключ для подписи сборок, который можно сгенерировать с помощью инструмента sn.exe следующим образом:
**********************************************************************
** Visual Studio 2017 Developer Command Prompt v15.9.3
** Copyright (c) 2017 Microsoft Corporation
**********************************************************************
C:\Program Files (x86)\Microsoft Visual Studio\2017\Community>sn.exe -k 4096 key.snk
Скопируйте файл key.snk в папку Workspace/KeyFile. Этот файл будет использоваться для подписи сборки для персистентности.
Некоторые известные инструменты в RedPeanut, такие как инструменты GhostPack, полностью обёрнуты и выполняются на стороне клиента. Для обновления инструментов, например SeatBelt, без обновления всего репозитория необходимо: склонировать репозиторий Seatbelt, переименовать метод "Main" в "Execute", добавить модификатор public и перекомпилировать как dll. DLL необходимо сжать и закодировать в Base64 с помощью ps-скрипта RastaMouse Get-CompressedShellcode.ps1