
Excel 4.0 (XLM) Генератор макросов для внедрения DLL и EXE в память.
| \ / / | | | _ __ | || _ \ ___ _ __ _ | | | | \ / | | | | | | ' | | | | |/ _ | ' | | | | | | | / \ || || |__| | | | || || | () | | | | || | | |_____//__|||| ||_|____/ _/|| ||_,|__| by @JoeLeonJr (@FortyNorthSec)
EXCELntDonut — это генератор макросов XLM (Excel 4.0). Начните с исходного кода на C# (EXE) и получите макрос XLM (Excel 4.0), который выполнит ваш код в памяти. Макросы XLM (Excel 4.0) могут быть сохранены в файлах .XLS.
chmod +x install.sh
./install.sh
Что устанавливается?
Если вы хотите запускать EXCELntDonut просто как скрипт Python, вам нужно будет настроить виртуальное окружение с двумя пакетами: "pandas" и "donut-shellcode". Кроме того, вам нужно будет установить mono-complete с помощью apt-get и вызывать скрипт drive.py с помощью python3. Мы рекомендуем просто использовать скрипт ./install.sh, но решать вам.
Usage:
$ EXCELntDonut -f exe_source.cs -r System.Windows.Forms.dll --sandbox --obfuscate
Flags:
(required)
-f путь к файлу, содержащему ваш исходный код на C# (только exe)
-r Ссылки, необходимые для компиляции вашего кода на C# (те же, что используются при компиляции с mcs на Linux)
(пример: -r 'System.Management')
(optional)
-o имя выходного файла
--sandbox
Выполнить базовые проверки песочницы. Этот список будет обновляться по мере обнаружения новых подходов.
--obfuscate
Выполнить базовую обфускацию макроса.
Вы предоставляете файл C#, содержащий вашу полезную нагрузку (например, EXE с методом main, который выполняет полезную нагрузку Cobalt Strike). Этот файл C# компилируется с помощью MCS в две сборки .NET: x86 и x64. После компиляции замечательные инструменты Donut (для x86) и CLRvoyance (для x64) преобразуют каждую сборку в позиционно-независимый шеллкод. Затем все нулевые байты удаляются, так как макросы XLM (Excel 4.0) плохо работают с нулевыми байтами, и полезная нагрузка разбивается на строки длиной не более 255 символов (для x86) или 10 символов (для x64).
После подготовки шеллкода он объединяется с базовыми функциями внедрения в процесс (VirtualAlloc, WriteProcessMemory и CreateThread), а также функцией проверки архитектуры для определения того, какую полезную нагрузку (x86 или x64) следует запустить на целевой системе. Если вы выберете выполнение проверок песочницы или базовой обфускации, эти функции обновят ваш макрос. Наконец, результат помещается в CSV-файл (сохраняется как .txt).
После того как вы получили выходной файл от EXCELntDonut, откройте его в текстовом редакторе и скопируйте всё содержимое (Ctrl-A, Ctrl-C). Откройте Excel на виртуальной машине Windows, щелкните правой кнопкой мыши на "Лист 1" и выберите "Вставить". Выберите "Макрос MS Excel 4.0". Перейдите в ячейку A1 и вставьте вывод EXCELntDonut. Все данные, вероятно, будут вставлены в один столбец. Данные разделены точкой с запятой ";". Перейдите на вкладку "Данные" и нажмите "Текст по столбцам". Выберите "С разделителями" и на следующем экране выберите "Точка с запятой", затем нажмите "Готово". Макрос распределится по соответствующим столбцам и строкам.
(Примечание — если вы выбрали флаг "--obfuscate", вам придется довольно много прокручивать по горизонтали, чтобы найти свой фактический код, так как часть логики обфускации перемещает макрос в случайный раздел рабочего листа).
На этом этапе мы рекомендуем две вещи:
Сохраните файл (.xls) и попробуйте его открыть. Он должен автоматически выполнить вашу полезную нагрузку.
Эти проверки основаны на том, что реальные злоумышленники используют в своих вредоносных программах.
=FORMULA(D3&D23&D54&D23&D44,E45)
Функция FORMULA позволяет нам поместить формулу, которая может быть выполнена позже, в другую ячейку. Таким образом, в данном случае мы помещаем инструкции внедрения в процесс, а затем используем функцию FORMULA, чтобы поместить фактическую функцию в другую ячейку для выполнения. Это мешает защитникам, проводящим статический анализ, видеть такие вещи, как "VirtualAlloc".
root@excelntdonut-test:/opt# EXCELntDonut -f test.cs
_______ ______ _____ _ _ ____ _
| ____\ \/ / ___| ____| | _ __ | |_| _ \ ___ _ __ _ _| |_
| _| \ / | | _| | | | '_ \| __| | | |/ _ \| '_ \| | | | __|
| |___ / \ |___| |___| |___| | | | |_| |_| | (_) | | | | |_| | |_
|_____/_/\_\____|_____|_____|_| |_|\__|____/ \___/|_| |_|\__,_|\__|
by @JoeLeonJr (@FortyNorthSec)
[i] Generating your x86 .NET assembly.
warning CS8001: SDK path could not be resolved
test.cs(2,14): error CS0234: The type or namespace name `Management' does not exist in the namespace `System'. Are you missing an assembly reference?
Эта ошибка, скорее всего, означает, что вам не хватает ссылки на сборку при компиляции с помощью mono. Чтобы исправить это, просто передайте упомянутое пространство имен в флаг -r. В данном случае мы бы добавили -r 'System.Management' в командную строку. Новая команда будет выглядеть так:
root@excelntdonut-test:/opt# EXCELntDonut -f test.cs -r 'System.Management'
root@excelntdonut-test:/opt# EXCELntDonut -f test.cs -r System.Management
_______ ______ _____ _ _ ____ _
| ____\ \/ / ___| ____| | _ __ | |_| _ \ ___ _ __ _ _| |_
| _| \ / | | _| | | | '_ \| __| | | |/ _ \| '_ \| | | | __|
| |___ / \ |___| |___| |___| | | | |_| |_| | (_) | | | | |_| | |_
|_____/_/\_\____|_____|_____|_| |_|\__|____/ \___/|_| |_|\__,_|\__|
by @JoeLeonJr (@FortyNorthSec)
[i] Generating your x86 .NET assembly.
warning CS8001: SDK path could not be resolved
error CS0006: Metadata file `System.Management' could not be found
[x] Error in generating x86 .NET assembly using MCS. See error message above.
Эта ошибка не должна возникать, если вы запускаете EXCELntDonut без использования bash-скрипта install.sh. В этом случае вам нужно будет вручную установить mono-complete. Это загрузит соответствующие зависимости. Вы можете установить его с помощью apt следующим образом:
apt-get install mono-complete
root@kali:~/Desktop# EXCELntDonut -f test.cs
_______ ______ _____ _ _ ____ _
| ____\ \/ / ___| ____| | _ __ | |_| _ \ ___ _ __ _ _| |_
| _| \ / | | _| | | | '_ \| __| | | |/ _ \| '_ \| | | | __|
| |___ / \ |___| |___| |___| | | | |_| |_| | (_) | | | | |_| | |_
|_____/_/\_\____|_____|_____|_| |_|\__|____/ \___/|_| |_|\__,_|\__|
by @JoeLeonJr (@FortyNorthSec)
[i] Generating your x86 .NET assembly.
error CS5001: Program `_excelntdonut_GJAoNuVPMcX.exe' does not contain a static `Main' method suitable for an entry point
[x] Error in generating x86 .NET assembly using MCS. See error message above.
На данный момент EXCELntDonut поддерживает только файлы C# с полезными нагрузками в функции Main.
Вот несколько правил Yara для начала от @InQuest:
Поиск очень скрытого листа
https://github.com/InQuest/yara-rules/blob/master/Excel_Hidden_Macro_Sheet.rule
Поиск строки Auto_Open
https://github.com/Neo23x0/signature-base/blob/master/yara/general_officemacros.yar
Существует много публикаций об использовании OLEDUMP.py для анализа файлов XLM. Рассмотрите эту:
https://clickallthethings.wordpress.com/2020/04/06/covid-19-excel-4-0-macros-and-sandbox-detection/
Это не было бы на нашем радаре без фантастической работы, проделанной ребятами из Outflank (@outflanknl). Особая благодарность @StanHacked за его понимание в ходе этого проекта. Кроме того, этот проект был бы невозможен без Donut (от @TheWover и @odzhan) и связанной с ним библиотеки Python (от @byt3bl33d3r). Кроме того, команда Accenture создала CLRvoyance, которая решила некоторые проблемы с x64, которые мы не могли решить с помощью Donut + XLM 4.0 макросов. Наконец, спасибо Philip Tsukerman из Cybereason за замечательное исследование по совместимости макросов XLM с 64-битными версиями Excel.
Мы не несем ответственности за неправомерное использование этого инструмента. Этот инструмент был создан для образовательных целей и авторизованного тестирования, чтобы продемонстрировать, как исходный код на C# может быть внедрен в память с помощью макроса XLM (Excel 4.0). Конечная цель этого проекта — (1) предоставить красным командам еще один вариант фишинговой полезной нагрузки для эмуляции того, что в настоящее время используют реальные противники, и (2) предоставить защитникам основу для создания аналитики и средств смягчения последствий. Без инструмента для быстрой генерации такого типа полезной нагрузки мы считаем, что защитники не будут должным образом подготовлены к тому, что их ждет. Пожалуйста, действуйте ответственно.
Пожалуйста, обратитесь к файлу лицензии в этой папке. Обратите внимание, что этот инструмент включает два других инструмента с открытым исходным кодом: Donut и CLRvoyance.