
Excel 4.0 (XLM) Makro-Generator zum Injizieren von DLLs und EXEs in den Speicher.
| \ / / | | | _ __ | || _ \ ___ _ __ _ | | | | \ / | | | | | | ' | | | | |/ _ | ' | | | | | | | / \ || || |__| | | | || || | () | | | | || | | |_____//__|||| ||_|____/ _/|| ||_,|__| by @JoeLeonJr (@FortyNorthSec)
EXCELntDonut ist ein Generator für XLM-Makros (Excel 4.0). Starte mit C#-Quellcode (EXE) und erhalte ein XLM-Makro (Excel 4.0), das deinen Code im Arbeitsspeicher ausführt. XLM-Makros (Excel 4.0) können in .XLS-Dateien gespeichert werden.
chmod +x install.sh
./install.sh
Was wird installiert?
Wenn du EXCELntDonut nur als Python-Skript ausführen möchtest, musst du eine virtuelle Umgebung mit den beiden Paketen "pandas" und "donut-shellcode" einrichten. Außerdem musst du apt-get install mono-complete ausführen und das Skript drive.py mit python3 aufrufen. Wir empfehlen, einfach das Bash-Skript ./install.sh zu verwenden, aber die Entscheidung liegt bei dir.
Usage:
$ EXCELntDonut -f exe_source.cs -r System.Windows.Forms.dll --sandbox --obfuscate
Flags:
(required)
-f Pfad zur Datei mit deinem C#-Quellcode (nur EXE)
-r Referenzen, die zur Kompilierung deines C#-Codes benötigt werden (dieselben, die du bei der Verwendung von mcs unter Linux angeben würdest)
(z. B. -r 'System.Management')
(optional)
-o Ausgabedateiname
--sandbox
Führe grundlegende Sandbox-Prüfungen durch. Diese werden aktualisiert, sobald neue Ansätze entdeckt werden.
--obfuscate
Führe eine grundlegende Makro-Verschleierung durch.
Du stellst eine C#-Datei mit deiner Payload bereit (z. B. eine EXE mit einer main-Methode, die eine Cobalt-Strike-Beacon-Payload ausführt). Diese C#-Datei wird mit MCS in zwei .NET-Assemblys kompiliert: x86 und x64. Nach der Kompilierung wandeln die großartigen Tools Donut (für x86) und CLRvoyance (für x64) jede Assembly in positionsunabhängigen Shellcode um. Anschließend werden alle Nullbytes entfernt, da XLM-Makros (Excel 4.0) nicht gut mit Nullbytes umgehen, und die Payload wird in Zeilen mit maximal 255 Zeichen (für x86) bzw. 10 Zeichen (für x64) aufgeteilt.
Sobald der Shellcode vorbereitet ist, wird er mit grundlegenden Prozessinjektionsfunktionen (VirtualAlloc, WriteProcessMemory und CreateThread) sowie einer Architekturprüfungsfunktion kombiniert, um zu bestimmen, welche Payload (x86 oder x64) auf dem Zielsystem ausgeführt werden soll. Wenn du Sandbox-Prüfungen oder eine grundlegende Verschleierung aktivierst, werden diese Funktionen dein Makro entsprechend aktualisieren. Schließlich wird die Ausgabe in einer CSV-Datei (gespeichert als .txt) abgelegt.
Sobald du die Ausgabedatei von EXCELntDonut hast, öffne die Ausgabedatei in einem Texteditor und kopiere den gesamten Inhalt (Strg-A, Strg-C). Öffne Excel auf einer Windows-VM, klicke mit der rechten Maustaste auf "Tabelle 1" und wähle "Einfügen". Wähle "MS Excel 4.0-Makro". Gehe zu Zelle A1 und füge die Ausgabe von EXCELntDonut ein. Die Daten werden wahrscheinlich alle in einer Spalte eingefügt. Die Daten sind durch Semikolon getrennt ";". Gehe zur Registerkarte "Daten" und klicke dann auf "Text in Spalten". Wähle "Getrennt" und aktiviere auf dem nächsten Bildschirm "Semikolon" und klicke dann auf "Fertigstellen". Das Makro wird auf die entsprechenden Spalten und Zeilen verteilt.
(Hinweis: Wenn du das Flag "--obfuscate" verwendet hast, musst du horizontal etwas scrollen, um deinen eigentlichen Code zu finden, da ein Teil der Verschleierungslogik das Makro in einen zufälligen Abschnitt des Arbeitsblatts verschiebt.)
Wir empfehlen an dieser Stelle zwei Dinge:
Speichere die Datei (.xls) und versuche, sie zu öffnen. Sie sollte deine Payload automatisch ausführen.
Diese Prüfungen basieren auf dem, was echte Bedrohungsakteure in ihrer Malware verwenden.
=FORMULA(D3&D23&D54&D23&D44,E45)
Die FORMULA-Funktion ermöglicht es uns, eine Formel zu platzieren, die später ausgeführt werden kann, in eine andere Zelle. In diesem Fall setzen wir also die Prozessinjektionsanweisungen und verwenden dann die FORMULA-Funktion, um die eigentliche Funktion in eine andere Zelle zu platzieren, die ausgeführt wird. Dies verhindert, dass Verteidiger bei der statischen Analyse Begriffe wie "VirtualAlloc" sehen.
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?
Dieser Fehler bedeutet höchstwahrscheinlich, dass dir bei der Kompilierung mit Mono eine Referenz-Assembly fehlt. Um dies zu beheben, übergib einfach den erwähnten Namespace mit dem Flag -r. In diesem Fall würden wir -r 'System.Management' zur Befehlszeile hinzufügen. Der neue Befehl wäre:
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.
Dieser Fehler sollte nur auftreten, wenn du EXCELntDonut ohne das Bash-Skript install.sh ausführst. In diesem Fall musst du mono-complete manuell installieren. Dadurch werden die relevanten Abhängigkeiten heruntergeladen. Du kannst es mit apt so installieren:
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.
Derzeit erlaubt EXCELntDonut nur C#-Dateien mit Payloads in der Main-Funktion.
Hier sind einige Yara-Regeln von @InQuest als Einstieg:
Suche nach einem sehr versteckten Blatt
https://github.com/InQuest/yara-rules/blob/master/Excel_Hidden_Macro_Sheet.rule
Suche nach dem String Auto_Open
https://github.com/Neo23x0/signature-base/blob/master/yara/general_officemacros.yar
Es gibt viele Beiträge zur Verwendung von OLEDUMP.py zur Analyse von XLM-Dateien. Betrachte diesen hier:
https://clickallthethings.wordpress.com/2020/04/06/covid-19-excel-4-0-macros-and-sandbox-detection/
Dies wäre nicht einmal auf unserem Radar gewesen ohne die fantastische Arbeit der Leute bei Outflank (@outflanknl). Besonderer Dank gilt @StanHacked für seine Einsichten während dieses Projekts. Ebenso wäre dieses Projekt ohne Donut (von @TheWover und @odzhan) und die dazugehörige Python-Bibliothek (von @byt3bl33d3r) nicht möglich gewesen. Im Zusammenhang damit hat das Team von Accenture CLRvoyance entwickelt, das einige x64-Probleme gelöst hat, die wir mit Donut + XLM 4.0-Makros nicht beheben konnten. Schließlich danken wir Philip Tsukerman von Cybereason für die großartige Forschung zur Kompatibilität von XLM-Makros mit 64-Bit-Versionen von Excel.
Wir sind nicht verantwortlich für den Missbrauch dieses Tools. Dieses Tool wurde zu Bildungszwecken und für autorisierte Tests erstellt, um zu demonstrieren, wie C#-Quellcode mithilfe eines XLM-Makros (Excel 4.0) in den Arbeitsspeicher injiziert werden kann. Das ultimative Ziel dieses Projekts ist es, (1) Red Teams eine weitere Phishing-Payload-Option zu bieten, um zu emulieren, was echte Gegner derzeit verwenden, und (2) Verteidigern einen Bezugsrahmen für den Aufbau von Analysen und Abwehrmaßnahmen zu geben. Ohne ein Tool zur schnellen Generierung dieser Art von Payload glauben wir, dass Verteidiger nicht angemessen auf das vorbereitet sein werden, was tatsächlich auf sie zukommt. Bitte handele verantwortungsvoll.
Bitte siehe die Lizenzdatei in diesem Ordner. Beachte, dass dieses Tool zwei andere Open-Source-Tools enthält: Donut und CLRvoyance.