
Ein Payload-Zustellungssystem, das Payloads in die Symboldatei einer ausführbaren Datei einbettet!

Blenny ist ein Proof-of-Concept-Tool zur Payload-Verschleierung für Windows, das ausführbare Payload-Daten im Icon der ausführbaren Datei versteckt. Benannt ist es nach dem Säbelzahn-Schleimfisch, der das Verhalten und Aussehen von Putzerfischen nachahmt, um ahnungslose Fische zu erbeuten.
Ich kann mich nicht mehr genau an die Geschichte erinnern, aber ein Hacker namens retr0id (@DavidBuchanan314) brachte die Idee auf, eine Payload im Icon einer ausführbaren Datei zu verstecken. Wegen verschiedener Eigenheiten von PNG-Dateien – und weil Windows-Icon-Dateien PNG-Daten enthalten können – wurde mir klar, dass ich diese Idee ziemlich einfach umsetzen konnte; es würde nur ein wenig Handarbeit erfordern. Ich habe die Facade-Bibliothek – eine Bibliothek mit dem spezifischen Zweck, Payloads in PNG-Dateien zu erzeugen – genau für diesen Zweck erstellt.
Das Endergebnis ist eine kompakte Payload-Datei und ein Build-System, mit dem sich ein einfacher Dropper/Executor-Payload für Windows anpassen lässt.
Blenny verwendet die Facade-Bibliothek, um aus Icon-Dateien Payloads zu erzeugen. Wenn du das Repository herunterlädst, müssen daher das Submodul (und dessen Submodule) initialisiert werden:
$ git clone https://github.com/frank2/blenny.git
$ cd blenny
$ git submodule update --init --recursive
Das sollte alles sein, was du benötigst, um das Repository für den Build zu initialisieren.
Dieses Projekt wurde buchstäblich mit CMake im Hinterkopf entwickelt. Bevor du es erstellst, musst du daher unbedingt CMake beschaffen und installieren. Es wird wahrscheinlich nicht funktionieren (außer du bist wirklich entschlossen, alle CMake-Definitionen selbst von Hand zu setzen). Du benötigst außerdem eine Kopie von Visual Studio, um das Projekt zu kompilieren.
Dieses Projekt verwendet zahlreiche CMake-Variablen, um den Build-Prozess zu konfigurieren. Um eine einfache Demonstrations-Payload zu erhalten, bei der ein niedlicher Schaf-Freund auf deinem Desktop landet, kannst du im Hauptverzeichnis des Projekts Folgendes ausführen:
$ mkdir build
$ cd build
$ cmake -D BLENNY_ZTEXT_PAYLOAD=ON ../
$ cmake --build ./ --config Release
$ ./Release/blenny.exe
Standardmäßig extrahiert dies eine ausführbare Datei namens „blenny.exe“ aus dem Icon der ausführbaren Datei in das Temp-Verzeichnis des aktuellen Benutzers und führt sie dann aus. Die Standard-Payload ist @AdrianoTigers DesktopPet, ein spezieller Rebuild des klassischen esheep.exe aus den 90ern.
Alle Variablen, die das ermöglichen, sind anpassbar! Eine Payload-Variable (BLENNY_TRAILING_PAYLOAD, BLENNY_TEXT_PAYLOAD, BLENNY_ZTEXT_PAYLOAD oder BLENNY_STEGO_PAYLOAD) muss gesetzt werden. Dies steuert, wie die Payload schließlich im Icon untergebracht wird. Details zu diesen Techniken findest du in der Facade-Bibliothek. Um zum Beispiel eine eigene Payload zu verwenden, gehe so vor:
$ cmake -D BLENNY_PAYLOAD_FILE="path/to/your/payload.exe" -D BLENNY_ZTEXT_PAYLOAD=ON ../
$ cmake --build ./ --config Release
Hier ist eine Tabelle mit allen Konfigurationsoptionen, die du festlegen kannst, ihren Standardwerten und ihrer Funktion.
| Flag | Type | Default value | Purpose |
|---|
| BLENNY_PAYLOAD_FILE | String | "${PROJECT_SOURCE_DIR}/res/defaultpayload.exe" | Die in die Icon-Datei einzubettende Payload. Hinweis: Da die spätere Ausführungstechnik ShellExecuteA ist, kann dies jede Datei sein, die aus dem Explorer heraus gestartet werden kann, etwa ein Batch-Skript! |
| BLENNY_ICON_FILE | String | "${PROJECT_SOURCE_DIR}/res/defaulticon.ico" | Das zu verwendende Icon für die ausführbare Datei, in das die Payload eingebettet wird. Hinweis: Nicht alle Icons funktionieren! Ein PNG-Abschnitt muss in der Icon-Datei enthalten sein. Überprüfe die Daten des Ziel-Icons in einem Hex-Editor, um zu sehen, ob ein PNG-Bild enthalten ist! |
| BLENNY_TRAILING_PAYLOAD | Boolean | OFF | Aktiviert eine nachgestellte Daten-Payload in der PNG-Datei des Icons. |
| BLENNY_TEXT_PAYLOAD | Boolean | OFF | Aktiviert eine tEXt-Abschnitt-Payload in der PNG-Datei des Icons. |
| BLENNY_ZTEXT_PAYLOAD | Boolean | OFF | Aktiviert eine zTXt-Abschnitt-Payload in der PNG-Datei des Icons, bei der es sich um eine komprimierte tEXt-Payload handelt. |
| BLENNY_STEGO_PAYLOAD | Boolean | OFF | Aktiviert eine steganografische Payload in der PNG-Datei des Icons. Hinweis: Da die Bildgröße der meisten Icons auf 256x256 begrenzt ist, passen nicht alle Payloads in diese Option! |
| BLENNY_PAYLOAD_KEYWORD | String | "blenny" | Setzt für Text-/zText-Payloads das Schlüsselwort, das die Payload-Daten kennzeichnet. |
| BLENNY_ADMIN | Boolean | OFF | Aktiviert das Schlüsselwort runas, um die Payload als Administrator auszuführen. |
| BLENNY_PATH | String | "%TEMP%" | Der Pfad, in dem die Payload vor der Ausführung gespeichert wird. Umgebungsvariablen werden zum Ausführungszeitpunkt erweitert. |
| BLENNY_FILENAME | String | "blenny" | Der Dateiname, der der Payload beim Extrahieren zugewiesen wird. |
| BLENNY_RANDOM_FILENAME | Boolean | OFF | Aktiviert die Erzeugung eines zufälligen Dateinamens für die Payload beim Extrahieren. |
| BLENNY_RANDOM_FILENAME_LENGTH | Integer | 8 | Passt die Länge des zufälligen Dateinamens an. |
| BLENNY_RANDOM_FILENAME_RANDOM_LENGTH | Boolean | OFF | Weist dem Dateinamen beim Extrahieren eine zufällige Länge zu. |
| BLENNY_PAYLOAD_ARGS | String | "" | Die Argumente, die der Payload-Datei bei der Ausführung übergeben werden. |
| BLENNY_FILE_ATTRIBUTES | Integer | 0x80 (aka FILE_ATTRIBUTE_NORMAL) | Die Dateiattribute, die der Datei beim Erstellen zugewiesen werden. |
| BLENNY_CMD_SHOW | Integer | 5 (aka SW_SHOW) | Die visuelle Darstellung der Payload-Datei bei der Ausführung. Ein weiteres Beispiel ist SW_HIDE, was 0 ist. |