Keystroke-Injection Angriffe verhindern bzw. Gegenmaßnahmen umgehen

Als Human Interface Device (HID) wird eine Geräteklasse für Computer bezeichnet, mit denen die Anwender über den USB-Standard interagieren. Bei diesen Geräten handelt es sich vorrangig um Tastaturen, Mäuse oder Joysticks. Für die Kommunikation wurde ein anwendungsspezifischer Kanal geschaffen, der beliebige Daten zum USB-Gerät weiterleitet. Die notwendigen Treiber sind oft bereits im Betriebssystem vorhanden und werden bei Anschluss eines solchen Gerätes an die USB-Schnittstelle automatisch geladen. Die angeschlossenen Devices lassen sich über Produkt-, Hersteller- und Seriennummer eindeutig identifizieren. 

Bei einem klassischen USB-HID-Angriff geben sich die angeschlossenen Geräte als Tastatur aus. Über verschiedene Skripte lassen sich nun weitere Befehle „eintippen“, die dann im Kontext des angemeldeten Nutzers ausgeführt werden. Auf dem angegriffenen System lassen sich z. B. Hintertüren installieren, Dokumente oder Passwörter stehlen oder über den UAC-Dialog erweiterte Rechte auf dem PC erlangen.

Viele Firmen haben die Gefahr erkannt, die von diesen Geräten ausgehen und haben ein Schnittstellenmanagement eingeführt.  Oftmals reichen aber die getroffenen IT-Sicherheitsmaßnahmen nicht aus, um der Bedrohung effektiv zu begegnen.  In vielen Fälle werden zwar unbekannte USB-Geräte (wie USB-Sticks, Kameras oder externe Speichermedien) geblockt, aber der Anschluss von USB-Tastaturen nicht effektiv ausgeschlossen. In größeren Unternehmen scheut man den höheren administrativen Aufwand bzw. versucht das entstandene Restrisiko durch organisatorische Maßnahmen auszugleichen.

In diesem Beitrag geht es darum, wie man sich vor Keystroke-Injection Angriffen schützen kann bzw. wie Angreifer trotz getroffener Sicherheitsmaßnahmen zum Erfolg kommen.

DuckHunt

DuckHut von Perdo M. Sosa ist als kleines Projekt, das versucht aus der Geschwindigkeit und Intensität der „Tastendrücke“, einen Angriff zu erkennen. Saso war dabei von einem früheren Python-Programm inspiriert, mit dem er versucht hatte, Tastatureingaben in Form eines Keyloggers aufzuzeichnen.

Das Ergebnis ist ein kleines Python-Script, das auch als ausführbare exe-Datei bei Github vorliegt.  Leider funktionierte auf meinem Testsystem diese Datei nicht. Ich kam also nicht umhin, Python auf meinen Windows 10 PC zu installieren und DuckHunt mit py2exe neu zu kompilieren.  Dabei stellte sich heraus, dass das Skript ohne Anpassung nur unter Python 2 lauffähig ist.

Um sicherzustellen, dass die so erzeugte ausführbare Datei bei jedem Neustart ausgeführt wird, muss sie nun noch in den Autostart-Ordner kopiert werden.

Als kurzen Test habe ich für den BashBunny folgendes  Skript erstellt, das ein Kommandozeilenfenster öffnet, dort einen beliebigen Text ausgibt und es dann wieder schließt:

#!/bin/bash

# Title:     Windows Whoami
# Author:    Pentestit.de
# Target:    Windows
# Version:   0.1
#

DUCKY_LANG de

LED SETUP

# Wer ist angeschlossen

QUACK GUI r
QUACK STRING cmd
QUACK ENTER
QUACK DELAY 2000
QUACK STRING whoami
QUACK ENTER
QUACK DELAY 2000
QUACK STRING Houston, we have a problem!
QUACK DELAY 5000
QUACK ALT F4

# Finish and LED off
LED FINISH
QUACK DELAY 200

LED OFF

Die folgenden Abbildungen zeigen, dass DuckHunt anhand der Geschwindigkeit der „Tastatureingaben“ einen Angriff erkennt und erfolgreich abwehren kann.

Ohne DuckHunt

Mit DuckHunt

Die Software benötigt etwas Zeit, um den Angriff zu erkennen. Der Befehl whoami wird zwar ausgeführt, längere Tastaturanschläge aber nach probl… abgebrochen. Aus meiner Sicht bietet dies einen ausreichenden Schutz vor ausführlicheren Skripten.

Gegenmaßnahmen für Red Teams

Da das zugrundeliegende Python-Skript in diesem Fall scheinbar nur die Intensität der „Tastendrücke“ auswertet, könnten potentielle Angreifer diese Gegenmaßnahme umgehen, indem sie die Tastatureingaben dem realen Nutzerverhalten anpassen.  Denkbar wäre z.B. Pausen in verschiedenen Längen und Zeitabständen einzubauen, damit DuckHunt die Eingaben nicht mehr als maliziös interpretiert.

Um dies zu verdeutlichen habe ich für den P4wnP1 folgendes Skript erstellt. Die HID-Funktionalität des auf den Raspberry Pi Zero W basierenden P4wnP1 hatte mir schon in einem früheren Projekt gute Dienste geleistet.

//Log something to internal console
console.log("HelloWorld");

layout("DE"); //set German keyboard layout

//Natural typing speed (100 ms between keys + additional jitter up to 200 ms)
typingSpeed(100,200);
delay(500);
press("GUI r");
delay(500);
type("cmd\n");
delay(500);
type("Typing in natural speed: Houston we have a problem!");
delay(5000);
press("ALT F4");

Mit dem Kommando typingSpeed lassen sich sowohl die Tippgeschwindigkeit als auch die Länge der Pause zwischen den Tastendrücken verändern. Dabei sind die Zeiten in Millisekunden anzugeben:

typingSpeed(delayMillis, jitterMillis)

Weitere Erläuterungen und Beispielen finden Sie auf der Webseite des Projektes.

Das HID-Skript des P4wnP1 wird trotz DuckHunt problemlos ausgeführt.

G DATA USB Keyboard Guard

Auch die Hersteller von Virenschutzprogrammen erkennen zunehmend die Bedeutung, zusätzliche Schutzmaßnahmen gegen Keystroke-Injection Angriffe in ihren Produkten bereitzustellen.

So hat die Firma G DATA die kostenlose Software „USB Keyboard Guard“ entwickelt, die vor diesen Angriffen schützen soll. Wird vom System eine neue Tastatur oder ein anderes HID-Devices erkannt, wird der Zugriff zunächst unterbunden und ein Popup angezeigt. So kann der Nutzer in Ruhe prüfen, ob es sich tatsächlich um eine Tastatur handelt und den Zugriff entweder dauerhaft zulassen oder unterbinden.

Wenn Sie sich entscheiden eines der Geräte zuzulassen, so werden die relevanten Informationen in der Registry des genutzten Systems mit folgendem Eintrag gespeichert:

Als Beispiel hatte ich eine herkömmliche Tastatur des Herstellers HP an mein Testsystem angeschlossen.

Schaut man sich die Daten etwas genauer an, so werden Sie feststellen, dass es sich hierbei um eine Kombination aus VID und PID (Vendor-ID und Product-ID) des zugelassenen Gerätes handelt. Möglicherweise ist auch hier eine Seriennummer integriert, falls eine vergeben wurde.

Gegenmaßnahmen für Red Teams

Um diese Schutzmaßnahme zu umgehen, muss man zunächst die relevanten Daten (VID und PID) seines Angriffswerkzeuges bestimmen. Hier könnten z.B. RubberDucky, BashBunny, P4wnP1 als auch Digispark zum Einsatz kommen. Das Programm USBDeview leistete dabei gute Dienste. Es kann hier in der 64-Bit Version heruntergeladen werden.  

Für meinen Test habe ich den BashBunny verwendet. Wenn vom Anwender explizit keine VID/PID vergeben wurde, so kommen die Standardwerte zum Einsatz. Diese lauten:

VID: F000 PID: FF01 REV:0333

Die Idee besteht nun darin, das Angriffswerkzeug als zugelassenes Gerät im G Data Tool zu registrieren. Das können Sie über folgenden Befehl auf der Kommandozeile erledigen:

reg add "HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\GDKeyboard Guard" /v "HID\VID_F000&PID_FF01&REV_0333" /t REG_BINARY /d "" /f

Um den Ablauf etwas zu automatisieren machen wir uns zunutze, dass der BashBunny im “Arming Mode” (Switch Position 3) vom G DATA Tool nicht geblockt wird. Er kann also wie ein USB-Stick genutzt werden.

Legen Sie nun auf dem Laufwerk (in der Regel d:) eine Dateiverknüpfung (in unseren Beispiel setup.pdf) mit folgenden Inhalt an:

Tragen Sie unter “Eigenschaften” als Ziel den Befehl zum Anlegen des Registry Eintrages ein:

C:\Windows\System32\reg.exe add "HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\GDKeyboard Guard" /v "HID\VID_F000&PID_FF01&REV_0333" /t REG_BINARY /d "" /f

Da die Registry in der Regel nur mit administrativen Rechten verändert werden kann, stellen Sie dies unter “Erweitert…” wie folgt ein:

Das wars! Mit einem Doppelklick auf die Datei setup.pdf wird nun die Benutzerkontensteuerung aktiv und mit Klick auf “Ja” der Eintrag in der Windows-Registry angelegt. Nach einem Neustart kann dann der Bash Bunny für Keystroke-Injection Angriffe genutzt werden ohne vom G Data Tool geblockt zu werden.

Alternativ wäre es auch möglich G Data Keyboard Guard, wie hier beschrieben, komplett abzuschalten. Das würde aber auf Dauer auffallen.

Hinweis: Hier ist beschrieben wie Sie die Benutzerkontensteuerung so anpassen, dass immer ein Kennwort abgefragt wird.

Fazit

Die Gefahren, die von Keystroke-Injection Angriffen ausgehen, werden in vielen Unternehmen noch unterschätzt. Oftmals reichen die getroffenen technischen Maßnahmen aber nicht aus, um einen sicheren Schutz zu gewährleisten. Nach und nach pflegen die Herstellen von Schutzsoftware zusätzliche Komponenten ein, die zumindest Angriffe erschweren können. Auch sie können keinen 100-prozentigen Schutz bieten. Das schwächste Glied in dieser Kette ist meistens der Mensch. Aus diesem Grund sollten sämtliche Mitarbeiter eines Unternehmens auch für dieses Thema sensibilisiert werden.

Schreibe einen Kommentar

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

Diese Seite verwendet Cookies, um die Nutzerfreundlichkeit zu verbessern. Mit der weiteren Verwendung stimmst du dem zu.

Datenschutzerklärung