
Ivy — это фреймворк для создания полезных нагрузок, предназначенный для выполнения произвольного исходного кода VBA (макросов) непосредственно в памяти. Загрузчик Ivy делает это, используя программный доступ в объектной среде VBA для загрузки, расшифровки и выполнения шеллкода.
Чтобы просмотреть последнюю версию Ivy или сообщить о проблеме, обратитесь по адресу https://github.com/Tylous/Ivy.
Если вы хотите узнать больше о методах, используемых в этом фреймворке, а также о защитных мерах, которые помогут от него защититься, ознакомьтесь со Статьей.
Ivy — это фреймворк для создания полезных нагрузок, предназначенный для выполнения произвольного VBA (макрос) кода в памяти. Загрузчик Ivy делает это, злоупотребляя программным доступом к объектной среде VBA для загрузки, расшифровки и выполнения шелл-кода. Эта техника максимально приближена к истинному «безфайловому» подходу, поскольку большинство современных безфайловых атак требуют сброса каких-либо файлов на диск, тем самым обходя стандартные сигнатурные правила обнаружения VBA-кода. Обычные VBA-нагрузки имеют следующие характеристики:
Выполняясь исключительно в памяти, эти поведенческие характеристики усложняют обнаружение системами EDR.
Загрузчики Ivy шифруются с помощью RC4 (AES-шифрование создает много избыточного кода и требует много времени для расшифровки в VBA), а затем разбиваются на отдельные строки, предотвращая распознавание этих строк как зашифрованных в песочницах. Это также не позволяет механизмам декодирования воспринимать эти нагрузки как что-либо, кроме мусорных символов.
Загрузчик Ivy сначала выполняет запрос к реестру для включения «Доверять доступу к объектной модели проектов VBA». Это значение ключа реестра хранится в пользовательском режиме, что позволяет пользователю изменять его без необходимости повышенных привилегий. Значение реестра устанавливается с нуля на единицу; если ключ реестра не существует, Ivy создаст его со значением «1». При включенном значении разрешается программный доступ к объектной среде VBA из другого процесса.
После этого загрузчик запускает скрытый процесс Excel и загружает зашифрованные строки в функцию VBA. Это делается с помощью ActiveX для имитации GUI-действий, выполняющих ту же задачу. Это помогает обойти множество традиционных средств контроля выполнения. В результате функция расшифровки и шелл-код перемещаются из одного буфера памяти в другой, никогда не касаясь диска. Наконец, загрузчик использует команды GUI и выполняет функцию run, которая имитирует нажатие кнопки запуска макроса на GUI-панели VBA, запуская функцию расшифровки, а затем фактическое выполнение шелл-кода.
ВАЖНО
На целевом компьютере должен быть установлен и активирован Microsoft Office, так как Ivy использует программный доступ к среде VBA Microsoft Office.
Этот режим позволяет Ivy использовать низкоуровневые системные вызовы для создания собственной версии функции Windows WriteProcessMemory, косвенно обращаясь к прямому адресу памяти и значениям регистров. Ivy может перезаписывать участки памяти, которые не доступны для записи, без вызова каких-либо API-функций изменения памяти. Это возможно благодаря особенности WriteProcessMemory, которая временно изменяет права на область памяти на запись (если у вас есть достаточные привилегии, что у нас есть, так как мы владеем процессом). Она записывает значение и восстанавливает исходные права без вызова функции VirtualProtect, а вместо этого автоматически вызывает соответствующий системный вызов (NtProtectVirtualMemory).
Ivy не использует собственную версию NtWriteVirtualMemory, потому что в этом случае процесс временного изменения прав памяти не происходит, защита конкретного адреса памяти не изменяется, и выполнение завершается ошибкой. Это «функция», выпущенная Microsoft для повышения стабильности отладчиков. Поскольку отладчики хотят изменять память на лету, они могут просто изменить участок без необходимости выполнять несколько задач. (См. devblogs.microsoft.com для получения информации)
Давайте рассмотрим последовательность событий, которые увидит EDR:
После удаления всех хуков EDR загрузчик выполняет обычное действие для установки удаленной сессии.
Ivy решает эту задачу, снимая хуки с общих системных DLL, которые перехватывает EDR:
При использовании unhook с типом нагрузки Inject загрузчик Ivy сначала снимет хуки с процесса Office, удаляя EDR из него, а затем удалит хуки в инжектированном процессе. Это гарантирует, что оба процесса свободны от хуков, предотвращая отправку телеметрии от родительского и дочернего процессов в EDR.
Используя ту же технику для снятия хуков, Ivy может патчить функции ETW, предотвращая генерацию любых событий процессом. ETW использует встроенные системные вызовы для генерации этой телеметрии. Поскольку ETW является встроенной функцией Windows, продуктам безопасности не нужно «хукать» системные вызовы ETW для получения информации. В результате, чтобы предотвратить ETW, Ivy патчит многочисленные системные вызовы ETW, сбрасывая регистры и возвращая поток выполнения к следующей инструкции. Пэтчинг ETW теперь включен по умолчанию во всех загрузчиках; если вы не хотите патчить ETW, используйте опцию командной строки -noetw, чтобы отключить это в вашем загрузчике.
Ivy разработан на Go.
Первый шаг, как всегда, — клонировать репозиторий. Перед компиляцией Ivy вам нужно установить зависимости. Для их установки выполните следующие команды:
go get github.com/fatih/color
go get github.com/KyleBanks/XOREncryption/Go
Затем соберите его:
go build Ivy.go
$ ./Ivy -h
___ ___ ___ ___ ___
|\ \ |\ \ / /||\ \ / /|
\ \ \\ \ \ / / /\ \ \/ / /
\ \ \\ \ \/ / / \ \ / /
\ \ \\ \ / / \/ / /
\ \__\\ \__/ / __/ / /
\|__| \|__|/ |\___/ /
\|___|/
(@Tyl0us)
The suffering. The pain. Can't you hear them?
Their cries for mercy?