OSX persistent Backdoor mit Empire Framework und Bash Bunny

Post-Exploitation Frameworks werden immer dann eingesetzt, wenn Penetrationstester schon Zugriff auf ein Zielnetzwerk haben und von hier weitere Angriffe auf dem IT-Gerät oder im Netzwerk ausführen möchten.
Ich habe in diesem Zusammenhang schon mehrfach über das Empire Framework berichtet. Es ist seit seiner Vorstellung während der BSides in Las Vegas im Juli 2015 ständig weiterentwickelt worden.
Zum gegenwärtigen Zeitpunkt liegt das Werkzeug in der Version 2.1 vor. Mittlerweile sind die bisherigen Projekte PowerShell Empire und Python EmPyre zusammengeführt und enthalten neben den reinen PowerShell2.0 Windows Agenten nun auch Python 2.6 / 2.7 Linux und OSX Agenten. Das Framework bietet eine kryptologisch sichere Kommunikation und eine flexible Architektur.

In diesem Beitrag möchte ich zeigen, wie man mit Hilfe des Empire Frameworks eine dauerhafte Hintertür in OSX erzeugen kann, sie mit dem Bash Bunny auf ein Zielsystem überträgt (Inject) und auch wieder löscht (Cleanup). Insgesamt müssen 4 Dateien erstellt werden. Wir gehen dazu Schritt für Schritt vor.

Wer noch nicht mit dem Empire Framework vertraut ist, den empfehle ich vorangegangen Beiträge oder meine Artikel in der Zeitschrift iX.  Das Framework lässt sich auf einem Linux System leicht installieren.

Schritt 1 – Launcher für OSX erzeugen

Für das Angriffssystem nutzen wir Kali Linux. Ich gehe davon aus, dass das Empire Framework in der aktuellen Version installiert und gestartet ist. Zuerst wird eine Listener generiert, der später die eingehenden Daten vom Zielsystem empfangen soll. Dazu werden folgende Kommandos ausgeführt:

listeners
uselistener http
set Name Kali01
execute

									

Nun können wir den sogenannten Stager erzeugen. Dies ist der eigentliche Payload, der später auf dem Zielsystem ausgeführt werden muss, um eine (Reverse)-Verbindung zum Angriffssystem herzustellen. Derzeit sind bereits 24 Stager im Framework enthalten. Für unser Vorhaben benötigen wir den osx/launcher. Mit den folgenden Kommandos wird die Datei launcher.sh auf dem Kali Desktop erzeugt:

agents
usestager osx/launcher
set listener Kali01
set Outfile /root/Desktop/launcher.sh
execute

									

 

Schritt 2 –  Weitere Dateien anlegen und auf dem Bash Bunny ablegen

Neben der Datei launcher.sh müssen noch zwei weitere Skripte erzeugt werden. Wir beginnen mit persistent.sh. Hierbei handelt es sich um ein Shell Skript, das den OSX Launcher in ein verstecktes Verzeichnis auf dem Zielsystem verschiebt und das notwendige Startskript (für den späteren Autostart) einrichtet.

Die Datei sieht wie folgt aus:

Nachfolgend einige Erläuterungen zum Skript:

Zeilen 15-25

Hier wird das Skript (beacon.plist) erzeugt und im Home-Verzeichnis  des Nutzer unter /Library/LaunchAgents abgelegt. Damit gewährleisten wir, dass bei jeder Nutzeranmeldung der Launcher automatisch gestartet und mit den Berechtigungen des Nutzers ausgeführt wird.

Zeile 37

Das Kommandozeilen Tool launchctl startet den Launcher und stellt die Reverse-Verbindung zum Angriffssystem her.

Zeilen 28-29

Falls die Kommunikation zum Angriffssystem aus nichtvorhersehbaren Gründen einmal abrechen sollte, wird nach einer vorgegebenen Zeit (in unserem Beispiel 600 Sekunden) eine erneute Verbindung initiiert.

 

Die Datei payload.txt enthält alle notwendigen Kommandos, um mit Hilfe des Bash Bunnys die Daten auf das Zielsystem zu übertragen, einzurichten und zu starten.

Die Datei payload.txt enthält alle notwendigen Kommandos, um mit Hilfe des Bash Bunnys die Daten auf das Zielsystem zu übertragen, einzurichten und zu starten.

 

Zeilen 40-44

Hier wir eine HTTP-Server eingerichtet, der die Übertragung der Dateien vom Bash Bunny auf das Zielsystem sicherstellt.

Zeilen 53-56

Wir kopieren den Launcher in das Download-Verzeichnis des angemeldeten Nutzers und führen danach das „Persistent-Skript“ aus.

Alle files hier zum runterladen.

Schritt 3 –  Sprachdatei anpassen

Um auf die unterschiedlichsten Sprachen auf den Zielsystemen reagieren zu können, haben die Entwickler des Bash Bunnys verschiedene Sprachdateien erstellt und im Verzeichnis languages abgelegt.

Da wir nicht die Standartsprache (us) nutzen wollen, müssen wir einen Eintrag in der Datei config.txt vornehmen und auf „Deutsch“ umstellen. Das sieht dann wie folgt aus:

#!/bin/bash
#This configuration file is used to set default variables
DUCKY_LANG de

									

Leider gibt es aber damit ein weiteres Problem. Die in der Sprachdatei de.json aufgeführten Keycodes stimmen nicht immer mit der deutschen Tastatur eines iMac oder MacBooks überein. Für unser Vorhaben habe ich insbesondere die Sonderzeichen anpassen müssen. Das nachfolgende Bild zeigt die notwendigen Änderungen in den Zeilen 158 bis 165.

Nun steht einem ersten Test auf dem Zielsystem nichts mehr im Wege. Dazu werden alle drei Dateien auf den Bash Bunny (Switch Position 1) kopiert.  Um das Zielsystem später zu bereinigen, erstellen wir im letzten Schritt eine weitere Datei (payload.txt,) die wir dann in Switch Position 2 ablegen.

 

Schritt 4 –  Zielsystem bereinigen (Cleanup)

Mit diesem sehr kurzen Skript wird das versteckte Verzeichnis einschließlich des Launchers gelöscht und Datei Startdatei beacon.plist aus dem Home Verzeichnis des angemeldeten Nutzers entfernt.

 

Im nachfolgenden Video werden nochmal die einzelnen Schritte gezeigt. Nachdem eine Verbindung zum Opfer hergestellt wurde, kann der Penetrationstester  die umfangreichen Module des Empire Frameworks nutzen.  In diesem Beispiel werden die iMessages des aktuellen Nutzers ausgelesen.

 

Schreibe einen Kommentar